HomeKitのドアベルアクセサリをIKEAのショートカットボタンで作りました。HomePodからピンポン音が流れるので、何かの呼び出しボタンとして使えます。
HomePodドアベルチャイムの謎
ホーム.app
に表示されるHomePod
の文字部分をクリックしてメニューを開くと、「ドアベルチャイム」という項目があります。
これは何の設定だろうと長らく不思議に思ってました。クリックするとon/offできるスイッチがあります。デフォルトではonになってました。
初期設定では、HomePod miniが「ドアベルチャイム」として機能しているようです。これな何なのでしょう?
ドアベルアクセサリを作ってみる
HomeKitには、ドアベルという名前のアクセサリがあります。ドアベルは玄関ドアに取り付ける呼び鈴スイッチのことです。押すとピ〜ンポ〜ンって鳴る押しボタンスイッチです。
Mqttthingでの設定方法を調べる
ドアベルアクセサリは、Mqttthingでも実装されています。
そこで、Mqttthingの設定だけをHomebridgeに書き込んで、ダミーのドアベルアクセサリを作ってみることにしました。ダミーなので物理的にドアベルが存在するわけではありませが、HomeKitからは実際にドアベルがあるように見えます。MQTTメッセージには反応するので、mosquitto_pubコマンドなどを使ってメッセージを流して、作動させることが可能です。
上記の説明の設定方法から、省略できるオプションを除くと、以下のような設定になります。MQTTブローカーがlocalhostで動いている場合の例で、MQTTブローカーのURLも省略してます。
{
"accessory": "mqttthing",
"type": "doorbell",
"name": "<ドアベルの名前>",
"topics":
{
"getSwitch": "<スイッチの状態が流れるトピックを指定>",
"getMotionDetected": "<動きがある場合にtrue/falseが流れるトピックを指定>"
},
"switchValues": "<スイッチの状態を配列で指定、デフォルトは["1", "2", "L"]>"
}
getSwitchで、スイッチの状態がメッセージとして流れるトピックを指定します。スイッチの状態というのは、「シングルクリック」「ダブルクリック」「長押し」で、デフォルトではそれぞれ”1″, “2”, “L”という文字です。デフォルト以外の文字を使いたい場合は、switchValuesでそれぞれに対応する文字を指定します。ただ、mosquitto_pubコマンドで実際に文字列を流してみたところ、「シングルクリック」「ダブルクリック」「長押し」のいずれも、単にピンポンが鳴るだけでした。区別はないようです。
getMotionDetectedでは、動きセンサが搭載されている場合に、その検出結果が流れるトピックを指定します。Mqttthingの説明では、オプションなので省略しても良いと書かれていました。しかし省略したところ非対応なアクセサリの扱いになってしまいました。必須のようです。
この設定を保存しても、ホーム.app画面には何も現れません。ユーザが操作したり、オートメーションを組んだりする対象になってないからのようです。ただ、モーションセンサの項目には追加されてます。これをトリガーとしたオートメーションは組めるようです。
メイン機能の押しボタンは、HomePod専用機能のようです。
IKEAのZigbee押しボタンを使う
このMqttthingの設定に合わせたドアベルデバイスのようなものを、実際に作ってみようと思います。ESP32にスイッチを取り付けて、MQTTメッセージを出させても良いのですが、今回は手元にあるデバイスを流用します。MQTTメッセージを送出してくれるスイッチデバイスの市販品はたくさんあります。どれも安価で優れているので、それだけの目的でESP32でDIYする必要はないと思いました。
例えば、IKEAのショートカットボタンなどは、ドアベルっぽいデバイスにぴったりです。価格も税込1,499円です。Zigbee2MQTTとペアリング済みのショートカットボタンが手元にあるので、そのまま流用して試すことにしました。
(ikea.comから引用)
実は、IKEAのTRÅDFRI トロードフリワイヤレス調光器の方がコスパが高いです。税込799円のシーソースイッチです。操作方法は異なりますが、スイッチの機能(MQTTメッセージの種類)は同じです。電球やカーテンとセットで販売することの多い製品なので、特別に低価格に設定されているのだと思います。ただドアベルっぽいデザインでは無いので今回は、割高な(それでも安いです)ショートカットボタンを使用しました。
IKEAのZigbee製品をHomeKitに接続する方法はこちらをご覧ください。
通常はIKEAのZigbee製品は、Zigbee2MQTTとz2mプラグイン経由で使用してます。例えば、IKEAのショートカットボタンならば、HomeKitの上でスイッチとして機能させることができます。
しかし、以下で説明したように、Zigbee2MQTTの情報は、Mqttthingプラグインからも使うこともできます。
ここでも、今までは、z2mプラグインを使って、IKEAのボタンを、HomeKit上のスイッチとして見せていたところを、
それに加えてMqttthingプラグインの設定も有効にして、HomePodのドアベルとして使うことにします。
z2m経由でスイッチとしても引き続き動作するので、「ドアベルが鳴ったら玄関の照明を点灯する」というようなオートメーションも設定可能です。
MQTTメッセージを調べる
Zigbee2MQTTとペアリング済みのIKEAショートカットボタンを押して、流れるMQTTメッセージをmosquitto_subコマンドで確認します。以下の構成です。
まず、シングルクリックの時には、以下のメッセージが流れていました。トピック名、メッセージ内容の順です。
zigbee2mqtt/IKEA_Shortcut {"action":"on","battery":87,"linkquality":131,"update":{"state":"available"},"update_available":true}
このボタンには、IKEA_Shortcutというfriendly nameをつけてあるので、トピックにそれが現れています。メッセージはJSON表記のテキストです。JSON表記をみると、シングルクリックにより、”action”というキーが”on”であるというメッセージが流れています。
次に長押しを試してみます。押下時と離した時にそれぞれ1個のメッセージが流れました。
zigbee2mqtt/IKEA_Shortcut {"action":"brightness_move_up","action_rate":83,"battery":87,"linkquality":145,"update":{"state":"available"},"update_available":true} zigbee2mqtt/IKEA_Shortcut {"action":"brightness_stop","battery":87,"linkquality":145,"update":{"state":"available"},"update_available":true}
長押しが達成できた時に、”action”:”brightness_move_up”が流れます。また、長押し終了してボタンから指を離すタイミングで、”brightness_stop”が流れます。電球の電源・照度コントロール用のチップを流用している様子です。ちなみに、ダブルクリックに対しては、特別なメッセージは流れませんでした。シングルクリックに対応するメッセージ、”action”:”on”が2回流れるだけでした。
MQTTメッセージを設定する
ではMqttthingの設定に進みます。Raspberry Pi 4で動作しているHomebridgeの、Mqttthingプラグイン設定に、ドアベルアクセサリを追加します。この設定で、IKEAボタンからのメッセージが、z2mプラグインに加えて、Mqttthingプラグインも流れることになります。
このアクセサリのためにMqttthingがチェックするMQTTトピック名は、上記で調べたようにzigbee2mqtt/IKEA_Shortcutです。その中のJSON表記のactionキーをチェックします。なので、”getSwitch”のトピック設定にはzigbee2mqtt/IKEA Shortcut$.actionを書きます。
ドアベルのスイッチは、シングルクリック、ダブルクリック、長押しの3種類の状態になります。その値は、デフォルトでは、それぞれ1文字の”1″, “2”, “L”です。でも、IKEAのショートカットボタンは、シングルクリック時に”on”を流しますので、これを設定します。また長押しには、”brightness_move_up”を指定しておきます。ダブルクリックはありませんので、デフォルトのまま”2″を書いておくことにします。
動きセンサは無いので、getMotionDetectedは意味がないですが、エラーを回避するために、適当にzigbee2mqtt/IKEA Shortcut$.motionと書いておきました。{“motion”:”true”}などのメッセージは流れないので、反応しません。(後で、mosquitto_pubコマンドで流してみたら、ホーム.appがモーションセンサからの情報として反応しました)
ということで、設定部分は以下になりました。
{
"accessory": "mqttthing",
"type": "doorbell",
"name": "Door Bell",
"topics":
{
"getSwitch": "zigbee2mqtt/IKEA Shortcut$.action",
"getMotionDetected": "zigbee2mqtt/IKEA Shortcut$.motion"
},
"switchValues": ["on","2","brightness_move_up"]
}
この設定を保存して、Homebridgeを再起動します。
ドアベルを使ってみる
IKEAのショートカットボタンのラベルを、プリンタで印刷して、ベルのアイコンにしました。
これを押すとHomePod miniからピンポン音が出ました。ビデオでご覧ください。1回クリックしただけですが、2回鳴り、2回目には溜めが入ります。
この時、iPhoneにも、「即時通知」が届きます。ロック画面にも表示されます。ただし、お休みモードなどの時には表示されません。
応用を考える
これは何に使えるかなと考えてみます。
まずは、昔ながらの、押したらピンポンと鳴るドアベルとして、すぐに使えます。このIKEAのボタンを玄関に貼り付けてくればokです。磁石でくっつくだけなので、工夫しないと盗難の恐れはあります。店舗だったらお客さんが押す呼び出しボタンとかに使えるかも。ドラマに出てくるような、お金持ちが使用人を呼ぶボタンにも使えます。
また、このドアベルを、双方音声通話できるカメラと組み合わせれば、ビデオドアベルが作れそうです。ffmpeg使って頑張ればDIYもできるかもしれません。
今回はMqttthingを使ってドアベルを実装しました。なので設定次第で、任意のMQTTメッセージに応答して、HomePodからピンポンオ音を出すことができます。何かのセンサの結果、コンピュータ処理の結果、メールやメッセージの到着時など、いろんなプログラムの中で、HomePodからピンポン音が流せるのは面白いかもしれません。
まとめ
Mqttthingでdoorbellアクセサリを作り、IKEAショートカットボタンを押すとHomePodからピンポン音が出るように設定しました。数あるHomePod機能の中で、地味な部類に入る機能だと思いました。
コメント