Java 上报 thingsboard 遥测属性


import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.math.BigInteger;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class ClientDemo {
    /**
     * @param args
     * @throws IOException
     * @throws UnknownHostException
     */
    private static Logger logger=Logger.getLogger(ClientDemo.class);

    public void toTB(String content){
        logger.info("开始执行DHT方法*************************");
        String HOST = "tcp://47.99.141.22:1883"; //TBip地址和mqtt端口
        String TOPIC = "v1/devices/me/telemetry";//TB遥测数据API接口
        String clientid = "client2";
        MqttClient client=null;
        MqttConnectOptions options;
        MqttTopic topic;
        String username="iQHq2135klo1PTVb6HCy";//设备秘钥
        try {
            // host为主机名,clientid即连接MQTT的客户端ID,一般以唯一标识符表示,MemoryPersistence设置clientid的保存形式,默认为以内存保存
            client = new MqttClient(HOST, clientid, new MemoryPersistence());
            // MQTT的连接设置
            options = new MqttConnectOptions();
            // 设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,这里设置为true表示每次连接到服务器都以新的身份连接
            options.setCleanSession(true);
            // 设置连接的用户名

            options.setUserName(username);//设备秘钥
            // 设置连接的密码
            //options.setPassword(passWord.toCharArray());
            // 设置超时时间 单位为秒
            options.setConnectionTimeout(10);
            // 设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线,但这个方法并没有重连的机制
            options.setKeepAliveInterval(20);
            // 设置回
            client.setCallback(new MqttCallbackExtended() {
                @Override
                public void messageArrived(String topic, MqttMessage message) throws Exception {
                    String context = new String(message.getPayload());
                }

                @Override
                public void deliveryComplete(IMqttDeliveryToken token) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void connectionLost(Throwable cause) {
                    // TODO Auto-generated method stub
                }

                @Override
                public void connectComplete(boolean reconnect, String serverURI) {
                    // TODO Auto-generated method stub
                }

            });
            topic = client.getTopic(TOPIC);
            //setWill方法,如果项目中需要知道客户端是否掉线可以调用该方法。设置最终端口的通知消息
            options.setWill(topic, "close".getBytes(), 2, true);
            client.connect(options);
//            sendCon = "{\"temperature\":\"25\",\"humidity\":\"12\",\"light\":\"255\"}";//json格式
            client.publish(TOPIC, content.getBytes(), 0, false);//推送数据到tb上
        } catch (MqttException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } finally {

        }
    }
}

ThingsKit

### 配置 ThingsBoard遥测数据存储到 TDengine 为了使 ThingsBoard 使用 TDengine 存储遥测数据,需对现有架构做出特定调整。主要工作集中在修改 JDBC 驱动包以及创建新的规则节点来处理数据写入操作。 #### 修改 JDBC 驱动包 由于默认情况下 ThingsBoard 并不支持直接对接 TDengine, 因此需要定制化其 JDBC 连接器以适应新数据库的需求。这涉及到下载并编译适用于 Java 应用程序访问 TDengine 的官方客户端库,并将其集成至 ThingsBoard 的依赖项列表中[^1]。 ```xml <dependency> <groupId>com.taosdata.jdbc</groupId> <artifactId>TDengine-JDBC</artifactId> <version>x.x.x</version> </dependency> ``` #### 创建自定义规则链节点 除了更新驱动外,还需设计一个新的规则链节点——“保存遥测数据 (TDengine)”。该组件负责接收来自其他节点的消息并将其中包含的时间序列信息高效地持久化到目标表内。具体实现方式可以参照官方文档中的 SQL 语句模板来进行编码[^2]。 ```sql INSERT INTO tb_device_data USING stb_device_data TAGS (?, ?, ?) VALUES(?, now); ``` 这里 `tb_device_data` 表示实际的数据表格名称;而 `stb_device_data` 则对应超级表名,用于统一管理和查询不同设备产生的相似结构化的测量值集合。参数依次代表标签列(如设备 ID)、时间戳字段以及其他可能存在的属性。 #### 测试验证 完成上述改动之后,建议先在一个独立环境中进行全面测试,确保整个流程顺畅无误后再考虑上线部署。期间应特别关注性能表现指标的变化情况,因为切换底层存储引擎往往会对系统的整体响应速度造成影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值