SwitchBotの導入
我が家で、新たに SwitchBot を導入し、エアコンのリモコンを操作させてみた。コンセントプラグ構造のスマートプラグを導入する方法もあるけど、エアコンは電力も大きいし、コンセントプラグの形状も違うので SwitchBot を選んだ。
まずはボタン動作の確認
うちのエアコン nocria は RFリモコンなので、赤外線信号では制御できない。仕方がないので、SwitchBotでリモコンのスイッチを直接押させる。基本的な使い方は、スマホにアプリを入れて SwitchBot を見つけて登録するだけ。スイッチを押す機能が確認できたので、エアコンのリモコンに貼り付け。貼り付けた場所が開く構造なので、押す動作で開きっぱなしになる可能性があったので、奥さんのヘアゴムで押さえる。
Homebridgeに登録しスマートスピーカで制御
homebridgeを導入してるので homebridge-switchbot-ble をインストール。スマホアプリで SwitchBot の Bluetooth の MACアドレスが確認できるので、これらの情報を登録するだけで簡単。これで、google home や Siri から「Ok google (or Hey Siri), エアコンをつける」ができるようになった。
ただし、プッシュ動作しかできないので、現在エアコンがついているのか解らないし、エアコンを消しても「自動クリーニング」状態になるので、ON-自動クリーニング-OFF の3状態。遠隔でON/OFFには使えない。(部屋の温度に応じてエアコンを自動でON/OFFはできない)
次にエアコンを買い替えるときは、素直に赤外線リモコンの機種か、最初からスマートスピーカ対応の機種だなぁ…。
フレームバッファ出力で電力不足?
ラズパイの状態表示を出力させてみたけど、このあとからか、Raspberry-Pi が Under-Voltage 警告が増えたみたい。そして、よく落ちるようになってきた。
HDMI 出力をすることで、電力不足だと思われる。homebridgeさえ動いていればいいので、状況表示はもともとそんなに使うはずでもないので、早々に出力の処理は止めた。
素直に大電流ACアダプタ
ACアダプタをこれ以上増やしたくないと、ルータの USB-3.0 端子から、homebridge用 Raspberry-Pi に給電していたけど、不安定なのは困る。RPi 3 用と書いてある AC アダプタを購入して取り換え。Under-voltage の警告は出なくなったな。当然か。
1日間で700回ほど出力されていた、電圧低下の警告がキレイさっぱりなくなった。当然か…(^_^;
ラズパイのフレームバッファ出力
家電制御とhomebridge専用のRaspberry-Piだけど、HDMI制御用にテレビに繋がっているし、ラズパイの動作状況なりを出力させられないかと思っていた。
X11 の GUI の autologin を使うのが定番だろうけど、X11 が動いているだけで、OS リソースをかなり食っちゃうので、あまりやりたくなかった。
でも、フレームバッファ出力で映像を出すための fbi コマンドをみつける。
そこで、wkhtmltopdf パッケージの wkhtmltoimage コマンドを使って、状況表示のページをキャプチャさせ、その画像を fbi コマンドで、フレームバッファ表示させてみた。
/usr/bin/wkhtmltoimage --width 1200 --height 800 \ -q 'http://www.example.co.jp' /tmp/web.png /usr/bin/sudo /usr/bin/fbi -T 1 -d /dev/fb0 --noverbose \ /tmp/web.png > /dev/null 2>&1
google home が動かなかったな…
そういえば、先日の朝とか、いつもの Google home mini に「照明つけて」とか言っても、ネットワークにつながっていないとかいって動かなかったけど、google のトラブルが原因か。
我が家では、家電制御は、Google Home mini → homebridge-gsh → homebridge だから、我が家のネットワークの問題(mydns.jpの接続トラブルで逆引き失敗することがある)で、homebridge-gsh が動かないと思っていたけど、google さんがトラブっていりゃうごかないよね。
まあ、homebridge は Home アプリで操作が普通で、”Hey Siri!” で操作できるし、記事みたいに何もできなることはないし。
朝イチの暖房と換気
ファンヒータが原因なのか?
空気品質センサーCCS811を導入して、測定値もまあ安定している状態。一般的な換気推奨レベル1500ppm では、ファンヒーターをつけるだけで軽く越えてしまう。しかたがないので下図で示される「人体影響レベル2500ppm」に警告レベルを設定してみた。しかし、暖房ナシでの就寝明けにファンヒーターが動き出すと越えてしまうよなぁ。
仕事に出かける前に換気をしておけば、帰宅しても1500ppmを下回りそうだけど、これからもっと寒くなれば、難しいよなぁ…
ファンヒータ以外の原因か?
(2020/12/08追記) 安定して、空気品質がサンプリングできてわかってきたことだけど、CO2増加のタイミングがファンヒータとずれている。
今朝も、06:00 にファンヒーターをつけているのに、CO2の立ち上がりは、07:30頃から。空気が循環するまでのタイムラグと考えることもできるけど、もう少し微妙に影響出始めていいはず。
そうなると、原因は目覚めた人間の呼吸なのかなぁ。呼吸が原因なら、帰宅した時にも大きな変動があっていいはずなんだけど、朝イチの変動大きいよなぁ。
homebridgeの一部が不具合
便利に使っている音声制御機能、しかし昨日から照明が消えない。google-home ではなく、元の Apple の Homeアプリで動かすと、アイコンに ! マークが付いている。ブラウザのリモコン機能は動くので、赤外線の光が届かないのかと思って気づくのが遅れた。(ブラウザ版は raspberry-pi でなく、自宅サーバで動いている)
原因は、raspberry-pi を stretch から buster に更新して、python の設定がおかしくなったみたい。
$ /usr/local/bin/broadlink bed-light power Traceback (most recent call last): File "/usr/local/etc/python-broadlink/cli/broadlink_cli", line 8, in <module> import broadlink ModuleNotFoundError: No module named 'broadlink'
しかたがないので、python-broadlink を入れ直し。default の python が 2.x 系か 3.x 系かの違いが原因のようなので、明示的に python3 系でインストール。
$ sudo install python3-dev python3-pip $ sudo pip3 install broadlink
Raspberry Pi buster 更新でトラブル
自宅の Raspberry-Pi を buster に更新してみた。
定番の /etc/apt/sources.list の stretch を buster に書き換えて、
$ sudo aptitude update ; sudo aptitude safe-upgrade 大量にインストール... $ sudo reboot
しかし、起動時に eth0 も認識せずに、emergency mode になってしまった。
root パスワードでログインし、手作業で eth0 を認識させて…。
原因としては、raspi-copies-and-fills が原因のようなので、削除。
$ sudo aptitude purge raspi-copies-and-fills
二酸化炭素レベル測定で換気判定
コロナ対策で、空気中の二酸化炭素レベルを測定して換気を行う事例をテレビでやっていたので、I2C接続のセンサーをAmazonでポチって、ちょいプログラム作成。(取り付け時のメモ) センサー値が安定するまで時間がかかるというものなので、daemon化させる必要もあって、ちょっと面倒だったけどうまく動くようになった。
考察
センサーのeCO2が400ppm以下は判定できないので、こんなグラフが取れるようになった。ファンヒーターをつけるとグラフが上がっていく。1000ppm以上だと換気推奨レベル。とはいえ、朝の冷え切った部屋が温まるまでは、換気もできんけど。
グラフ中の8:00-12:00は、daemon化させていたプログラムのバグ直しまでの影響だけど、このセンサーはeCO2の値は、2000ppm が上限みたいだな。ソースコード確認したら、eCO2>2000 , TVOC>1200 は異常値扱いしていた。販売元のページには、測定レンジもう少し広い値だったので、プログラムの方を修正。
グラフの立ち上がりは、ファンヒーターが原因だけど、夜中の3:30にグラフが立ち上がってるのが原因不明だなぁ…。
一番ありそうな仮説。猫が「コレ何?」と、センサー周りでクンカ・クンカでもしたのかなぁ….Raspberry-Pi+センサー、テレビの台に置いてあるからなぁ…
温度湿度センサーをBME280に切り替え
自室の温度測定には、USBRH というセンサーとそれに伴うソフトを使っていたけど、使っていたライブラリの都合で、Raspberry-pi のバージョンを最新にできずにいたけど、今回 同じようにI2Cの温度・湿度・気圧のセンサー BME280 を購入し温度測定のプログラムを切り替えた。
ということで、そろそろ Raspberry-Pi のOS更新もやろうかな。
CO2センサーをRaspberry-Piにつなぐ
SEN-CCS811 - Raspberry-Pi GND - GND(6) VCC - 5V(4) SDA - I2C1_SDA(3) SCL - I2C1_SCL(5) RST - VCC(2) # Resetする時はGNDにつなぐ WAKE - GND(9) INT - NC
$ sudo raspi-config $ sudo /boot/config.txt dtparam=i2c_arm_baudrate=50000 (default 100kHz→50kHz) $ ls /dev/i2c-* /dev/i2c-1 $ sudo i2cdetect -y 1 $ sudo pip3 install smbus2 # python3 用smbus モジュール