树莓派-搭建Node-RED服务

本文介绍了Node-RED的安装、启动和安全配置过程,适用于树莓派设备。首先,通过官网提供的安装脚本或apt包管理器安装Node-RED。接着,使用命令行管理Node-RED服务,包括启动、停止和重启。为了增强安全性,配置了用户权限和编辑保护,通过`node-red-admin hash-pw`生成密码,并在settings.json中启用adminAuth。此外,还展示了如何安装dashboard节点创建Web界面,以及Node-RED常用节点的简介。

Node-RED官网:https://nodered.org/

Node-RED 是一种编程工具,用于以新颖有趣的方式将硬件设备、API 和在线服务连接在一起。它提供了一个基于浏览器的编辑器,可以使用调色板中的广泛节点轻松将流连接在一起,只需单击一下即可将其部署到其运行时。
对于物联网设备常用的树莓派设备,Node-RED增加了对树莓派IO的控制,而树莓派的软件库也增加了Node-RED的管理。

一、Node-RED安装

Node-RED官网提供安装脚本,可以很方便的在树莓派上部署最新版的Node-RED:
https://nodered.org/docs/getting-started/raspberrypi#prerequisites
在树莓派侧安装Node-RED,也可以直接使用apt包管理进行安装,由于Node-RED依赖node,所以需要首先安装依赖包。

sudo apt install node npm
sudo apt install nodered

注:树莓派apt源安装的版本为“nodered/oldstable,now 2.2.3-2 armhf",在某些树莓派(硬件、OS)上安装会提示找不到依赖npm包。

二、Node-RED启动

安装完成后,可以使以下命令对node-red进行管理。

# 启动node-red 
node-red-start
# 停止node-red
node-red-stop
# 重启node-red
node-red-restart

当然也可以设置为自动启动。

sudo systemctl enable nodered.service
sudo systemctl disable nodered.service

启动服务后,可以使用http://:1880方式访问使用Node-RED服务。
在这里插入图片描述

三、Node-RED 安全设置

Node-RED默认使用http://:1880的方式就可以直接访问,使用Node-RED的安全配置,可以增加用户权限配置和编辑保护。
官网链接:https://nodered.org/docs/user-guide/runtime/securing-node-red#editor–admin-api-security
当前我们安装的Node-RED版本为2.1.6,根据官方文档,我们可以使用以下命令生成密钥:

node-red admin hash-pw <password>

Node-RED的配置文档,默认在当前用户的./node-red/setting.json文件中,默认为:

119     // Securing Node-RED
120     // -----------------
121     // To password protect the Node-RED editor and admin API, the following
122     // property can be used. See http://nodered.org/docs/security.html for details.
123     //adminAuth: {
124     //    type: "credentials",
125     //    users: [{
126     //        username: "admin",
127     //        password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
128     //        permissions: "*"
129     //    }]
130     //},

默认为注释状态,即不启用鉴权控制,开启adminAuth并更新password后,重启Node-RED服务后,访问Node-RED就需要使用账号密码。

