SwitchBot Hub Miniのネットワーク仕様 ~MQTTプロトコル~

Echo Dotを買った。アラームが好きなだけ登録できる高性能目覚まし時計ぐらいのつもりで買ったんだけど中々便利。SwitchBot Hub Mini(以下面倒なのでHub)もあれば灯りやエアコンをベッドに寝たまま操作できるとかお外から操作出来るとか色々便利そうなので欲しいなーと思ってたところ、タイムセール+プロモーションコードで1000円程度で買えるので即ポチした。確かにお外からエアコン操作出来たし真夏は便利。だがしかしちょっと待て。そもそもなんでそんな事出来るんや。今お前どうやってルーター超えた。

ヒルに聞いたはいいが検索ワードが悪かったらしく設定方法しか出てこない。しかし公式のQ&Aに

プロトコルとポートの情報は「MQTT OVER TCP PORT 8883」となります

と書いてあるのを見つけた。OVER TCP PORT 8883は分かるがMQTTってなんだ。

MQTTプロトコル

MQTTとは何の略だというとMQプロトコルの発展形でMQ Telemetry Transportの略らしいが、そのMQプロトコルも聞いた事ないので別にどうでもよかった。
さて、通常のクライアントサーバーモデルだと直接かつ同期的にアクセスしていた。しかしMQTTプロトコル
Publisher---------->Broker---------->Subscriber
という形態をとりかつ非同期。Publisherつまりデータ送信者、Subscriberつまりデータ受信者、間にあるBrokerというのはプロキシみたいな中間サーバー。PublisherもSubscriberもお互いの通信先なんか知る必要はなくBrokerの通信先さえ知っておけばいい。HubとスマホはPublisherとSubscriberのどちらにもなり得る。Hubからのデータ取得とスマホからのコマンド送信で方向違うからね。そしてHubが定期的にBrokerに通信してアクセス先を通知してるんだろう。じゃないとスマホからHubのアドレスなんか分かる訳ないし。