コモノポリタン

コモノ、デジモノが好きなKomonopolitan住民 (はてなダイアリーからの引っ越しです)

【Home Assistant(Hass.io)でホームオートメーション】2. 環境センサー(Omron)を接続 ー 後編

環境センサー(WxBeacon2/Omron 2JCIE-BL01)編

(注:一度公開しましたが、UIの設定、特にカスタイマイズ(Customize)の扱いなどが古いやり方だったので、新版に差し替えました)

 前回Raspberry Pi上に環境センサー(WxBeacon2/Omron 2JCIE-BL01)からデータを収集する仕組みを構築しました。 influxDBに蓄積されたデータをHome Assistantからアクセス・表示できるようにしましょう。

  1. 前編:収集サーバとなるRaspberry Pi Zero Wをセットアップ
  2. 中編:環境センサー(OMRON)からデータを収集
  3. 後編:Home Assistantでのセンサーセットアップ(この記事)

1. 前提

下記のバージョンを前提とした手順です。 (最新版では動かないこともあるかもしれませんが、私が使っている限り、備忘録を兼ねて最新化してゆきたいとは思っています)

  • ホームオートメーションサーバ(ソフト): Home Assistant 0.99.3
    (環境センサーの設定を詰めている間に0.95.xから0.99.xまでバージョンが進みました。画面デザインは少し変わりましたが同じように使えます)
  • ホームオートメーションサーバ(ハード): Raspberry Pi 3 Model B+

2. 観測データをHome Assistantで利用する設定

以前設定した時とは少し異なりますが、Home AssistantでUIを使うには、「Configuration.yamlの記述」(この章の下のYAML, Basic Information, Setting up devicesあたり)、次に「エンティティのカスタマイズ」(このあたりかな)、そして「UIの設定(GUIでの設定)」が必要です。

2.1.Configuration.yamlの記述

まずは呪文です。この宣言文は、Home AssistantのDBとしてinfluxDBにデータを「書き込む」ためのもので、環境センサーの蓄積されているinfluxDBから「読み込む」場合には本来不要なものです。 しかしながら、どうやらinfluxdbのコンポーネントにはBugがあり、これを書いておかないと再起動時に「influxDBのConfigurationが間違っています」って言われて正常に作動しません。

(前略)

# influxdb
influxdb:
  host: !secret influxdb_host

(後略)

influxdbサーバのIPアドレスをconfigurationファイルから隠蔽したり、APIキーやユーザ・パスワードを隠ぺいしたりする簡単な機構(それほどセキュリティレベルがあがるわけではない…)があります。 configuration.yamlに!Secretと書いて、その実態をsecrets.yamlに記述するのです。例えば、上記の様にinfluxDBのサーバのIPをconfigファイルに直書きしない場合には、下記の様にSecrets.yamlファイルを記述します。

# Use this file to store secrets like usernames and passwords.
# Learn more at 
#       https://home-assistant.io/docs/configuration/secrets/

# influxdb
influxdb_host: 192.168.xx.xx

次に、influxDBに蓄積されたデータをHome Assistantからアクセスできるように設定します。 Home Assistantから見れば「Sensor」扱いなので、Sensor: ブロックの中に追記します。 下記は、屋外に設置したWxBeacon2のデータをlast_value_outside_xxxxxとして読み込む設定です*1

(前略)

# Sensor
sensor:
  # Server (Raspberry Pi 3+) info  (以前設定したもの(CPU温度))
  - platform: command_line

(中略)

  # Envsensor(OMRON 2JCIE-BL01 / WxBeacon2) data in influxDB
  - platform: influxdb
    host: !secret influxdb_host
    queries:
      # Envsensor - Outside
      - name: last value of outside temp
        unit_of_measurement: ℃
        value_template: '{{ value | round(1) }}'
        where: '"bt_address" = ''DExxxxxxxxxx'' and time > now() - 5m'
        measurement: 'wxbeacon2'
        field: temperature
        database: weather
      - name: last value of outside light
        unit_of_measurement: lux
        value_template: '{{ value | round(1)}}'
        where: '"bt_address" = ''DExxxxxxxxxx'' and time > now() - 5m'
        measurement: 'wxbeacon2'
        field: light
        database: weather
      - name: last value of outside pressure
        unit_of_measurement: hPa
        value_template: '{{ value | round(1)}}'
        where: '"bt_address" = ''DExxxxxxxxxx'' and time > now() - 5m'
        measurement: 'wxbeacon2'
        field: pressure
        database: weather
      - name: last value of outside humidity
        unit_of_measurement: '%'
        value_template: '{{ value | round(1)}}'
        where: '"bt_address" = ''DExxxxxxxxxx'' and time > now() - 5m'
        measurement: 'wxbeacon2'
        field: humidity
        database: weather
      - name: last value of outside noise
        unit_of_measurement: 'db'
        value_template: '{{ value | round(1)}}'
        where: '"bt_address" = ''DExxxxxxxxxx'' and time > now() - 5m'
        measurement: 'wxbeacon2'
        field: noise
        database: weather
      - name: last value of outside battery
        unit_of_measurement: V
        value_template: '{{ value | round(1)/1000}}'
        where: '"bt_address" = ''DExxxxxxxxxx'' and time > now() - 5m'
        measurement: 'wxbeacon2'
        field: battery
        database: weather

(後略)

configuration.yamlファイルを編集したら、左のサイドバーから[設定]を選び、[Server Control] --> [Configuration Validation]の[CHECK CONFIG]ボタンを押して設定ファイルの書式のチェックをします。

2.2. エンティティのカスタマイズ

