これは何?
前回記事 の続き。SkyWay IoT SDK の MQTT relay機能 を使って、グローバルな MQTT ブローカーを使わずに、P2P でブラウザから宅内 MQTT に pub/sub してみる。
今回の記事は、それのおさわり
概要
普通、宅内のMQTTクライアントをリモートからpub/subするためには、AWS IoTなんかを使ってグローバルな MQTTブローカー over WebSocket なんかを使ってやると思うんだけど、これを WebRTC を使って、グローバルブローカー使わずに P2P でやっちゃおうというもの。これを使うと、簡単・安価に宅内MQTTをふがほげできちゃう。
アーキテクチャーとしては、ssg
がローカルのMQTTブローカーに接続し、MQTTクライアントと、ブラウザの間のMQTTデータを WebRTC でリレー中継してくれるというもの。1
プロセスの起動
$ /opt/janus/bin/janus
$ MQTT_URL=mqtt://localhost MQTT_TOPIC=testtopic/+ ssg start
として、ローカルMQTTブローカーのURLと、subscribe する MQTT の topic を環境変数指定して ssg
を起動する。
サンプル web appの起動
前回記事 同様、
https://nttcom.github.io/skyway-siru-client/examples/
を開く。SkyWayの APIKEY をフォームに入力して start
をクリックして、IoT SDKと接続。
MQTT client からのデータを受信
まずは、MQTT clientから publishされたデータを受信してみる。ここで、サンプル webapp では testtopic/from_dev
に subscribe しているので、mosquitto_pub
を使ってテストデータ送信してみる。
$ mosquitto_pub -t testtopic/from_dev -m 'hello'
すると、画面右下の MQTT Relay via datachannel のところに、上記 publish したメッセージが表示される。2
MQTT client にデータを送信
次に、ブラウザからのデータ送信の番。ここでは、testtopic/from_cli
のトピックでデータを送ることにし、mosquitto_sub
をそのトピックで起動しておく。
$ mosquitto_sub -t testtopic/from_browser
その後、画面右下のフォームから、topic として testtopic/from_browser
を、message として、適当なメッセージを入力し、send
をクリックする。で、mosquitto_subのほうにそのメッセージが表示される。3
まとめ
SkyWay IoT SDKで、P2Pで宅内MQTTへのpub/subする方法(おさわり)を紹介した。これを使うと宅内の温度センサモニタリングとか宅内デバイス制御なんかがお手軽に実現できる。また、クラウドを経由したり、わざわざグローバルIPをゲット -> NATとかに穴を開けなくても、パブリックなメッセージングサービスを宅内 Linux からだけで実現できたりもする。楽しげ
-
IoT SDKでは インストーラー を使うと、MQTTブローカー(mosquitto)も併せてインストールされる。 ↩
-
16文字以上のメッセージを受信した場合は、受信データのバイト数が表示される作りになっているので注意 ↩
-
message
として、数字を入力すると、そのバイト数分のa
が送信される作りになっているので注意。例えば4
を入力するとaaaa
が送信される。 ↩