专栏名称: 安信可科技
全球领先的联网模组、智能家居等物联网硬件方案提供商。
目录
相关文章推荐
江苏教育新闻  ·  江苏部分学校通知,元宵节次日报到! ·  昨天  
江苏教育新闻  ·  江苏部分学校通知,元宵节次日报到! ·  昨天  
春江潮起  ·  刚刚,泰州地震!多地有震感! ·  2 天前  
江苏知识产权  ·  江苏一体推进“一中心一基地一枢纽”建设 ·  3 天前  
江苏知识产权  ·  江苏一体推进“一中心一基地一枢纽”建设 ·  3 天前  
南京广播电视台  ·  南京“顶流”,回归了! ·  3 天前  
南京广播电视台  ·  南京“顶流”,回归了! ·  3 天前  
51好读  ›  专栏  ›  安信可科技

神器在手,摸鱼我有!用Rd-01做个老板监视器

安信可科技  · 公众号  ·  · 2024-05-10 18:04

正文

伙伴们,还记得之前小美让我做的“ 老板监视器 ”吗?不记得不要紧,连接在这: 神器在手,摸鱼我有?巧用雷达感应器的惊险一刻

就是这个小东西:





这个DEMO所用的就是安信可的Rd-01 人体存在雷达传感器,这个雷达传感器的特点参考资料: https://docs.ai-thinker.com/rd-01


自带的WiFi 功能,可以接入任何云平台,这次接入的就是HomeAssistant,通过配置自动化检测,实现平板电脑或手机的弹窗提示,达到警告作用。


这次要讲的就是类似Rd-01 雷达传感器,这种 只有0和1 的二进制传感器如何使用HomeAssistant-C 库接入HomeAssistant。





binary Sensor 介绍

binary Sensor 实体,中文名叫: 二进制传感器。


顾名思义 数据只有0和1两种状态 我们所用过的红外人体存在传感器、火焰传感器、Rd-01人体存在雷达、甚至是手扶梯的人体检测都属于二进制传感器。所以,这些传感器在HomeAssistant对它们的配置是最简单的。


好的,binary Sensor 就(实) (在) (编) (不) (下去了)!



binary Sensor 实体创建


这一小节需要大家已经实现了“switch”实体的创建并完成点灯,如果你还没有是实现这个, 马上、立刻去看:
智能家居之旅,第三站:Ai-M61/M62 接入HomeAssistant 实现点灯


因为之后只介绍对应的实体怎么使用,不会继续介绍其他内容,为了方便测试,代码更不会重新建立工程。


打开之前创建的" HomeAssistant_switch "工程中" main.c "文件,在" ha_event_cb "回调函数中的
HA_EVENT_MQTT_CONNECED 事件下创建实体:


 //创建二进制实体            static ha_Bsensor_entity_t entity_binary_sensor = {                .name = "二进制传感器",//给个名字                .unique_id = "binary_sensor1",//声明一个唯一的id 号            };            //向HomeAssistant 添加二进制实体            homeAssistant_device_add_entity(CONFIG_HA_ENTITY_BINARY_SENSOR, &entity_binary_sensor);


代码如下:


这样,一个二进制实体就创建好了,烧录验证一下:




可以看到,刚刚创建的" 二进制传感器 "已经在之前建立的设备当中了,但是它处于不可用状态,这个怎么办呢?

方法一: 复位一下开发板
方法二: 等我修复...........


上传binary Sensor


binary Sensor 传感器已经创建好了,那下一步就是数据上传了。


其实 HomeAssistant-C 上传数据只需要一个函数: homeAssistant_device_send_state。 上传binary sensor 数据:


homeAssistant_device_send_entity_state(CONFIG_HA_ENTITY_BINARY_SENSOR, <实体节点>, <0/1>);


比如:


烧录并且重新复位之后,能看到HomeAssistant中的 " 二进制传感器 "处于" 开启 "状态。


homeAssistant_device_send_state 函数的第二个,是一个实体的节点,为了大家能够在任何地方能够正确获取到需要的节点,HomeAssistant-C 库提供了一个函数:


homeAssistant_fine_entity(char* entity_type,const char* unique_id)


在使用这个函数的时候,只需要传递 实体的类型和unique id ,比如找 unique id= binary_sensor1 的二进制实体:


ha_Bsensor_entity_t* entity_bs = homeAssistant_fine_entity(CONFIG_HA_ENTITY_BINARY_SENSOR, "binary_sensor1");


有了这个函数,可以在其他代码段使用

homeAssistant_device_send_entity_state 函数发送数据,像这样:


homeAssistant_device_send_entity_state(CONFIG_HA_ENTITY_BINARY_SENSOR,homeAssistant_fine_entity(CONFIG_HA_ENTITY_BINARY_SENSOR, "binary_sensor1"), 1);



测试


延续上一节的问题: 三个开关怎么识别只有 开关1 能控制蓝灯?
答案: 通过unique id来识别。


可以通过 homeAssistant_fine_entity ,先找到需要判断的实体,然后再通过双方的unique id 来识别就能确认,下发的命令是否是" 开关1 ",同时上传一下二进制传感器的状态:


ha_sw_entity_t* sw1_s = homeAssistant_fine_entity(CONFIG_HA_ENTITY_SWITCH, "sw1");//找到"开关1实体"//判断是否是开关1的命令            if (ha_dev->entity_switch->command_switch->unique_id==sw1_s->unique_id&&ha_dev->entity_switch->command_switch->switch_state) {                bflb_gpio_set(gpio, GPIO_PIN_15);


然后可以看到如下效果:



最后的最后








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