1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | 這段程式碼是用來**發送 MQTT 訊息**到指定的主題。讓我詳細解釋各個部分: ## 函數結構 ```javascript mqttClient.publish(topic, message, options, callback) ``` ## 參數說明 ### 1. `topic` - MQTT 主題名稱,類似「頻道」的概念 - 例如:`"home/lock/control"` 或 `"device/123/command"` - 訂閱同一主題的客戶端會收到這個訊息 ### 2. `JSON.stringify(message)` - 將 JavaScript 物件轉換成 JSON 字串 - 例如:`{command: "unlock", user: "admin"}` → `'{"command":"unlock","user":"admin"}'` - MQTT 只能傳送字串或二進位資料,不能直接傳送物件 ### 3. `{ qos: 1 }` - **QoS (Quality of Service)** 服務品質等級 - **QoS 0:** 最多傳一次(可能丟失) - **QoS 1:** 至少傳一次(確保送達,但可能重複) - **QoS 2:** 恰好傳一次(最可靠但最慢) - 這裡選擇 QoS 1,確保重要指令不會丟失 ### 4. 回調函數 (Callback) ```javascript function(error) { if (error) { // 發送失敗處理 console.error('發送 MQTT 消息失敗:', error); alert('發送命令失敗'); } else { // 發送成功處理 console.log('MQTT 消息發送成功:', command); } } ``` ## 執行流程 1. **發送訊息:** 將 JSON 格式的指令發送到指定主題 2. **等待回應:** 等待 broker 確認是否成功接收 3. **結果處理:** - **成功:** 在控制台記錄成功訊息 - **失敗:** 顯示錯誤訊息並彈出警告 ## 實際應用範例 假設這是智慧門鎖控制: ```javascript topic = "home/frontdoor/control" message = { command: "unlock", userId: "12345", timestamp: "2025-06-21T10:30:00Z" } ``` 發送後,訂閱此主題的門鎖設備就會收到解鎖指令並執行。 ## 為什麼用 QoS 1? 對於門鎖這類安全性重要的設備,確保指令送達比速度更重要,所以選擇 QoS 1 來保證訊息不會丟失。 |
Direct link: https://paste.plurk.com/show/lJdqKlYV6jvA6fBzMcWx