前言
上一篇已经把Modbus数据进行采集并通过MQTT发布至服务器,现在需要对接收的Json数据进行处理。如需获取更多请关注我的微信公众号:扫描以下二维码即可关注
数据提取
首先在NodeRed中使用Mqtt in节点并填写订阅主题,服务器为Modbus网关所连接的服务器,节点中填写网关中设置的订阅topic,然后添加一个debug节点,得到如下数据:
然后添加一个template节点,用于提取json中指定键值,例如:提取键myhome_total_energy的键值为总电表电量的值,则在模版中填写如下:
这样节点就提取出我们需要的值,如下图所示:
数据计算
接下来需要对提取的数据进行转换计算,阿尔泰的计算方式稍麻烦,下面是关于电量计算的方法:
下面是用NodeRed的函数节点进行计算:
var newMsg = {payload: ((msg.payload-0x80000000)*100*400/1000/3600).toFixed(3)};
return newMsg;
最后输出结果:
发布至HomeAssistant
以上已经把读取的电量值进行了提取和计算,最终将值要发送到HA。发送到需要用到MQTT功能,MQTT需要主题和值两个要素,下面就对数据加上主题topic,我们添加一个change节点,按照如下方式设置,设置的topci为:home_energy/energy/myhome_total_energy
下面是输出的最终结果:
最后添加一个mqtt out节点,把数据发布至HA,如下:
注意:HA服务器的MQTT地址不要填错,当然前提是你已经正确配置了HA的MQTT服务。完整的流程图如下:如果需要流程代码请到本文最底端下载,放在这里会影响阅读。
测试
下面来测试一下HA是否成功收到发布的消息,用MQTT-Explorer连接HA服务器就以看到发布成功了
结束语
以上只对电量采集作出了详细说明,功率、电流、电压等可以参见如下流程,流程代码放在文章底部,请大家取阅。
最后,有朋友可能会说用一条函数就能解决的事情,非得要用三个节点,原因如下:这是我初学NodeRed做出的流程,到如今已经运行了两年年多,运行很好;另外这样写也是为了照顾初学多朋友,便于理解。
当然目前已经替换了更简洁高效的流程,希望大家多多关注,后边都会分享给大家。
关于流程代码:
流程源代码放在我的微信公众号,请关注后获取