Sympapaのスマートホーム日記

スマートなんとかはスマートじゃない方法でつくられている

Home Assistant: ECHONETLite2mqttの更新

Sympapaです。

Home AssistantからECHONETLite対応家電を操作するのにEchonet2mqttを使用させていただいています。
github.com
(Home Assistantのカスタムインテグレーションであるこちらも使用させていただいてますが一長一短なので現状は両方使用させていただいています。)
Echonet2mqttはHome AssistantのアドオンやカスタムコンポーネントではないのですがECHONETLiteをMQTTに変換してくれるもので、MQTT経由でHome AssistantとECHONETLiteを繋いでくれます。


便利に使わせていただいているのですが、シャープのエアコンの場合はエアコンが測定した室温を取得出来ない問題がありました。
しかし1ヶ月ほど前にこの問題に対処できる(?)更新がされていたようです。


私はHome Assistantを動かしているのとは別のRaspberry PI 4のDocker上でEchonet2mqttを動かしているのですが、Dockerの仕組みをさっぱり理解しておらず、Dockerでインストールしたものを更新するのは初めて。。。(汗)
更新方法をメモるだけの記事になりそうですが、どうやって更新されたEchonet2mqttをインストールするのかもよーわからんので、備忘録を兼ねて書いておきます。

■古いバージョンの後始末

上書きインストールする方法があるのかもしれませんがさっぱりDockerのことが解っていないので、まず古いバージョンを消すことにしました。


1. 古いバージョンのEchonet2mqttを停止する
1-1. 稼働中のDockerコンテナのID確認

docker ps

1-2. 稼働中のコンテナを停止する

docker stop コンテナID


2.コンテナを削除する
気が付いたら停止したEchonet2mqttのコンテナがかなりたくさんありました。
停止中のコンテナを一括削除するコマンドで削除します。

docker container prune


3.イメージを削除する
3-1. イメージIDを確認する

docker images

3-2. イメージを消す

docker rmi イメージID


4.ディレクトリを削除する
ここまででgit cloneしたら”fatal: destination path 'echonetlite2mqtt' already exists and is not an empty directory."だと怒られました。
なので古いバージョンのechonetlite2mqttで使用していたディレクトリを下記のコマンドで削除します。
(ひょっとしたら先にコンテナやイメージを消してなくてもディレクトリ削除でいける?)

rm -rvf echonetlite2mqtt

■インストールする

古いバージョンは消去したので普通にインストールします。


1. git cloneする

git clone https://github.com/banban525/echonetlite2mqtt.git


2. echonetlite2mqttディレクトリへ移動する。

cd echonetlite2mqtt


3. ビルドする

docker build ./ -t echonetlite2mqtt

■実行する

MQTTブローカーにパスワード認証が設定されていない場合は下のコマンドで起動します。

docker run -d --net=host -e MQTT_BROKER="mqtt://192.xxx.xx.xx:1883" echonetlite2mqtt 


MQTTブローカーにパスワード認証が設定されている場合は下記のとおり起動します。
1)どこかにconfig.jsonファイルを作る。

{
  "port": 1883,
  "username": "your-username",
  "password": "your-password"
}

2)下のコマンドで起動する。

docker run -d --net=host -v /xxxxx/config.json:/app/config/config.json -e MQTT_OPTION_FILE=/app/config/config.json -e MQTT_BROKER="mqtt://your.mqtt.brocker" echonetlite2mqtt


Home Assistant側の設定はこちらの記事に書いてます。
sympapa.hatenablog.com

■更新後どうなった?

更新後もシャープのエアコンでは自動的に室温を取得してくれません。


と思いきや、Echonetlite2mqttのWeb画面にアクセスすると各項目に"Reload Value"のボタンが追加されていました。
室温の項目の"Reload Value"を押せば室温が取得出来ます。
そして、MQTTトピックを送信して"Reload Value"を要求する機能が追加されてました。
たとえば室温であれば下記のMQTTトピックを送信することで室温が更新されます。

echonetlite2mqtt/elapi/v1/devices/fe00-your-device-id-00000000000000/properties/roomTemperature/request


Home Assistantのオートメーションで15秒毎に室温の"Reload Value"をリクエストするするようにしました。
15秒毎ではありますが実質的にはこれで自動的に室温を取得できるようになりました。

alias: Echonetlite2mqtt_auto_reload
description: ''
trigger:
  - platform: time_pattern
    seconds: /15
condition: []
action:
  - service: mqtt.publish
    data:
      topic: >-
        echonetlite2mqtt/elapi/v1/devices/fe00-your-device-id-00000000000000/properties/roomTemperature/request
mode: single

■まとめ

特にまとめることはありませんが、これでHome AssistantとEchonet Liteの連携はほぼカンペキになったように思います(^^
それでは。