Homeassistantを経由して、物理的には、離れているが、同じネットワーク内にあるESP32デバイスを互いに連携させることを試してみる。
デバイスの用意
まず、ESP32でなにかしらの回路を用意した。
- 1つ目のESP32デバイス
- pin2にIRセンサー
- pin32にLED
- 2つ目のESP32デバイス
- pin32にLED
- pin33をGPIOとして(LED以外の外部回路のトリガーとして使用)
これらESP32デバイスをESPhomeから以下のようにコンフィグレーションした。
(Arduino IDEに描くようなコードはまったく書いておらず、以下のyamlだけを書いた。)
上の箇条書きしているようなものが列挙されているのと、
irセンサーは「remote_receiver」として、定義し、
それが受光する信号を「binary_sensor」として解釈することを定義している。
今回はODELICのLEDシーリングライドのリモコンが手元にあったのでそれを使う。
市販されているリモコンの発する信号のフォーマットはだいたい統一されているらしいので今回は「lg」とすればよかった。(赤外線リモコンの通信フォーマット)
esphome: name: ir-rec platform: ESP32 board: esp32dev switch: - platform: gpio name: "LED" pin: 32 remote_receiver: pin: number: 2 inverted: true mode: INPUT_PULLUP dump: all binary_sensor: - platform: remote_receiver name: "Odelic Remote Input All ON" lg: data: 0x01A3D926 nbits: 32 - platform: remote_receiver name: "Odelic Remote Input All OFF" lg: data: 0x01A3906F nbits: 32 # Enable logging logger: # Enable Home Assistant API api: ota: password: "**********" ethernet: type: LAN8720 mdc_pin: GPIO23 mdio_pin: GPIO18 clk_mode: GPIO0_IN phy_addr: 1 power_pin: GPIO16
esphome: name: bs-skp-sw platform: ESP32 board: esp32dev switch: - platform: gpio name: "LED" pin: 32 - platform: gpio name: "RF_SW" pin: 33 ethernet: type: LAN8720 mdc_pin: GPIO23 mdio_pin: GPIO18 clk_mode: GPIO0_IN phy_addr: 1 power_pin: GPIO16 # Enable logging logger: # Enable Home Assistant API api: ota: password: "**********************"
最初の書き方は以下の記事と同じ(使っているESP32のICは違うがほとんど同じ)
e-tipsmemo.hatenablog.com
このyamlをESPhomeでコンフィグレーションすると、ESPhomeに書き込むバイナリファイルが完成する。
初回の書き込みはネットワーク経由ではできないので、UART経由などで行う必要があるが、
いったんHomeassistantから認識できるようになれば、ネットワーク接続コンフィグの部分(otaやapi、ethernet)以外を書き換えて再コンフィグするのは、ネットワーク経由で行うことができる。
これらが完了すると
Homeassistantのオーバービューに入出力の一覧が表示される。
Output端子は、トグルボタンに対応して変更すると、GPIOの出力が変化して、LEDが光ったりする。
Input端子は、入力ステータスを表すようになっている。
オートメーション
入出力が準備完了したので、それらを連携させる。
オートメーションの作成から設定する。
画像のように、「もし『トリガー』ならば『アクション』を実行する」のような簡単な条件を設定して、常にデバイスの状態を監視しておくことができる。
実際にはデバイスの入力があると、MQTTでネットワーク経由で通信が行われて、Homeassistantがそれを受けて、条件を考慮して、MQTT経由で、デバイスの出力を行う。
のような動作だと思われる。
これで自作デバイスでオートメーション(Homeassistant経由)ができるようになった。
また、Switch botのような、Homeassistant対応のIoTデバイスを買うことで、もっと高度なオートメーションが可能になると思われる。
Switch bot温度計
Switch bot hub mini
Homeassistant対応のCO2メーター
aranet.com