Topic的格式如下:
Receip/设备ID/Publis
需要利用规则中的JQ 实现对Topic的获取,并获取设备ID
Topic的格式如下:
Receip/设备ID/Publis
需要利用规则中的JQ 实现对Topic的获取,并获取设备ID
topic 又不是json,不需要使用 JQ(它只处理 json)
SELECT
nth(2, split(topic, '/')) as device_id
FROM
"#"
更进一步:如果 topic 也有一层结构的,上面的 sql 也会出错,也可以用更通用的 re 函数。
SELECT
regex_extract(topic, 'Receip/([^/]+)/Publis') as device_ids,
device_ids[1] as device_id
from
"#" where (not is_empty(device_ids))
其实不需要在 topic 里面取 clientid,规则引擎本来就有 clientid
SELECT
clientid as device_id
from
"#"
PS: 大家共识都是会把 mqtt 的 clientid 设置为自己的设备 ID 的,
当然除非你在 topic 里面设置的是其它设备的 ID(给其它设备推送消息),这个情况可以用上面的。
SELECT
regex_extract(topic, ‘Receip/([^/]+)/Publis’) as device_ids,
device_ids[1] as device_id
from
“#” where (not is_empty(device_ids)) 提示错误,错误信息为 match_conditions_error:sql_function_not_suppoeted
开源EMQX 是不是不支持is_empty函数?按照示例无法正确执行
都支持的,我在585上试的,复制粘贴时注意那些双引号和单引号用英文的,经常会一复制就变成中文