作品タイトル:GR-KURUMIでIoTをやってみる編
表示名:@chobichan
コンセプト・作品説明 |
---|
GR-KURUMIでIoTを実現します |
GR-KURUMIでInternet of Things(IoT)の実現
この例題ではXBee Wi-Fiに接続されたGR-KURUMIからクラウドサービス(IFTTT)に接続してデータを送信します。
IFTTTは、「もし(if)何々と言うイベントが有ったら、その時(then)何々と言うイベントを起こす」サービスです。
IFTTTを利用する事でインターネットを利用したサービス同士を簡単に連携させる事ができます。
今回は、GR-KURUMIからイベントをIFTTTのMakerチャネルに送信し、その結果としてTwitterにメッセージを送信するイベントを発生させます。
その際、IFTTTのIPアドレスを得る為にDNSサーバーに接続します。また決められた時間にデータを上げる為に正確な時間を得られるNTPサーバーにも接続します。
※「GR-KURUMIの機能を使うwifi編」を参照
XBee Wi-Fiの設定は「GR-KURUMIの機能を使うwifi編」のAPIモードと同一です。
次にIFTTT側の設定を示します。
事前にIFTTTにサインINしてIF:Makerチャネル、THEN:Twitterでレシピを生成しておきます。
この時ツイッターとのアプリ連携を求められますので、もしツイッターアカウントを持っていないなら、事前にツイッターアカウントを取得して置いて下さい。
GR-KURUMIはレシピを生成した際のイベント名、秘密の鍵を使ってIFTTTにアクセスします。特に秘密の鍵は何処かにメモをしておいた方が良いでしょう。新たにレシピを作った時にもその秘密の鍵を使用します。ツイッターに送るメッセージのフォーマットを決めて置きます。図のTweet textの欄がフォーマットで、3つの値をメッセージとして送ります。
文字列等もここに追加できますが、ツイッターの文字制限の140文字を越えない必要があります。※IFTTTの連携は多岐に渡っています。メールに送信したりDropBoxに送信したりできます。その場合も基本はこの設定を参考にできます。
あとは実際にやってみるのみです。
プログラミングのポイント
IFTTTのMakerチャネルにデータを送る場合のホスト名は
maker.ifttt.com
です。
これはあくまでも人間が理解し易いドメイン名ですので、このドメイン名からグローバルIPアドレスを取得します。例によってDNSでIPアドレスを得ます。
また適当な時間にIFTTTにデータを送信するのではなく、決められた時間や、5分なら5分置きに送信する為にGR-KURUMIの時計をNTPを使って合わせて置きます。
イベントを時間で駆動した方がカッコいいですからね。
※プログラムのほとんどは「GR-KURUMIの機能を使うwifi編」で作成したコードをそのまま使用しています。
Makerチャネルにデータを送るイメージは、サーバーにHTTPでデータをアップロードするイメージです。具体的には以下のメッセージをDNSで取得したIPアドレス、ポート番号は80番を指定して送信します。
POSThttp://maker.ifttt.com/trigger/イベント名/with/key/秘密の鍵 HTTP/1.1
Host: maker.ifttt.com
Content-Type: application/json
Content-Length: 79
Connection: close
ここに空行
{“value1”:“Temperature:24.4”,“value2”:“BRIGHTNESS:0.0”,“value3”:“CountUp:57.0”}
メッセージは空行で上下2つに分かれています。
上側がHTTPヘッダーで内容物に付いて説明しています。
下側がJSONフォーマットのデータになります。
全て平文で送られてしまうので「秘密の鍵」がちっとも秘密ではない様な気もしますが、そこはおいて置きましょう。
アップロードが成功したかどうかは、IFTTT側から返される応答を確認する事で行えます。
先頭行に
HTTP/1.1 200 OK
と200番台の数字が書かれていれば成功です。それ以外の数字は何か問題が発生しています。
5分置きに室内の温度、照度、カウンターの値をIFTTTに上げた結果です。
スマートフォンのTwitterクライアントで見てみました。
IoTを行う上で注意すべきこと
IFTTTでレシピを生成した時、ユニークなコードの秘密の鍵の割り当てがありました。
しかし秘密の鍵と言いつつ実際には暗号化などを行わず平文でIFTTTに送信していますし、内容も平文のままです。
なかなか小規模のマイコンでは暗号化までは難しいものがあります。
また、Twitter連携している時点で内容が筒抜けになっています。
この事を踏まえた上で、今インターネット上に流しているデータが誰かに見られたとしても問題無いかどうかを判断する必要が有るでしょう。
極一般のハードウエアエンジニア。たまに雑誌記事を書いています。
twitterアカウント:https://twitter.com/chobichan