このままだと表示されるのはエンティティの名前が英語名(例:last value of outside battery)のままであったり、アイコンがすべてセンサーアイコン(目のやつ)になったりするので編集が必要です。 サイドバーから[設定] --> [カスタマイズ] と進み、エンティティのカスタマイズ画面を出します。 f:id:maky_Ba:20190927220800j:plain

上記の設定内容は下記のとおりです。

  • Entity: 編集したいエンティティをドロップダウンリストから選ぶ
    (ex: last value of outside battery (sensor))
  • Name: UI上の表示名。エンティティ名自体の変更では無く、多分friendly_nameの設定だと思います
    (ex: 電圧(屋内))
  • Pick an attribute to override: 他の属性(アイコンとか)を変更できます。
    (ex: attriburte = icon, value = mdi:battery)

繰り返し、設定してゆきます。設定結果は/config/customize.yamlに設定されます。

sensor.last_value_of_inside_pressure:
  friendly_name: 気圧(屋内)
  icon: mdi:altimeter
sensor.last_value_of_outside_pressure:
  friendly_name: 気圧(屋外)
  icon: mdi:altimeter
sensor.last_value_of_inside_temp:
  friendly_name: 気温(屋内)
  icon: mdi:thermometer
sensor.last_value_of_outside_temp:
  friendly_name: 気温(屋外)
  icon: mdi:thermometer
sensor.last_value_of_inside_humidity:
  friendly_name: 湿度(屋内)
  icon: mdi:water-percent
sensor.last_value_of_outside_humidity:
  friendly_name: 湿度(屋外)
  icon: mdi:water-percent
sensor.last_value_of_inside_light:
  friendly_name: 照度(屋内)
  icon: mdi:lightbulb
sensor.last_value_of_outside_light:
  friendly_name: 照度(屋外)
  icon: mdi:lightbulb
sensor.last_value_of_inside_battery:
  friendly_name: 電圧(屋内)
  icon: mdi:battery
sensor.last_value_of_outside_battery:
  friendly_name: 電圧(屋外)
  icon: mdi:battery
sensor.last_value_of_inside_noise:
  friendly_name: 騒音(屋内)
  icon: mdi:volume-high
sensor.last_value_of_outside_noise:
  friendly_name: 騒音(屋外)
  icon: mdi:volume-high

念のため、左のサイドバーから[設定]を選び、[Server Control] --> [Configuration Validation]の[CHECK CONFIG]ボタンを押して設定ファイルの書式のチェックをします。 書式上の問題が無ければ、同じページ[Server Control] --> [Server Management]の[RESTART]リンクをクリックし、Home Assistantを再起動させます。

2.3. UIの設定

左のメニュー(サイドバー)から[状態]を選び、その中の右端のベルマークの右の縦三つ点から[Configure UI]をクリック。 編集画面の右下のオレンジプラスマークからCard ConfigureでカードタイプEntitiesを選んで編集します。
上のconfiguration.yamlで設定したlast_value_of_outside_xxxxxx (configuration.yamlでスペースだったところは、_(アンダースコア)になってます)をエンティティに登録してゆきます。 f:id:maky_Ba:20190927223307j:plain これでHome Assistantに取り込まれたデータを表示できるようになります。 右側のプレビュー画面のように、カスタマイズで設定した表示名、アイコンが反映されています。

ちなみに編集画面の下の方にある「{}」をクリックすると、エディタ形式での編集画面になります。 icon: やname:といった編集を追加して記述すると、表示名やアイコンをカスタマイズしたものから更に上書き設定できます。

4. 家のセンサー配置図

今、2台あるWxBeacon2の配置は下記の様になっています。 f:id:maky_Ba:20190914000453j:plain

  • S1: 屋外用のWxBeacon2:防水とは言え雨ざらしはまずいと思うので、電気メータ―の格納箱の空きスペース*2によろい戸(?)なども百均の部材で作って百葉箱的に仕上げました。
  • S2: 屋内用WxBeacon2:ダイニングの壁に設置。
  • R1: 環境センサーサーバ:外のセンサーとの交信が弱いので、電気メータ―に近い洗面所にサーバを置くことに。洗面台の鏡の裏側のコンセントを使ってRaspberry Pi Zero Wサーバを設置。

屋内外のセンサーを追加するとUIは下のようになります。 f:id:maky_Ba:20190928105211j:plain

5. おわりに

スマートホームはロボットのようなものだと思っています。 センサーを使って周囲の「情報を把握」し、情報を基に「判断」し、何らかの手段で「外界に働きかける」というのがロボット的ですね。 まず第一段階の状況を把握(と言っても気温、とかですが…)ができるようになりました。 次の段階は「外界に働きかける」を準備し、最終的に「情報の把握」と「外界への働きかけ」を繋げる「判断」を導入しましょう。 外界の働きかけの一例として、汎用赤外線リモコンでシーリングライトをオンオフしてみましょう。

Home Assistant(Hass.io)でホームオートメーション

  1. RaspberryPiにHome Assistant導入
  2. Home Assistant初期設定
  3. 環境センサー(Omron)を接続
    1. 環境センサー(Omron)を接続 - 前編
    2. 環境センサー(Omron)を接続 - 中編
    3. 環境センサー(Omron)を接続 - 後編《今回》
  4. 汎用赤外線リモコンを接続《次回》
  5. スマートプラグを接続
  6. UIを改善

*1:configuration.yamlのファイルは肥大化する一方です。そろそろ別ファイルに分割することを考えないといけませんね

*2:もともとは、アナログの買電、売電の2つのメーターが入っていたのですが、スマートメーター化して1台にすっきりしたため、1つスペースが空きました