EMQX接受到消息后,存储到TDengine数据库的方法就是设定规则,方法如下:

  • 建立规则,用SQL语句把需要存储的消息及相应字段筛选出来(有可能接收到的是发布端的心跳包,这个是不需要存储的):SELECT XXXX,payload.XXX,XXXXX,XXX,XXX FROM "XXX/XXX/XXXX" WHERE is_null(payload.XXX)=false
  • 在规则的动作输出中选择TDengine,写一条在数据库中插入数据的SQL语句:insert into XXXXX using XXX tags('XXX','XXX') values (${XXX},'${XXX}', ${XXX}, ${payload.XXX}, '${XXX}'),第一个字段记得永远要用时间戳,字段是int或者float的,不需要加''。
  • 在规则建立页面有调试功能,可以在设定规则后,用MQTT.fx发布数据,然后观察是否成功存储到TDengine中,以此来判断和排除语法错误。
  • TDengine是时序型数据库,规范建表的方法是先建超级表stable,需要存储的字段都在超级表中事先确定,然后每个设备用一个新表table存储数据,表会继承超级表的字段,不需要再次定义,但也意味着不能随意修改增减,所以超级表设计时一定要考虑周全,否则只能逐个增加超级表的字段。
  • 规则的动作输出也可以选择为消息再输出,把筛选出来的消息以另外一个主题重新发布出去。
  • 同理,当规则的SQL语句中增加了数据的比较和筛选功能(如数值大于或小于某个设定值时),再设定一个消息再输出,就实现了报警功能,这样做的好处是规则的设定完全是在服务器端,前端硬件设备不需要做任何设定,这样灵活性无疑大了很多。筛选出来的数据同时也可以存储到TDengine中,实现报警数据的记录。

标签: none

添加新评论