EdgeRouter X をアップデートしたら Philips Hue が HomeKit から見えなくなったので何とかした。
先に結論
EdgeRouter X 内の /etc/avahi/avahi-daemon.conf
を手動で弄っていたことをすっかり忘れていてそのままファームウェアアップデートして元に戻った結果、有線部分の bonjour 解決が死んでいたのが原因だった。
自宅のネットワーク的に無線部分は AirMac Time Capsule に全部繋がっていたからなのか、他の機器には強めのキャッシュが残っていたからなのか、もはや今となっては不明なのだが、一部の機器同士では bonjour による解決が成功していたため問題の原因を把握するのが遅れてしまった…。
詳細
EdgeRouter X のファームウェアを 1.10.5 にアップデートした辺りから Philips Hue が HomeKit 経由で操作出来なくなる現象が多発していた。
HomeKit 経由だけではなく、Google Home や Alexa からも操作が出来なくなことが稀に良くある、といった状況になってしまった。弊宅の照明は Hue で統一しているので、操作が出来ないとなるとこれは非常に困る。幸い Hue 公式アプリからは確実に操作が出来てはいたので生活は出来ていたのだが。
しかしたまに HomeKit 経由での操作が可能になることもあったし、何よりも HomeKit の設定をしていない Hue Tap 経由での操作も受け付けなくなる現象が多発していたので、最初は Hue Bridge の方が壊れたのだと考えていた。
タイミング的に Hue Bridge の二年保証が数週間前に切れたこともあって、保証期間が切れてすぐに壊れたのか…と悲しい気持ちになったりもしていたのだが、結果的には Hue Bridge は何も悪くなかった、疑ってごめんな。
しかし前述の通り自分はてっきり Hue Bridge が壊れたのだと思っていた訳で、辛い気持ちになりつつ仕事帰りにヨドバシに寄って新品の Bridge を買って帰り、結構大変な思いで Hue 公式アプリの設定や Apple HomeKit の設定や Google スマートホームの設定や Amazon Alexa の設定の引き継ぎなどをやったのだが、いざ新品の Bridge の設定を終え、しばらく使ってみるとまた操作が出来なくなる問題が発生し、問題は全く解決しなかった。
EdgeRouter X について。
公式はここ。
YAMAHA ルータ欲しいけどリース品の期限が切れて中古市場に流れるタイミングもいつ来るか分からないし、欲しいけど凄く欲しいかと言われると別にそこまで困ってはないというか、あれば所有欲が満たされる位だよなぁ…それにしては高いよなぁ…とか思っていたところに 「EdgeRouter X がすごい」という記事を読んでいたらうっかり買ってしまったのが 2017 年の 12 月頃の話。
EdgeRouter X 以外にも製品があるが、これらの機器は EdgeOS が乗っている。EdgeOS とは何かと言うと Vyatta の fork だ。
Vyatta 自体は x86 上でしか動作しないが、これを MIPS で動作するように改造したのが EdgeOS だと言う理解をしている。
家庭用のスイッチングハブみたいな見た目なのに実際は LAN ケーブルが 5 つも刺さる Vyatta が動く何かだなと思えば、こんなに遊べるデバイスは他に無いなと思うじゃん。そりゃ買うよね。日本の Amazon で買っても 9999 円だし。
とは言え僕はネットワークの低レイヤ部分に関しては明るくないため、ゆっくり遊びつつ弄るか、くらいの気持ちではいたのだが。
EdgeOS の mdns reflector の実体は avahi-daemon
見出しの通りなのだけど、
sudo -i
configure
set service mdns reflector
commit
save
と打って mdns reflector を有効にすると
[ service mdns reflector ]
Starting system message bus: dbus.
Starting Avahi mDNS/DNS-SD Daemon: avahi-daemon.
と出力され、
sudo -i
configure
delete service mdns reflector
commit
save
と打って mdns reflector を無効にすると、
[ service mdns reflector ]
Stopping Avahi mDNS/DNS-SD Daemon: avahi-daemon.
Stopping system message bus: dbus.
と出力される。ここから内部的には avahi-daemon
であることが推察される。
そしてすっかり忘れていたのだが、 /etc/avahi/avahi-daemon.conf
を手動で弄っていたことを思い出した。
個人的な Evernote 内の作業メモを参照すると、どうやら以下を追記していた。
allow-interfaces=switch0, tun0
deny-interfaces=pppoe0
allow-point-to-point=yes
enable-wide-area=yes
enable-reflector=yes
EdgeRouter X のファームウェアのアップデートでこの辺りが消え去っていたため、手動で戻してしばらく様子を見たところ、Hue Bridge が操作出来なくなるという問題が根本から解決した。
解決はしたのだが Vyatta の流儀的に直接設定ファイルを弄るのは NG な様な気はしており、また忘れた頃に同じ問題が起きる気がしている。後で筋の良いやり方を調べておきたい。
念の為だけど手動で弄っているのは /etc/avahi/avahi-daemon.conf
だけです。はい…。それ以外はちゃんと流儀に乗ったやり方をしているはず。
一応 mdns repeater も有効にしておいた。
EdgeOS 1.8.0 からあったらしい。覚えていなかった。
自分の環境では eth0 を PPPoE として使っていて、 eth1 から eth4 までを switch にしているので
set service mdns repeater interface switch0
set service mdns repeater interface eth1
set service mdns repeater interface eth2
set service mdns repeater interface eth3
set service mdns repeater interface eth4
こんな感じになると思われる。しかしこの辺りの挙動はよく分かっていないのでちゃんと調べる必要がある。
HomeKit 側で何も設定していない Hue Tap も反応しなくなった件についての推測。
Hue Bridge に繋がっている何らかのセンサーが何らかを検知した際の挙動についての推測の話になる。Hue Tap ではボタンを押されたかどうか、人感センサーでは動きを検知したか、などが該当すると思われる。
これらのセンサーが直接繋がっているのは Hue Bridge であって、まずセンサーからのイベント自体は Hue Bridge まで正常に飛んでいそうではあった。確認する術がないのでこれも推測だが。
ここから Hue Bridge を HomeKit デバイスとしてペアリングしている場合と、そうで無い場合で挙動が分かれているように見える。
Hue Bridge が HomeKit デバイスとしてペアリングされている場合、センサーが検知したイベントをどう処理するか HomeKit 側にお伺いを立てている様に見受けられた。
そのため、Hue Bridge 側から HomeKit のハブである AppleTV や iPad が見えなかったり、逆に HomeKit ハブから Hue Bridge が見えなかったりすると失敗しているような挙動を示していた様に思う。
実際 EdgeRouter 側の設定が悪いと分かる前に試行錯誤してる途中で、 HomeKit デバイスとしてペアリングしてない場合とペアリングを解除した場合は Hue Tap を押して反応しなくなることはなかった様に思う。
Philips Hue のハードウェアの完成度は高い。
全体的には完成度が高いプロダクトではあるのだが、たまにアプリ側がやらかすことがある印象がある。
Hue 自体は 2012 年から続くプロダクトであり HomeKit 自体は 2014 年の iOS 8 からのもので、2016 年にリリースされた新 Bridge から HomeKit がサポートされたという経緯もあり、その影響もなくはなさそうではあるが…。
個人的には 2014 年からずっと Hue を使っているのだが、たまにアプリのアップデートで「これはやらかしたな…」と思った場面は何度かあった。その印象もあって、今回真っ先にどうせ Hue Bridge が壊れたんだろうなとちゃんと調査もせずに新品の Bridge を買い直してしまうという、まぁ、こちらがやらかしてしまったという訳で、適当な気持ちで疑ってごめんな…。
しかし今回色々弄ってみたところ、Hue アプリ内からの HomeKit の扱いが全体的に雑というか、例えば大量のバルブの名前をアプリの定義と HomeKit の定義で同期する機能ではエラーハンドリングを潰しているところが見受けられたし、もうちょっと適切にウェイトを入れつつちゃんと反映されたかどうかのチェックまで含めて丁寧に実装せいやとは思いました。
締め
HomeKit のトラブルシュートは本当に難しい。Bluetooth で素朴に繋がるものもあるし、WiFi や有線 LAN で繋がるパターンもある。今回も Hue だけが見えなくなり、それ以外に繋げていた Elgato Eve シリーズ類はずっと正常に繋がり続けていた。
とりあえず教訓としては、何かあったら bonjour 周りを最初に見るのが良いだろうということだろうか。
結果として壊れてないのに新品を買い直してしまったので、今まで使っていた Hue Bridge が余ってしまった。
メルカリにでも出すか、はたまたこのような記事も見付けたので、分解して遊ぶか悩み所。