使用 MQTT 協議與平臺對接可能出現的問題
使用 mqtt 協議與平臺對接可能出現的問題
其實只需要簡單理解mqtt的消息訂閱發布機制,就能用mqtt的方式和平臺對接
agentLite 證書校驗失敗,請檢查證書是否配置正確,證書一般是放置在demo中的conf目錄下的rootcert.pem 文件,如果該目錄下已經存在證書文件,請點擊下載更換證書
參考:https://github.com/LiteOS/LiteOS/blob/develop/demos/agenttiny_mqtt/agent_tiny_demo.c
不可以,平臺目前只支持MQTTS接入,原生接口參考:https://support.huaweicloud.com/api-IoT/iot_06_3002.html
訂閱設備上報數據的topic(https://support.huaweicloud.com/api-IoT/iot_06_3010.html),往平臺發送數據
訂閱設備接收命令的topic(https://support.huaweicloud.com/api-IoT/iot_06_3011.html),接收平臺下發給設備的數據
自己寫的客戶端是可以連接到平臺的,一直連不上得看下具體的報錯
Java 代碼示例參考:https://bbs.huaweicloud.com/forum/thread-27358-1-1.html
設備想要收到下發的命令,必須訂閱設備接收命令的topic(https://support.huaweicloud.com/api-IoT/iot_06_3011.html)
調用接口失敗,請參考接口返回的錯誤碼和錯誤描述解決問題
參考問題(3)
模組作為客戶端連接華為云mqtt服務器,是否是mqtts的連接應該是服務端所決定,參考問題(3)
參考問題(1)
問題理解,我用mqtt協議發送數據到平臺,然后我設置了回調,數據到達平臺的時候應該進入到我設置的回調,告訴我數據發送出去了。 最終的問題是,使用mqtt.fx模擬器發送數據,然后訂閱推送數據到應用服務器(就是問題所描述的回調)。原因:訂閱了設備信息變化(deviceInfoChanged),數據一直收不到,得訂閱 設備數據變化(deviceDataChanged)
可以直接調接口 設備服務調用(https://support.huaweicloud.com/api-IoT/iot_06_0052.html) 給mqtt設備下發命令就能收到命令了
Python示例:https://bbs.huaweicloud.com/forum/thread-27362-1-1.html
參考問題(11)
必須得加證書,參考 https://support.huaweicloud.com/api-IoT/iot_06_3009.html
經排查代碼,發現心跳時間要設置30s以上,即options.setKeepAliveInterval(30);這個值 改為30以上
目前都是需要帶證書的
上報數據的主題就一個
設備連接應該使用 設備對接信息中的IP,且是8943和8843對應的IP地址
mqtt一般來說上去的數據都是json,推薦直接以json的形式上報;如果報二進制的話topic中的codecMode要變成 binary,上報的消息要轉成binary上報
可以參考java demo 示例
//hexStr 就是上報的碼流,比如0101
private static byte[] hexStr2Str(String hexStr) {
String str = "0123456789ABCDEF";
char[] hexs = hexStr.toCharArray();
byte[] bytes = new byte[hexStr.length() / 2];
int n;
for (int i = 0; i < bytes.length; i++) {
n = str.indexOf(hexs[2 * i]) * 16;
n += str.indexOf(hexs[2 * i + 1]);
bytes[i] = (byte) (n & 0xff);
}
return bytes;
}
原因:如果broker遇到問題重啟了,所有的client端都得重啟,因為服務端丟失了client的subscribe信息。(即使cleanSession=false)。為了避免服務端重啟、網絡短時斷線影響消息的持續接收,需要做一些設置和編碼
//防止 ERROR o.e.p.c.mqttv3.internal.ClientState - Timed out as no activity ?錯誤
mqttConnectOptions.setConnectionTimeout(0);
//mqttClient.reconnect(); 這個方法或者回調已經設置了重連
mqttConnectOptions.setAutomaticReconnect(true);
//服務端記錄 session (自己手動重新subscribe ,可能設置為true也行)
mqttConnectOptions.setCleanSession(false);
未完持續更新。。。
有關于 MQTT 的問題歡迎補充?。。?/p>
MQTT
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。