obnizをNode.jsでコードを書いて使う時は、基本的に毎回プログラムを起動してシャットダウンしてが行われますが、Node-REDの場合Node.jsのプロセスは起動し続ける仕様なため、プログラムの起動ではなく接続の解除を行って停止を行うという仕様になっています。
obnizノードを使ってプログラムの接続解除に使えるフローを置いておきます。
コピペ参照用
[{"id":"cb1d6d3a.017e1","type":"debug","z":"b3ffc87e7885414e","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":490,"y":320,"wires":[]},{"id":"11a346f0.5a4c19","type":"obniz-function","z":"b3ffc87e7885414e","obniz":"","name":"obnizの処理を停止","code":"msg.payload = \"close\";\nawait obniz.wait(1000); \nobniz.close();\n\nreturn msg;","x":310,"y":280,"wires":[["cb1d6d3a.017e1"]]},{"id":"76e43759.3dff68","type":"inject","z":"b3ffc87e7885414e","name":"停止処理フロー","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":120,"y":240,"wires":[["11a346f0.5a4c19"]]}]
使い方が分かる人は↑をコピーして使いましょう。
使い方
最初は以下の手順で処理の停止をしてみると良いと思います。
1. JSONの読み込み
まずはこちらのJSON形式の文字列を読み込みます。
[{"id":"cb1d6d3a.017e1","type":"debug","z":"b3ffc87e7885414e","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":490,"y":320,"wires":[]},{"id":"11a346f0.5a4c19","type":"obniz-function","z":"b3ffc87e7885414e","obniz":"","name":"obnizの処理を停止","code":"msg.payload = \"close\";\nawait obniz.wait(1000); \nobniz.close();\n\nreturn msg;","x":310,"y":280,"wires":[["cb1d6d3a.017e1"]]},{"id":"76e43759.3dff68","type":"inject","z":"b3ffc87e7885414e","name":"停止処理フロー","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":120,"y":240,"wires":[["11a346f0.5a4c19"]]}]
右上のメニューから読み込み > JSON貼り付け
グレー、水色、緑のノードが連なっているもの(フロー)が読み込まれました。
2. "obnizの処理を停止"ノードにIDを設定
obnizの処理を停止
と書いているノードをダブルクリックして設定を開き、自身が使っている停止させたいobnizのobniz IDを選択します。
読み込んで保存(デプロイ)を押して保存します。
うまくいくとobnizの処理を停止
のノードがconnected状態になります。
3. "停止処理フロー"のボタンを押して停止
グレーの"停止処理フロー"の左側のボタンを押すと接続が解除されて赤色のdisconnectedの表示になります。
obniz Board側はQRコードとobniz IDが表示されていれば成功です。
中身を少し解説
"obnizの処理を停止"のノードをダブルクリックで開くと中身を見ることができます。
公式ドキュメントにあるclose関数というものを実行しています。
msg.payload = "close";
await obniz.wait(1000);
obniz.close();
return msg;
これでobnizの接続を解除してNode-REDからのプログラムを停止してくれます。
ちなみにmsg.payloadに"close"という文字を入れているので、デバッグコンソールにも"close"という文字が表示されます。
(closeのイベントを待って正確に渡したい気持ちもしますね、現状だとcloseがうまくできなくてもデバッグコンソールにはcloseと表示されると思います)