119     // Securing Node-RED
120     // -----------------
121     // To password protect the Node-RED editor and admin API, the following
122     // property can be used. See http://nodered.org/docs/security.html for details.
123     adminAuth: {
124         type: "credentials",
125         users: [{
126             username: "admin",
127             password: "$2b$08$3.bT1hgxm0n97sLuABoXCOmRtXpt..HxbyV0VDhjfszIQRpM49Mcy",
128             permissions: "*"
129         }]
130     //},

在这里插入图片描述

四、Node-RED Web界面

默认的Node-RED并没有web ui界面,可以通过安装dashboard节点,创建简易的web ui界面。
如下图,依次选择“节点管理”,“控制面板”,“安装”,搜索框输入“dashboard”进行检索,选择node-red-dashboard节点进行安装。
在这里插入图片描述

在这里插入图片描述

部署完成后,可以使用http://:1880/ui的方式进行访问。
在这里插入图片描述

四、Node-RED常用节点

1、dashboard

node-red-dashboard节点为Node-RED提供了多样的人机界面组件,包括提供图形、仪表盘、文字输出界面等输出控件,也有按键、滑动条、文字等输入界面,十分适合用于物联网系统数据的可视化展示。

### 三级标题:在树莓派上通过 Node-RED 连接海康威视摄像机的方法 在树莓派上使用 Node-RED 连接海康威视摄像机,可以通过 Node-RED 的节点功能实现视频流的采集与转发。Node-RED 是一种基于 Web 的可视化编程工具,允许用户通过“连线”方式将不同的节点连接起来,实现数据的采集、处理和传输[^1]。 首先,确保树莓派上已经安装了 Node-RED 和 FFmpeg。可以通过以下命令安装 Node-RED: ```bash sudo apt-get install nodered ``` FFmpeg 是用于处理音视频流的工具,可以用来从海康威视摄像头拉取 RTSP 视频流,并将其转换为其他格式或推送到指定的 RTMP 服务器。安装 FFmpeg 的命令如下: ```bash sudo apt-get install ffmpeg ``` 在 Node-RED 中,可以通过添加 `ffmpeg` 节点来实现与摄像头的对接。配置节点时,需要提供摄像头的 RTSP 地址以及认证信息。例如,海康威视摄像头的 RTSP 地址通常格式如下: ``` rtsp://admin:password@192.168.1.8:554/h264/ch1/main/av_stream ``` 其中 `admin` 是用户名,`password` 是密码,`192.168.1.8` 是摄像头的 IP 地址。将此地址配置到 `ffmpeg` 节点的输入参数中,并设置输出格式为 FLV 或 HLS,以便于网页端播放[^2]。 如果希望在网页端播放视频流,可以将视频流通过 `rtmp` 协议推送到本地 RTMP 服务器,例如使用 `nginx-rtmp` 模块搭建服务器。Node-RED 可以调用 `ffmpeg` 命令实现推流功能,命令如下: ```bash ffmpeg -i rtsp://admin:password@192.168.1.8:554/h264/ch1/main/av_stream -c copy -f flv rtmp://127.0.0.1:1935/live/123 ``` 该命令将视频流从摄像头拉取,并直接复制到本地 RTMP 服务器的指定路径中,前端可以通过 `rtmp://` 或 `http-flv` 协议访问该视频流。 在 Node-RED 中,可以使用 `exec` 节点执行该命令,也可以通过 `function` 节点编写 JavaScript 代码调用 `child_process` 模块执行命令。 此外,还可以使用 `rtsp-relay` 模块搭建一个 WebSocket 服务器,将 RTSP 流转换为 WebSocket 流,并通过网页端的 `jsmpeg` 解码器播放视频。该方法适用于需要在网页端直接播放视频流的场景。搭建 WebSocket 服务器的代码如下: ```javascript const express = require('express'); const app = express(); const { proxy } = require('rtsp-relay')(app); const handler = proxy({ url: `rtsp://admin:password@192.168.1.8:554/h264/ch1/main/av_stream`, verbose: false, additionalOptions: ['-rtsp_transport', 'tcp'] }); app.ws('/api/stream', handler); app.listen(2000, '127.0.0.1'); ``` 该代码创建了一个 WebSocket 服务器,并将 RTSP 流转换为 WebSocket 流,前端可以通过 `/api/stream` 路径访问视频流[^3]。 为了确保摄像头在线,可以使用 `ping` 和 `axios` 模块检测摄像头的 IP 地址是否可达。Node-RED 可以调用 `ping` 模块检测摄像头是否在线,并通过 `http` 请求返回检测结果。示例代码如下: ```javascript let ping = require('ping'), axios = require('axios'); router.post('/pingIp', function (req, res, next) { let ips = req.body.ips, promiseArr = []; ips.forEach(function (ip) { let promise = ping.promise.probe(ip, { timeout: 2, extra: ['-i', '2'], }) promiseArr.push(promise); }); axios.all(promiseArr).then((response) => { res.send({ "code": 200, "message": "成功", "result": "success", "content": response }); }); }); ``` 该代码通过 `ping` 模块检测摄像头的 IP 地址是否在线,并通过 `axios` 模块返回检测结果[^4]。 --- ###
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Loong7066

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值