HomeAssistant自定义组件学习-【三】

#要说的话#

因为自己其他事情,小半年没有更新HomeAssistant自定义组件内容了,这次把一个7合一的空气质量传感器实现了,硬件搭建还是使用的亿佰特的RS485模块+M702(RS485版)传感器,这次有几点更新:

  1. 把亿佰特模块独立出来了;
  2. 把实体数据放到设备里;
  3. 亿佰特模块和传感器代码传到优快云,大家可以下载;

硬件的淘宝链接:

亿佰特模块(NA111):商品详情

传感器模块(M702):商品详情

亿佰特模块有个遗憾的地方,就是没有5V的电源输出,我另外配了一个电源模块给M702供电。

#组件思路#

在亿佰特模块中进行设备的发现,模块的IP、端口配置,并使用json文件把信息保存在系统中;

在传感器模块中选择亿佰特模块中配置的设备,然后两者关联起来,

#具体实现#

亿佰特模块的发现功能在上一篇文章《HomeAssistant自定义组件学习-二》中有说明。本次只是需要把发现的设备模块给其他模块进行调用,这里我采用的是通过json配置文件进行数据配置的传递。json文件的操作方法同样在前几章中有实现,感兴趣的可以翻一下我之前的文章,或者直接下载我上传的资源,下载地址附后面。

设备模块的占用冲突,在json文件里增加used信息,其他模块选择设备时检查used字段,防止占用冲突,实现代码在传感器模块的config_flow.py中。

async def async_step_user(
        self, user_input: dict[str, Any] | None = None
    ) -> ConfigFlowResult:
        """Handle the initial step."""
        errors: dict[str, str] = {}
        ent_data: dict[str, Any] = {}
        if self._device_manager is None:
            self._device_manager = EbyteDeviceManager(self.hass)
        if user_input is not None:
            # 如果有用户输入,则处理输入的信息
            if CONFIG_USER_INPUT_EBYTE_DEVICE in user_input:
                # 保存选择通讯设备,
                mac: str = user_input[CONFIG_USER_INPUT_EBYTE_DEVICE]
                name: str = user_input[CONF_NAME]
                sd: EbyteDeviceInfo = self._device_manager.get_device_by_mac(mac)
                if sd is not None:
                    ent_data[CONF_NAME] = name
                    ent_data[CONF_HOST] = sd.Ip
                    ent_data[CONF_PORT] = sd.Port
                    ent_data[CONF_MAC] = sd.MAC
                    dp: map[str, Any] = {}
                    dp[CONF_HOST] = sd.Ip
                    dp[CONF_MAC] = sd.MAC
                    dp[CONF_NAME] = name
                    dp[CONF_HOST] = sd.Ip
                    ret: ConfigFlowResult = self.async_create_entry(
                        title=f"AirQuality[{sd.Ip}]",
                        description="This is a air quality device!",
                        description_placeholders=dp,
                        options=dp,
                        data=ent_data,
                    )
                    # 标识选择的设备已经使用
                    sd.set_used(True)
                    sd.set_device_name(name)
                    sd.save_config()
                    return ret
                _LOGGER.error(f"EbyteDeviceIn
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值