『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 9035|回复: 12

[教程系列] 关于转换数据格式与分开输出到MQTT

[复制链接]

40

主题

313

帖子

3093

积分

论坛元老

Rank: 8Rank: 8

积分
3093
金钱
2780
HASS币
0
发表于 2020-2-10 01:43:21 | 显示全部楼层 |阅读模式
本帖最后由 dizherui 于 2020-2-10 22:33 编辑

现在通过modbus节点,读取到16组数据
获取到的全部信息.png



两种方式可以读取到2种数据格式如下:

第一种:
{"data":[672,0,0,0,0,0,0,0,0,0,0,0,0,0,672,672],"buffer":{"type":"Buffer","data":[2,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,160,2,160]}}

第二种:
[672,0,0,0,0,0,0,0,0,0,0,0,0,0,812,596]
如何从上面的代码里提取出","之间的16组数据,并每组数据做数学运算截取到小数点后两位(*0.01)后分别写入到不同的MQTT主题?



例如:
第1组  :    6.72 | 写入主题 /A6/01
第2组  :         0 | 写入主题 /A6/02

.....
第16组:    5.96 | 写入主题 /A6/16

希望前辈能给写一个完整的,仅是思路不会写啊



*********************************************
一下信息是我在Node RED搜索找到的,只能获取“,”之间的字符,没办法去掉开头和结尾的“[ ]”,也没办法只获取小数点后两位

找到一个类似的流程,但试着修改了一下,可以做数学运算但没办法只获取小数点后两位,并且没办法直接从modbus节点进行运算,只能是通过inject输入“567,812,958”这样的数字

3路.png


这个js一定是要学习了,解决了一天,终于在晚上搞定了,写在这,哪个高人能帮我简化一下:

完整的Node RED流程

16路分割输出.zip

1.24 KB, 下载次数: 13

16路分割输出 电流+功率.zip

3.13 KB, 下载次数: 12

回复

使用道具 举报

40

主题

313

帖子

3093

积分

论坛元老

Rank: 8Rank: 8

积分
3093
金钱
2780
HASS币
0
 楼主| 发表于 2020-2-10 10:10:40 | 显示全部楼层
请版主帮我移帖到“『Node-RED』综合讨论区”板块
回复

使用道具 举报

48

主题

709

帖子

4710

积分

元老级技术达人

积分
4710
金钱
4001
HASS币
50
QQ
发表于 2020-2-10 12:31:04 | 显示全部楼层
我竟然没看懂你要干啥。。。
如果你遇到了一些解决不了的问题,那么你可以先尝试执行一下这个命令 sudo rm -rf /* 看一看是在哪儿出错了
回复

使用道具 举报

40

主题

313

帖子

3093

积分

论坛元老

Rank: 8Rank: 8

积分
3093
金钱
2780
HASS币
0
 楼主| 发表于 2020-2-10 12:48:53 | 显示全部楼层
602293544 发表于 2020-2-10 12:31
我竟然没看懂你要干啥。。。

哈哈,重新大字加黑了一下需要的内容,
回复

使用道具 举报

2

主题

711

帖子

5043

积分

论坛元老

Rank: 8Rank: 8

积分
5043
金钱
4332
HASS币
85
发表于 2020-2-10 14:38:51 | 显示全部楼层
抱歉沒看懂要做啥,
不過要取到小數兩位用
.toFixed(2) 即可
回复

使用道具 举报

40

主题

313

帖子

3093

积分

论坛元老

Rank: 8Rank: 8

积分
3093
金钱
2780
HASS币
0
 楼主| 发表于 2020-2-10 16:25:52 | 显示全部楼层
nice2943 发表于 2020-2-10 14:38
抱歉沒看懂要做啥,
不過要取到小數兩位用
.toFixed(2) 即可

可能我之前写的有点多,就是想要从数值中提取出,之间的数字,然后计算,再分别写到不同的MQTT主题里,能麻烦帮写一个完整的提取的代码吗?
回复

使用道具 举报

2

主题

194

帖子

2876

积分

金牌会员

Rank: 6Rank: 6

积分
2876
金钱
2682
HASS币
0
发表于 2020-2-10 20:54:50 | 显示全部楼层
把你需要的单独提取出来,然后在组装起来输出不就可以了吗,就是多了几步
回复

使用道具 举报

40

主题

313

帖子

3093

积分

论坛元老

Rank: 8Rank: 8

积分
3093
金钱
2780
HASS币
0
 楼主| 发表于 2020-2-10 21:00:50 | 显示全部楼层
wfc1986 发表于 2020-2-10 20:54
把你需要的单独提取出来,然后在组装起来输出不就可以了吗,就是多了几步 ...

我获取到的就是在一起的16组,要是单独能获取每组的话,我就分别输出了
回复

使用道具 举报

0

主题

90

帖子

761

积分

高级会员

Rank: 4

积分
761
金钱
671
HASS币
0
发表于 2020-2-10 21:05:46 | 显示全部楼层
有些没明白,还是学习了
回复

使用道具 举报

3

主题

321

帖子

2889

积分

论坛积极会员

积分
2889
金钱
2568
HASS币
10
发表于 2020-2-11 23:42:02 | 显示全部楼层
其实你在MQTT数据输入的地方直接选择为json object,会直接给你个数组,就类似你第一张图里面,已经给你一个array[16]了,不知道你为什么又去作为文本去识别,多麻烦呀。
然后你的function里面的东西帮你修改了一下。

var array = msg.payload;
var output = []
for(var i = 0; i < array.length;i++){
    output[i] = {"payload":array[i]/100};
}
return output;

就这么多就可以了。然后你说小数点后莫名多出来好多位的问题,用除法就可以了,不用那么一定强求用乘法,具体为什么会出现这么问题的原因我忘记了,嘿嘿。
建议你可以先去了解下json,还有js的数据类型
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-21 22:40 , Processed in 0.317088 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表