Node-Red 简介
官网: Node-RED (nodered.org), 针对事件驱动型应用程序的低代码编程. 来看下 Node-RED - Wikipedia 的翻译:
Node-RED是一种基于流的可视化编程开发工具,最初由IBM开发,用于将硬件设备,API和在线服务作为物联网的一部分连接在一起。
Node-RED提供了一个基于Web浏览器的流编辑器,可用于创建JavaScript函数。可以保存或共享应用程序的元素以供重复使用。运行时基于 Node.js 构建。在 Node-RED 中创建的流使用 JSON 进行存储。从 0.14 版开始,MQTT 节点可以建立正确配置的 TLS 连接。
现在的嵌入式设备经常需要一个比较华丽的配置界面, 最好能跨平台(Win, Linux, macOS 或 Android, iOS), 最简单的方法当然是网页了. 很多时候会使用 Home Assistant (home-assistant.io) 和 Node-Red 联用.
Home Assistant 其实类似于一个操作系统, 集成有完整的Linux内核? 所以功能完备, 但体积较大 ~1.3GB. 有很多开箱即用的功能, 其 Lovelace 界面比较完善, Supervisor 和 HACS(Home Assistant Community Store) 也可以安装各种各样的组件, 然后米家或其它物联网设备(窗帘, 灯, 电视, 空调, 扫地机, 电饭锅, 电冰箱…)可以轻松连接进去, 也可以集成HomeKit, 实现 Hey, Siri, 开灯
之类的语音命令. 可以地图设置, 比如快到家的时候自动开启空调. 其实车可以算物联网设备, 可以实现诸如 小爱同学, 进入自动驾驶
之类的命令. 总之, Home Assistant 可以把不同厂家不同平台的智能设备(功能)嵌入到同一个操作面板, 用手机或PC方便的进行自动化管理.
如果是资源较弱的微型嵌入式设备, 对体积和系统资源要求严格, 可以使用 Node-Red 搭配 node-red-dashboard 完成轻量级的简洁界面.
本篇以在 虚拟机 Ubuntu20 中搭建作为演示
Node-Red 安装
首先在终端输入 date
, 看是否是现在的时间, 很多嵌入式设备没有后备电池或网络时间同步, 时间不对是装不上的. 如果时间不对, 运行 sudo date -s "$(curl -s --head http://baidu.com | grep ^Date: | sed 's/Date: //g')"
让系统时间和网络时间对齐.
时间正确后就可以正常安装了
#!/bin/bash
# node.js
curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs
# node-red
sudo npm install -g --unsafe-perm node-red
说明:
- 如果curl有问题, 打开链接保存文件, 然后
sudo -E bash setup_14.x
- 安装位置的查看可以用命令
npm list -g --depth 0
, 这里实际是在/usr/lib/node_modules/node-red
参考:
- Supported Node versions : Node-RED (nodered.org),官方推荐的是 Node 14.x
- nodesource/distributions: NodeSource Node.js Binary Distributions (github.com), 如果想安装更新的 Node.js v16.x 可以参考这个
- Running Node-RED locally : Node-RED (nodered.org)
Node-Red 运行
直接在命令行输入 node-red
即可
$ node-red
29 May 18:53:07 - [info]
Welcome to Node-RED
===================
29 May 18:53:07 - [info] Node-RED version: v2.2.2
29 May 18:53:07 - [info] Node.js version: v14.19.3
29 May 18:53:07 - [info] Linux 5.13.0-44-generic x64 LE
29 May 18:53:07 - [info] Loading palette nodes
29 May 18:53:07 - [info] Settings file : /home/z/.node-red/settings.js
29 May 18:53:07 - [info] Context store : 'default' [module=memory]
29 May 18:53:07 - [info] User directory : /home/z/.node-red
29 May 18:53:07 - [warn] Projects disabled : editorTheme.projects.enabled=false
29 May 18:53:07 - [info] Flows file : /home/z/.node-red/flows.json
29 May 18:53:07 - [info] Creating new flow file
29 May 18:53:07 - [warn]
---------------------------------------------------------------------
Your flow credentials file is encrypted using a system-generated key.
If the system-generated key is lost for any reason, your credentials
file will not be recoverable, you will have to delete it and re-enter
your credentials.
You should set your own key using the 'credentialSecret' option in
your settings file. Node-RED will then re-encrypt your credentials
file using your chosen key the next time you deploy a change.
---------------------------------------------------------------------
29 May 18:53:07 - [info] Server now running at http://127.0.0.1:1880/
29 May 18:53:07 - [info] Starting flows
29 May 18:53:07 - [info] Started flows
说明:
- Node-Red 版本号 v2.2.2, Node.js 版本号 v14.19.3
- Node-Red 的用户文件夹默认是一个隐藏文件夹
~/.node-red
- 配置文件为
~/.node-red/settings.js
- 流文件为
.node-red/flows.json
- 默认的打开方式可以浏览器输入 系统ip:1880 端口访问
我虚拟机Ubuntu20的IP为 192.168.10.129
, 那我可以在主机的浏览器输入 http://192.168.10.129:1880/
进行访问, 如图
PM2 管理开机启动
PM2 - Home (keymetrics.io), ADVANCED, PRODUCTION PROCESS MANAGER FOR NODE.JS
, 是一个守护进程管理器, 帮助管理和保持应用程序在线.
#!/bin/bash
sudo npm install -g pm2
pm2 start $(which node-red) -- -v
pm2 startup systemd
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u $USER --hp /home/$USER
sudo systemctl daemon-reload
sudo systemctl enable pm2-$USER
sudo systemctl start pm2-$USER
pm2 save
说明:
pm2-$USER
开机服务的位置/etc/systemd/system/pm2-$USER.service
, 找不到的话可以到/lib/systemd/system/
文件夹下找
重启系统 sudo reboot
检验状态
# active (running)
$ systemctl status pm2-$USER.service
● pm2-z.service - PM2 process manager
Loaded: loaded (/etc/systemd/system/pm2-z.ser>
Active: active (running) since Sun 2022-05-29>
Docs: https://pm2.keymetrics.io/
...
# online
$ pm2 status
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name │ mode │ ↺ │ status │ cpu │ memory │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0 │ node-red │ fork │ 15 │ online │ 0% │ 71.1mb │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘
如果node-red新安装了组件, 想重启应用程序:
pm2 restart node-red
参考:
Dashboard 安装
两种安装方式: 命令行 和 界面 安装二选一即可
命令行安装:
- 需要切换到
~/.node-red
文件夹再安装 - 装完以后需要重启node-red:
cd ~/.node-red
npm install node-red-dashboard
pm2 restart node-red
界面安装:
- 右上角三横杠 -> 节点管理
- 控制板 -> 安装, 搜索
dashboard
装完后侧边栏可以看到dashboard的节点:
打开链接(IP:1880/ui)可以看到UI界面, 我这里是 http://192.168.10.129:1880/ui/
, 由于是空的, 显示:
欢迎扫描二维码关注微信公众号, 及时获取最新文章: