週末はいつも晴れ

社会人5年目の日記です。プログラミングとか旅行とかラーメン。

HomeAssistant[3] Merossスマートプラグを使う

こちらのMerossスマートプラグを購入しました!
サイバーマンデーセールで3,984円/4個でした。
4個もいらなかったかな?
とりあえず植物育成ライトのOn/Offに使用します。

スマートプラグをWifiに接続する

ここは専用アプリを使うしか無さそうです。
Merossアプリをインストール。

Meross

Meross

  • Chengdu Meross Technology Co.,Ltd.
  • ライフスタイル
  • 無料
apps.apple.com

アカウントを登録します。
メールアドレスに何も届かないのがちょっと不安。

スマートプラグWifiiPhoneを接続・経由させ、家のWifiにスマートプラグを接続します。
プラグ名は分かりやすい半角英数字がいいと思います。
私は4つあるのでPlug01としました。

特につまるところは無し。
ここでMerossアプリからOn/Offできることを確認しています。
リレー切り替えのパチパチ音が結構しますね。

Home Assisatantとスマートプラグを接続する

Home Assistant内のToggleスイッチとしてスマートプラグが使えるように設定します。

Hass.ioのアドオンにMeross製品は含まれていません。
自分で設定することにします。

LAN内から直接スマートプラグを操作するのが最も低遅延になると思われますが難航しそうです。
それほど時間にシビアな要求では無いので、IFTTTを経由させることにします。

IFTTTアカウントは取得済みであるとします。

IFTTTアップレットの作成

まず、Webhookに対してスマートプラグが応答するアップレットを作成します。

ホーム画面のGet moreから作成画面へ。
ボタンでscratchから作成します。

ThisとしてWebhooksを選択。
f:id:ikarino99:20191215210821p:plain:w250
Receive a web requestを選択。
Event NameはMerossPlug01Onとしておきます。
今回はプラグをOnにするアップレットです。
f:id:ikarino99:20191215210910p:plain:w250

ThatMerossを選択。
Merossと連携します(Merossアプリと同じメールアドレス/パスワード)。
f:id:ikarino99:20191215211059p:plain:w250
Turn onというそれっぽいものがあるので選択。
f:id:ikarino99:20191215211030p:plain:w250
自分の環境ではDevice一覧に、今回登録した名前(Plug01)が表示されるのに時間がかかりました。
f:id:ikarino99:20191215211002p:plain:w250
そして完成!

動作確認とWebhookアドレスの確認

なぜかは分かりませんが、アプリバージョンではdocumentationへのリンクが無いです。
ブラウザから以下のリンクにアクセスし、Documentationをクリックします。
https://ifttt.com/maker_webhooks

Webhookのテストページが表示されます。
{event}に今回のイベント名MerrosPlug01Onを入力し、実行します。
下の方のJSONは今回は使いません。
Test itをクリックし、動作確認を行いました。
ラグがけっこうありますが、正常に作動しています!

一番下にあるcurlコマンドが、今回のWebhookコマンドになります。
コピーしておきます。

configuration.yamlの編集

以下はIFTTTアップレットをON同様にOFFも作成したものとして進めます。

Home Assistantにswitchとして登録するため、configuration.yamlを編集します。
登録後、Home Assistantを再起動します。

switch:
  - platform: command_line
    switches:
      meross_plug01:  # ここは好きな名前で結構です。
        command_on: "curl -X POST https://maker.ifttt.com/trigger/MerossPlug01On/with/key/XXXXXXXXXXXXXXXXXXXXXX"
        command_off: "curl -X POST https://maker.ifttt.com/trigger/MerossPlug01Off/with/key/XXXXXXXXXXXXXXXXXXXXXX"

command_oncommand_offには先ほどのcurlコマンドを入力します。
将来的にgitでconfigを管理することを考えると、イベント名やkeyのべた書きは避けたいですね。
環境変数等から読み込めるようにしていきたいです。

スイッチカードの登録

Overview(状況)にカードを登録します。
左上の:=>Configure UIでOverviewを編集可能な状態にし、オレンジ色の+ボタンをクリックします。
Entityを選択し、先ほど登録したswitch.meross_plug01を選択します。
登録すると、カードが表示されるようになりました!
相変わらずラグがありますが、On/Offできるようになってます!
f:id:ikarino99:20191209181420p:plain

Automation設定

本当は照度センサーの値を元にOn/Offさせたいところですが、今回は天気予報を使うことにします。
On/Offの条件(Trigger)は以下とします。

  • スイッチをOnにする条件:9:00AMの時点でスイッチがオフかつ今日の天気が晴れでない
  • スイッチをOffにする条件:5:00PMの時点

Onが結構複雑ですね。
Offから作っていくことにします。

switchのstateとは

条件(Trigger)を設定するにあたり、Entityの取り得るstateを知る必要があります。
少なくとも現在の状態については、
左側のメニュー => Developer tools => STATESから確認できます。

switch.meross_plug01offとなっていました。
天気については、weather.homeを見ると、cloudyとなっていました。
予報(forecast)を見ると、partlycloudysunnyが見つかりました。

Automation Editor

左側のメニュー => configuration => Automationと進み、オレンジ色の+ボタンをクリックします。
この画面はAutomation Editorと呼ばれていて、Automation作成の補助をしてくれるようです。

以下の通り入力しました。
Trigger typeEntity等、選択式のところは迷わないと思いますが、AtStateは自由入力なので不安になりますね。

f:id:ikarino99:20191209183954p:plain
f:id:ikarino99:20191209184004p:plain


保存してautomation.yamlを確認すると、下記の設定が書き込まれていました。

- id: '1575884198258'
  alias: Turn off the LED grow light
  description: ''
  trigger:
  - at: '17:00'
    platform: time
  condition: []
  action:
  - condition: state
    entity_id: switch.meross_plug01
    state: 'off'

公式のexamplesを見てみると、時間は秒まで指定しているようです。
- at: '17:00:00'に修正しました。

次にOnにするAutomationについて。
こちらは結果だけお伝えします。

- id: '1575886426842'
  alias: Turn on the LED grow light
  description: ''
  trigger:
  - at: 09:00:00
    platform: time
  condition:
  - condition: state
    entity_id: switch.meross_plug01
    state: 'off'
  - condition: template
    value_template: "{{ not is_state('weather.home', 'sunny') }}"
  action:
  - condition: state
    entity_id: switch.meross_plug01
    state: 'on'

not sunnyの設定方法が分からなかったので、こちらを参考にしました。
Automation coding for 'not state' - Configuration - Home Assistant Community

templateについては、左側のメニュー => Developer tools => TEMPLATEで遊びながら勉強できます。
参考までに。