如何通过过滤规则重新分组数据,重新发布到EMQX中

环境信息

  • EMQX 版本:4.0.3
  • 操作系统及版本:WIN 10
  • 其他

问题描述

拟将收到的数据重新整理,根据数据中的ID,重新发布到另外的主题中,配置完过滤规则后,只显示命中,无法利用MQTTFX订阅获取重新获取数据。
假设:
topic:kepware,qos=1
收到数据(JSON),如下所示:

{
	"TimeStamp": 1650968843429,
	"DATA": [{
		"id": "Simulator.PLC1.RandomFloat",
		"v": 19653.75,
		"t": 1650968839102
	}, {
		"id": "Simulator.PLC1.RInt",
		"v": 354739,
		"t": 1650968839102
	}, {
		"id": "Simulator.PLC1.RandomFloat",
		"v": 19655,
		"t": 1650968840113
	}]
}

配置文件及日志

规则 SQL:

foreach payload.Datas as record DO record.v as pv FROM "kepware"`
republish target_topic: repub/to/${id}
target_qos: 0
payload_tmpl: pv=${pv}

数据显示命中,却无法订阅,是怎么回事呢?

你重新发布的${id},这个在你sql中没有内容,怎么订阅得到呢,命中是sql对你数据匹配中后的统计

这个payload.Datas,是指提取数据是这样的吧?里面包含id?

{
“id”: “Simulator.PLC1.RandomFloat”,
“v”: 19653.75,
“t”: 1650968839102
}

sql语句中没有id,你这里面只有要求匹配v 的内容。数据根据sql命中了以后的数据只有pv了,没有id的内容,你需要把id也在sql中体现才可以使用。就类似数据库你写sql查询,只可以不行列进行查询。

foreach payload.Datas as record DO record.id as id, record.v as pv FROM “kepware”
好像还是不行

我清楚了,主要是转换后的消息模板不对