ラズピッピをBookwormにしていくやつの続き。今回は3A+で動かしているベランダとカーテンEjectの環境をBookwormに更新しました。
ベランダ版メダカメラ
これは先日の室内メダカメラが2カメラから1カメラに減っているだけなので、スクリプトの用意等は変わりません。が、カメラケーブルが長すぎるせいか、タイムアウトエラーが頻発して映像も荒れ放題でした。タイムアウト値の追加みたいな情報を見つけたりして試していましたが、どうやらOSのアップデートで解消したようにみえています。何だったんだ。
以下はメモ。
- アップデート前: 0.2.0+rpt20240215-1
- アップデート後: 0.2.0+rpt20240418-1
カメラのタイムアウトの話題はこことか色んなところで見られます。タイムアウト値を変えて様子見をしたあとOSのアップデートをしたら設定が上書きされて吹っ飛んでしまったものの、現在は安定していそうという感じです。
https://github.com/raspberrypi/libcamera/issues/139
先日更新した室内メダカメラも、ちょくちょくサービスがコケているようなので、なにか問題がある様子。カメラ周りはlibcameraになってから全然ですねえ。。
BME280センサー
ベランダに放ってるBME280センサーも、スクリプトは無改造で対応完了。サービスのパスをvenvに変える等だけで済みましたが、py-zabbixでuse_configを使っている場合にtry文のexceptの対象が違っていた(ValueErrorからAttributeErrorに変わった?)ので、ValueErrorを雑にカットしました。
$ vi venv/lib/python3.11/site-packages/pyzabbix/sender.py try: # python2 args = inspect.getargspec( configparser.RawConfigParser.__init__).args # except ValueError: except: # python3 args = inspect.getfullargspec( configparser.RawConfigParser.__init__).kwonlyargs
py-zabbix/pyzabbix/sender.py at master · adubkov/py-zabbix · GitHub
カーテンEject
カーテンEjectはbashで雑にGPIOでフォトカプラーをLチカするだけのものでしたが、sysfsを使用していたため、代替を見つける必要があります。
以前はこんな感じでやっていました。
#!/bin/bash if [ ! -f /sys/class/gpio/gpio23/direction ] ; then echo "23" | sudo tee /sys/class/gpio/export > /dev/null echo "out" | sudo tee /sys/class/gpio/gpio23/direction > /dev/null fi echo 1 | sudo tee /sys/class/gpio/gpio23/value > /dev/null sleep 0.1 echo 0 | sudo tee /sys/class/gpio/gpio23/value > /dev/null
代替としてはpinctrlコマンドを使えばいいようです。ヘルプからoutput周りの例を抜き出すとこんな感じ。
$ pinctrl help (一部抜粋) pinctrl set 10 op Set GPIO10 to be an output pinctrl set 10 dl Set GPIO10 to output low/zero (must already be set as an output) pinctrl set 20 op pn dh Set GPIO20 to output with no pull and driving high
これでOKそうですね。
#!/bin/bash pinctrl set 23 op dh sleep 0.1 pinctrl set 23 op dl