hello,伙伴們最近一直在弄AiPi-Eyes-R3的資料,渲染、3D 外殼設計......一直沒時間開發新的 HomeAssistant MQTT 實體,最新的實體估計也是在本月初開發完的,一直沒來得及給大家寫使用教程!
不過在寫教程之前,有必要給大家看看上周的成果:
Text 實體介紹
Text 實體,也就是文本實體,它支持在 HomeAssistant 輸入文字之后,通過 MQTT 下發內容到設備當中。可以理解成一個文本輸入框,我們可以輸入任意文字,然后發給設備。
也可以利用自動化,更新文本,例如:天氣信息更新到設備。之所以叫它文本輸入框,是因為在 HomeAssitant 它呈現的方式是這樣的:
Text 實體創建
1.開啟資源
和其他實體一樣,在 HomeAssistant-C 當中,默認不開啟 Text 資源,需要自行啟用,在 homeAssistantDevConfig.h 中把 #define CONFIG_ENTITY_ENABLE_TEXT 置 1,就能啟用 Text 資源:
2.實體創建
創建 Text 實體也是在連接上 MQTT 服務器之后創建,只需要對 name 和 unique_id 就行,然后添加以下實體:
static ha_text_entity_t text_1 = { .name = "文字", .unique_id = "text1", }; homeAssistant_device_add_entity(CONFIG_HA_ENTITY_TEXT, &text_1);
燒錄并啟動之后,就能看到 HomeAssistant 有文本實體。
Text 實體使用
1.接收 Text 內容
同樣的 Text 內容下發也會觸發事件,Text 的內容下發事件為 HA_EVENT_MQTT_COMMAND_TEXT_VALUE,所以需要在 HA 事件回調函數(ha_event_cb)當中添加 HA_EVENT_MQTT_COMMAND_TEXT_VALUE 的事件處理,并打印內容:
case HA_EVENT_MQTT_COMMAND_TEXT_VALUE: LOG_I("<<<<< HA_EVENT_MQTT_COMMAND_TEXT_VALUE,value=%s", ha_dev-?>entity_text->command_text->text_value); break;
有細心的同學可能發現了,信息獲取的來源都是通過一個以 command_xx 命名的結構體來獲取的!所以以后獲取信息內容,就是用對應結構體的 command_xx 成員來讀取就行。
驗證示例:
2.Text 內容更新
和其他實體更新的方法一樣,也是用 homeAssistant_device_send_entity_state 函數進行發布,只不過需要重新給 Text 實體的 text_value 參數進行賦值
使用示例:
讀取到 HomeAssistant 下發的內容之后,返回 12345678 給 HomeAssistant。
case HA_EVENT_MQTT_COMMAND_TEXT_VALUE: LOG_I("<<<<< HA_EVENT_MQTT_COMMAND_TEXT_VALUE,value=%s", ha_dev-?>entity_text->command_text->text_value); //查找實體 ha_text_entity_t* text = homeAssistant_fine_entity(CONFIG_HA_ENTITY_TEXT, "text1"); //清空原有的內容 memset(text->text_value, 0, strlen(text->text_value)); //賦值內容為 12345678 sprintf(text->text_value, "%d", 12345678); //更新內容 homeAssistant_device_send_entity_state(CONFIG_HA_ENTITY_TEXT, text, 0); break;
驗證結果
輸入之后下發,然后刷新一下網頁就能發現,文字備改變了。
總結
Text 實體的使用和其他實體差不多,沒有什么特殊的參數需要配置,所以簡單說說就行,這周給大家開發 number 實體!
審核編輯 黃宇
-
智能家居
+關注
關注
1924文章
9372瀏覽量
181754 -
MQTT
+關注
關注
5文章
624瀏覽量
22266
發布評論請先 登錄
相關推薦
評論