littleBit CloudBitモジュールとNode-REDをつなげてCloudBitを反応させるメモ

littleBits の CloudBit ビットモジュールを動かせたので、つづいてlittleBit CloudBitモジュールとNode-REDをつなげてCloudBitを反応させるメモです。
今回の仕組み
littleBit CloudBitモジュールはlitteBits Cloud APIというものがあり、littleBits社のクラウド環境からAPIで操作することが可能です。
litteBits Cloud APIは、REST APIで出来ているので、Node.jsのrequestモジュールやシェルのcurlコマンドで命令しやすいものです。実際にAPIリファレンスでも、requestモジュールのコードとcurlコマンドが併記されています。
これでも、だいぶ扱いやすいものの、littleBitsの場合、普段からブロック的な思考構築をフォローするためか、littleBitsはブロック的に手軽に組めるが、IoTを操る部分がコードを書く感じで進んでしまうと微妙に思考が途切れてしまう、使う上でのシーンを想像するとやや難点があります。
そこで今回はNode-REDでREST APIを送信する形でlittleBit CloudBitモジュールとNode-REDをつなげてCloudBitを反応させます。
CloudBit側の準備
まずCloudBit側の準備です。littleBits の CloudBit ビットモジュールを動かせている前提で、つづいてCloudBit管理画面で、すでにCloudBitを登録して操作できる状態にしておきます。
その上で、Getting Started with your CloudBitにアクセスします。
サインインします。
USB POWER→CloudBit→BARGRAPHの順につなぎます。
上部の名前の横にあるランプがグリーンになって接続されたのを確認します。
DeviceIDとAccess Tokenを確認
APIを使うためにDeviceIDとAccess Tokenを確認しておきます。SETTINGページに移動します。
SETTINGページが表示されたら、下にスクロールします。
下部の方にDeviceIDとAccess Tokenがあるので覚えておきましょう。(最上部のタイトルになっている自分で任意の名前をつけたものはDeviceIDではないので注意しましょう。)
APIリファレンスで仕様を確認
APIリファレンスも確認します。
APIリファレンスは右上のメニューをクリックします。
横から開いたメニューの下部にAPIリファレンスがあります。→API Reference
外部からCloudBitを反応させるのは「Output Voltage on device」のAPIです。これがCloudBitからの出力制御をするものです。
curlの仕様を確認しておきます。
curl "https://api-http.littlebitscloud.cc/v2/devices/00e040000001/output" \
-X POST \
-H "Authorization: meowmeowmeow" \
-H "Content-type: application/json" \
-d '{ "percent": 100, "duration_ms": 3000 }'
これをNode-REDに置き換えていきましょう。
Node-RED
Node-REDのフローは以下のとおりです。
injectノード→changeノード→http requestノードのフローです。
injectノード
indectノードでJSONデータを送ります。
injectノードの設定です。先ほどの「-d '{ "percent": 100, "duration_ms": 3000 }'」の部分を送る仕組みです。
changeノード
changeノードでURLとAuthorizationヘッダーの設定を行います。
changeノードの設定です。2つの設定を行っています。
- 「-H "Authorization: meowmeowmeow" \」部分
- 値の代入を指定してmsg.headers.Authorization を対象にして後発のhttp requestノードのヘッダ指定に使います。
- 対象の値は
- 「-H "Content-type: application/json" \」
- 値の代入を指定してmsg.url を対象にして後発のhttp requestノードのURL指定に使います。meowmeowmeow
- 「-H "Content-type: application/json" \」については、Node-REDのRESTは application/json で送られるようなので設定しません。
http requestノード
最後のhttp requestノードはchangeノードのpayloadで事前に設定されるので、1点だけ変更します。
APIを仕様を見ると、ここはPOST送信なので、POSTの設定をしておきます。
これでNode-REDをデプロイしておきます。
動かしてみる
Node-REDを別PCで起動して、今回は分かりやすくタブレットで、そのNode-RED遠隔表示して、littleBitsも接続を待ちます。
CloudBitが起動したらinjectノードを操作してみましょう!
無事、3秒間ライトが点灯しました。
Node-RED JSONフローデータ
今回のNode-RED JSONフローデータです。
[
{
"id": "a13b015.45642",
"type": "inject",
"z": "5412ad33.e43094",
"name": "データ",
"topic": "",
"payload": "{ \"percent\": 100, \"duration_ms\": 3000 }",
"payloadType": "json",
"repeat": "",
"crontab": "",
"once": false,
"x": 258,
"y": 379,
"wires": [
[
"f102da3.ca7ea28"
]
]
},
{
"id": "947e47dd.120408",
"type": "http request",
"z": "5412ad33.e43094",
"name": "",
"method": "POST",
"ret": "txt",
"url": "",
"tls": "",
"x": 710,
"y": 379,
"wires": [
[]
]
},
{
"id": "f102da3.ca7ea28",
"type": "change",
"z": "5412ad33.e43094",
"name": "API設定",
"rules": [
{
"t": "set",
"p": "url",
"pt": "msg",
"to": "https://api-http.littlebitscloud.cc/v2/devices/<DeviceID>/output",
"tot": "str"
},
{
"t": "set",
"p": "headers.Authorization",
"pt": "msg",
"to": "<Access Token>",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 476,
"y": 380,
"wires": [
[
"947e47dd.120408"
]
]
}
]
このようにAPIも揃っていて複雑な連携もできるので、littleBit自体で現実世界側のブロック的な手触りを保ちつつ、IoT側のプログラミングも手軽にブロックで組むことができるので、相性は良いと思います!
それでは、よき littleBits & CloudBit & Node-RED Lifeを!