あっきぃ日誌

ラズピッピブログのようなオタクブログのようななにか

自宅のRaspberry PiのOSをBookwormにする

Bookwormが出てからしばらくたちましたが、そう言えば自宅の常設ラズピッピはいまだにBusterとかBullseyeのままなので、ぼちぼち入れ替えをしようかなと思いたち、軽めのやつから手を付けてみました。コミケの原稿?アッハハハwwwいや、これをやってたら記事にできそうなことも出るかもしれないじゃないですかガハハww(そんなにない)

ブログに書くと、バックアップを取ったつもりが取っていなかったみたいなバカをしたときに、ブログからサルベージできることがわかったので、書きます。

夜ふかしアラート

うすい本に書いた、22時になるとミクにはよ寝ろと怒られ続けるだけの装置です。

booth.pm

やってることは3点で、照度センサーとスピーカーを使ったモノになります。

  • BH1750照度センサーの値をI2Cで読んで、明るかったらI2S接続のサウンドバイスでwavファイルを鳴らす
  • 照度をZabbixに送るもの
  • 日中の営業時間内に時報チャイムを鳴らす

/boot/firmware/config.txtの中身

# I2C
dtparam=i2c_arm=on

# オンボードサウンドはいちおう切っとく
#dtparam=audio=on
# I2S
dtoverlay=hifiberry-dac

# 一応BTを切る(Wi-Fiは切らないので多分節電にはならないけど)
dtoverlay=disable-bt

# ACT LEDはつけない
dtparam=act_led_trigger=none
dtparam=act_led_activelow=off

# ヘッドレスなPiZeroWなのでGPUをカツカツにしてRAMを稼ぐ
gpu_mem=32

wav再生はaplayなのでそのままでよく、mp3再生はmpg123を使用しました。

$ sudo apt install mpg123

Bookwormに採用のPython 3.11からは、pipでライブラリを使用するのにvenvが必要になったので、そうします。I2C周りはシステムパッケージpython3-smsubを使いたいのだけど、そう言うときにvenvとうまく合わせるには「--system-site-packages」を使うと良いらしいです。

$ sudo apt install python3-smbus
$ python3 -m venv --system-site-packages venv
$ source venv/bin/activate
(venv)$ pip install py-zabbix

crontab。いくつか端折りましたが、venvのpythonを使うにはvenvディレクトリ以下のpythonを呼べばOK。簡単でしたね。

 *  * * *   * /home/akkie/py-hayonero/bin/python3 /home/akkie/send-illuminance-to-zabbix.py
30 23 * * 0-4 /home/akkie/py-hayonero/bin/python3 /home/akkie/hayonero.py /home/akkie/04_hayakunenasai.wav

0 10-11,14-17 * * 1-5 /usr/bin/mpg123 /home/akkie/nc119745.mp3
0 9,12-13,18 * * 1-5 /usr/bin/mpg123 /home/akkie/Japanese_School_Bell04-1.mp3

あとはzabbix-agentをいれて完了。

CM4 デュアルカメラのメダカメラシステム

バックアップのtarballを作ったのに、tarballを転送し忘れたままBookworkのイメージを書き込んで再構築となりました……あほすぎる。スクリプトのバックアップもMacに保管されておらず、どうしようかと思いながらブログを探したら、Pi 5のときに試していた記事を見てUSB SSDスクリプトをコピーしていたのを確認。USB SSDから無事原稿のスクリプトをサルベージできました。ブログに書くのは大事なんやね。

akkiesoft.hatenablog.jp

餌やりのギミックに使っていたシェルスクリプトもブログからサルベージ。他のファイルたちは過去のスクリプトなので、再構築に必要なものは最低限揃いました。あぶねー。

akkiesoft.hatenablog.jp

スクリプトMacにバックアップを置いて、環境構築開始。まずはconfig.txt。CM4のデュアルカメラは、以前はデュアルカメラを有効化するdt-blob.binを作って置く必要がありましたが、いつの間にか不要になり、dtoverlayだけで使用できるようになりました。ただし、自動検出はだめらしいので、camera_auto_detect=1をコメントアウトしたうえで、カメラポートに接続したカメラのモデルと、cam0 or cam1のポート番号を明示する必要がありました。また、以前は入れていたgpu_memは、むしろカメラが使えなくなることがわかったので削除しています。

[all]
# 水温センサー用の1-Wire
dtoverlay=w1-gpio

# 餌やり装置用のUART
enable_uart=1
dtparam=uart0=on

# カメラの認識は手動の模様
# camera_auto_detect=1
dtoverlay=imx708,cam0
dtoverlay=imx219,cam1

# むしろカメラが使えなくなることがわかったので削除
# gpu_mem=512

# 電源LEDを切る
dtparam=pwr_led_trigger=none

カメラ周りの整備。夜ふかしアラートと同様、Picamera2はシステムパッケージを使い、残りはvenvとしました。1-Wire用ライブラリと、餌やりのServo2040をいじるようのadafruit-ampy(念のため)の2点。

$ sudo apt install python3-picamera2
$ python3 -m venv --system-site-packages venv
$ source venv/bin/activate
(venv)$ pip install w1thermsensor adafruit-ampy

あとはスクリプトをおき、systemdのserviceファイルを配置。こちらもpythonの実行パスはvenvを使います。

[Unit]
Description = Live camera daemon
Requires=network-online.target
Wants=network-online.target
After=network-online.target

[Service]
ExecStart = /home/akkie/venv/bin/python3 /home/akkie/livecam_libcamera_dual.py
Restart = always
Type = simple

[Install]
WantedBy = multi-user.target

あとはzabbix-agentをいれて完了。

zabbix-agent

昔何気なしにどこかから拾って入れたと思われる、ラズピッピのCPU温度、クロック数、電圧を取るやつが動いていなかったので修正しました。

多分ここから拾ったのかも?

scripts/userparameter_rpi.conf · master · qrl / zabbix · GitLab

vcgencmdのパスを/usr/binに修正。

UserParameter=rpi.cpuClock,/usr/bin/vcgencmd measure_clock arm|cut -d"=" -f2
UserParameter=rpi.cpuVoltage,/usr/bin/vcgencmd measure_volts | tr -d "volt=" | tr -d "V"
UserParameter=rpi.cpuTemperature,cat /sys/class/thermal/thermal_zone*/temp

vcgencmdはvideoグループに所属している必要があるので、zabbixをvideoグループに入れました。

# コマンドでできた気がするけど忘れたので雑にファイル編集
$ sudo vi /etc/group

video:x:44:akkie,zabbix


$ sudo systemctl restart zabbix-agent

テンプレートはこれをインポートすればOKです。

zbx_template_rpi.xml · master · qrl / zabbix · GitLab

ホストにテンプレートを割り当ててやれば出てくるはず。


まとめ

きのうは2台をやっつけました。カメラ周りとvenv周りはうすい本にできそうなネタですね。深掘りの余地を感じます。

そして次はベランダ方面用の3A+に着手の予定。こいつはlibcamera移行前のBusterなので、カメラのリソース使用量が増える見込みなのがわかっていてアレですが、まあいい加減やらざるを得ない……がんばる。