壊れた電動歯ブラシの通信機能を解析、1秒ごとの磨き時間表示を自作で取り戻す

電動歯ブラシの磨き時間が、スマートホーム側で見えなくなった。ファームウェア更新を境に、Home Assistantのタイマーは磨いている間ずっと0のままで、終わった瞬間に「96秒磨きました」と最終値だけが飛び込んでくる。thomasgreggと名乗る開発者は、Oral-B iOのBluetooth通信を解析し、リアルタイム表示を取り戻す連携機能を自作してGitHubで公開した。

原因はデータの届け方が変わったことだった。従来のOral-B製歯ブラシは、磨いている間1秒おきに状態をBLEアドバタイズ(周囲へのブロードキャスト)で流しており、Home Assistantの公式連携はこれを受動的に聞くだけでよかった。ところが最近のiOファームウェアでは、モーターが回っている間は電波が止まり、終了後に総時間だけを載せた要約を1回流す方式に変わった。データ自体は消えていない。GATT通知という、接続を確立しないと受け取れない経路に移っていた。

開発者が作った連携機能は、受動的な受信を残したまま、歯ブラシが起きている間だけ接続を張る。これによって1秒ごとのタイマー、押し付け圧、磨いている区画、モードがリアルタイムで取れるようになり、磨いた履歴も自前で記録できる。

解析の過程で分かったのは、この歯ブラシがBLEクライアントを1つしか受け付けないという制約だった。しかも接続スロットが埋まっている間、歯ブラシはアドバタイズを完全に止めるため、他のクライアントは発見すらできない。スロットを奪い合うのは、時間を表示する専用充電器「iO Sense」、スマートフォンのアプリ、そしてHome Assistantの3者になる。開発者が2026年7月にiO Series 10で確かめたところ、Home Assistantが接続を握ると充電器の表示は消えたままになり、充電器が握るとHome Assistantには何も届かなかった。ソフトウェアで回避できる問題ではないため、どちらを優先するかを設定で選ぶ方式にした。初期設定では充電器を優先し、磨き終わってから歯ブラシ自身が持つ直近1件の記録を読み出して補う。

解析結果はREADMEに詳しく書かれている。落とし穴も明記した。押し付け圧のデータがありそうな位置にあるff06は実際にはボタンの状態で、強く押し付けながら読んでも0が返り続けるため、圧力センサーが壊れていると誤解しやすい。本当の圧力データはff0bにあった。歯ブラシ内部の時計は実時間から8日ほどずれていたため、記録の時刻をそのまま換算せず、同じ接続内で時計も読んで差分を打ち消す方法をとっている。

検証したのはiO Series 10の1台だけで、他の機種からの報告を求めている。ファームウェア更新の経路(ff81、ff82)も解析で見つかっているが、この連携機能では使っていない。歯ブラシの制御チャンネルに書き込むコマンド群には工場出荷状態への初期化も含まれるため、意図的に手を出さない方針だという。

関連情報

fabsceneの更新情報はXで配信中です

この記事の感想・意見をSNSで共有しよう
  • URLをコピーしました!

最新記事

YouTube / PodCast

【PR】読んで役立つ注目記事

目次