LoginSignup
8
6

More than 5 years have passed since last update.

WebRTC経由で、MQTTをpub/subしてみる

Last updated at Posted at 2018-04-16

これは何?

前回記事 の続き。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

image.png

プロセスの起動

SkyWay IoT SDKのインストール 後、

$ /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

image.png

MQTT client にデータを送信

次に、ブラウザからのデータ送信の番。ここでは、testtopic/from_cli のトピックでデータを送ることにし、mosquitto_sub をそのトピックで起動しておく。

$ mosquitto_sub -t testtopic/from_browser

その後、画面右下のフォームから、topic として testtopic/from_browser を、message として、適当なメッセージを入力し、sendをクリックする。で、mosquitto_subのほうにそのメッセージが表示される。3

image.png

まとめ

SkyWay IoT SDKで、P2Pで宅内MQTTへのpub/subする方法(おさわり)を紹介した。これを使うと宅内の温度センサモニタリングとか宅内デバイス制御なんかがお手軽に実現できる。また、クラウドを経由したり、わざわざグローバルIPをゲット -> NATとかに穴を開けなくても、パブリックなメッセージングサービスを宅内 Linux からだけで実現できたりもする。楽しげ


  1. IoT SDKでは インストーラー を使うと、MQTTブローカー(mosquitto)も併せてインストールされる。 

  2. 16文字以上のメッセージを受信した場合は、受信データのバイト数が表示される作りになっているので注意 

  3. message として、数字を入力すると、そのバイト数分の a が送信される作りになっているので注意。例えば 4 を入力すると aaaa が送信される。 

8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6