ホーム » 「homebridge」タグがついた投稿 (ページ 2)
タグアーカイブ: homebridge
Siriのシーン登録
Google Homeでhomebridge制御が動かないときがある
最近、Google home mini からRaspberry Pi の homebridge の制御で「homebridgeが見つかりません」の返答が返ってくることが増えた。
どうも、homebridge-gsh では裏で無料のクラウドサービスが使われているけど、たぶんこのクラウドの反応が悪いのかもしれない。(追記:google home の機能変更が原因?)
しかし、Home Pod mini を使い始めてるし、”Hey Siri”で頼むのに切り替えればいい。ただ、”Ok google, 行ってきます”で、テレビと部屋の照明を消す機能の、Siri での設定に悩んだ。
iOS ホームのシーンの登録
“Google Home”アプリでは、複数機能の連動ではルーティン機能を使っていたので、”Google Home” の iOS版ということで、”ショートカット機能”ばかり調べてた。でも、こういう設定は、iOS ではホームアプリのシーン機能だった。ただ、”Google Home”であれば、「いってきます」で、テレビを消した後に「天気」を喋らせたりと、機器制御以外の処理も連動できたけど、iOS “ホーム” では機器制御しかできない。
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 の制御が動かなくなり、プラグインを別の物に切り替え。
homebridgeのlogrotate
raspberry-pi で動かしている homebridge の LOG もそれなりに成長するので、logrotate で切り詰める。
設定したけど、うまく出力してくれていないので、postrotate 機能で、homebridge を再起動するようにする必要あり。
/var/lib/homebridge/homebridge.log { weekly rotate 10 compress delaycompress missingok notifempty create 644 homebridge homebridge postrotate /bin/systemctl restart homebridge endscript }
google home が動かなかったな…
そういえば、先日の朝とか、いつもの Google home mini に「照明つけて」とか言っても、ネットワークにつながっていないとかいって動かなかったけど、google のトラブルが原因か。
我が家では、家電制御は、Google Home mini → homebridge-gsh → homebridge だから、我が家のネットワークの問題(mydns.jpの接続トラブルで逆引き失敗することがある)で、homebridge-gsh が動かないと思っていたけど、google さんがトラブっていりゃうごかないよね。
まあ、homebridge は Home アプリで操作が普通で、”Hey Siri!” で操作できるし、記事みたいに何もできなることはないし。
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
homebridge-gsh と cec-client
homebridge-gshで、google-homeからHomeKit(homebridge)を制御
自宅で homebridge-config-ui-x で、家電制御の設定が楽になり、homebridge-gsh にて、Google Home から Apple の HomeKit の制御を呼び出せるようにしてみた。今までは赤外線リモコンベースなので、テレビのON/OFFがトグル動作で怪しかったが、HomeKit 経由だと、TVにつなげた HDMI 接続のRaspberry-Pi から HDMI 接続の他の機器に、ON/OFF を明示的に制御ができるようになる。
cec-client で 電源ON/OFF ができなくなった
無事、homebridge-gsh が動き出したのに、CATVSTB の電源が ON/OFF できない。入力切替は正しく動いているのに…
cec-client の動作状況を表示させながらうごかすと、定番の 「echo “on 1” | cec-client -s」で動かない。メッセージを見ると、対象機器がうまく選べないのが原因みたい。
CEC では、物理機器番号と論理機器番号で管理されていて、物理機器番号が決まらないのに on はできない…といったのが原因みたい。cec-client のバージョンがあがり、その辺がいいかげんなコマンドが送れないようになったようだ。
しかたがないので、CEC-O-MATIC のページにて、他の方法を試すと、以下のコマンドなら、正しく電源のON/OFFができた。
$ echo "tx 26:36" | cec-client -s # チューナーをけす Recording2 → Tuner2 standby $ echo "tx 26:44:6C" | cec-client -s # Recording2 → Tuner2 User Control Pressed Power Off $ echo "tx 26:44:6D" | cec-client -s # Recording2 → Tuner2 User Control Pressed Power On
ということで、cec-client を呼び出す処理を、上記のコマンドを使うようにして、無事 google-home から HomeKit 呼び出しに成功。
google-home に、”NHK をつける” と話しかけると、homebridge-gsh 経由で homebridgeが呼び出され、「地デジ切替と1チャンネルの赤外線信号」をだすし、”チューナーを消す”と言えば、cec-client 経由でtx 26:44:6c を送ってチューナーの電源が切れる。超便利。
(追記)
“tx 2X:44:6D” による電源ONは、HDMIの電源連動機能が動かないみたい。”on Y” だと、(TVで連動ON設定が必要だけど)チューナーの電源を入れれば、TVも連動してONになっていた。しかし、”tx 2X:44:6D”ではテレビがつかない。TV側の連動機能を知らないうちにOFFにしたのかと思ったけど、リモコンでチューナーをつければテレビ付くし。
ということで、cec-client を使って電源操作するシェルスクリプトに、TVの電源ON動作を行う機能を追加しておいた。
homebridge-config-ui-x を入れる
Appleの家電制御のためのHomeKitと互換性のあるソフト homebridge だけど、以前より家電の赤外線リモコンで活用しているが、google home との連携もさせたくって、homebridge-gsh を入れようとしたが、nodejs のバージョンが古く、インストールに失敗していた。
Google Home Mini で家電を制御するために、iPhone に eRemote 用のアプリを入れて、制御もしているけど、テレビなどの電源ボタンがトグル動作で、ON/OFF を正しく認識しないので、操作性が悪い。homebridge では、テレビにつけた Raspberry-Pi から、cec-client を使って、電源操作や入力切替操作が行えるので、基本は homebridge ベースに切り替えたい。
インストール
今回、nodejs のリポジトリを nodejs の本家を使うように設定して、nodejs を最新の 12.x に上げる。合わせて、設定ユーザインタフェースが便利な、homebridge-config-ui-x を入れてみた。
# リポジトリを登録 $ curl -sL https://deb.nodesource.com/setup_12.x | sudo bash - $ sudo aptitude update ; sudo aptitude safe-upgrade # Node.js のインストール $ sudo aptitude install -y nodejs $ sudo npm install -g npm # homebridge-config-ui-x のインストール $ sudo npm install -g homebridge-config-ui-x
config-ui-x を使えば、config.json の編集機能があるし、その編集も各モジュール単位で編集もできるので便利。一部のモジュールは、config.json で触る必要があって、その切り分けで手間取った。
この Web-UI では、スイッチの操作で時間のかかる処理のコマンドで、一部動きがおかしいのもあるけど、スマホ版だと問題なく動くようなので、この画面はあくまで設定用かな。
homebridge-peopleの設定
homebridgeの記事を探していたら、homebridge-people を見つける。ping の結果を、人感センサーの ON/OFF 情報として扱うことができる。ping のホスト名をスマホのIPアドレスを指定すれば、自宅に居る/居ないとして把握できる。
$ sudo npm install -g homebridge-people
$ emacs .homebridge/config.json "platforms": [ { "platform": "People", "threshold" : 15, "anyoneSensor" : false, "nooneSensor" : false, "webhookPort": 51828, "cacheDirectory": "./.node-persist/storage", "pingInterval": 10000, "ignoreReEnterExitSeconds": 0, "people" : [ { "name" : "斉藤徹", "target" : "iphonex-tsaitoh", "threshold" : 15, "pingInterval": 10000, "ignoreReEnterExitSeconds": 0 } ] } ]
本当は、ホームハブを導入することで、Home のオートメーションと連動させて、○○が家に帰ったら、○○するといったことができるんだけど、ホームハブが無いのでできない。そうなってくると、HomePod が欲しくなってくる。