Aqara (Xiaomi) のMagic Cubeというデバイスを買いました。一辺が45mmの立方体の箱型Zigbeeセンサーです。加速度・ジャイロセンサが入っているようで、回す、転がす、振るなどのジェスチャを検出します。これをZigbee2MQTT, Homebridge経由でHomeKitに接続しました。それぞれのジェスチャを10個のスイッチボタンに割り当てることができます。
Aqara Magic Cube
Aqara Magic Cubeは、一辺が45mmの立方体のでデバイスで、転がしたり降ったりすることで機器を制御できます。Youtube動画でも時々見かけていたのでなんとなく気にはなってはいました。
こちらの記事のコメントで、Homebridgeからも使えそうなことを教えていただきましたので、Aliexpressで探してみました。 こちらから送料込み2,184円で買えるようです。
いくつかの販路があるようで、Aqara/Xiaomi Magic Cube T1 Proとか、Xiaomi CTR-R01とか、Mi/Aqara smart home cubeとか、MFCZQ12LMなどの複数の名前・型番で売られているようです。Zigbee2MQTTのページによると、
少なくともCTR-R01または MFKZQ01LMの型番の製品は、ほぼ同等の仕様のようです。
開封
いつものようにAqaraらしい、質素だけど白くて綺麗な箱で到着しました。魔方控制器と書かれてます。
控の意味あいがわからなかったのですが、繁体の表記を見たら、掌握の握の文字の略字のようでした。魔法的な立方体で握って操作する制御器具という意味ですね。
仕様が書かれている面もあります。
開けるとこんな感じです。箱が傷んでいるとか、袋がシワよっているとか、細かいことは気にしません。本体下に付属しているのは、電池カバーを開けるためにマイナスドライバー代わりに使う鉄片です。
同梱のマニュアルには、日本語のページもありました。
6面のうちの1面は、蓋が外れて、その中に電池とペアリングボタンがあります。
ハブを使う(メーカ推奨)
一応、メーカー推奨の正しい使い方を書いておきます。Magic CubeはZigbee通信する製品なので、単体ではLAN、WiFi、ネットに、スマホ、PCに接続できません。そこで、AqaraのZigbee-WiFiハブを使用します。HomeKitに接続可能なAqaraのハブには、Aqara Hub M1、Aqara Hub M2、Aqara Hub E1 などがあり、特にM2はMatterにも対応しているようです。
なので、次に説明するZigbee2MQTTやHomebridgeの設定が面倒と思われる方は、AqaraのHomeKit対応ハブを使えば、HomeKitに接続することも可能です。
ハブ不使用で直結
ここではAqaraのZigbee-WiFiハブを使わずに、いつものようにZigbee2MQTTで直接接続して使用します。
Zigbee2MQTT
ZigbeeからLANへのブリッジには、Zigbee2MQTTを使用します。スマートホームのシステムに、すでにZigbee2MQTTサーバ、MQTTブローカー (Mosquitto) 、Homebridgeが動作していて、さらにHomebridgeにZigbee2MQTTを使用するm2zプラグインが入っている必要があります。手元の環境では、これらをRaspbetty Piで動かしています。
設定の詳細は、以下をご覧ください。
Z2Mでペアリングする
Magic Cubeの電池の隣にあるLINKスイッチを5秒程度以上長押しすると、LEDが点滅開始し、Zigbeeペアリングか始まります。Zigbee2MQTTのwebインタフェースでペアリングを有効にすれば、
ペアリングが完了します。
MQTTメッセージを確認する
Zigbee2MQTTのページの記載によると、ジェスチャを検出して、その結果をMQTTメッセージでパブリッシュしているようです。mosquitto_subコマンドで確認しました。メッセージを抜粋して以下に示します。
$ mosquitto_sub -t zigbee2mqtt/cube/# -v
zigbee2mqtt/cube {"action":"wakeup","linkquality":160}
zigbee2mqtt/cube {"action":"rotate_right","action_angle":64.66,"angle":64.66,"linkquality":182}
zigbee2mqtt/cube {"action":"rotate_left","action_angle":-56.69,"angle":-56.69,"linkquality":178}
zigbee2mqtt/cube {"action":"flip90","action_from_side":0,"action_side":4,"action_to_side":4,"angle":49.1,"from_side":0,"linkquality":163,"side":4,"to_side":4}
zigbee2mqtt/cube {"action":"flip180","angle":49.1,"linkquality":185,"side":0}
zigbee2mqtt/cube {"action":"slide","angle":49.1,"linkquality":171,"side":5}
zigbee2mqtt/cube {"action":"shake","angle":49.1,"linkquality":174,"side":4}
zigbee2mqtt/cube {"action":"rotate_left","action_angle":-12.77,"angle":-12.77,"linkquality":145,"side":2}
zigbee2mqtt/cube {"action":"rotate_right","action_angle":215.13,"angle":215.13,"linkquality":145,"side":2}
zigbee2mqtt/cube {"action":"shake","angle":-13.75,"linkquality":174,"side":4}
zigbee2mqtt/cube {"action":"fall","angle":-13.75,"linkquality":189,"side":4}
識別されるジェスチャには、それぞれactionで示された名前が付けられているようです。Zigbee2MQTTのページによると、actionキーに現れる認識ジェスチャは以下の10種類です。ただ、tapとthrowは、何度か試したのですが再現しない・機能しない様子でした。
- flip90 90度回転(側面が上になる)
- flip180 180度回転(底面が上になる)
- fall 落とす
- shake 振る
- slide 机上でスライドする
- tap タップする?(机に当てるような動作でたまに識別される)
- throw 投げる?(識別されない)
- wakeup しばらく放置した後で動かす
- rotate_left 机上で右に回す
- rotate_right 机上で左に回す
このうちslide, rotate_left, rotate_rightは、水平面に置いた状態でのジェスチャです。空中で行うとこのジェスチャにはなりません。
また、回転ジェスチャでは回転した角度が、rotate以外のジェスチャでは、上面になっている面の番号(0から5)などの情報も得られます。後で述べるように、これらはHomeKitから利用できませんでした。PythonなどでMQTTメッセージを読むプログラムを組めば、アナログ値や面の向きを使用した多彩なジェスチャを利用できると思います。
Zigbee2MQTTの起動メッセージ
追記:その後、Homebridgeのログに、Zigbee2MQTTの起動メッセージが流れているのに気づきました。ここで確認したマッピングが表示されていたようです。(2023/06/27)
[27/06/2023, 19:59:36] [zigbee2mqtt] Mapping of property 'action' of device 'cube': Button 1 (flip90): - SINGLE: flip90 Button 2 (flip180): - SINGLE: flip180 Button 3 (fall): - SINGLE: fall Button 4 (shake): - SINGLE: shake Button 5 (slide): - SINGLE: slide Button 6 (tap): - SINGLE: tap Button 7 (throw): - SINGLE: throw Button 8 (wakeup): - SINGLE: wakeup Button 9 (rotate_left): - SINGLE: rotate_left Button 10 (rotate_right): - SINGLE: rotate_right
HomeKitから使う
Zigbee2MQTTのペアリングが終われば、z2mプラグインにより、HomeKitにスイッチが現れます。同時に気温センサも現れます。実は温度センサを内蔵しているようです。名前の初期値はZigbee IDですが、以下では、cubeという名前に変更しています。
スイッチの詳細を開くと、ボタンが10個あるスイッチと認識されています。上記の10種類のジェスチャが、z2mプラグインの働きで10個のボタンに割り当てられています。
それぞれのボタンに、手持ちのNanoleaf電球をonするアクションを順番に設定して、割り当てジェスチャを調べました。その結果、ボタンの番号とジェスチャの関係は、次のようになってました。ジェスチャ認識されないtapとthrowに関しては、mosquitto_pubコマンドで試しました。
- flip90 90度回転(側面が上になる)
- flip180 180度回転(底面が上になる)
- fall 落とす(投げ上げて受け取ることも可)
- shake 振る
- slide 机上でスライドする
- tap タップする?(机に当てるような動作でたまに識別される)
- throw 投げる?(識別されない)
- wakeup しばらく放置した後で動かす
- rotate_left 机上で右に回す
- rotate_right 机上で左に回す
これで、それぞれのジェスチャにボタンを割り当てることができます。例えば9番ボタンに電球Onを、10番ボタンに電球Offを割り当てておけば、cubeを机の上で右に回すとOn, 左に回すとOffできます。4番ボタンに部屋の照明全てのOffを割り当てておけば、cubeを振ることで照明を消せます。8番ボタンが割り当てられたwakeupジェスチャは、放置されたcubeに手探りで触れた時に、照明を点灯させる用途に適用可能と思います。
HomebridgeとHomeKitの組み合わせでは、どの面が上であるかを利用したり、回転により明るさや音量を変化させるなどの機能を実現できません。最初に紹介したYoutubeビデオでは、Home Assistantを使ってこれらの機能を実現しています。このような機能を利用したい場合は、Home Assistantに移行すべきかもしれません。
まとめ
Aqara/Xiaomiから出ているMabic Cubeを、Zigbee2MQTTにペアリングしてHomebridge経由でHomeKitから使いました。基本的なジェスチャがスイッチのボタンに割り当てられます。100%確実にジェスチャ認識されるわけでもありませんし、ジェスチャを使う用途もあまり無い気もします。でも手応えのある物体を動かして操作するタンジブルな感覚は新鮮で面白いです。
コメント