新增周邊設備¶
何時使用¶
如果裝置需要根據來自雲端或 LAN 的命令控制硬體(繼電器、加熱器、LED 條、馬達),請使用此配方。
現成可用的代碼¶
(相同的 C++ 代碼,不翻譯)
[見英文版本的代碼]
說明¶
s_link.runtime()->setCommandHandler(handleCommand) 是命令處理程式的單一連線點。在此呼叫後,所有傳入的 MQTT 命令(invoke、set、drying、stop、ping、get_config 等)直接到達 handleCommand。
s_link.publishStatusNow() — 在每次變更 s_link.status.* 後呼叫。這立即將新狀態發送到入口網站和 LAN 客戶端,而無需等待 statusPeriodMs 計時器。
永遠不要在 handleCommand 內呼叫 delay()。此呼叫是從 MQTT 回呼同步的;阻止它會中斷工作階段。將計時器放在產品物件的 loop() 中。
替代方案:link.onCommand()¶
如果不需要解析整个命令流,就按命令名各挂一个处理器:
s_link.onCommand("drying", [](JsonObjectConst data) {
myHeater.start(data["targetTempC"] | 0, data["durationS"] | 0);
});
s_link.onCommand("stop", [](JsonObjectConst) {
myHeater.stop();
});
名称任意,命令最多十二条。link_integration、bambu_apply 和 ping 由库自己
处理,同名的自定义处理器会在其后执行。
不能与 setCommandHandler 并用:完整调度器会接管全部命令,onCommand() 的处理器
不会经 MQTT 路径调用。详见
03-public-api/01-link-api-reference.md。
儲存庫中的完整示例¶
參考實現:iHeater-link/src/main.cpp 中的 handleCommand 處理 drying / stop。