温馨提示:操作风险自负。本Node-RED教程内容新颖有趣,极易耗费大量时间,建议先阅读或观看Node-RED基础教程后再上手。我们不提供任何技术担保。
>>npm install node-red-dashboard
>>npm install node-red-contrib-dashboard-average-bars
>> node-red …
http://localhost:1880
- 获取CloudWatcher SOLO设备数据:通过连接 aagsolo/cgi-bin/cgiLastData
- 拆分数据
- 提取并展示数据:提取拆分后的数据项,进行可视化展示,同一项CloudWatcher SOLO设备数据可采用多种展示方式,也可与其他数据结合,制作混合图表进行展示
第一个节点用于每隔5秒触发一次数据获取,该频率适合测试使用,在最终版本中我已调整为 30 秒。
顺带一提,CloudWatcher SOLO 的cgiLastData接口输出格式如下:
- dataGMTTime=2019/04/02 17:55:41
- cwinfo=Serial: 1222, FW: 5.7
- clouds=-17.780000
- temp=16.400000
- wind=3
- gust=4
- rain=5376
- light=1
- switch=0
- safe=0
- hum=42
- dewp=3.450000
接下来,针对每个需要处理的CloudWatcher SOLO数据项,我都设置了一个开关节点。这些节点会在输入内容中查找指定字段(例如 “wind” 风速),一旦匹配到对应数据,就将其传递至下一步。后续通过一个极简函数提取数值,部分场景下还会附加额外信息。
整体流程为:每隔固定秒数向设备发起请求→拆分数据→检索各关键字段→提取对应数值→通过Node-RED图表组件完成可视化展示。
当前方式简单直接、运行稳定,完全满足CloudWatcher SOLO数据展示需求。
下面进入Dragonfly设备控制部分。这部分实现难度稍高,因为需要同时完成指令发送、数据接收与结果校验等操作。
我为自己设定的目标如下:
- 实现 CCD 相机与望远镜赤道仪的电源开关控制
- 控制天文台屋顶的开启与关闭
- 实时监测屋顶状态,并在出现异常时发出报警提示
- 通过CloudWatcher继电器面板展示设备安全运行状态
我们将内容分为两部分讲解,首先介绍向Dragonfly设备发送控制指令的实现步骤:
与CloudWatcher SOLO设备的配置方式类似,这里使用两个节点每秒触发一次指令流程。在每个节点中,都会加载需要发送给Dragonfly设备的指令数据。“Dragonfly properties” 函数用于配置Dragonfly设备的连接地址:在Windows系统下可直接使用默认设备名 “Dragonfly”;在Linux或其他操作系统中,则需填写设备的IP地址。最后,“send to dragonfly” 是一个UDP发送节点,用于将指令发送至Dragonfly设备。
除此之外,配置中还包含一个用于触发屋顶继电器的按钮,以及两个开关节点,分别用于控制CCD 相机和望远镜赤道仪的电源开关。
“update variables” 是一个轻量函数,用于保存CCD 相机与赤道仪的开关状态,该函数的作用将在后续步骤中体现。
接下来是Dragonfly设备返回数据的处理环节:
我们通过UDP 10000端口接收Dragonfly传回的所有信息,并将其分为传感器数据与继电器状态数据两类进行处理。
对于传感器数据,我们采用多种可视化形式进行展示;若检测到屋顶状态异常或不一致,界面会自动弹出醒目的警告提示。
对于继电器数据,则会与面板开关保存的状态进行比对,如果我们关闭了CCD 开关,但Dragonfly反馈仍为开启,界面会显示 “运行中” 图标;若两者状态一致,则显示对勾标记。我曾尝试将对勾与开关并排显示,但最终决定保持现有布局即可
总而言之,我非常喜欢这套基于Node-RED的搭建流程,它可以轻松整合来自多个设备的信息,即便像我这样不擅长界面设计的人,也能做出相当美观的效果。
以下是后续待完善的功能(非常欢迎大家共同参与改进)
- 希望能够根据温度数值,改变天空温度图表的颜色(类似CloudWatcher SOLO图表中晴朗、多云、阴天的分段色彩显示)
- 优化湿度、光照、雨量的展示效果:湿度数值至少能根据大小变色,雨量与光照部分希望用图标代替纯数字显示
- 整体上进一步优化界面外观与视觉体验