版本号 4.2.7 设备上报值,EMQX是否具备 查询数据库中对应设备的规则 动态配置规则,过滤匹配的上报值重新发布主题

描述你需要的功能

设备上报值,EMQX是否具备 查询数据库中对应设备的规则 动态配置规则,过滤匹配的上报值重新发布主题

为什么你需要这个功能

EMQX如果可以具备这个功能,那么在客户端就无需去维护一套数据处理逻辑,直接就在EMQX内部做了过滤处理,将符合的值重新上报即可

能详细描述你的需求吗?最好增加一个例子来帮助理解需求。

我的需求是 比如说 用户通过APP 绑定了一个温湿度传感器,通过APP给这个传感器设置了一个温度阈值,如果传感器上报的值超过了这个阈值,就会报警。

1、在APP给传感器设置温度阈值这个操作是可修改的,这个阈值怎么设置到EMQX里面;
2、当传感器上报值的时候,EMQX怎样让传感器能匹配到对应的规则,对比当前值和阈值的大小,如果超过,就重新组织数据,重新发布一个topic,这个topic是告警的topic

这样描述清楚了么?

现有的规则引擎应该可以实现你的功能:

  1. 给设备设置好阈值之后,让设备在上报当前温湿度的同时将这个阈值报上来:
    {“value”: 32.2, “threshold”: 30}
  2. 创建规则:
    SELECT * FROM notify_topic WHERE payload.value >= payload.threshold
  3. 给规则绑定 Republish 动作。

每个设备的条件不一样的情况,那就意味着每个设备都需要配置一条或多条规则,那么EMQX 在4.2.7这个版本 规则有上限吗? 规则在达到上千条后是否有过大的资源占用? 集群情况下,规则能够自动同步到各个节点么?

的确不能创建太多的规则,过多的规则会给 emqx 的消息处理带来额外的压力,另外维护这些规则也会是一个不小的负担。建议不要超过十个规则。我理解应该不会每一个设备的条件都完全不一致,你可以建立一个或者少量的规则,并通过判断 clientid 来实现不同的逻辑:

SELECT
CASE WHEN clientid = ‘a’ THEN …
WHEN clientid = ‘a’ > 7 THEN …
ELSE …
END as x
FROM “t/#”

这里还有一些字符串处理函数可以使用:

建议使用 4.x 的最新版(4.4.23) 以确保这些函数都可以正常使用。

那单个sql的长度有没有限制? 减少条数,那就意味着sql的长度就会变长,如果是1万个设备,每个设备都有自己的阈值,用一条sql来处理的话,那这条sql就很长哦。