IBM Cloud で構築した Node-RED で obniz ノードを試して Cloudant にデータを貯めるメモ

この記事は IBM Cloud Advent Calendar 2020 の 15 日目の記事です。

IBM Cloud で構築した Node-RED で obniz ノードを試して Cloudant にデータを貯めるメモです。

obnizノードがバージョンアップ

Node-REDのobnizノードがバージョンアップした! – Qiita

こちらの記事にあるように、obniz ノードがバージョンアップしまして、obniz クラウドのエディタ JavaScript を書いて MQTT などでブリッジすることなく Node-RED の中だけで完結してやり取りをすることができます。

これができると、obniz でセンサーをつないだり、サーボやモータなどのアクチュエーターをつないだものを Node-RED で直接操作することができます。

obniz は obniz クラウドに常時つながって、IoTのややこしい処理を吸収してくれる恩恵をちゃんと受け取れることができるようになりました。

obnizとは | obniz

ということで、このような便利な仕組みが IBM Cloud で構築した Node-RED で使えるかどうか確かめつつ、 IBM Cloud の Node-RED のメリットである IBM Cloud 内の別のサービスへの接続性の高さとして、obniz のスイッチ操作をCloudant にデータを貯めてみます。

IBM Cloud にNode-REDを準備

IBM Cloud で Node-RED セットアップ (2020年9月) を参考に準備します。

image

Cloud Foundary で作ります。

image

デプロイ開始。

image

出来上がったので ID やパスワードを設定します。

image

設定できると、このような初期のフローができています。

ちなみに今回、検証のために、有料のサービス立ち上げて Node-RED を立てて最新の状態でチェックです。

obniz ノードインストール

image

メニュー > パレットの管理 > ノードの追加で node-red-contrib-obnia の名前で探して、obniz ノードインストールします。

image

無事インストールされました。IBM Cloud のサービスに挟まれているのがアツい。(個人的感想です)

今回のフロー

ということで今回のフローです。

image

フローのJSONです。

[{"id":"f9b664be.cf3118","type":"obniz-repeat","z":"e61f015e.a7b78","obniz":"dbf751c5.c96f","name":"","interval":100,"code":"// スイッチの情報をただただ流す\nlet state = await obniz.switch.getWait();\n\nmsg.payload = state;\n\nreturn msg;","x":150,"y":300,"wires":[["b238a2b0.bf24a"]]},{"id":"13b61daa.f0ff92","type":"cloudant out","z":"e61f015e.a7b78","name":"","cloudant":"","database":"obniz","service":"1ft-advent-calendar--cloudant-1607993272831-17434","payonly":false,"operation":"insert","x":650,"y":240,"wires":[]},{"id":"b238a2b0.bf24a","type":"switch","z":"e61f015e.a7b78","name":"none 以外通す","property":"payload","propertyType":"msg","rules":[{"t":"neq","v":"none","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":440,"y":300,"wires":[["7ca333ba.df155c","b3a2f4fa.be6248","13b61daa.f0ff92"]]},{"id":"7ca333ba.df155c","type":"debug","z":"e61f015e.a7b78","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":670,"y":360,"wires":[]},{"id":"b3a2f4fa.be6248","type":"obniz-function","z":"e61f015e.a7b78","obniz":"dbf751c5.c96f","name":"","code":"// スイッチ表示\nobniz.display.clear();\nobniz.display.print(\"[switch]\\n\");\nobniz.display.print(msg.payload);","x":680,"y":300,"wires":[[]]},{"id":"dbf751c5.c96f","type":"obniz","z":"","obnizId":"0000-0000","deviceType":"obnizboard","name":"","accessToken":"","code":"obniz.display.clear();\nobniz.display.print(\"obniz&IBM Cloud\");"}]

obniz 初期設定

image

obniz の設定は 0000-0000 にしてあるので、自分の obniz ID に置き換えて設定してください。

obniz.display.clear();
obniz.display.print("obniz&IBM Cloud");

接続時に速やかに行われる初期化処理ということでメッセージが出るようにしています。

実は初期化処理を把握するために、試行錯誤があったところは Node-RED obniz ノードの起動時の処理はノード内の初期化処理に書いたほうが良いというメモ をよろしければご参考ください。

obniz repeat ノードの処理

image

obniz repeat ノードです。

image

100 ミリ秒という間隔で、コード内に書かれたコードを実行します。

// スイッチの情報をただただ流す
let state = await obniz.switch.getWait();

msg.payload = state;

return msg;

スイッチの情報をただただ流すようにしています。

switch ノードの設定

image

switch ノードの設定です。

image

これで、 obniz repeat ノードで取得した obniz のスイッチの値を none の操作以外を通すことで、押した push ・右に回す right ・左に回す left といった処理が取得できます。

image

debug ノードではこのような値が取得できます。

obniz function ノードの設定

image

obniz function ノードでは obniz にまつわる色々な処理を書きます。function ノードに obniz 用の予約変数が準備されているイメージです。

image

// スイッチ表示
obniz.display.clear();
obniz.display.print("[switch]\n");
obniz.display.print(msg.payload);

スイッチの値が来るので、それをディスプレイに表示しています。

image

たとえば、押したときの様子です。

cloudant ノードの設定

image

さて、 IBM Cloud の Node-RED は IBM Cloud 内で連携できる他のサービスと連携がしやすいです。今回はobniz のスイッチ操作をCloudant にデータを貯めてみます。

image

このように、Cloudant の場合は、Node-RED を作る時点で設定情報を保持するために Cloudant が一つあるため、Service のところにすぐに表示されます。便利。

Database 名を obniz として Operation を insert にしてカジュアルにデータを貯めてています。ほんとこれだけ。

image

スイッチを左右に動かします!

image

アプリの詳細ページから Cloudant ダッシュボードを見に行きます。

image

Database を確認します。

image

デプロイ後にいろいろ動かしたので、すでにデータが色々入ってきています!

image

無事、 push のデータや

image

右に操作した right のデータが入ってきています!

ということで、IBM Cloud で構築した Node-RED で obniz ノードが動くか検証してみたところ、問題なく動いたし、IBM Cloud 内のサービスとも連携がとてもやりやすかったという知見が得れました!