昨天刷到個博主,跟著她的教程開始實踐。
Node-red的基礎使用——inject/debug/function的使用(1)
Node-red的基礎使用——cronplus節點的使用(2)
透過(1)大致理解了node-red裡面的資訊傳遞,以及javaScript寫的function,雖說部分細節不甚明瞭,但不妨礙拿來用。
到了(2)時,首先遇到的是cronplus節點需要額外安裝。
查了下node-red-contrib-cron-plus 2.1.0應該比較契合。
但在安裝時,又出現了一直卡住無法安裝的情況,看樣子像是網路問題。於是檢索了一下,又說是NPM源的問題。
執行換源操作後,順利安裝成功。
方法如下:Node-red節點安裝換源
然後配置了這樣的程式,用來在dashboard上顯示當前時間。
cronplus節點,讓它每秒輸出一次時間戳
Function節點設定,主要功能見註釋,詳細說明見Node-red的基礎使用——inject/debug/function的使用(1)評論區。
Debug節點設定,在控制檯輸出內容
文字顯示,用來在dashboard上顯示
結果
顯示發現時間不對。
初步判斷可能是時區錯誤,然後搜尋解決方法。
先檢視主機系統時區和時間。
$ cat /etc/timezone
Asia/Shanghai
$ date
2024年 09月 10日 星期二 09:30:27 CST
都是OK的。
進入docker
$ sudo docker exec -it mynodered bash
然後再看時間和時區。
$ cat /etc/timezone
cat: can't open '/etc/timezone': No such file or directory
$ date
Tue Sep 10 01:33:02 UTC 2024
發現時間不對,timezone沒許可權。
再次退出,用root使用者進/
$ sudo docker exec -u root -it mynodered bash
5a7772b55fa0:/usr/src/node-red#
# cat /etc/timezone
cat: can't open '/etc/timezone': No such file or directory
沒有看到時區配置。
於是,參照AI的意見,在容器內執行
# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
建立一個指向/usr/share/zoneinfo/Asia/Shanghai的符號連結。
然後,退出容器。
重啟容器
$ sudo docker restart mynodered
mynodered
於是,我們可以看到正確的時間了。
除了這個方案,AI還提示了透過node-red的timezone節點進行時區設定,還沒來得及嘗試,不知道是不是一本正經地胡說八道。