2022年5月7日土曜日

混雑前で咲きかけの藤と牡丹

 撮影日:2022/04/23

撮影場所:山口県岩国市


天気が良かったのでいつもの吉香公園で散策

GW前の週末に人混みを避けてたつもりが、それなりの人出だった


見頃にはやや早いものの、藤棚はキレイに咲いていた

小さな売店の横の白い藤はこの辺りだと少し珍しい気がする




徴古館前の牡丹園も全体的にまだ早かったが、きれいに咲いている株もあったので良かった

GW頃の方がもっと咲いているとは思いつつ、人混みは嫌いなのでこれで満足




普段は小さい花が好きだけど、牡丹の艶やかさも好みだな

2022年5月2日月曜日

Proxmox VEのセットアップと無償版リポジトリの設定

 自宅のベアボーンに仮想環境を構築するのに、以前はVMware ESXiも使っていたが、NICの問題でカスタムISO作ったり、7系だとそもそもUSB-NIC使わないと駄目だとかで面倒になり、 別のプラットフォームを探すことに


LinuxでKVMもありだけど、ブラウザ経由でGUI操作できる方が楽でいい

WindowsのHyper-V Serverも使えそうだけど、Chromebookからの操作は合わなさそう


ということで色々探した結果Proxmox VEにたどり着いた


 https://www.proxmox.com/en/


ESXiの様にブラウザ経由で操作できるが、 Debianベースなのでだいたいのベアボーンで問題なく動作するのは嬉しい



早速ISOイメージをダウンロードしてインストール開始

NICを気にせずカスタムISO作らなくて良いのは助かる


今回のバージョンはProxmox VE 7.1で、Debian 11  bullseyeがベースの模様


画面が表示されたら一番上の【Install Proxmox VE】を選択



利用規約は英語だが、悪用するつもりもなく自宅検証環境用なのでさっと流し見して【I agree】


インストール先のストレージ選択

今回のベアボーンはSSDが1台だけなのでそのままで【Next】



ロケーション選択は以下で日本に設定して【Next】

Contury : japan

Time Zone : Asia/Tokyo

Keyboard Layout : japanese



rootパスワードの設定、メールアドレスは障害時に通知を送ってくれる模様(未検証)

必要情報入れて【Next】



ネットワーク設定は以下で【Next】

Management Interface : 任意のNIC

Hostname(FQDN) : 適当なホスト名

IP Address(CIDR) : 割り当てたいIPアドレス

Gateway : デフォルトゲートウェイIP

DNS Server : DNSサーバのIP、自宅はルータが兼用なのでデフォルトゲートウェイと一緒


また、IPAddress(CIDR) はDHCP環境下だと、該当IPの範囲で自動で値を入れてくれるものの、IPv6が有効だとここだけv6アドレスが割り当てられていたので少し混乱した



設定値の確認画面

問題なければそのまま【Install】




ベアボーンのスペックがそれなりなので時間がかかったが、インストールが完了したら

以下の画面になるので【Reboot】



再起動後はCLIのログイン画面で起動する

操作自体はLAN内の端末からブラウザで https://<設定したIP>:8006 へアクセスすれば良い


アクセスするとログイン画面となる、一番下のLanguageをjapaneseにすれば日本語になった

ユーザ名 : root

パスワード : インストール時に設定した値

でログイン



ログインすると【有効なサブスクリプションがありません】と警告が出るが、有償サブスクリプションを契約しないと消すことはできない


このままでも使えるが、公式から提供されている無償版のリポジトリを設定する

【 Package Repositories 】


LAN内の端末からSSHでログインするか、ログイン後の画面の左ツリーにある【データセンター】>【proxmox】を開いて、画面右上の辺りにある【>シェル】からでもCLI操作ができる


■無償版リポジトリ追加

$ vi /etc/apt/sources.list

 以下追記

deb http://ftp.debian.org/debian bullseye main contrib

deb http://ftp.debian.org/debian bullseye-updates main contrib

# PVE pve-no-subscription repository provided by proxmox.com,

# NOT recommended for production use

deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription

# security updates

deb http://security.debian.org/debian-security bullseye-security main contrib



■有償版リポジトリの無効化

$ vi /etc/apt/sources.list.d/pve-enterprise.list

以下コメントアウト

# deb http://enterprise.proxmox.com/debian/pve bullseye pve-enterprise



これで無償版リポジトリが適用された

ノード【proxmox】を開き【アップデート】>【Repositories】の画面を開いて、

【The no-subscription repository is not recommended for production use! 】

と表示されていれば無償版のリポジトリへ設定完了


実環境では使うなの警告なので無視して問題ない




これで仮想化プラットフォームの準備ができたので色々と仮想マシンを組んだり消したりできる

Ubuntuも22.04 LTSが出たし、また弄って見よう

2022年4月8日金曜日

桜と雀

撮影日:2022/04/02

撮影場所:山口県岩国市


今年も桜の時期に天気が良かったので近所を散策



ほぼ満開の時期でよかった
ぜいたくを言えばもう少し雲が少ない方が空の青さが映えて良かったが



今年はいつにも増して鳥が多かった気がする
ヒヨドリや雀が桜の枝から枝へと飛んでいた


落ちた桜の花に反応して野良猫がじゃれていたが、まぁ降りてこない鳥は捕まえられないだろう


季節の変わり目でいまいち体調が優れない日が続いていたが、気晴らしができたのはよかった



年度も変わったし、今年もまた何か新しいことを始めてみたいとも思う
やりたいことばかり増えて時間もお金も足りないのはいつものこと


2022年3月14日月曜日

キャンドゥスピーカーの改造とMDF製エンクロージャ組立(スピーカユニットは結局交換)

 以前キャンドゥで購入したUSB給電のスピーカー

500円にしてはそれなりに鳴ってるなとは思っていたど、改造したり箱変えると結構変わるとの情報を見かけたので早速改造することに



ヤフオクでダイソースピーカー用のエンクロージャーを見かけたので側はこちらを使用

スピーカーユニット開口径はダイソーの300円スピーカもキャンドゥスピーカーも52mmなのでサイズは問題なし



アンプはそのまま使ってもよかったが、線が細いのが気になったのでAmazonでUSB給電の小型アンプを購入
6V供給で4Ω-3.5W(最大5W)、8Ω-2.2W出力なので5Vで4Ωなら大体3W程か
箱はM5 Stick Cの入ってた箱がちょうどよかったのでこれをカットして利用する


配線はエーモンのスピーカーケーブル
6mで格安だったので失敗してもまだ使える(最初短く切りすぎたので、後で長めにカットし直した)


吸音材は気休め程度にセリアで購入したフェルト
ゴム足も気休め


エンクロージャーは寸法併せて切ってあるので、クランプで固定しながら木工ボンドで固定
塩ビ製のバスレフポートは長かったのでパイプカッターで適当にカット
遊びでやるので長さの設計は無し
フェルトも2重にしたものを背面と底面だけに張り付けて完了


組みあがったら全部繋げてテスト
タブレットにUSB-CのDAC繋げてYouTubeで適当な曲を流してみる
純正の箱よりも良くなったようには聞こえるものの、少し物足りない


念のため確認したキャンドゥスピーカーのスペックは以下(箱の情報)
最大出力:3W
インピーダンス:4Ω
周波数帯域:200Hz-16KHz

そもそも低音も高音出ない小径スピーカーなのでこんなものか
ダイソースピーカーは6Ωで35Hz-20KHzとなっているが、さすがにあれは信用できない
というかいくつかのサイトでもそこまで出ない様な情報を見かける



やはりここまで改造するとスピーカーユニットも交換したくなるので、Amazonで見つけた2インチスピーカーに交換

【GRAIN AUDIO 小型フルレンジスピーカーユニット2インチ(52mm) 4Ω/MAX15W】と記載があったが詳しい情報は見つからない
1個1,000円ほどなのでペアにすればキャンドゥスピーカーが4個買えてしまうな

改めて裏面見たらキャンドゥスピーカーのインピーダンス4Ω無かった
まぁ小数点は誤差でいいか




バッフル径も同じなのでポン付けでイケるが、配線をせっかく金具があるので接続ははんだじゃなくて平型端子に交換した


PCにcreativeのsoundblaster Play3を繋いで音を流して、スマホのアプリで簡易的に計測したが90Hz-20KHzまでは十分出ている様だ
70Hz辺りはぎりぎり反応している程度、20KHz以上は試していないので高音域はどこまで出るか不明

曲を聴いても女性ボーカルの聞こえがよくなったし、動画を見るにしても人の声がよりクリアに聞こえるようになった

在宅でストリーミングサービスの曲を小さい音で流すには十分綺麗に聞くことができるスピーカーになったと思う


結局キャンドゥスピーカーの原型は残らない結果になったが、自作スピーカーも面白い世界だと感じる
エンクロージャーの設計やらまで手を出すと沼の底が見えなくなりそうなので、気軽に適当な感じで遊ぶだけでいいかな

2022年2月27日日曜日

吉香公園での梅見

 撮影日:2022/02/23

撮影場所:山口県岩国市 吉香公園


祝日に天気が良か



ったので吉香公園へ梅見へ

前週の土曜日に雨が降って気温が下がったせいか多少散っていたが、それなりに咲いていた



まんぼうが終わってからの祝日で天気がよかったからか、親子連れやペット連れの方々が多かった様に思う



いつもであれば光市の冠山総合公園まで足を伸ばすが、今年もまだ外出を控えた方が良いかと思い近場で済ませることになった




年明けに中版のRB67を手放したが、写真を撮る事自体は楽しい

フィルムカメラはまだ残しているし、Xマウントレンズも色々と欲しい

等倍のマクロや300mm以上の望遠や 27mmの単焦点とか上げればキリがないか



2022年2月11日金曜日

Google Spreadsheetで更新された値が閾値超えたらメール通知するGoogle Apps Scriptの設定

Raspberry Piに繋げたセンサーのデータはGoogle Spreadsheetに保存できたので、

【 Raspberry Piで取得したセンサー情報をGoogleスプレッドシートに保存する(Python) 】

今度はデータがCO2の値が更新された際に閾値を超えていたら自分にメール通知するように設定した


CO2の値を見て一応換気の目安にでもなればいいなと思うが、恐らく寒くて換気はしない気もする



 まずは該当のspreadsheetを開いて、【拡張機能】>【Apps Script】を開く




以下の内容でスクリプトを作成

function getLastRowValue() {

  //アクティブなシートを取得
  var sheet = SpreadsheetApp.getActiveSheet();
  //空白で無い最終行の行番号を取得してlastRowに代入
  var lastRow = sheet.getLastRow();
  //最終行の行番号(lastRow)列番号5.0(E列)に入力された値をvalueに代入
  var value = sheet.getRange(lastRow5.0).getValue();

  /*valueが1500を超えていればメール送信
  MailApp.sendEmail(<送信先メールアドレス),<件名>,<本文>);
  送信元は自身のgmail*/
  if (value > 1500){
    MailApp.sendEmail("<送信先メールアドレス>""CO2濃度通知","閾値オーバー、換気しましょう");
  }
}


この内容で保存して、画面左の時計マークの【トリガー】を開いてScriptの実行条件を以下の内容で設定する

【実行する関数】 上で作成した関数

【実行するデプロイ】Head

【イベントのソース】スプレッドシートから

【イベントの種類】変更時

【エラー通知】毎日通知を受け取る


これでRaspberry Piから入力された値からCO2の部分だけを見て処理してくれるようになった


テスト時はsheet.getRange()の値で行番号はlastRowを見ればいいので問題なかったが、列番号はE列だから5でいいかと思っていたが、整数だとエラーとなったので5.0とした

アルファベット1桁MS Excelもそうだが、A~ZまでではなくAAなど2桁以上になるからそのためだろうか

細かく調べていないのでその辺りの仕様はまだ理解できていない



if文の内容をもう少し細かくすれば乾燥だったり、夏場の熱中症対策などに役立てることもできそうだ

2022年1月31日月曜日

ヘッドセットのイヤーパッドとヘッドバンドカバー交換

 自宅のデスクトップPCや仕事用のPCでのリモートワークで毎日酷使しているパイオニア製のヘッドセットSE-MS5Tのイヤーパッドとヘッドバンド部分の合皮が剥げてきた


使えないことはないが、たまに耳に黒いカスが付いたりするのが不快なので交換する


純正は見つからなかったので、Amazonで適当にサイズが合いそうなものを見繕ってきた

イヤーパッドはオーディオテクニカのATH-Mシリーズ互換のものがサイズが近そうだった

購入したものは外径10mm×8.7mm、内径5.5mm×4mmくらい

ヘッドバンドカバーは長さ245mm、幅70mmで伸縮性のある素材にした



イヤーパッドははめ込んでいるだけなのですぐ取れたが、ヘッドバンドカバーは両端の部品のネジを外して合皮の縫い目を切って分解していく



ざっくりばらしてみたが、ヘッドバンドの内側クッションはそのまま使えそう

外側の薄い方は両端がはみ出るので少しカットして再利用

ヘッドバンドカバー自体はファスナーで閉じるだけなので、少し引っ張って伸ばしながら占めてやればちゃんと閉まった



手軽に交換できる部品を交換しただけで十分綺麗になった

ただ、イヤーパッドの内径が少し小さいのか素材が固いのか、若干耳への当たりが固くなった気がする

使っている内になじめばいいが、痛くなるようなら別の物を探してもいいかもしれない



価格の割に音がいいし、creative mediaのSoundblaster Play3経由で利用ると低音もそれなりに鳴るので満足している

こういった消耗品を用意している高価なヘッドフォンに買い替えるのもいいかもしれないが、ひとまずはこれが壊れるまではそのまま使っていきたいとも思う

2022年1月23日日曜日

8インチのandroidタブレット購入

Fire HD 8を所持しているものの、利用できるアプリとスペックがそれなりなので、別途androidタブレットの購入を検討していた


