智能家居之旅,第五站:Ai-WB2 使用HomeAssistant-C库接入HomeAssistant

[复制链接]
查看1979 | 回复17 | 2024-5-7 11:33:55 | 显示全部楼层 |阅读模式
本帖最后由 起个名字好难啊 于 2024-5-7 13:38 编辑

前言
之前所有的我写《智能家居之旅》帖子代码都是基于Ai-M61来开发的,不少大佬跟我反馈说:
Ai-M61/62只用来连接MQTT太浪费资源了,Ai-WB2更具性价比!
我觉得有道理,所以昨天就把HomeAssistant-C 给做了一次大改,提升了耦合性,目前仓库的master分支也可以支持Ai-WB2了,顺便再贴个库的链接:https://gitee.com/Ai-Thinker-Open/Ai-M6x_HomeAssistant-C
现在,跟着我来试试吧!
一、获取Ai-WB2 SDK

SDK地址:https://gitee.com/Ai-Thinker-Open/Ai-Thinker-WB2
我推荐使用git来克隆SDK:
Linux 开发环境请参考:Ai-WB2系列模组linux开发环境搭建
Windows 开发环境请参考:【二次开发教程】Ai-WB2系列的eclipes搭建环境教程
务必先搭建好开发环境,并且能成功烧录运行。
我使用的是Linux 的开发环境,如果你已经有Windows 的开发经验,也可以参考本贴来移植HomeAssistant-C ,欢迎分享你的Windows移植教程。

二、获取HomeAssistant-C
HomeAssistant-C 只是一个连接库,不能作为工程直接运行,所以在获取之前先找一个可运行工程,我这里使用的是WiFi的连接例程:
  1. cd Ai-Thinker-WB2/applications/wifi/station
复制代码
  • 复制 “station”文件夹下的"bouffalo.mk"文件到"Ai-M6x_HomeAssistant-C" 下面:
2.png
  2. 然后删除"Ai-M6x_HomeAssistant-C"的"bouffalo.mk"文件的所有内容,并添加以下内容:
  1. COMPONENT_ADD_INCLUDEDIRS :=./HomeAssistant-C
  2. COMPONENT_SRCDIRS := ./HomeAssistant-C
  3. COMPONENT_OBJS := $(patsubst %.c,%.o, $(COMPONENT_SRCS))
复制代码
3.png
3.在"Makefile"文件添加以下内容:
  1. INCLUDE_COMPONENTS += axk_common tcp_transport http-parser axk_tls axk_mqtt cjson
  2. INCLUDE_COMPONENTS += Ai-M6x_HomeAssistant-C
  3. EXTRA_COMPONENT_DIRS += $(PROJECT_PATH)/Ai-M6x_HomeAssistant-C
复制代码
4.png
4. 在main.c 文件引用接口头文件 :
  1. #include "homeAssistantPort.h"
复制代码
5. 修改使用Ai-WB2的宏定义
HomeAssistant-C 默认使用了Ai-M6x 的接口,需要修改成Ai-WB2的,只在"homeAssistantPort.c"文件屏蔽掉"#define CONFIG_Ai_M6x",并添加"#define CONFIG_Ai_WB2":
  1. #define CONFIG_Ai_WB2
复制代码
完成这一步之后,就可以编译了:
  1. make -j32
复制代码
编译成功:
5.png
三、改代码开始运行
话不多说,直接复制:智能家居之旅,第三站:Ai-M61/M62 接入HomeAssistant 实现点灯 中的测试代码。
3.1 在main.c 文件的第 172 行 下面添加:
  1. static homeAssisatnt_device_t ha_device;
  2.     ha_device.mqtt_info.mqtt_clientID = "Ai-WB2_Kit_Switch";
  3.     ha_device.mqtt_info.mqtt_host = "mqtt服务器地址";
  4.     ha_device.mqtt_info.port = 1883;
  5.     ha_device.mqtt_info.mqtt_username = "HomeAssistant_switch";
  6.     ha_device.mqtt_info.mqtt_password = "12345678";

  7.     ha_device.name = "我的Ai-WB2开发板"; //设备名称
  8.     ha_device.model = "Ai-wb2开发板";//模块名称
  9.     ha_device.manufacturer = "取个名字真难";//产商名称


  10.     homeAssistant_device_init(&ha_device, ha_event_cb);
