专栏名称: 安信可科技
全球领先的联网模组、智能家居等物联网硬件方案提供商。
目录
相关文章推荐
鱼羊史记  ·  女人想你了,会给你发这4句话,别不懂! ·  昨天  
历史与秩序  ·  北大优秀博士论文 | 窝阔台汗时代大蒙古国研究 ·  2 天前  
历史与秩序  ·  北大优秀博士论文 | 窝阔台汗时代大蒙古国研究 ·  2 天前  
历史地理研究资讯  ·  葛剑雄:何以中国 ·  5 天前  
朝文社  ·  美媒自曝打击DeepSeek内幕,与安全无关 ... ·  4 天前  
51好读  ›  专栏  ›  安信可科技

智能家居之旅(6):HomeAssistant-C传感器实体使用方法

安信可科技  · 公众号  ·  · 2024-06-21 18:33

正文

前段时间的外设移植活动中,有不少大佬给 Ai-M61 移植了很多传感器设备,应该还很少人把传感器的监控信息实现远程查看吧!那么今天,就带大家把传感器读取到的值上传到 HomeAssistant,实现远程监控。
如果还没有搭建好 HomeAssistant 的,请看完 智能家居之旅 系列的其他帖子:
第一站:了解 HomeAssistant 智能家居之旅
第二站:设备接入 HomeAssistant 的方法 智能家居之旅
第三站:Ai-M61/M62 接入 HomeAssistant 实现点灯


传感器实体创建
1、开启传感器资源
在 HomeAssistant-C 当中,默认不开启传感器资源,需要自行启用,在 homeAssistantDevConfig.h 中把
#define CONFIG_ENTITY_ENABLE_SENSOR 1 ,就能启用传感器资源:

2、创建传感器实体
和创建开关实体一样,创建传感器实体也是在连接上 MQTT 服务器之后创建,只需要对 name 和 unique_id  就行,然后添加以下实体:

//创建传感器实体static ha_sensor_entity_t sensor1 = { .name = "温度", .unique_id = "tmp1", }; homeAssistant_device_add_entity(CONFIG_HA_ENTITY_SENSOR, &sensor1);

烧录程序平且上电之后,就能在 HomeAssistant 的 MQTT 集成当中看到具有传感器的设备:
3、上传传感器值
在 HomeAssistant-C 当中,默认不开启传感器资源,需要自行启用,在 homeAssistantDevConfig.h 中把
#define CONFIG_ENTITY_ENABLE_SENSOR 1 ,就能启用传感器资源:
在实际应用当中,希望在读取传感器成功之后,马上上传当前值,所以我推荐使用 unique_id 查找实体的方式来上传传感器的值,
使用 homeAssistant_device_send_entity_state
函数和 homeAssistant_fine_entity 函数的结合来上传数据,比如上传数值:95
homeAssistant_device_send_entity_state(CONFIG_HA_ENTITY_SENSOR,homeAssistant_fine_entity(CONFIG_HA_ENTITY_SENSOR, "tmp1"), 95);

函数会自动找到 unique_id=tmp1 的传感器实体,然后上传 95 这个值,效果如下:

传感器种类设置
在 HomeAssistant 当中,给传感器实体定义了很多种类(Class),定义了种类的话,HomeAssistant 会自动配置该传感器的图标,单位等信息。例如:
HomeAssistant 支持的传感器种类可以参考:
https://www.home-assistant.io/integrations/sensor/#device-class
所以 HomeAssistant-C 也给大家加入了传感器种类配置,在 homeAssistantMQTT.h 文件中有个 ha_sensor_class_t 枚举类型,里面描述了 HomeAssistant 传感器的所有类型,因此,大家只需要在创建实体的时候,对 device_class 进行赋值即可,例如:
static ha_sensor_entity_t sensor1 = { .name = "温度", .unique_id = "tmp1", .device_class=Class_temperature,//配置为温度传感器 };


配置示例
1.温度传感器
static ha_sensor_entity_t sensor1 = { .name = "温度", .unique_id = "tmp1", .device_class=Class_temperature,//配置为温度传感器 };

2.湿度传感器
static ha_sensor_entity_t sensor_humi = {                .name = "湿度",                .unique_id = "humi1",                .device_class=Class_humidity,//配置为湿度传感器            };

3.光照传感器
static ha_sensor_entity_t sensor_lux = {                .name = "光照度",                .unique_id = "lli1",                .device_class=Class_illuminance,//配置为光照度传感器            };

有其他类型的传感器? 大家可以根据留言来分享或挑战~




往期回顾







请到「今天看啥」查看全文