Zigbee方式のスマート赤外線リモコン

3.0
非対応品を使う

AliExpressでZigbee方式のMeosスマート赤外線リモコンを買いました。これです。

Zigbee2MQTTでサポートされていて、HomeKitからも使用できました。ただし学習能力に課題があるようで、学習してくれないリモコンパターンが多いです。リモコンパターンらしきデータをMQTTで送受信しているのですが、そのフォーマットが判明したらもう少し活用できそうに思いました。

外観

AliExpressの商品としてはそこそこ高価格なので(2,119円送料無料でした)、外観も高級感があります。全体の形状は、小さなMac miniみたいです。裏蓋もMac miniのようになっていて、回すと外せます。この中に、単4電池を2本入れます。Zigbee動作なので、電池は持ちそうです。

学習と再生機能

こちらで説明されているように、MQTT経由での操作は割と単純です。Zigbeeブローカーからのメッセージで、学習モードをonにできます。赤外線リモコンからのパターンが読めると、Zigbeeにパターン情報が流されます。そのパターンをZigbeeメッセージとして流せば、赤外線信号が発信されます。それぞれのメッセージは以下です。

  1. learn_ir_codeメッセージで学習モードをon/offする
  2. ir_code_to_sendメッセージで取得したパターンを送出する

例えば、zigbee2mqtt/FRIENDLY_NAME/setトピックスに、(FRIEMDLY_NAMEはデバイスのID)

{"learn_ir_code":"ON"}

を流すと学習モードになります。学習に成功すると、zigbee2mqtt/FRIENDLY_NAMEトピックに

{"battery":100,"learned_ir_code":"D7UNtQ2SA3YKQQOSA0EDdgpABQNBA3YK4AMDAJIgDwOSA5IDgBPABwF2CuABA0ATQANAEwFBA0AJAUEDQAUAkmABQAeAAwF2CkAJAUEDQAXgAQMNtQ21DUEDdgpBA5IDQQPgAwdAC+ADA+AQHwIKWgI=","linkquality":138,"voltage":1500}

のように結果がメッセージとして流されます。learned_ir_codeの部分が、学習された赤外線パターンです。文字の羅列から推測するにBASE64フォーマットのデータのようです。

この赤外線パターンを送出させるためには、zigbee2mqtt/FRIENDLY_NAME/setトピックスに、

{"ir_code_to_send": "D7UNtQ2SA3YKQQOSA0EDdgpABQNBA3YK4AMDAJIgDwOSA5IDgBPABwF2CuABA0ATQANAEwFBA0AJAUEDQAUAkmABQAeAAwF2CkAJAUEDQAXgAQMNtQ21DUEDdgpBA5IDQQPgAwdAC+ADA+AQHwIKWgI="}

を流します。

ちなみに、学習モードの操作は、Zigbee2MQTTのwebインタフェースからも実行可能です。以下のように、赤外線パターンが取得できます。

LED照明リモコンは学習失敗

最近のリモコンならば学習できるのですが、少し外れた規格のリモコンは学習できなかったり、学習が不十分だったりしました。学習出来なかった例が、天井照明LEDのリモコンでした。Amazonで昔販売されていた照明器具で、以下のような単純なリモコンです。

これの赤外線パターンは、こんなデータです。赤外線のonとoffの持続時間をマイクロ秒で記述した配列です。

[6830,4629,283,573,283,1409,286,569,286,1426,259,573,291,1399,259,597,283,1409,258,597,285,1408,282,573,281,579,285,1401,280,1407,283,1405,281,1409,310]

グラフにすると以下のようになります。

これは学習出来ませんでした。onとoffの比率が特殊だったのかもしれません。

古いエアコンのリモコンはとりあえず動作

ものすごく古いエアコンのリモコンを試したところ、なんとか動作する程度には学習出来ました。こんなタイプのリモコンです。

このリモコンの赤外線パターンは以下のようになってます。

前半部分と、後半部分に分かれています。色々試したところ、前半部分は、冷暖房の動作モード、温度設定、風量設定などの基本操作で、後半部分はタイマー関係の設定でした。また、前半部分、後半部分のどちらも、同じ内容のパターンが2回繰り返されていることがわかります。

このパターンをこのZigbeeスマートリモコンで学習させ、その再生信号をRaspberry Piに取り付けた赤外線受信モジュールで取得したところ、以下のようなパターンでした。

前半部分の途中で学習を放棄している感じです。前半部分の3/4くらいは学習出来てます。前半部分も後半部分も、同じデータを2回繰り返していましたので、前半部分のデータはなんとか取得できているようです。これをエアコンに流したところ、これだけでも動作しました。冗長な部分が足りなくても、動作してくれるようです。

数値で表すと、元々のエアコンのパターンは以下のようだったのですが、