复制代码
3.2 并且在 main() 函数上面粘贴回调函数及内容,这里定义了一个开关的实体:
  1. void ha_event_cb(ha_event_t event, homeAssisatnt_device_t* ha_dev)
  2. {
  3.     switch (event)
  4.     {
  5.         case HA_EVENT_MQTT_CONNECED:
  6.             HA_LOG_I("<<<<<<<<<<  HA_EVENT_MQTT_CONNECED\r\n");
  7.             //一定要加static
  8.             static ha_sw_entity_t entity_sw1 = {
  9.                  .name = "开关1",
  10.                  .icon = "mdi:power",
  11.                  .unique_id = "ai-wb2_sw1",
  12.             };

  13.             homeAssistant_device_add_entity(CONFIG_HA_ENTITY_SWITCH, &entity_sw1);
  14.             homeAssistant_device_send_status(HOMEASSISTANT_STATUS_ONLINE);
  15.             homeAssistant_device_send_entity_state(CONFIG_HA_ENTITY_SWITCH, &entity_sw1, 0);
  16.             break;
  17.         case HA_EVENT_MQTT_DISCONNECT:
  18.             HA_LOG_I("<<<<<<<<<<  HA_EVENT_MQTT_DISCONNECT\r\n");

  19.             break;
  20.         case HA_EVENT_MQTT_COMMAND_SWITCH:
  21.             HA_LOG_I("<<<<<<<<<<  HA_EVENT_MQTT_COMMAND_SWITCH\r\n");
  22.             // LOG_I("switch addr =%p", ha_dev->entity_switch->command_switch);
  23.             HA_LOG_I(" switch %s is %s\r\n", ha_dev->entity_switch->command_switch->name, ha_dev->entity_switch->command_switch->switch_state?"true":"flase");
  24.             int ret = homeAssistant_device_send_entity_state(CONFIG_HA_ENTITY_SWITCH, ha_dev->entity_switch->command_switch, ha_dev->entity_switch->command_switch->switch_state);
  25.             if (ret!=-1)HA_LOG_I("%s send entity suceess,state=%s\r\n", ha_dev->entity_switch->command_switch->name, ha_dev->entity_switch->command_switch->switch_state?"true":"flase");

  26.             break;
  27.         default:
  28.             break;
  29.     }
  30. }
复制代码
3.3 修改需要连接的路由账号及密码
6.png
3.4 在获取到IP地址之后,启动HomeAssistant 连接
在 "CODE_WIFI_ON_GOT_IP"事件下面添加: homeAssistant_device_start();
  1. homeAssistant_device_start();
复制代码
7.png
烧录测试:make flash
结果:
8.png
我预测一下,会有人问:我不会Ai-WB2二次开发,能不能做个AT指令的链接库?
1.png

本帖被以下淘专辑推荐:

回复

使用道具 举报

爱笑 | 2024-5-7 11:38:05 | 显示全部楼层
莫工出品,必属精品!
用心做好保姆工作
回复 支持 反对

使用道具 举报

1084504793 | 2024-5-7 11:42:36 | 显示全部楼层
回复

使用道具 举报

粉色小风扇 | 2024-5-8 13:59:33 | 显示全部楼层
我不会Ai-WB2二次开发,能不能做个AT指令的链接库?(这盛世如你所愿
回复 支持 反对

使用道具 举报

noonezero | 2024-5-10 11:15:12 | 显示全部楼层
厉害了
回复

使用道具 举报

wukong50 | 2024-5-10 12:25:32 | 显示全部楼层
学习了
回复

使用道具 举报

timo | 2024-5-10 13:59:47 | 显示全部楼层
感谢分享
回复

使用道具 举报

sansui | 2024-5-10 14:21:07 | 显示全部楼层
感谢莫哥
回复

使用道具 举报

物联网 | 2024-5-10 15:17:53 | 显示全部楼层
这个库不错
回复 支持 反对

使用道具 举报

知行合一 | 2024-5-10 16:20:44 | 显示全部楼层
莫哥出品
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则