obniz x Node-REDで停止処理


obnizをNode.jsでコードを書いて使う時は、基本的に毎回プログラムを起動してシャットダウンしてが行われますが、Node-REDの場合Node.jsのプロセスは起動し続ける仕様なため、プログラムの起動ではなく接続の解除を行って停止を行うという仕様になっています。

obnizノードを使ってプログラムの接続解除に使えるフローを置いておきます。

## コピペ参照用

```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"]]}]
```

使い方が分かる人は↑をコピーして使いましょう。

> ![スクリーンショット 2024-05-14 13.09.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/66e7e19a-576a-8a9c-f2f4-022a293775c4.png "スクリーンショット 2024-05-14 13.09.21.png")


## 使い方

最初は以下の手順で処理の停止をしてみると良いと思います。

### 1. JSONの読み込み

まずはこちらの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貼り付け

> ![](https://i.gyazo.com/e20d912141a65b0f5bd71cd4388ba118.gif)


グレー、水色、緑のノードが連なっているもの（フロー）が読み込まれました。

### 2. "obnizの処理を停止"ノードにIDを設定

`obnizの処理を停止`と書いているノードをダブルクリックして設定を開き、自身が使っている停止させたいobnizのobniz IDを選択します。

> ![](https://i.gyazo.com/c9e1a0b00fb6249a1f820729d7f82913.gif)

読み込んで保存（デプロイ）を押して保存します。

> ![](https://i.gyazo.com/e3a4751b404e95e02552271a9a7cb71c.gif)

うまくいくと`obnizの処理を停止`のノードがconnected状態になります。

> ![スクリーンショット 2024-05-11 2.23.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/5e10b99b-de5c-0dee-05a6-49e798a31295.png "スクリーンショット 2024-05-11 2.23.51.png")

### 3. "停止処理フロー"のボタンを押して停止

グレーの"停止処理フロー"の左側のボタンを押すと接続が解除されて赤色のdisconnectedの表示になります。

> ![](https://i.gyazo.com/68dfc669783e69f6b6dc73e6692b40a4.gif)


obniz Board側はQRコードとobniz IDが表示されていれば成功です。

> ![スクリーンショット 2024-05-11 1.37.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/8ffc2706-0b1f-8abc-abd5-2099dd0e717e.png "スクリーンショット 2024-05-11 1.37.43.png")

## 中身を少し解説

"obnizの処理を停止"のノードをダブルクリックで開くと中身を見ることができます。

> ![](https://i.gyazo.com/501a036bea7c8b08db9da2cb2371fdad.png)

公式ドキュメントにあるclose関数というものを実行しています。

> https://docs.obniz.com/ja/reference/common/connection/reset


```js
msg.payload = "close";
await obniz.wait(1000); 
obniz.close();

return msg;
```

これでobnizの接続を解除してNode-REDからのプログラムを停止してくれます。

ちなみにmsg.payloadに"close"という文字を入れているので、デバッグコンソールにも"close"という文字が表示されます。

(closeのイベントを待って正確に渡したい気持ちもしますね、現状だとcloseがうまくできなくてもデバッグコンソールにはcloseと表示されると思います)