Thingsboard网关开发笔记

文章目录

主要内容为网关创建、网关绑定设备自动注入、网关绑定设备数据上报、网关绑定设备数据订阅,单个设备数据上报。关联点为mqtt上报订阅主题等。
image

在正常的步骤中,服务只需要连接网关即可完成数据上报、订阅的操作,而不是连接每一个设备去进行上报。

一、网关创建

1、登陆thingsboard租户管理员。
2、点击菜单:“实体”-> “设备”,创建新设备。
3、输入名称、勾选是否网关,进入下一步
4、勾选“添加凭据”,类型选择MQTT Basic
5、输入ID、用户名、密码。

二、绑定设备自动注入

本步骤称为初始化,建议做成方法,在每次启动程序都调用此方法。初始化也是自动注入\创建设备的过程,如果设备已存在,将只进行初始化步骤。
1、连接mqtt网关,id、用户名、密码为创建网关时自己填写的数据。
2、编写自己的业务代码,拿到所有需要管理的设备名。
3、初始化设备,订阅主题:v1/gateway/connect
4、例如,你将带设备名的设备列表保存在deviceCredentials中,以下为举例:

1
2
3
4
5
for (String name : deviceCredentials) {  
  JSONObject msg = new JSONObject();  
  msg.put("device",name);  
  mqttClient.publish("v1/gateway/connect", String.valueOf(msg).getBytes(), 0false);();  
}

msg对应json: {"device":"设备名xxx"}
5、publish之后,设备将完成初始化,未创建的设备将自动完成创建,并关联到你的网关,方便后续的数据上报和订阅。

三、绑定设备数据上报

1、订阅主题为:v1/gateway/telemetry
2、假如上报key:online,value:1,以下为举例:

1
2
3
4
5
6
7
8
9
for (String name : deviceCredentials) {  
  JSONObject msg = new JSONObject();  
  JSONArray nameArray = new JSONArray();  
  JSONObject nameObject = new JSONObject();  
  nameObject.put("online"1);  
  nameArray.put(nameObject);  
  msg.put(name, nameArray);  
  mqttClient.publish(topic, String.valueOf(msg).getBytes(), 0false);  
}  

msg对应json:

1
2
3
{  
  "设备名xxx": [{ "online"1}]  
}  

3、你可以通过以上方式,批量上报设备遥测,只需要连接你的网关即可,不需要对每个设备进行连接。

四、绑定设备数据订阅

此方式就是双向rpc响应!

1、订阅主题为:v1/gateway/rpc
2、假如你使用MqttClient与网关建立连接,你只需要订阅即可得到rpc数据回传。
mqttClient.subscribe("v1/gateway/rpc");

3、对此,我们创建一个回调类来得到回传的数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class MqttMessageHandler implements MqttCallback {  
  
    @Override  
    public void connectionLost(Throwable cause) {  
        // 处理连接丢失的情况  
    }  
  
    @Override  
    public void messageArrived(String topic, MqttMessage message) {  
        // 处理接收到的订阅消息  
        System.out.println("收到订阅消息:" + new String(message.getPayload()));  
        // 在这里添加处理订阅消息的代码  
    }  
  
    @Override  
    public void deliveryComplete(IMqttDeliveryToken token) {  
        // 处理消息传递完成的情况  
    }  
}

五、单个设备数据上报

单个设备上报,没有任何关联性要求,不需要绑定你的网关。
1、创建mqtt连接,用户名为设备的访问令牌,你可以在thingsboard中选择设备-> 复制访问令牌,密码为空。
2、订阅主题:v1/devices/me/telemetry
3、内容:{ "online": 0 }
到此就完成了单个设备的数据上报,同时,此种方式无法获得回传数据,建议在测试或临时需要时使用,正式的方式还是推荐通过网关进行设备控制。

分享到: