MilkcocoaはIoTデバイス・スマートフォン・PC間で簡単にリアルタイムなデータのやり取りが出来るプラットフォームです。
MQTTにも対応しているので @ohisama@github さんがnode-red用websocketブリッヂ その2 で書いていただいたようにMQTTノードでも利用できます。
ただ、特定のデバイスやクライアントからしかメッセージングできないセキュアな設定をするためには Milkcocoaの認証について(2015年11月バージョン) に対応しなければいけません。
この中でNode-REDとして対応しやすかったAPI Key認証に対応したノードを node-red-contrib-milkcocoa として公開しました。
Milkcocoa Outputノード
Milkcocoaにデータを送信できます。
アカウントの設定
まずは、ノードを配置してMilkcocoaノードをダブルクリックして設定ダイアログを開き、以下の画像の赤丸で囲ったアイコンをクリックしてアカウントを登録します。
以下のようにMilkcocoaのApp ID, API Key, API Secretを登録します。API Key, API Secretは任意です。入力しなければ認証なしでのアクセスとなります。
MilkcocoaのApp IDは以下にあります。
MIlkcocoaのAPI Key, API Secretは以下で設定します。
データストアの指定
対象とするMilkcocoaのデータストアを指定します。
Milkcocoaの既存データストアは以下です。ここにないデータストア名を指定した場合は最初のデータを投入したタイミングでデータストアが作成されます。
最後に指定したデータストアのセキュリティルールをMilkcocoaで設定します。messageデータストアのすべてのオペレーションにAPI Key認証を適用するには以下のような設定になります。
message {
permit: all;
rule : account.key == 'API_Key';
}
オペレーションを選択
Milkcocoa Outputノードが受け取るデータをどうするか選択できます。
各オペレーションの意味は以下です。
- push: データストアに新しくデータを追加します。
- send: データストアにデータを残さず、現在接続されているユーザーにデータを送信* することができます。
- set: データストアの要素を変更します。
- remove: データストアからデータを削除します。
データ投入
とりあえずデータを投入するには以下のようにInjectノードにJSON文字列を指定します。
InjectノードのボタンをクリックしてDebugノードが以下のようなデバッグを出力すれば問題なくデータが投入されています。Milkcocoaの管理画面でも確認してみましょう。
Milkcocoa Inputノード
Milkcocoaのデータストアを監視します。オペレーションの意味は以下です。
- push: データストアのpushイベントを監視します。
- send: データストアのsendイベントを監視します。
- set: データストアのsetイベントを監視します。
- remove: データストアのremoveイベントを監視します。
以下のようにpushを監視する設定してDebugに表示されればOKです。
まとめ
上記で作成したMilkcocoaノードを使ったフローは以下です。
[{
"id": "cdd872f2.32279",
"type": "milkcocoa",
"appId": ""
}, {
"id": "a1abe025.5e542",
"type": "inject",
"name": "",
"topic": "",
"payload": "{\"test\":123}",
"payloadType": "string",
"repeat": "",
"crontab": "",
"once": false,
"x": 123,
"y": 57,
"z": "d152eab6.2ead18",
"wires": [
["73104393.8cefbc"]
]
}, {
"id": "73104393.8cefbc",
"type": "milkcocoa out",
"milkcocoa": "cdd872f2.32279",
"dataStore": "message",
"operation": "push",
"targetId": "",
"name": "",
"x": 306,
"y": 57,
"z": "d152eab6.2ead18",
"wires": [
["fd5ae5bc.02a518"]
]
}, {
"id": "fd5ae5bc.02a518",
"type": "debug",
"name": "",
"active": true,
"console": "false",
"complete": "false",
"x": 500,
"y": 59,
"z": "d152eab6.2ead18",
"wires": []
}, {
"id": "b9dedb60.462128",
"type": "milkcocoa in",
"milkcocoa": "cdd872f2.32279",
"dataStore": "message",
"operation": "push",
"name": "",
"x": 202,
"y": 130,
"z": "d152eab6.2ead18",
"wires": [
["fd5ae5bc.02a518"]
]
}]
おまけ:セキュリティルール
Milkcocoaでは前述したセキュリティルールでデータアクセス権限を柔軟に操作できます。
たとえばIoTデバイスからはAPI Key認証でデータを投入して、Web画面では不特定多数(誰でも)グラフを見れるような設定をする場合は以下のようになります。
'データストア名' {
permit : query, on(push);
rule : true;
}
'データストア名' {
permit : push;
rule : account.key == 'デバイスのAPI_Key';
}
詳しくはMilkcocoaのセキュリティルールについてドキュメントをご覧ください。