住宅設備家電(エアコン、電動シャッター、玄関電気錠)をHome Assistantでスマート化したい

# はじめに

(この記事の続きはこちらになります。ここで紹介したECHONETLite2MQTTもver.2.0.0になりました)

https://qiita.com/banban525/items/520caead4f5f8dbb9ced


皆さん、コロナ禍で自宅に籠っている中、自宅のスマートホーム化に取り組んでいるのではないでしょうか？
私も [Home Assistant](https://www.home-assistant.io/) に出会ってから、赤外線リモコンハブ、温湿度計、電動カーテンと、いろいろ導入してきました。
さらなるスマート化に向けてリフォームまで計画していて、ふと気づきます。

**日本の住宅設備家電が、スマート化できない**

いろいろ調べてみると、住宅家電は [ECHONET Lite](https://echonet.jp/) という規格に準拠しているようですが、
この ECHONET Lite がびっくりするくらい流行っていません。

しかし機種にもよりますが、次のような機器が ECHONET Lite に対応しているようです。

* エアコン
* 電動シャッター
* 玄関電気錠
* 電気給湯器
* 分電盤
* 壁スイッチ

ということは、ECHONET Liteが使えれば、さらなるスマートホーム化が進められる！
幸い、ECHONET Liteは [仕様](https://echonet.jp/spec_g/#standard-05) がいろいろ公開されています。
無いなら作ろうということで、自作してみました。

## 先に既存のプロダクトを調べてみる

自分で作らずに、既存のものが使えればそれに越したことはありません。
ググった感じだと、以下がありそうでした。

* [ECHONETLite Platform Custom Component for Home Assistant](https://github.com/scottyphillips/echonetlite_homeassistant) <br/>
  なぜか私の環境では動作せず。また対応機器はエアコンとセンサーくらい？
* [ECHONET Lite - MQTT変換システム「Clotho For ECHONET Lite」](https://www.redhat.com/ja/about/press-releases/rhjapan-grapesystem-and-red-hat-collaborate-echonet-lite-mqtt-conversion-system)<br/>
  2015年に発表があったようですが、その後の消息は不明です。
 
やはり、流行っていないためか、いまいちのようです。


# 作ったもの

ECHONETLite2mqtt として、GitHubに公開しています。


https://github.com/banban525/echonetlite2mqtt

仕組みとしては、ECHONET LiteのデバイスのステータスをMQTTにPublishし、またMQTT経由できた命令をECHONET Lite側に送るようになっています。

![topimage.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217768/7f984464-1279-f262-ceda-2a152cdecef8.jpeg)


Home Assistantは [MQTTと連携したカスタムデバイス](https://www.home-assistant.io/integrations/climate.mqtt/) を作ることができるのでこれでECHONET LiteデバイスをHome Assistantから制御できます。
また、Node-REDやHomebridgeもMQTTに対応しているようなので、私は使ったことがありませんが、対応できるかも？


# 動作デモ

## エアコン

リフォーム前の自宅で唯一のECHONET Lite対応デバイスである、三菱エアコン [MSZ-X255-W](https://www.mitsubishielectric.co.jp/ldg/wink/ssl/displayProduct.do?pid=251963&ccd=1040105711) です。
割と古い機種ですが、 [MAC-900IF](https://www.mitsubishielectric.co.jp/ldg/wink/ssl/displayProduct.do?pid=310070) という無線LAN通信装置を増設することでECHONET Lite対応できました。

![demo1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217768/b20ec15e-b9a1-b690-7967-c3dc604baf01.gif)

左側がHome Assistantのエアコンコントロール、右側が実際に動作しているところです。
Home Assistantから暖房を付けたり温度設定をしたりしつつ、リモコン操作の結果もちゃんとHome Assistant側にフィードバックされます。
このエアコンは、動作モードと設定温度、温度計測値の他にも、風向や風量も制御できそうですが、そこまでは不要なのでHome Assistant側で作りこんでいません。ただMQTTとしては公開しているので頑張ればできるはずです。

Home Assistantでの設定の見本はこちらです。
"fe00-your-device-id-00000000000000"の部分は、手持ちのデバイスのIDを指定してください。
(デバイスIDはECHONETLite2mqtt のWeb画面からも確認できます)

```
climate:
  - platform: mqtt
    name: エアコン2
    icon: mdi:air-conditioner
    modes:
      - "off"
      - "cool"
      - "heat"
      - "dry"
    mode_command_template: >-
      {% set values = { 'off':'off', 'cool':'cooling',  'heat':'heating', 'dry':'dehumidification'} %}
      {{ values[value] if value in values.keys() else 'off' }}
    payload_on: "true"
    payload_off: "false"
    power_command_topic: "echonetlite2mqtt/elapi/v1/devices/fe00-your-device-id-00000000000000/properties/operationStatus/set"
    mode_command_topic: "echonetlite2mqtt/elapi/v1/devices/fe00-your-device-id-00000000000000/properties/operationMode/set"
    temperature_state_topic: "echonetlite2mqtt/elapi/v1/devices/fe00-your-device-id-00000000000000/properties/targetTemperature"
    temperature_command_topic: "echonetlite2mqtt/elapi/v1/devices/fe00-your-device-id-00000000000000/properties/targetTemperature/set"
    current_temperature_topic: "echonetlite2mqtt/elapi/v1/devices/fe00-your-device-id-00000000000000/properties/roomTemperature"
    mode_state_topic: "echonetlite2mqtt/elapi/v1/devices/fe00-your-device-id-00000000000000/properties"
    mode_state_template: >-
      {% if value_json.operationStatus == false %}
        off
      {% else %}
        {% set values = { 'off':'off', 'cooling':'cool',  'heating':'heat', 'dehumidification':'dry'} %}
        {{ values[value_json.operationMode] if value_json.operationMode in values.keys() else 'off' }}
      {% endif %}
```


## 電動シャッター(シミュレーター)

リフォーム予定では、Lixilのスマート電動シャッターを [変換アダプタ](https://cextension.jp/tostem_p/manual.asp?cat_id=MAL583)を使ってECHONET Lite対応する予定です。
リフォーム前の現時点では操作対象がないので、シミュレーターを自作しました。

https://github.com/banban525/echonet-lite-kaden-emulator

シミュレーターは規格に準拠しているつもりですが、細かいところに差があるかも？
とりあえず実機が来たら調整するとして、このシミュレーターもHome Assistantから制御できています。

![demo3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217768/338bd308-8780-b072-ef87-5a80385b54a9.gif)
左側のHome Assistantでシャッターの開閉ができますし、実機でも操作できます。


Home Assistantでの設定見本はこちらです。
エアコンと同じように"fe00-your-device-id-00000000000000"の部分は、手持ちのデバイスのIDを指定してください。

```
cover:
  - platform: mqtt
    command_topic: "echonetlite2mqtt/elapi/v1/devices/fe00-your-device-id-00000000000000/properties/openCloseOperation/set"
    device_class: shutter
    name: shutter1
    payload_close: "close"
    payload_open: "open"
    payload_stop: "stop"
    state_closed: "fullyClosed"
    state_closing: "closing"
    state_open: "fullyOpen"
    state_opening: "opening"
    state_stopped: "stoppedHalfway"
    state_topic: "echonetlite2mqtt/elapi/v1/devices/fe00-your-device-id-00000000000000/properties/openCloseStatus"
```


## 玄関電気錠(シミュレーター)

最近は、玄関のロックも電動化しているんですね。
ただ、ECHONET Liteには電動玄関ドアの規格がありますが、市販の電気錠はまだ対応していないようです。
電気錠とインターフォンを連動させるJEM-A規格というものがあり、これは [IP/JEM-A変換アダプター](https://av.jpn.support.panasonic.com/support/pvjcontroller/product/hf_ja1_w.html) でECHONET Liteで制御できるようです。
ということで、こちらもシミュレーターで対応。

![demo4.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217768/5ce63135-dc3b-825a-d3ad-df2c84152ae9.gif)

左側がHome Assistantで、施錠/開錠がボタンで操作可能です。また見にくいですが、左側のHome Assistantのアイコンも施錠/開錠で変わっています。
もちろん、右側の実機でも操作可能です。


Home Assistantでの設定見本はこちらです。
こちらもエアコンと同じように"fe00-your-device-id-00000000000000"の部分は、手持ちのデバイスのIDを指定してください。

```
lock:
  - platform: mqtt
    name: Frontdoor-lock
    state_topic: "echonetlite2mqtt/elapi/v1/devices/fe00-your-device-id-00000000000000/properties/operationStatus"
    command_topic: "echonetlite2mqtt/elapi/v1/devices/fe00-your-device-id-00000000000000/properties/operationStatus/set"
    payload_lock: "false"
    payload_unlock: "true"
    state_locked: "false"
    state_unlocked: "true"
    optimistic: false
    qos: 1
    retain: true
```

# せっかくなので中身の解説を少々

ECHONET Lite周りは、Node.js用の [echonet-lite](https://www.npmjs.com/package/echonet-lite)パッケージを利用しています。
GitHubを見ると、まだちゃんと更新されているようだったので。
また、ECHONET LiteからJSONの形に変換していますが、これは、 [ECHONET Lite Web API ガイドライン](https://echonet.jp/web_api/#guideline) にJSONのスキーマ―が公開されていましたので、これを利用しています。
完全ではないですが、できるだけ近い形にしています。

実機でないと細かい仕様がわからない点はありましたが、仕様書がちゃんとあるので、手間がかかっただけでそれほど難しくはなかったです。

# 今後の予定

動作を優先させたのでコードは割と汚いです。まずはリファクタリングしたい・・・。

自宅のリフォーム予定としては、エコキュート(電気給湯器)と分電盤もスマート化する予定なので、こちらも対応する予定です。
また、エアコンをECHONET Liteで制御してわかったのですが、やはりエアコンはリモコンのほうが高機能ですね。
たとえば、「風よけ」とか「不在時自動OFF」はリモコンで電源を入れた場合だけ、「内部クリーン」はリモコンで電源を切った場合だけ動作するようです。
ということは、エアコンのON/OFFだけは赤外線ハブを使って動作させ、その後にHome Assistant側の温度設定や風向、風量で上書きするようにすれば良さそうです。
実現性はありそうなので、今後対応する予定です。

それでは皆さん、よいスマートホームライフを。