年末頃からAmazonで【 Blackview Tab6 】という8インチタブレットが販売されており、見たところ公式ショップからの出品だったので試しに購入


 


日本公式ショップということもあり技適はもちろん取得済み


本体サイズとしてはFire HD 8よりも縦長な感じ

スペックは高いわけではないが、電子書籍の閲覧やYouTubeの動画を見る程度であればそこまで気にならない

さすがにゲームを遊ぼうと思うとそれなりに軽量のパズルゲームなどでないと難しい
GPU処理が必要なものはかなりもたついたり、ゲームの起動自体に時間が掛かるなど不便だった


ただ、サブ機として購入したので個人的には全く問題ない
またグレースケールモードを搭載しており、ボタン一つでモノクロ表示にできるので、書籍を読む際はより見やすくなるのが良い

できればFHD対応の方が細かい文字もより見やすくなったろうが、価格を考えれば十分妥協できる


液晶保護フィルムは標準で貼られているが個人的に質感が好みではないのでガラスフィルムは別注した
画面保護だけが目的なら標準のフィルムでも十分かもしれない

2022年1月6日木曜日

Raspberry Piで取得したセンサー情報をGoogleスプレッドシートに保存する(Python)

 Raspberry PiにBME280と MH-Z19Cを繋げてデータを取得できたので、cronで定期的にGoogleスプレッドシートに投げる方法のメモ

(尚、センサー類の部分は省略)


Google 公式ドキュメントは以下の辺りを参照した

【 Google APIs ご利用方法 】 

Google Cloudのアカウントを作成してプロジェクトを事前に作っておき、以下手順を実行


1:Google CloudAPIの有効化

【 Cloud Console API ライブラリ 】からプロジェクトを選択して、APIページで有効にするをクリックして有効化


2:サービスアカウントの作成とJSONキー取得
Google Cloud Platform内から【 APIとサービス 】> 【 認証情報 】を開く
画面右下の【 サービスアカウントを管理 】を開く

画面上部の【 +サービスアカウントを作成 】からアカウントを作成する


【 サービスアカウント名 】を入力、2項目の【 サービスアカウントID 】は自動入力されるので、そのまま作成する


作成したサービスアカウントを選び、移動した先で【 キー 】タブを開き【 鍵を追加 】のプルダウンメニューから【 新しい鍵を作成 】を選び、JSON形式の鍵を作成する
操作しているPCにJSON形式の鍵が保存されるので、Raspberry PiにはSCPコマンドなどで送信しておく

3:必要なAPIライブラリ有効化
Google Cloud Platform内から【 APIとサービス 】> 【 ライブラリ 】を開く
検索窓から【 Google Derive API 】と【 Google Sheet API  】の2つを有効化する


4:Googleスプレッドシート側での共有設定
データを保存したいスプレッドシートを作成し、画面右上の【 共有 】を開き、上記で作成したサービスアカウントを追加する
サービスアカウントの表記は以下の通り
【  <サービスアカウント名>@<サービスアカウントID>.iam.gserviceaccount.com 】


5:Raspberry PiへGoogleスプレッドシートと認証用のライブラリインストール
$ sudo pip install gspread
$ sudo pip install oauth2cliengt


後はPythonでコードを書くだけ

import gspread
import json
import datetime 
from oauth2client.service_account import ServiceAccountCredentials

#Google スプレッドシートAPI認証
scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('<保存したJSONキーのパス>', scope)
gc = gspread.authorize(credentials)
SPREADSHEET_KEY = '<対象スプレッドシートキー>'
worksheet = gc.open_by_key(SPREADSHEET_KEY).worksheet('<シート名>')

#日時取得
today = datetime.datetime.now()

#Googleスプレッドシートへデータ転送
record = [ today.strftime('%Y/%m/%d %H:%M'), <B列の値>,<C列の値>,<D列の値>,<E列の値>]
worksheet.append_row(record)


<スプレッドシートキー>は該当スプレッドシートのURLに含まれている値を入力する
    https://docs.google.com/spreadsheets/d/<スプレッドシートキー>/edit#gid=0
シート名は日本語でも問題なく認識した

今回のコードではA列に日時を入れている、B〜E列には温度、湿度、気圧、CO2濃度の値をそれぞれ入れて、最終行に追記する形にしている


思いの他簡単に送信できたので、後はデータポータルでの可視化やGoogle Apps Scriptを用いた自動通知などと絡めれば十分使えると思う

端末が増えた場合は、デバイスID的な列を追加するか、スプレッドシートのシート自体を分けてしまえば管理もしやすそうな気がする


次はGCPへのデータ送信もやりたいが、Google IoT Coreからpub/Sub経由でFunctionを使うと課金されるので、試しに使うならBigQueryに直接投げる方法になるかな