Homebridge-cmdswitch2のconfig.jsonに、on_cmdとoff_cmdとstate_cmd、polling と interval が設定できる。
on_cmd, off_cmd, state_cmdとは
on_cmd : iphone「ホーム」アプリで、機器をON操作された時に実行するコマンド
off_cmd : iphone「ホーム」アプリで機器をOFF操作された時に実行するコマンド
state_cmd : テレビなど操作したい機器がONかどうかを確認するためのコマンド
{ "platform": "cmdSwitch2", "name": "cmdSwitch2", "switches": [ { "name": "ワールド", "on_cmd": "bash /home/rak/source/ir_remote/nhkworld.sh", "off_cmd": "bash /home/rak/source/ir_remote/inputsource2tv.sh", "state_cmd": "bash /home/rak/source/ir_remote/ping2firestick.sh", "polling": true, "interval": 15 } ] }
inputsource2tv.sh
bash ping -c 2 -W 1 192.168.11.38 | grep -i '2 received'
state_cmdでpingを実行する理由は、機器の電源がONならpingが返ってくるので、機器の電源が入っているとみなせるため。
Amazon fire stick TVなど、電源を基本的にオフにしないデバイスにpingを実行すると、必ずON状態を返すのでstate_cmdには不適。(ホームアプリでOFFにしても、機器の電源は入っているのでアプリ上の表示が勝手にONに戻ってしまう)
■ ping -c 2 -W 1 の意味
-c 回数:指定した回数分のパケットを送る
-W 秒数:タイムアウトを指定する(-W 1と設定すると、pingを送っても機器にたどり着けない時は1秒でタイムアウトさせる)
■ grep -i '2 received'の意味
-i 検索正規表現
大文字と小文字を関係なく、''内に一致する行を抜き出す。
(上記なら2 receivedが含まれている行を抜き出す)
pollingとintervalとは
polling:機器がONかどうか確認するstate_cmdを定期的に実行すること
interval:定期的に実行する間隔
timeoutとは
Homebridgeを再起動した時など、「ホーム」アプリとラズパイが通信できなくなっても、timeoutで設定した時間は「応答なし」と表示しない
シェルの中のexit 0とexit 1の意味
config.jsonに以下を設定し、
"state_cmd" : "bash /home/rak/source/.../alwaysoff.sh", "polling" : true, "interval" : 1
alwaysoff.shに exit 1 と書いて保存する。
exit 1
exit 1:「ホーム」アプリのスイッチをoffに切り替える
exit 0: onに切り替える
一般的には、exit 1はコマンド実行した結果が失敗、exit 0は成功を意味する。
1秒ごとにstate_cmdで設定したalwaysoff.shが呼び出され、「ホーム」アプリのスイッチをoffに切り替える。
よって、「ホーム」アプリからスイッチをonに切り替えても、すぐにoffに戻る。