IoTで話題に上がるのがIoTデバイスの設定を外部から変えたいというニーズです。いくつかやり方はあると思いますが、今回はMQTTを使ってデータの書き換えを行ってみたいと思います。

アーキテクチャ

全体のアーキテクチャは次のようになります。

Intel Edisonの設定

Intel Edison側ではMQTTクライアントを使ってconfig/readを購読しています。このトピックを呼ばれたらあらかじめ設定してあるJSONデータを文字列化した上で返します。MQTTではテキストデータしか扱えませんので、JSONデータは送受信側でそれぞれ変換する必要があります。このトピックではconfig/publishというトピックに対して設定を発信しています。

次にconfig/writeというトピックも受診しています。このイベントにはデータが入っており、送られてきた設定をファイルに書き込んでいます。

[/crayon]

サーバの設定

サーバ側ではMQTTサーバを立てています。このサーバはHTTPサーバも兼ねており、MQTT over WebSocketsとなっています。つまりMQTTとWebSocketが同居しているサーバです。デスクトップ上ではmcollina/moscaを使うのが便利です。

Webコンテンツ

Webコンテンツは次のようになっています。

[/crayon]

WebSocketサーバに接続し、MQTTサーバに対して config/read を発信しています。結果としてconfig/publishが呼ばれて、そこに設定の値が返ってきますので、それをHTML上に表示しています。

次に設定の値を書き換えてボタンを押したタイミングで設定の値をconfig/writeとして発信します。Intel Edisonではその値をEdison内にあるファイルに書き込んでいます。

利点

静的なファイルを介することで、MQTTサーバが落ちていてもIoTデバイスは動作が継続できます。また設定の書き込みはMQTTを使っているだけなのでWebブラウザでもサーバからの実行でもどちらでも問題ありません。

また、MQTTはリアルタイム通信が利点なので、設定が即座に反映されるのが魅力です。


ニフティクラウドではMQTTを無料(β版につき)で提供しています。センサーの値をやりとりするだけでなく、MQTTならではのデータの送受信を活かしてみてください。