Lunatico 中文

远程天文台一站式解决方案

LUNATICOASTRO IS A TRADEMARK REGISTERED BY LUNATICO ASTRONOMIA S.L.

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors
Lunático团队近期对Node-RED进行了一些探索。这款编程工具能够以新颖有趣的方式,将DragonflyCloudWatcher SOLO等天文硬件设备、API接口与在线服务灵活连接,是天文爱好者实现设备数据可视化、自动化控制的实用工具。
事实上,Node-RED不仅操作简单、趣味性强,而且无需投入过多精力,就能实现DragonflyCloudWatcher SOLO设备的数据展示、处理等实用功能,非常适合天文爱好者上手使用。
我最初只是想测试并展示CloudWatcher SOLO设备的部分数据,最终却借助Node-RED完成了一个近乎完整的设备控制面板。
Cloudwatcher天气数据
Cloudwatcher天气数据
你可以在网上搜索各类Node-RED实操案例,它的核心优势就是能让你便捷地连接各种设备,完成数据处理与网页端展示。所有操作均基于浏览器,全程无需复杂的本地软件安装。

温馨提示:操作风险自负。本Node-RED教程内容新颖有趣,极易耗费大量时间,建议先阅读或观看Node-RED基础教程后再上手。我们不提供任何技术担保。

下面为大家详细介绍,如何借助Node-RED实现CloudWatcher设备控制面板的搭建,同样适用于Dragonfly设备的相关操作。
 
首先,你需要完成Node-RED的安装,随后安装仪表盘组件与均值柱状图组件,这是实现DragonflyCloudWatcher SOLO设备数据展示的基础。可按照Node-RED官方指引完成基础安装,之后在命令提示符中输入以下指令,安装所需组件:
 

>>npm install node-red-dashboard

>>npm install node-red-contrib-dashboard-average-bars

组件安装完成后,启动Node-RED,输入以下指令即可:

>> node-red …

启动成功后,打开浏览器并访问地址:

http://localhost:1880

即可进入 Node-RED 编辑界面:
Cloudwatcher运行逻辑
你上方看到的内容,是导入我编写的流文件(可通过下载链接获取)后的效果,导入步骤如下:点击右上角菜单 → 选择“导入” → 选择“剪贴板”或“选择文件”,即可完成导入操作。

→ https://lunatico.es/dev/SoloDragonflyNodeRED.json

在搭建Node-RED控制面板、适配CloudWatcher SOLODragonfly设备的过程中,我曾多次访问Node-RED官方页面,查找相关操作资料、实操案例等,为大家整理出最简操作流程。
接下来重点讲解CloudWatcherCloudWatcher SOLO设备的Node-RED控制面板搭建步骤,操作非常简单,且CloudWatcher SOLO设备本身能极大简化操作流程,新手也能快速上手。
第一步,在Node-RED仪表盘编辑区(右侧)创建一个“标签页”,然后在该标签页内创建一个“分组”。从示意图中可以看到,“My observatory”标签页下,我创建了两个分组,分别对应CloudWatcher设备和Dragonfly设备,方便分类管理设备数据。
Cloudwatcher运行逻辑
接下来,我们借助Node-RED处理CloudWatcher SOLO设备数据的核心思路如下,适配所有Node-RED操控CloudWatcher SOLO设备的场景:
  • 获取CloudWatcher SOLO设备数据:通过连接 aagsolo/cgi-bin/cgiLastData
  • 拆分数据
  • 提取并展示数据:提取拆分后的数据项,进行可视化展示,同一项CloudWatcher SOLO设备数据可采用多种展示方式,也可与其他数据结合,制作混合图表进行展示
借助Node-RED制作CloudWatcher SOLODragonfly设备相关图表的可选方案非常多,尤其是搜索用户分享的实操案例后,能找到更多适配天文设备数据展示的图表类型,本文中使用的均值柱状图就是其中一种。实操过程中只需根据自身需求选择合适的图表即可。
我适配CloudWatcher SOLO设备的Node-RED流文件配置如下:
Cloudwatcher运行逻辑

第一个节点用于每隔5秒触发一次数据获取,该频率适合测试使用,在最终版本中我已调整为 30 秒。

第二个节点 “Solo last data” 负责向CloudWatcher SOLO发起网络请求,获取设备数据;随后由 “Split” 节点将接收到的数据按行拆分。
顺带一提,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设备发送控制指令的实现步骤:

Dragonfly 蜻蜓平顶天文台控制器运行逻辑

与CloudWatcher SOLO设备的配置方式类似,这里使用两个节点每秒触发一次指令流程。在每个节点中,都会加载需要发送给Dragonfly设备的指令数据。“Dragonfly properties” 函数用于配置Dragonfly设备的连接地址:在Windows系统下可直接使用默认设备名 “Dragonfly”;在Linux或其他操作系统中,则需填写设备的IP地址。最后,“send to dragonfly” 是一个UDP发送节点,用于将指令发送至Dragonfly设备。

除此之外,配置中还包含一个用于触发屋顶继电器的按钮,以及两个开关节点,分别用于控制CCD 相机和望远镜赤道仪的电源开关。

“update variables” 是一个轻量函数,用于保存CCD 相机与赤道仪的开关状态,该函数的作用将在后续步骤中体现。

接下来是Dragonfly设备返回数据的处理环节:

Dragonfly 蜻蜓平顶天文台控制器运行逻辑

我们通过UDP 10000端口接收Dragonfly传回的所有信息,并将其分为传感器数据与继电器状态数据两类进行处理。

对于传感器数据,我们采用多种可视化形式进行展示;若检测到屋顶状态异常或不一致,界面会自动弹出醒目的警告提示。

对于继电器数据,则会与面板开关保存的状态进行比对,如果我们关闭了CCD 开关,但Dragonfly反馈仍为开启,界面会显示 “运行中” 图标;若两者状态一致,则显示对勾标记。我曾尝试将对勾与开关并排显示,但最终决定保持现有布局即可🙂

总而言之,我非常喜欢这套基于Node-RED的搭建流程,它可以轻松整合来自多个设备的信息,即便像我这样不擅长界面设计的人,也能做出相当美观的效果。

以下是后续待完善的功能(非常欢迎大家共同参与改进

    • 希望能够根据温度数值,改变天空温度图表的颜色(类似CloudWatcher SOLO图表中晴朗、多云、阴天的分段色彩显示)
    • 优化湿度、光照、雨量的展示效果:湿度数值至少能根据大小变色,雨量与光照部分希望用图标代替纯数字显示
    • 整体上进一步优化界面外观与视觉体验