YAML設定の分割
Home AssistantにおいてMQTTの設定は、設定ファイル configuration.yaml への手打ちが基本。同じような設定の記述が延々と連なるので、デバイスが増えるにつれて目的の項目を見つけるのも一苦労。
そこで作業前にまず、現在のMQTTセンサの設定を別ファイルをインクルードする構成へと、変更しようと思います。
File Editorプラグインで普段編集している設定ファイル configuration.yaml は、 config/下にあります。
configuration.yaml でインクルードを使うには、単純にその項目を単一の別ファイルへ切り出す方法と、
|
1 2 |
mqtt: sensor: !include mqtt_sensors.yaml |
|
1 2 3 4 5 6 7 |
[core-ssh ~]$ ls -l /homeassistant/*.yaml -rw-r--r-- 1 root root 2 Apr 12 2023 /homeassistant/automations.yaml -rw-r--r-- 1 root root 634 Feb 29 10:27 /homeassistant/configuration.yaml -rw-r--r-- 1 root root 5294 Feb 28 17:24 /homeassistant/mqtt_sensors.yaml -rw-r--r-- 1 root root 0 Apr 12 2023 /homeassistant/scenes.yaml -rw-r--r-- 1 root root 0 Apr 12 2023 /homeassistant/scripts.yaml -rw-r--r-- 1 root root 161 Apr 12 2023 /homeassistant/secrets.yaml |
サブディレクトリ内にある複数のYAMLファイルを全てまとめてインクルードする方法があります。
|
1 2 |
mqtt: sensor: !include_dir_merge_list mqtt_sensors/ |
|
1 2 3 4 5 |
[core-ssh ~]$ tree /homeassistant/mqtt_sensors /homeassistant/mqtt_sensors ├── mqtt_sensors_esp_home.yaml ├── mqtt_sensors_esp_ysuka.yaml └── mqtt_sensors_piaware2.yaml |
当初は前者の方法でインクルードしていたものの、最終的にはインクルードファイルを分割できる後者の形に落ち着くことに。
いずれの場合でも設定ファイルの編集後は、開発ツールにあるYAML設定の再読込で反映させる必要があります。
あまりにも壮大で知りたいことが見つけられない公式ドキュメントに閉口する中、設定ファイルの仕組みについてはこちらの記事が大変参考になりました(Great Tnx!!)。
pahoから送られたJSONを読み解く設定
設定ファイルの下準備が終わったので早速本題。
Raspberry Piから送られてきたJSONオブジェクトから、その要素の1つ(温度)を取り出すエンティティは次の通り。
|
1 2 3 4 5 |
- name: "PiAware2_Temp1" state_topic: 'home/piaware2/sensors' unit_of_measurement: "C" device_class: "temperature" value_template: '{{ value_json.0.Temp | round(2) }}' |
図3のように送られてきたJSONオブジェクトの0番目のTempキーの値を取り出し、小数点2桁で切り揃える value_template の記述がキモでした。その詳しい作法についてはこちらから。
また、 device_class でセンサデータの種類をここで宣言しておくことにより、ダッシュボードでの利用時に正しいアイコンが予め選択されるようになるようです。利用可能なセンサデバイスクラスの一覧はこちらを参照。
後は要素の数だけ同じエンティティを記述すれば完成です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# PIAWARE2 BME280+BH1750 DUAL - name: "PiAware2_Temp1" state_topic: 'home/piaware2/sensors' unit_of_measurement: "C" device_class: "temperature" value_template: '{{ value_json.0.Temp | round(2) }}' - name: "PiAware2_Humid1" state_topic: 'home/piaware2/sensors' unit_of_measurement: "%" device_class: "humidity" value_template: '{{ value_json.0.Humid | round(0) }}' - name: "PiAware2_Press1" state_topic: 'home/piaware2/sensors' unit_of_measurement: "hPa" device_class: "pressure" value_template: '{{ value_json.0.PressZero | round(2) }}' icon: mdi:altimeter - name: "PiAware2_Lux1" state_topic: 'home/piaware2/sensors' unit_of_measurement: "Lux" device_class: "illuminance" value_template: '{{ value_json.0.Lux | round(0) }}' - name: "PiAware2_Temp2" state_topic: 'home/piaware2/sensors' unit_of_measurement: "C" device_class: "temperature" value_template: '{{ value_json.1.Temp | round(2) }}' - name: "PiAware2_Humid2" state_topic: 'home/piaware2/sensors' unit_of_measurement: "%" device_class: "humidity" value_template: '{{ value_json.1.Humid | round(0) }}' - name: "PiAware2_Press2" state_topic: 'home/piaware2/sensors' unit_of_measurement: "hPa" device_class: "pressure" value_template: '{{ value_json.1.PressZero | round(2) }}' icon: mdi:altimeter - name: "PiAware2_Lux2" state_topic: 'home/piaware2/sensors' unit_of_measurement: "Lux" device_class: "illuminance" value_template: '{{ value_json.1.Lux | round(0) }}' |
ダーッシュボードへエンティティカードを追加
YAMLに記述したエンティティをダッシュボードで見せるために、ダッシュボードの編集モードでエンティティカードを追加します。
各エンティティ項目は、それぞれ右の 編集 ボタンを押して編集することができます。編集後は 戻る アイコンを押してカード全体のエディタへ戻らなくてはならず、右下の 保存 をクリックしてしまうと、カードエディタ全体が閉じてしまうので注意。
エンティティカードと各エンティティの遷移の往復が面倒な場合は、左下の コードエディタを表示 をクリックして直接編集するのが良いでしょう。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
type: entities entities: - entity: sensor.piaware2_temp1 secondary_info: last-updated name: Temp1 - entity: sensor.piaware2_temp2 name: Temp2 secondary_info: last-updated - entity: sensor.piaware2_humid1 secondary_info: last-updated name: Humid1 - entity: sensor.piaware2_humid2 name: Humid2 secondary_info: last-updated - entity: sensor.piaware2_press1 name: Press1 secondary_info: last-updated - entity: sensor.piaware2_press2 name: Press2 secondary_info: last-updated - entity: sensor.piaware2_lux1 secondary_info: last-updated name: Lux1 - entity: sensor.piaware2_lux2 name: Lux2 secondary_info: last-updated title: PiAware2 |
次回は、システムの状態を取得・送信できるようにしてみたり、OpenWrtにも同じpython3-paho-mqttパッケージが存在するので、プラットフォームを跨いだ展開も楽しそうです。







