0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

サービスとして実行されているNode-REDのMQTTトピックを環境変数から設定する方法

Posted at

どういう時に使う?

MQTTのInputノードのtopicのフィルターはハードコードしなければならず、動的には変更できません。

とある通り、MQTTのTopicは変数などで定義することはできません。
image.png

IoT機器を1台しか使わない場合は問題になることはないのですが、複数のIoT機器を同じソースで扱いたい場合に厄介です。
例えば、MQTT Input ノードをトリガーにして raspberry pi で何らかの操作をする場合、機器ごとにTopicを変えないといけなくなってしまいます。(そうじゃないと全ての機器が一斉に動いてしまします:sweat_smile:)

となると、Gitなどを使ったソース管理や一括変更ができずに機器が増えれば増えるほど変更のハードルが上がってしまうことになります:sob:

では、Node-REDはどうやって設定する?

これを回避する方法のひとつは、$(MY_TOPIC) のような環境変数をtopicにセットすることです。 Node-REDのランタイムが開始したとき、ノードのプロパティがその環境変数に置換されます。 これによりtopicの変更ができますが、 環境変数の変化を反映するにはNode-REDの再起動が必要です。

つまり、下記の様に設定すれば良いわけです。

image.png

どうやって環境変数を設定する?

サービスとして実行されている場合は、ユーザーはログインしていないので .bashrc は実行されません。
この様な場合はsystemdスクリプトの/etc/systemd/nodered.service.dで設定できます。ただ、これには Node-REDのアップデートで上書きされてしまうため、より良い方法論としては

sudo systemctl edit nodered

を使うことの様です。
このコマンドを実行することでエディタが起動されます。
image.png

あとは

[Service]
Environment="TOPIC=test"

と書き込むことで環境変数として読み込むことができます。
(上記の例の場合はTOPICという環境変数にtestという値を設定)

きちんと環境変数を読み込むことができたかを確認するためには changeノードを使うのが便利です。
image.png

下記のフローでdebugノードに設定した環境変数が表示されれば成功です。
image.png

上記のフロー

[{"id":"bfda43e4.a9b1a","type":"inject","z":"136cfccf.a00ab3","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":150,"y":80,"wires":[["60034503.56516c"]]},{"id":"60034503.56516c","type":"change","z":"136cfccf.a00ab3","name":"環境変数を設定","rules":[{"t":"set","p":"payload","pt":"msg","to":"TOPIC","tot":"env"}],"action":"","property":"","from":"","to":"","reg":false,"x":390,"y":80,"wires":[["ec1ab5ce.8ff598"]]},{"id":"ec1ab5ce.8ff598","type":"debug","z":"136cfccf.a00ab3","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":620,"y":80,"wires":[]}]

参考

公式のドキュメントが参考になります。
日本語版はこちら
ユーザコミュニティでのやりとり(英語)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?