NodeRedでRPiの制御

最終更新日

前記事で、RPi をWifi のAPにして、回線遅延シュミレーターを作ってみた。

RPi で回線遅延シュミレーター

RPi で回線遅延シュミレーター

2020.09.19

せっかなので、外部から操作して、自由に遅延時間を変更したい。

I/F

RPiなので、ハードウェアI/F にしたい。

各種状態は、8個のLEDで表示しよう。

が、それだけでいいだろうか?

ネットワーク機器は、手元に置いて操作できるとは限らない。
マシンルームに置くこともありうる。

ということで、こんな構成を考えてみた。

RPi にNodeRedを起動して、遅延制御機能のサーバとして利用する。

BlinkT のsetup

driver のinstall

$ curl https://get.pimoroni.com/blinkt | bash

数分以上かかる。

終わったら、サンプルプログラムでテスト

$ cd Pimoroni/blinkt/examples
$ python3 rainbow.py

status表示用の適当なプログラムを作ってみる

LEDの表示用の簡単なpython scriptを作ってみる。

  • Usage
Usage: rpi_status.py L0 L1 L2 L3 L4
       L0 ... LAN ok/ng
       L1 ... WLAN ok/ng
       L2 ... on/off
       L3 ... on/off
       L4-L7 ... Delay (100msec)
  • 実行サンプル
$ python3 rpi_status.py ok ok off off 1000
  • サンプルソース

https://gist.github.com/kurosuke/cdf91e867652797e506f6b3539194e2d

Node-Red の setup

Node-Red のinstall

制御用のコントラーラーとして、Node-Redをinstall する。

https://nodered.jp/docs/getting-started/raspberrypi

$ bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

10分くらいかかる。

起動後に、Node-Red にアクセス

http://rpilss.local:1880/

前回の記事通りに設定済みなら、 rpilss.local は、192.168.100.1 でもいい。

Node-Red で制御

先ほどのPython scriptは、Node-Redから起動する。

ということは、Node-Red で以下のステータスを管理する必要がある。

  • LAN 状態(LINKUP and IP取得でOK)
  • WLAN状態 (LINKUP and IP取得でOK)
  • 遅延msec

Node-Redにはメモリ上にGlobal領域があるので、各イベントがその内容を更新するように設定する。

細かいテクニックは、後日。
フローを書き出したファイルは以下。

flows.json

これで、RSET API サーバ機能も実装して、以下のendpoint で操作できるようになった。

状態取得

$ curl -X GET http://rpilss.local:1880/tc
---
{"datetime":"2020-09-22T11:23:56.122Z",
"delay_msec":100,
"lan":"ok",
"wlan":"ok",
"lan_ip":"192.168.7.107"}

遅延を200msecに設定

$ curl -X PATCH http://rpilss.local:1880/tc?delay_msec=200
---
{"datetime":"2020-09-22T11:24:53.105Z",
"delay_msec":200,
"lan":"ok",
"wlan":"ok",
"lan_ip":"192.168.7.107"}```

遅延を0に戻す

$ curl -X PATCH http://rpilss.local:1880/tc?delay_msec=0
---
{"datetime":"2020-09-22T11:25:47.729Z",
"delay_msec":0,
"lan":"ok",
"wlan":"ok",
"lan_ip":"192.168.7.107"}
---

Node-Red Dashboardで制御

node-red-dashboard をinstall して設定すると、こんな画面も簡単に作れる。

http://rpilss.local:1880/ui/

REST APIでM5StickC から操作

M5StickCでNode-Redにアクセス

M5StickCでNode-Redにアクセス

2020.09.22

シェアする