e-tipsmemo

ごった煮

ESPHomeとHome assistantのオートメーション

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やapiethernet)以外を書き換えて再コンフィグするのは、ネットワーク経由で行うことができる。

これらが完了すると
Homeassistantのオーバービューに入出力の一覧が表示される。

Output端子は、トグルボタンに対応して変更すると、GPIOの出力が変化して、LEDが光ったりする。
Input端子は、入力ステータスを表すようになっている。

オートメーション

入出力が準備完了したので、それらを連携させる。


オートメーションの作成から設定する。

画像のように、「もし『トリガー』ならば『アクション』を実行する」のような簡単な条件を設定して、常にデバイスの状態を監視しておくことができる。

実際にはデバイスの入力があると、MQTTでネットワーク経由で通信が行われて、Homeassistantがそれを受けて、条件を考慮して、MQTT経由で、デバイスの出力を行う。
のような動作だと思われる。

これで自作デバイスでオートメーション(Homeassistant経由)ができるようになった。
また、Switch botのような、Homeassistant対応のIoTデバイスを買うことで、もっと高度なオートメーションが可能になると思われる。

Switch bot温度計

Switch bot hub mini

Homeassistant対応のCO2メーター
aranet.com