始める始めると言いつつまだ始めてない FlashAir Lua。Zabbix は Zabbix Sender が無くてもソケット通信ができればデータを送れるのは前に試したときにわかったけど、FlashAir の Luaからソケット通信が出来るかどうかがわからない。とりあえず HTTP で何かするのは出来そうなので Node-RED の勉強がてらインターフェイスを準備しておく。
今回は Docker の node-red-docker を使用。
$ sudo docker run -it -p 1880:1880 --name node-red-alpha nodered/node-red-docker
http://localhost:1880
を開いて Node-RED へ。
まずは入力になるノードを作成していく。HTTP GET と HTTP POST は両方作る必要はなく、用途に合わせて作成。
入力で HTTP GET ノードを作成。
入力に HTTP POST ノードを作成。
中間に JSONノードを作成。
その次に TCPリクエストノードを作成。ポートは Zabbix の待受ポートを指定する。
一通り出来上がるとこんな感じ。あとはデプロイしておしまい。
テストで GET、POST 両方試してみる。Zabbix に送る JSONはこんな感じ。ホストは raspberrypi-zero
、キーは test
を作成してある。
{"request": "sender data" , "data": [{"host": "raspberrypi-zero" , "key": "test" , "value": "0" }]}
まずは GET。data は配列で送る必要がある。$RANDOM
はシェルの変数で適当な数値が入る。
curl -g-X GET "http://localhost:1880/get?request=sender+data&data[0][host]=raspberrypi-zero&data[0][key]=test&data[0][value]=${RANDOM}"
次に POST。Content-Type: application/json
を忘れずに。
curl -X POST -H'Content-Type: application/json'--data\'{"request": "sender data", "data": [ {"host": "raspberrypi-zero" , "key": "test" , "value": "'${RANDOM}'" } ]}' http://localhost:1880/post
いずれも成功すれば Zabbix からメッセージが返ってくる。このメッセージが返ってこなければ TCPリクエストに失敗している可能性がある。また、 processed ではなく failed になってしまう場合は host や key が間違っていたり、JSONの内容が間違っている可能性がある。
ZBXDZ{"response":"success","info":"processed: 1; failed: 0; total: 1; seconds spent: 0.000064"}
Zabbix のダッシュボードでデータを確認してみる。
Node-RED はデータを視覚的に繋げられて、モニタリングやデバッグがもできるので面白い。