在Thingsboard中结合PostgreSQL处理遥测数据的技术咨询
问题解答
1. 在Thingsboard的PostgreSQL数据库存储非设备来源的额外数据
有两种常用方案:
- 利用Thingsboard内置实体属性(推荐)
创建一个虚拟设备或资产,将额外参数存储为该实体的服务器端属性(Server-side Attributes)。这种方式无需修改数据库结构,完全适配Thingsboard生态,可通过TB的API或控制台直接管理数据。 - 自定义PostgreSQL表
直接连接TB使用的PostgreSQL实例,创建独立的自定义表(例如custom_calculation_params),字段可按需定义(如param_id、device_id、param_value、update_time)。注意不要修改TB系统表,仅新增自定义表。之后可通过脚本(如Python的psycopg2库)或后台服务向该表写入数据。
2. 在规则链中读取该表的数据
对应上述两种存储方案,读取方式如下:
- 读取内置实体属性
在规则链中添加Entity Attributes节点,配置选择存储参数的虚拟设备/资产,设置读取类型为服务器端属性,将读取到的参数数据与设备上报数值合并后,传递给后续Script节点进行计算。 - 读取自定义PostgreSQL表
在规则链中添加Script节点,编写JavaScript代码通过TB内置的jdbcTemplate工具执行SQL查询:
同时需要在PostgreSQL中给TB的数据库账号赋予自定义表的查询权限:// 获取当前设备ID var deviceId = msg.deviceId; // 编写查询SQL var sql = "SELECT param_value FROM custom_calculation_params WHERE device_id = ?"; // 执行查询并获取结果 var result = jdbcTemplate.queryForMap(sql, [deviceId]); // 将参数值存入消息体,供后续计算使用 msg.calcParam = result.param_value; return msg;GRANT SELECT ON custom_calculation_params TO thingsboard;
内容的提问来源于stack exchange,提问作者betelgeuse
相关产品推荐
相关产品推荐

