MQTT 連携

任意のブローカー。MQTT を話すあらゆるプラットフォーム。

Car 2 Home は本格的な MQTT クライアントです。車が公開するすべてのセンサー、標準の OBD から拡張 PID、計算値、GPS、TPMS、診断の状態まで、あなたのブローカーへ配信されます。配信形式は選べます。Home Assistant の自動検出(既定)、Homie 4.0、センサーごとの単純トピック、統合 JSON、ThingsBoard のプリセット。

すでに Mosquitto、EMQX、HiveMQ などのブローカーをお使いなら、いくつかの項目を入れるだけで動きます。この経路は私たちのサーバーに一切依存せず、テレメトリーはアプリからあなたのブローカーへ直接届きます。


MQTT とネイティブ Home Assistant の違い

どちらの経路も同じセンサーを運びます。違いは、MQTT が運ぶのは連続した状態であるのに対し、ネイティブの Home Assistant 連携はイベント(走行の開始、故障コードの検出、急加速)も運ぶ点です。MQTT だけでもライブデータはすべて手に入りますが、いちばん面白い自動化を動かす個々の瞬間は、ネイティブ連携にしか存在しません。

できることMQTTネイティブ HA
連続した状態
センサーの値が変わるたびに配信されます。
イベント
trip_startedtrip_endeddtc_foundharsh_eventecu_online/offline
双方向のコマンド
Home Assistant から、故障コードのスキャンやセンサーの再通知を車に依頼できます。

データの配信のしかた

  • 自動検出のペイロードretain=true で送られるので、あとから接続した購読者もエンティティの一覧をすぐに受け取れます。
  • 変化分のみ: 値は変わったときにだけ再配信され、任意で間引きもできるので、ブローカーを埋め尽くしません。
  • 列挙型の PID は解釈されます: 燃料種別の「1」は「ガソリン」になり、指令当量比は分数で報告されます。生の値と人が読める値の両方が属性として公開されます。
  • Material Design のアイコンが自動検出のペイロードに含まれるので、ダッシュボードは最初から正しく表示されます。
  • QoS はトピックの種類ごとに設定できます。センサーの状態は既定で QoS 0、ライフサイクルのメッセージは QoS 1 です。
  • TLS と認証に対応し、資格情報は iOS のキーチェーンや Android の Keystore に保存されます。

つながる先

MQTT を話すものであれば何でも、適切な配信形式と組み合わせて使えます(上記参照)。私たちが定期的に検証しているのは次のとおりです。

  • Home Assistant: MQTT 連携と Home Assistant Discovery 形式(自動で判別されます)。
  • OpenHABioBroker: Homie 4.0 形式(MQTT Homie バインディング、MQTT Client アダプター)。
  • HubitatNode-REDDomoticz: 単純トピック形式。
  • Grafana と Telegraf・InfluxDB、および独自のダッシュボード: 統合 JSON 形式。
  • ThingsBoard CE・Cloud: ThingsBoard プリセット。ESPHome のブリッジや自作の MQTT 受信側には、単純トピックか統合 JSON を。

配信形式

送り先のプラットフォームに合う形式を選んでください。既定の Home Assistant Discovery は HA をそのままカバーします。OpenHAB、Hubitat、汎用のダッシュボード、ThingsBoard へ送るときは他の形式に切り替えます。

Home Assistant Discovery

既定。自動検出のペイロードを homeassistant/<component>/<deviceId>/<sensor>/config に送ります。車は HA の 設定 → デバイスとサービス → MQTT に自動で現れます。連続した状態は <prefix>/<deviceId>/state に JSON のまとまりとして配信されます。

Homie 4.0

homie/<deviceId>/$nodes のトポロジーとプロパティごとの $datatype$unit$format メタデータで検出を行う公開標準です。OpenHAB(MQTT Homie バインディング)と ioBroker(MQTT Client アダプター)にとってはこれが本来の形式で、ESPHome の環境にも合います。

単純トピック

センサーごとに 1 トピック、検出はありません。ペイロードは生の値(たとえば 1850)か {value, ts} の JSON を切り替えられます。HubitatNode-REDDomoticz、その他あらゆる汎用の MQTT 受信側で使えます。

統合 JSON

すべてのセンサーを一つの JSON にまとめ、指定したトピックへ retain 付きで送るので、あとから購読した側も受け取れます。GrafanaInfluxDB・Telegraf、そして一つのトピックを購読して車両の全体像をまとめて解析したい独自ダッシュボードに向いています。

ThingsBoard

ThingsBoard CEThingsBoard Cloud 向けの専用プリセットです。テレメトリーを v1/devices/me/telemetry へ、静的なセンサー(VIN、燃料種別、CalID)を v1/devices/me/attributes へ送ります。アクセストークンはユーザー名欄に入れ、パスワードは空のままにしてください。

形式はいつでも 設定 → MQTT → 形式 で切り替えられます。Home Assistant や Homie から別の形式へ変えるとき、アプリはブローカーに残った検出用トピックの掃除を申し出るので、受信側に幽霊デバイスが残りません。


ブローカーの選び方

まだ一つも動かしていないなら、出発点はこのあたりです。

  • Mosquitto: いちばん手軽です。Home Assistant のアドオンとしてワンクリックで動き、Docker で単体でも動きます。家庭には十分です。
  • EMQX: クラスタ構成が組め、規模の拡大に強く、管理画面がすっきりしています。機器が多い場合や、詳細な監視をしたい場合に価値があります。
  • HiveMQ: 自前で運用したくない場合の、堅実な商用・クラウドの選択肢です。

手早い設定

  1. 1. スマートフォンから届くブローカーを用意する

    自宅のネットワーク内でも、トンネル越し(Tailscale、Cloudflare Tunnel、Nabu Casa)でも構いません。運転中にテレメトリーをリアルタイムで流すには、走行中も MQTT に到達できる必要があります。

  2. 2. アプリの 設定 → MQTT を開く

    ホスト、ポート、ユーザー名、パスワード、必要なら TLS の設定を入れます。アプリが接続を検証し、状態をその場で表示します。

  3. 3. 購読して、エンティティが届くのを見る

    自動検出のペイロードはすぐに配信されます。Home Assistant では 設定 → デバイスとサービス → MQTT にデバイスが現れます。Node-RED や任意の MQTT クライアントでは、設定した接頭辞の下のトピックツリーをたどってください。

手順ガイドを見る

Matter・SmartThings・Google Home・Alexa

同じ MQTT のデータを Matter デバイスとして再配信する Matterbridge プラグインを作っています。実現すれば、受信側にブローカーを置かずに車が Apple Home、Google Home、SmartThings、Alexa から見えるようになります。近日公開。