質問編集履歴
4
やったことの追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -64,3 +64,51 @@
|
|
64
64
|
しかし、node-redのUI上において、デバグノードで$MYIPを出力しても""が返ってきます。
|
65
65
|
また、mqtt outノードでは$MYIPをトピックとしたところ、"不正なトピックが設定されています"と表示されました。
|
66
66
|
|
67
|
+
### 20230308追記4
|
68
|
+
"`~/.node-red`内の`environmentと`いう名称のファイル"を使用できなかったため、ラズパイに入っていたnode および node-redのバージョンを上げました。(これはこれで手間取ってしまいました)
|
69
|
+
node : v10.21.0 --> v16.19.1
|
70
|
+
node-red : v1.0.6 --> v3.0.2
|
71
|
+
しかしながら、`~/.node-red/environment` を作ってそこに環境変数を指定しても、node-red内では使用することができませんでした。やり方が間違っていたのかもしれませんが、今回は諦めてしまいました。
|
72
|
+
|
73
|
+
結局以下3点の変更を加えることで、node-red内で使える環境変数にIPアドレスを指定することができました。
|
74
|
+
皆さん、いろいろ教えてくださってありがとうございました。皆さんのアドバイスを組み合わせた感じになりましたが、今回は86ps様をベストアンサーにいたします。
|
75
|
+
|
76
|
+
①ノードレッドのサービス(/lib/systemd/system/nodered.service)に以下の環境変数を追加
|
77
|
+
```
|
78
|
+
[Service]
|
79
|
+
Environment=MYIP=192.168.XXX.XXX
|
80
|
+
```
|
81
|
+
|
82
|
+
②ノードレッドサービス内の環境変数を変更する、以下のシェルスクリプト(/usr/local/bin/update_myip.sh)を追加して、`chmod +x update_myip.sh`で実行可能に設定
|
83
|
+
```
|
84
|
+
#!/bin/bash
|
85
|
+
new_ip=$(grep -A 3 'wlan0' /etc/dhcpcd.conf | grep ip_address | grep -o '192.168.[0-9]\+.[0-9]\+')
|
86
|
+
if [ -z "$new_ip" ]; then
|
87
|
+
echo "No IP address containing '192.168' is found."
|
88
|
+
else
|
89
|
+
if grep -q 'MYIP=' /lib/systemd/system/nodered.service; then
|
90
|
+
sed -i "s/MYIP=.*/MYIP=$new_ip/" /lib/systemd/system/nodered.service
|
91
|
+
echo "MYIP variable has been updated to $new_ip"
|
92
|
+
else
|
93
|
+
echo "some error occurred"
|
94
|
+
fi
|
95
|
+
fi
|
96
|
+
```
|
97
|
+
③update_myip.shを実行するサービスupdate-myip-in-nodered.serviceを追加(/etc/systemd/system/update-myip-in-nodered.service)
|
98
|
+
```
|
99
|
+
[Unit]
|
100
|
+
Description=Update MYIP
|
101
|
+
Before=nodered.service
|
102
|
+
|
103
|
+
[Service]
|
104
|
+
Type=oneshot
|
105
|
+
ExecStart=sudo /bin/sh -c 'sudo /usr/local/bin/update_myip.sh'
|
106
|
+
|
107
|
+
[Install]
|
108
|
+
WantedBy=multi-user.target
|
109
|
+
```
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
|
114
|
+
|
3
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -54,3 +54,13 @@
|
|
54
54
|
ところが再起動後に`/etc/environment`を確認しても`MYIP`が追加されていなかったので、`systemctl list-units -all --type=service`で確認したところ、
|
55
55
|
`set-envvar.service`の`LOAD`が`bad-setting`になっていました。
|
56
56
|
原因がよくわからずに困っています。
|
57
|
+
|
58
|
+
### 20230207 追記3
|
59
|
+
/etc/environment での環境変数の設定は今回は避けるべきという指摘をいただいたので、
|
60
|
+
追記2で作ったset-envvar.serviceファイルは破棄して、`/lib/systemd/system/nodered.service`において以下のような追記をしました。
|
61
|
+
```
|
62
|
+
ExecStartPre=/bin/sh -c "sudo /bin/systemctl set-environment MYIP=$(/bin/hostname -I)"
|
63
|
+
```
|
64
|
+
しかし、node-redのUI上において、デバグノードで$MYIPを出力しても""が返ってきます。
|
65
|
+
また、mqtt outノードでは$MYIPをトピックとしたところ、"不正なトピックが設定されています"と表示されました。
|
66
|
+
|
2
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -34,3 +34,23 @@
|
|
34
34
|
`と記入したところ、node-red内で`$MYIP`を出力すると`XXX.XXX.XXX.XXX`が出力できるようになりました。
|
35
35
|
しかし、ラズパイが複数台あるので、
|
36
36
|
`Environment=MYIP=$(hostname -I)`のように指定したいのですが、こちらだとnode-red内で`$MYIP`を出力すると`$(hostname`が出力されてしまって困っています...
|
37
|
+
|
38
|
+
### 20230206追記2
|
39
|
+
node-redをサービスで起動しているので、それより早くenvironmentを更新できるように、
|
40
|
+
`/etc/systemd/system/set-envvar.service`というファイルを作って、以下の文章を記入しました。
|
41
|
+
MYIPがすでにある場合は更新、ない場合は追加、みたいなつもりです。
|
42
|
+
```
|
43
|
+
[Unit]
|
44
|
+
Description=Update or Add MYIP in /etc/environment
|
45
|
+
Before=nodered.service
|
46
|
+
|
47
|
+
[Service]
|
48
|
+
ExecStartPre=/bin/sh -c "if grep -q MYIP /etc/environment; then sed -i 's/MYIP=.*/MYIP=$(hostname -I)/g' /etc/environment; else echo MYIP=$(hostname -I) >> /etc/environment; fi"
|
49
|
+
|
50
|
+
[Install]
|
51
|
+
WantedBy=multi-user.target
|
52
|
+
```
|
53
|
+
|
54
|
+
ところが再起動後に`/etc/environment`を確認しても`MYIP`が追加されていなかったので、`systemctl list-units -all --type=service`で確認したところ、
|
55
|
+
`set-envvar.service`の`LOAD`が`bad-setting`になっていました。
|
56
|
+
原因がよくわからずに困っています。
|
1
やったことの追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -27,3 +27,10 @@
|
|
27
27
|
で環境変数を確認すると、MYIPが登録されていませんでした。
|
28
28
|
|
29
29
|
大きな勘違いをしているかもしれません、ご指導お願いいたします。
|
30
|
+
|
31
|
+
### 20230206追記
|
32
|
+
`/lib/systemd/system/nodered.service`内で、[Service]下に、
|
33
|
+
`Environment=MYIP=XXX.XXX.XXX.XXX
|
34
|
+
`と記入したところ、node-red内で`$MYIP`を出力すると`XXX.XXX.XXX.XXX`が出力できるようになりました。
|
35
|
+
しかし、ラズパイが複数台あるので、
|
36
|
+
`Environment=MYIP=$(hostname -I)`のように指定したいのですが、こちらだとnode-red内で`$MYIP`を出力すると`$(hostname`が出力されてしまって困っています...
|