Nodered學習記錄-時間戳和時區設定

科里布發表於2024-09-10

昨天刷到個博主,跟著她的教程開始實踐。
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節點進行時區設定,還沒來得及嘗試,不知道是不是一本正經地胡說八道。

相關文章