智能家居软件篇——用NodeRed解析Json数据

前言

上一篇已经把Modbus数据进行采集并通过MQTT发布至服务器,现在需要对接收的Json数据进行处理。如需获取更多请关注我的微信公众号:扫描以下二维码即可关注

afec3a104cbc4115abb719c78725132f.jpeg

数据提取

首先在NodeRed中使用Mqtt in节点并填写订阅主题,服务器为Modbus网关所连接的服务器,节点中填写网关中设置的订阅topic,然后添加一个debug节点,得到如下数据:

 

74b0eabd6c40f33ce6667c850943d3d4.png

 

然后添加一个template节点,用于提取json中指定键值,例如:提取键myhome_total_energy的键值为总电表电量的值,则在模版中填写如下:

 

d76d722d7205ca636fc4448479abba0e.png

这样节点就提取出我们需要的值,如下图所示:

87cc45f203aef837410414f5e821d9c7.png

 数据计算

接下来需要对提取的数据进行转换计算,阿尔泰的计算方式稍麻烦,下面是关于电量计算的方法:

 

296a3b6d07e35314c5e3c44633eb5464.png

下面是用NodeRed的函数节点进行计算:

var newMsg = {payload: ((msg.payload-0x80000000)*100*400/1000/3600).toFixed(3)};return newMsg;

最后输出结果:

 

66e077f6b1a85b1a6ad4a3ff3dd5fd67.png

发布至HomeAssistant 

以上已经把读取的电量值进行了提取和计算,最终将值要发送到HA。发送到需要用到MQTT功能,MQTT需要主题和值两个要素,下面就对数据加上主题topic,我们添加一个change节点,按照如下方式设置,设置的topci为:home_energy/energy/myhome_total_energy

 

d6e1cd6c6940c7089c1daba02241ce39.png

 

下面是输出的最终结果:

 

a6f4ae2cff34f1d2b71a28cc7c6510e7.png

 

最后添加一个mqtt out节点,把数据发布至HA,如下:

 

6ecb4b5e3237aab144674385b4049d12.png

 

注意:HA服务器的MQTT地址不要填错,当然前提是你已经正确配置了HA的MQTT服务。完整的流程图如下:如果需要流程代码请到本文最底端下载,放在这里会影响阅读。

 

e6dad566762532584cf77437b6d7c6a3.png

测试 

下面来测试一下HA是否成功收到发布的消息,用MQTT-Explorer连接HA服务器就以看到发布成功了

 

 

b0951e0a7cee48ecdf0445224c3c92af.png

结束语 

以上只对电量采集作出了详细说明,功率、电流、电压等可以参见如下流程,流程代码放在文章底部,请大家取阅。

 

5c53a819cc8b693d0a35a83ff95995f7.png

最后,有朋友可能会说用一条函数就能解决的事情,非得要用三个节点,原因如下:这是我初学NodeRed做出的流程,到如今已经运行了两年年多,运行很好;另外这样写也是为了照顾初学多朋友,便于理解。

当然目前已经替换了更简洁高效的流程,希望大家多多关注,后边都会分享给大家。

关于流程代码:

流程源代码放在我的微信公众号,请关注后获取

64a34ecce92c47e0b77c23e1110a01fa.jpeg

 

 

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 导入JSON解析库:首先需要将JSON解析库导入项目中,可以通过Maven或Gradle等方式引入。 2. 创建JSON对象:使用JSON解析库提供的方法,根据JSON字符串创建一个JSON对象。 3. 解析JSON数据:可以通过JSON对象提供的方法,获取其中的数据。 4. 遍历JSON数据:可以使用循环结构,遍历JSON数据,获取其中的所有数据。 5. 转换JSON数据:可以将JSON数据转换为Java对象或其他类型的数据,方便后续的操作。 6. 错误处理:在解析JSON数据的过程中,可能会出现错误,需要进行错误处理,保证程序的正常运行。 下面是一个使用Jackson库解析JSON数据的示例代码: ```java import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; public class JsonParser { public static void main(String[] args) { String jsonString = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}"; ObjectMapper objectMapper = new ObjectMapper(); try { // 创建JSON对象 JsonNode jsonNode = objectMapper.readTree(jsonString); // 获取JSON数据 String name = jsonNode.get("name").asText(); int age = jsonNode.get("age").asInt(); String city = jsonNode.get("city").asText(); // 输出JSON数据 System.out.println("Name: " + name); System.out.println("Age: " + age); System.out.println("City: " + city); } catch (IOException e) { e.printStackTrace(); } } } ``` 在示例代码中,我们使用了Jackson库提供的ObjectMapper类来解析JSON数据。首先,我们将一个JSON字符串转换为JSON对象;然后,通过get()方法获取JSON数据;最后,将获取的数据输出到控制台上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值