【スマートホーム】Home Assistantで設定温度になったら自動的に冷房オン&タイマーで自動オフ

2018年7月8日Home AssistantHome Assistant, スマートホーム, IoT

Home Assistantを用いて、設定温度になったら自動的に冷房をオンにし、さらに設定温度を上回るもしくは指定時間経過した場合に自動的に冷房をオフにする、というオートメーションを組んでみた。

用意するもの

  • 温度センサー
  • 冷房
  • iRemoconやNature Remo等、冷房をサーバー(Raspberry Pi等)経由で操作できるもの

用意するものは非常に簡単で、スマートホームを実現する場合には多くの場合持っているだろう。
ない場合は、それぞれ用意してあげよう。以下がオススメ。

Raspberry Pi 3 Model B V1.2 (日本製) 国内正規代理店品

Raspberry Pi 3 Model B V1.2 (日本製) 国内正規代理店品

4,970円(08/14 15:15時点)
Amazonの情報を掲載しています
Nature Remo

Nature Remo

13,700円(08/14 14:02時点)
Amazonの情報を掲載しています

また、Home Assitantの基本的なインストール及び設定方法に関しては、こちらにまとめて記入をしている。適宜ご参照をいただきたい。

設定ファイルの編集

それぞれ、こんな感じで設定をしてあげる。

温度センサー

今回は引き続きXiaomiのセンサーを使用しているので、xiaomi_aqaraとして設定。設定場所はconfiguration.yaml。

xiaomi_aqara:
    discovery_retry: 10
    gateways:
      - host: XX.XX.XX.XX
        mac:
        key: XXXXX

そうすると、Home Assistantの「States」パネルで見れるようになっているので、ここでセンサーに割り当てられているデバイス名称を確認。今回の場合、「sensor.temperature_158d000201f683」という名称が割り振られていた。

なお、 Xiaomiのセンサーはほとんどの設定が中国語なので、購入するときはご注意を。

理想温度を設定するスライダー

こんな感じで、温度や自動オフにする時間をスライダーで決めることが出来るバーを作る。下記の場合、冷房のターゲットは21度、それ以外に60分稼働したら自動的に停止する。

slide-w381

設定方法はやはりconfiguration.yamlを編集する形となる。次のようにすれば問題ない。

input_number:
  desired_temperature:
    name: Desired temperature
    initial: 21
    min: 19
    max: 25
    step: 1
    icon: mdi:thermometer

  air_timer:
    name: Air Timer
    initial: 60
    min: 1
    max: 180
    step: 1
    icon: mdi:thermometer

これで、input_number.desired_temperatureがターゲットとする温度、input_number.air_timerが、エアコンを自動的にオフとする時間となる。

さて、これで材料は揃った。あとは以下のようなオートメーションを作れば良い。

  • ターゲットとする温度を1度上回ったら(暑くなったら)、冷房を自動的にオンにする
  • ターゲットとする温度よりも1度下回ったら(寒くなったら)、冷房を自動的にオフにする
  • 上記とは別に、指定した時間を過ぎたら、自動的に冷房をオフにし、さらに自動的なオンオフも停止する

これが出来ると、自動的に温度を調整してくれるだけではなく、冷房をオフにすることもしてくれるので、非常に便利だ。

オートメーションの作成

オートメーションを作成するにあたって、以下の3つを用意する。

  • 自動的に冷房をオンにする機能
  • 自動的に冷房をオフにする機能
  • 「自動的に冷房をオンにする機能」と同期する形で、「自動的に冷房をオフにする機能」をオンオフする機能

それぞれ設定をしていこう。

自動的に冷房をオンにする機能

スクリプトはこんな感じ。

- alias: "Start Auto Cooling"

  trigger:
   - platform: time
     minutes: '/1'
     seconds: 00

  condition:
   - condition: and
     conditions:
        - condition: template
          value_template: '{{ states.sensor.temperature_158d000201f683.state | float - states.input_number.desired_temperature.state | float > 1 }}'  # Now - Desire > 1
        - condition: state
          entity_id: switch.cold
          state: 'off'

  action:
    - service: switch.turn_on
      entity_id: switch.cold
    - delay: "00:{{ states.input_number.air_timer.state | int }}:00"
    - service: automation.turn_off
      entity_id: automation.Start_Auto_Cooling
    - service: automation.turn_off
      entity_id: automation.Stop_Auto_Cooling
    - service: switch.turn_off
      entity_id: switch.cold

こんな感じの流れになっている。

  • 1分おきに「自動冷房オン」になっているかどうかを確認し、なっていたら作動
  • ただし、現在温度が設定温度より1度以上高く、かつ冷房(switch.cold)がオフの場合のみ作動
  • 作動したら冷房をオンにする
  • オンになってから設定時間がたった段階で、オートメーションを停止&冷房のスイッチを停止

自動冷房をオフにする機能

- alias: "Stop Auto Cooling"

  trigger:
   - platform: time
     minutes: '/1'
     seconds: 00

  condition:
   - condition: and
     conditions:
       - condition: template
         value_template: '{{ states.sensor.temperature_158d000201f683.state | float - states.input_number.desired_temperature.state | float < -1 }}'  # Now - Desire < -1
       - condition: state
         entity_id: switch.cold
         state: 'on'

  action:
    - service: switch.turn_off
      entity_id: switch.cold

これは非常にシンプルで、同じように1分ごとに監視をし、設定温度よりも1度以上室内の温度が上回ったらオフとしている。

自動冷房オンと自動冷房オフを関連づける

自動冷房オンをオンにしたら自動暖房オフもオンになり、自動冷房オンをオフにしたら自動冷房オフもオフになる、というもの。
正直もうちょっとうまくかける気もするのだが、面倒なのでそのまま。

- alias: "AutoCool_relative_on"

  trigger:
   - platform: state
     entity_id: automation.start_auto_cooling
     to: 'on'

  action:
    - service: automation.turn_on
      entity_id: automation.stop_auto_cooling


- alias: "AutoCool_Relative_Off"

  trigger:
   - platform: state
     entity_id: automation.start_auto_cooling
     to: 'off'

  action:
    - service: automation.turn_off
      entity_id: automation.stop_auto_cooling

最後のオートメーションは常に実行する形としておけば、「自動冷房オン」をオンにすれば、それ以外はhiddenとしておいても全て正常に動作するようになる。

これで、温度とタイマーを設定しておけば、それに従って動くようになる。実のところ、明け方に自動的に動作させるためのオートメーションを上記とは別に組んでいるのだが、上記があれば猛暑となる季節までは快適に過ごすことが出来るだろう。