大部分人應該有這個需求:
我想讓我的APP或者上位機或者網頁一登錄的時候獲取設備的狀態 在線還是離線
設備端只需要這樣設置
注意:MQTT本身有遺囑設置
所以大家可以設置遺囑 ,注意哈,發布的主題自己隨意哈,假設是aaaaa 假設設置的遺囑是 {data:state,state:offline} 注意遺囑的retain 必須設置為1 ,即讓服務器保留這個消息
如果這樣設置了,那么只要 設備掉線了,服務器就會向訂閱aaaaa主題的APP或者上位機或者網頁發送{data:state,state:offline}
但是只這樣設置還不行,因為你會發現每次APP或者上位機或者網頁只要一啟動就會收到{data:state,state:offline}
所以需要下一步
在設備成功連接MQTT的時候主動發個消息,發送的主題必須和上面一樣哈aaaaa 假設消息是 {data:state,state:online} 注意消息的retain 必須設置為1 ,即讓服務器保留這個消息
這樣的話,就可以了,只要APP或者上位機或者網頁一啟動,那么所有設備的當前狀態都會主動的上來了
可以看一下我ESP8266 設置的,無論用的啥子語言開發的,自行找API實現就可以
然后說明一點
MQTT都有心跳包時間實際上就是每隔多少時間向服務器 發送C0 00
服務器判斷客戶端掉線是:
假設設置的心跳包是 5S
那么如果超過 5*1.5 = 7.5S 服務器沒有接收到心跳包,那么服務器就認為設備掉線了
此時服務器會把掉線的那台設備的遺囑發給 相應的上位機