ふらふらぶろぐ

くだらないものを作ってます。

homebridge-cmdswitch2 の state_cmdとpollingの意味

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に戻る。