Thingsboard mqtt相关知识一直在我笔记里面躺着,没有整理出很好的脉络,现在简单整理发出来给需要的人参考。
支持哪些版本???
https://juejin.im/post/5cafec19e51d456e486953c4
2010 v3.1 2014 v3.1.1 2018.6 v5.0
v5.0和v3.1.1现在是OASIS标准(v3.1.1也已通过ISO批准)。
不向后兼容
https://www.cnblogs.com/LiuYanYGZ/p/10371674.html
org.eclipse.paho
org.eclipse.paho.client.mqttv3
1.2.0 1.2.1 1.2.2
http://mqtt.org/ 官网挂一下,不咋看
https://www.jianshu.com/p/31a7a69f9438 MQTT协议解读及使用经验
开源Broker : Eclipse Mosquitto:MQTT协议的最小集实现
有EMQ, HiveMQ, RabbitMQ MQTT Adapter等。
https://www.jianshu.com/p/e5cf0c1fd55c 常见mqtt服务器EMQT(github星多)的搭建
Mqtt消息
https://blog.csdn.net/zmk0810612124/article/details/88386414
thingsboard mqtt处理类MqttTransportHandler
CONNECT – 连接服务端
CONNACK – 确认连接请求
PUBLISH – 发布消息
PUBACK –发布确认
PUBREC – 发布收到(QoS 2,第一步)
PUBREL – 发布释放(QoS 2,第二步)
PUBCOMP – 发布完成(QoS 2,第三步)
SUBACK – 订阅确认
UNSUBSCRIBE –取消订阅
UNSUBACK – 取消订阅确认
PINGREQ – 心跳请求
PINGRESP – 心跳响应
DISCONNECT –断开连接
Qos = 0: At most once delivery
一次数据交换: Publish
Qos = 1: At least once delivery
两次数据交换: Publish, Pubrec
Qos = 2: Exactly once delivery
四次数据交换: Publish, Pubres, Pubrel, Pubcomp
使用记录
,MQTT消息
先发布后订阅,先发布的消息收不到,后于订阅发布的消息才能收到;
需要设置MqttClient的cleanSeesion为false,只能保留32条;
下一次继续32条消息,依次类推
retain 保留消息会保留一条
Mqtt消息体太大
too large message: 29336 bytes
https://my.oschina.net/liufq/blog/3079076
thingsboard可以mqtt工具类修改消息体最大长度
Thingsboard gateway Mqtt配置
使用Mosquitto模拟mqtt server
下载地址 https://mosquitto.org/download/
win10操作方法
# 默认安装目录 C:\Program Files\mosquitto
### 操作
命令行窗口1:输入 mosquitto -c mosquitto.conf 命令行启动mqttserver
命令行窗口2:输入 mosquitto_sub -t "dw/demo",连接到本地代理并订阅一个主题
命令行窗口3:输入 mosquitto_pub -t "dw/demo" -m "hello world!"
命令行窗口2可以收到消息,成功
Thingsboard mqtt
https://thingsboard.io/docs/iot-gateway/getting-started/
#linux
mosquitto_pub -h localhost -p 1883 -t "sensors" -m '{"serialNumber":"SN-001", "model":"T1000", "temperature":36.6}'
#window
mosquitto_pub -h localhost -p 1883 -t "sensors" -m "{\"serialNumber\":\"deviceTest\", \"model\":\"T1000\", \"temperature\":36.6}"
如果报错
com.fasterxml.jackson.core.JsonParseException: Unexpected character (''' (code 39)): was expecting double-quote to start field name
如果是这种情况,请在消息的外部使用双引号,并在消息的内部使用双引号
"{\"serialNumber\":\"SN-001\", \"model\":\"T1000\", \"temperature\":36.6}"
更新属性
mosquitto_pub -h localhost -p 1883 -t "sensor/SN-001/temperature" -m '{"value":36.6}'
表达式升级
https://www.cnblogs.com/youring2/p/10942728.html