前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >智能家居之旅(四):Rd-01雷达做“检测器”的实现方法(binary sensor 实体

智能家居之旅(四):Rd-01雷达做“检测器”的实现方法(binary sensor 实体

原创
作者头像
安信可科技
修改2024-08-09 11:58:18
1280
修改2024-08-09 11:58:18
举报
文章被收录于专栏:智能家居学习

上自带的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);

然后你就可以看到这样的效果:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
人体分析
腾讯云神图·人体分析(Body Analysis)基于腾讯优图领先的人体分析算法,提供人体检测、行人重识别(ReID)等服务。支持识别图片或视频中的半身人体轮廓;支持通过人体检测,识别行人的穿着、体态等属性信息。可应用于人像抠图、背景特效、人群密度检测等场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档