You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于在Thingsboard仪表盘添加可写入PostgreSQL的评论字段的咨询

在Thingsboard仪表盘中添加评论输入并写入PostgreSQL的解决方案

为什么Input Widget直接用不了

Input Widget的核心作用是向Thingsboard实体发送属性/遥测数据,本身不支持直接写入外部PostgreSQL数据库,所以需要通过规则链中转或自定义小部件结合API来实现需求。


方法一:通过Thingsboard规则链中转写入PostgreSQL

这是更贴合Thingsboard原生生态的方案,无需额外开发外部服务:

  1. 创建实体自定义属性
    在目标传感器实体(或仪表板关联的实体)中,新增一个字符串类型的自定义属性(比如命名为comment),用来临时存储输入的评论内容。
  2. 重新配置Input Widget
    编辑Input Widget,选择「发送到实体属性」模式,目标实体选你的传感器,属性键填刚才创建的comment;设置输入类型为多行文本,开启提交按钮触发发送。
  3. 配置规则链处理写入逻辑
    • 进入规则链页面,新建或修改现有规则链,添加「实体属性更新节点」,过滤触发源为comment属性的更新事件。
    • 添加「脚本节点」,提取评论内容、传感器ID、时间戳等字段,构造SQL插入参数,示例脚本:
      var comment = msg.comment;
      var sensorId = metadata.entityId;
      var ts = new Date().toISOString();
      return {
          msg: {sensorId: sensorId, comment: comment, ts: ts},
          metadata: metadata,
          msgType: msgType
      };
      
    • 添加「PostgreSQL节点」,配置数据库连接信息(地址、用户名、密码、库名),编写插入SQL:
      INSERT INTO sensor_comments (sensor_id, comment_content, create_time) VALUES ('${msg.sensorId}', '${msg.comment}', '${msg.ts}')
      
    • 依次连接各节点,确保属性更新事件能触发SQL插入操作。

方法二:自定义HTML小部件+API直接写入

如果需要更灵活的交互逻辑,可以用自定义HTML小部件结合自研API:

  1. 在PostgreSQL中创建评论表
    先手动建表存储评论数据:
    CREATE TABLE sensor_comments (
        id SERIAL PRIMARY KEY,
        sensor_id VARCHAR(64) NOT NULL,
        comment TEXT NOT NULL,
        create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );
    
  2. 编写自定义HTML小部件
    在仪表盘中添加「HTML小部件」,写入以下代码(需自行实现后端API):
    <div style="padding: 10px;">
      <textarea id="commentInput" rows="4" placeholder="输入评论..." style="width: 100%; margin-bottom: 8px;"></textarea>
      <button onclick="submitComment()" style="padding: 6px 12px;">提交评论</button>
    </div>
    <script>
      // 获取当前仪表板关联的传感器ID
      const targetSensorId = entityId;
      function submitComment() {
        const commentContent = document.getElementById('commentInput').value.trim();
        if (!commentContent) return;
        // 调用自研API写入PostgreSQL
        fetch('/your-custom-api/sensor/comments', {
          method: 'POST',
          headers: {
            'Content-Type': 'application/json',
            'X-Authorization': 'Bearer ' + localStorage.getItem('jwt_token')
          },
          body: JSON.stringify({
            sensorId: targetSensorId,
            comment: commentContent
          })
        }).then(res => {
          if (res.ok) {
            document.getElementById('commentInput').value = '';
            alert('评论提交成功');
          } else {
            alert('提交失败,请重试');
          }
        }).catch(err => console.error(err));
      }
    </script>
    
    注:需确保自研API能处理Thingsboard的JWT认证,且配置了跨域支持(如果API和Thingsboard不同域)。

排查Input Widget失败的常见问题

  • 目标实体选择错误:Widget的目标实体需设置为传感器实体,而非仪表板本身。
  • 权限不足:当前登录用户没有该实体的WRITE_ATTRIBUTES权限,需在角色配置中开启。
  • 属性未提前创建:没有在实体上预定义comment属性,导致数据发送失败。

内容的提问来源于stack exchange,提问作者Brell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:20:30