※当ブログではアフィリエイト広告を利用しています
我が家にはPanasonicのエアコン(エオリア)が3台あり、これをiOSのHomeアプリ経由で操作したいと考えていました。
調べてみると、「Nature Remo」や「SwitchBot」などを使って赤外線リモコン経由で実現しているケースが多いようですね。
しかし、エオリアには無線LANが内蔵されており、専用アプリ経由でも操作できる仕組みとなっています。わざわざ赤外線リモコンを使うのはイケてないと思い、なんとかネットワーク経由で操作したいと考えました。
色々と調べた結果、Echonet Liteというプロトコルを使って既存のものを参考にしながらプラグインを作ったので紹介したいと思います!
目次
SwitchBot Hubは使ってるのですがあまり詳しくないので間違ったこと言ってたらごめんなさい。
我が家だと3箇所にエアコンが設置されています。Nature Remoの場合、部屋のそれぞれに送信機を設置する必要があるはずです。
エアコン以外に赤外線リモコンを使うデバイスが無いため、エアコンを操作するためだけに3台も購入するのはちょっとなーと思っていました。
Homeアプリで操作したりエアコンのリモコンで操作したりすると、アプリ側の状態表示が食い違ってしまうのではと思います。以下のようなケースです。
- Homeアプリでエアコンをオン
- エアコンのリモコンでエアコンをオフ
エアコンへ直接アクセスすることはないはずなので、外部要因によって状態が変化したときに正しい表示とはならないような気がします。
実際に使ってないので何ともですが、アプリだけ使って操作するようにすれば問題にはならないのかもしれません。
また、Homeアプリのエアコンには「現在の部屋の温度」を表示する部分があります。
エアコン内部のセンサーが取得した値を表示したいところですが、赤外線リモコン経由だとこの値は取得できないはずです。
Nature Remoの場合、本体に温度センサーがあるので、Cloud経由でその値を取得すれば良さそうですね。
ということで、赤外線リモコンではなくどうにかしてネットワーク経由でエアコンを操作したいところです。
アプリ経由で操作できることは分かっているので、アプリのパケット解析してそれを再現するプラグインを作ればよいのでは?と思ったらやはり先駆者がいました。
英語なのでざっくり要約すると、
「API制限にすぐ引っかかってしまうのでボツ!でもEchonet Liteを使ったらうまく行ったよ!」
ん?Echonet Liteってなんだ?
ECHONET Liteは、センサ類、白物家電、設備系機器など省リソースの機器をIoT化し、エネルギーマネジメントやリモートメンテナンスなどのサービスを実現するための通信仕様です。通信仕様や各機器の制御コマンドを共通化することで、マルチベンダー環境でのシステム構築を実現します。
スマートハウスを実現するための各社共通の通信仕様とのことです。エアコンだけでなく、給湯器、冷蔵庫、空気清浄機など様々な設備を操作するためのプロトコルが定義されています。エオリアもバッチリ対応していました。こんな裏機能知らなかった・・・
Echonetをキーワードに入れることで色々と情報が出てきました。
Node.jsでEchonet Lite通信を行うためのライブラリ。これを使えば自宅のエアコンに関する情報の取得・操作ができるようになります。
また、HomeBridgeでEchonet Liteで操作するプラグインもありました。
ただ、私の環境ではそのままでは使えなかったため、参考にしながら新しくプラグインを開発することにしました。
エアコンに関するプロパティ値は仕様書を見ながら、エアコンへリクエストを投げて値を確認。
必須のプロパティ値は当然入っているとして、オプション値はnullが返ってくるものもあるので使いたいプロパティがある場合は確認が必要です。
エオリアの場合、「冷房設定時の設定温度(0xB5)」「暖房設定時の設定温度(0xB6)」はNullで返ってきたため、HomeKit側の「CoolingThresholdTemperature」「HeatingThresholdTemperature」には「設定温度(0xB3)」をセットするようにしました。
作成したのがこちらです。まだReadMe書けてませんが、入れれば設定もなく即使えるはずなので・・・
HomeBridge UIからは、「eolia」で検索すると出てきます。
このプラグインは、同一ネットワーク内にあるエアコンを自動検出して追加します。ので、IPアドレスなどオプションを入れる必要はありません。
リモコンで操作してもその情報がすぐに反映されるようになっています。Echonet Liteだと状態が変更されるとブロードキャストでパケットを飛ばしているようで、これを拾っています。
(8/24 追記・修正)
Echonet Liteの仕組み上、一回の通信で取得することはできず、「現在温度」「稼働状態」「設定温度」など複数のリクエストを同じエアコンに同時に投げるとエラーが返ってきてしまいます。
これを回避するため、キューイングの仕組みを入れて同時アクセスが発生しないようにしました。
今回Typescriptは初めてでしたが、見様見真似でなんとか作成することができました。自分の理想の機能がほぼ実現できているので満足です。
他社メーカー製のエアコンでもある程度は動くと思いますが、動かない場合はForkするなりプルリクするなりで対応してみてください。
こちらの素晴らしいパッケージを開発していただき、ありがとうございます。2週間前からこのプラグインを使用し始め、HOOBで素晴らしく動作しています。しかし、多くのエラーが発生し、HOOBを頻繁に再起動する必要があります。そのため、直接Homebridgeにインストールすることにしましたが、エアコンが全く検出されません。ご支援いただけると幸いです。よろしくお願いします。
どうぞよろしくお願いいたします。