昨天刷到个博主,跟着她的教程开始实践。
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节点进行时区设置,还没来得及尝试,不知道是不是一本正经地胡说八道。