hello,伙伴们最近一直在弄AiPi-Eyes-R3的资料,渲染、3D 外壳设计......一直没时间开发新的 HomeAssistant MQTT 实体,最新的实体估计也是在本月初开发完的,一直没来得及给大家写使用教程!
Text 实体,也就是文本实体,它支持在 HomeAssistant 输入文字之后,通过 MQTT 下发内容到设备当中。可以理解成一个文本输入框,我们可以输入任意文字,然后发给设备。
也可以利用自动化,更新文本,例如:天气信息更新到设备。之所以叫它文本输入框,是因为在 HomeAssitant 它呈现的方式是这样的:
和其他实体一样,在 HomeAssistant-C 当中,默认不开启 Text 资源,需要自行启用,
在 homeAssistantDevConfig.h 中
把
#define CONFIG_ENTITY_ENABLE_TEXT
置
1
,就能启用 Text 资源:
创建 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 内容下发也会触发事件,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
成员来读取就行。
验证示例:
和其他实体更新的方法一样,也是用
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");