M5 Atom Lite を購入
先日購入した、ドアモニタにはちょっとした連携機能があるので、それらを活用するネタにならないかということで、M5 Atom Lite を購入してみた。
小さな CPU のわりに、WiFi や Bluetooth を使うことができて、若干のデジタル・アナログ入出力端子もついてる。卒研のネタで使ってもらう練習も兼ねて、ちょっと遊んでみよう。
UIFlow を書き込む
M5Burner で ターゲットの ATOM(Lite)を選んで、シリアルポートを確認し COM5 などの値を設定。後は書き込む。
設定で、BootMenu を True にしておくと、電源を入れたり/Reset した時に、中央ボタンを押すと、緑・青・黄・紫の LED 表示が 1 秒周期ぐらいで変化するようになる。この時の離すタイミングで、以下の状態に変化
- 緑 – Internet Mode (UIFlow のWebサイトでプログラムを書き込める)
- 青 – USB Mode (USB Serial 経由でプログラムを書き込める) – UIFlow-Desktop-IDE
- 黄 – WiFi 設定モード
- 紫 – App Mode (書き込まれているアプリを実行)
A端子入力でWeb APIを起動
新しく購入したドアホンには、来客時の呼出しに合わせA端子入力を Short できるらしいので、Homebridge を連動させてみたいので、こんなプログラムを書いてみた。Web API といっても、今回は実験なので自宅サーバの特定 URL を読み出すだけ。
homebridge用にnode.jsの更新
家電制御用に動かしている Raspberry Pi の homebridge のために、node.js と npm の更新。
ついでに、最新の node.js を 16.3 にアップグレードしてみた。
$ sudo systemctl stop homebridge $ sudo curl -fsSL https://deb.nodesource.com/setup_16.x | bash - $ sudo systemctl stop homebridge $ sudo apt-get install -y nodejs $ sudo systemctl start homebridge $ sudo npm update $ sudo node -v 16.3.0 $ sudo npm -v 7.15.1
SwitchBot の制御が動かなくなり、プラグインを別の物に切り替え。
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