[3475, 3510, 857, 2637, 852, 895, 851, 2640, 854, 894, 850, 2641, 852, 2641, 854, 2640, 851, 2640, 855, 2638, 856, 892, 852, 2639, 854, 894, 852, 2640, 854, 2639, 854, 2638, 852, 2642, 853, 895, 854, 892, 852, 2640, 854, 893, 855, 891, 853, 894, 855, 892, 853, 892, 855, 891, 854, 894, 855, 2637, 854, 893, 856, 890, 855, 890, 856, 891, 855, 892, 3480, 3506, 856, 2635, 855, 893, 855, 2638, 856, 891, 855, 2636, 856, 2638, 855, 2637, 859, 2634, 857, 2636, 858, 890, 858, 2635, 857, 889, 856, 2637, 856, 2635, 858, 2636, 857, 2635, 857, 892, 854, 891, 856, 2637, 856, 891, 854, 893, 855, 890, 853, 893, 855, 892, 856, 890, 855, 892, 855, 2637, 854, 894, 854, 891, 857, 892, 852, 892, 857, 890, 3478, 3508, 855, 13990, 3477, 3508, 858, 891, 853, 894, 853, 893, 852, 894, 852, 894, 854, 894, 851, 895, 853, 893, 854, 893, 853, 894, 850, 896, 852, 896, 852, 895, 850, 896, 854, 894, 826, 921, 851, 895, 851, 2640, 854, 2639, 852, 895, 851, 2639, 855, 2638, 854, 895, 850, 897, 850, 896, 854, 2637, 854, 2641, 854, 893, 854, 2638, 849, 2643, 854, 893, 852, 896, 3474, 3511, 854, 894, 853, 894, 851, 895, 852, 895, 852, 894, 853, 893, 856, 891, 854, 892, 852, 895, 855, 891, 826, 921, 853, 894, 854, 894, 853, 892, 855, 892, 854, 892, 854, 892, 856, 2637, 854, 2639, 854, 893, 856, 2635, 857, 2637, 855, 893, 852, 893, 857, 891, 855, 2635, 855, 2638, 855, 894, 854, 2636, 856, 2638, 855, 893, 854, 892, 3478, 3505, 856]

実際に取得できたのは以下でした。

[3505, 3538, 896, 2707, 813, 975, 818, 2706, 864, 916, 782, 2741, 760, 2748, 818, 2679, 821, 2682, 891, 2713, 924, 940, 782, 2731, 812, 983, 781, 2733, 793, 2716, 819, 2687, 790, 2700, 795, 977, 782, 976, 811, 2736, 783, 914, 865, 867, 819, 947, 846, 950, 866, 947, 839, 949, 783, 977, 811, 2731, 865, 867, 817, 950, 820, 978, 782, 977, 845, 947, 3503, 3542, 784, 2733, 783, 1003, 782, 2731, 784, 1047, 792, 2700, 818, 2683, 759, 2749, 817, 2676, 816, 2682, 794, 979, 843, 2679, 821, 955, 784, 2734, 805, 2706, 818, 2682, 816, 2685, 634]

フォーマットが謎

上記のパターンを発生させるためには、zigbee2mqtt/FRIENDLY_NAME/setトピックスに、以下のメッセージを流します。

{"ir_code_to_send": "D7UNtQ2SA3YKQQOSA0EDdgpABQNBA3YK4AMDAJIgDwOSA5IDgBPABwF2CuABA0ATQANAEwFBA0AJAUEDQAUAkmABQAeAAwF2CkAJAUEDQAXgAQMNtQ21DUEDdgpBA5IDQQPgAwdAC+ADA+AQHwIKWgI="}

BASE64のデータだと推測されるのですが、デコードしても上記のパターンにはなってませんでした。

% echo -n D7UNtQ2SA3YKQQOSA0EDdgpABQNBA3YK4AMDAJIgDwOSA5IDgBPABwF2CuABA0ATQANAEwFBA0AJAUEDQAUAkmABQAeAAwF2CkAJAUEDQAXgAQMNtQ21DUEDdgpBA5IDQQPgAwdAC+ADA+AQHwIKWgI= | base64 -D | hexdump
0000000 b50f b50d 920d 7603 410a 9203 4103 7603
0000010 400a 0305 0341 0a76 03e0 0003 2092 030f
0000020 0392 0392 1380 07c0 7601 e00a 0301 1340
0000030 0340 1340 4101 4003 0109 0341 0540 9200
0000040 0160 0740 0380 7601 400a 0109 0341 0540
0000050 01e0 0d03 0db5 0db5 0341 0a76 0341 0392
0000060 0341 03e0 4007 e00b 0303 10e0 021f 5a0a
0000070 0002
0000071

何らかの処理がされているようです。これが判明すれば、自在な赤外線パターンを指定できるので、色々と活用できると思われます。どなたか情報をご存知でしたらよろしくお願いします。

MQTTThingプラグインで設定

上記の赤外線パターンをHomeKitから発信するには、以下のようにHomebridgeを設定します。

{
  "type": "switch",
  "name": "エアコン",
  "topics": {
    "setOn": "zigbee2mqtt/FRIENDLY_NAME/set"
  },
  "onValue": "{\"ir_code_to_send\": \"D7UNtQ2SA3YKQQOSA0EDdgpABQNBA3YK4AMDAJIgDwOSA5IDgBPABwF2CuABA0ATQANAEwFBA0AJAUEDQAUAkmABQAeAAwF2CkAJAUEDQAXgAQMNtQ21DUEDdgpBA5IDQQPgAwdAC+ADA+AQHwIKWgI=\"}",
  "accessory": "mqttthing"
}

スイッチアクセサリを作って、onで上記のメッセージを流すように設定しました。これでとりあえずはエアコンの電源を入れられるようになりました。

まとめ

Zigbee接続のスマート赤外線リモコンデバイスを使いました。本来は、Zuyaのアプリで動作する製品です。でも、Zigbee2MQTTで操作でき、リモコンの学習と再生ができました。Homebridgeからも使えます。

ただ、Zigbee2MQTTから使う限りでは、学習機能が限られている様子です。Zuyaアプリで正しく使えば、もしかしたら完璧なのかもしれません。BASE64のフォーマットがわかると、Homebridge, Home Assistantからもっと活用できそうな気がしました。

コメント

タイトルとURLをコピーしました