找回密码
 立即注册

微信扫码登录

搜索
查看: 694|回复: 9

[问题求助] 升级到12.0巴法云无法加载

[复制链接]

28

主题

255

回帖

2861

积分

金牌会员

积分
2861
金钱
2578
HASS币
0
发表于 2025-12-5 10:41:22 来自手机 | 显示全部楼层 |阅读模式
刚升级到12.0巴法云集成无法加载了,到8124小工具里修复也没办法加载。不知有没办法解决。
回复

使用道具 举报

16

主题

301

回帖

2695

积分

金牌会员

积分
2695
金钱
2378
HASS币
0
发表于 2025-12-5 12:10:02 | 显示全部楼层
hacs好像也有问题
已经恢复了之前备份
回复

使用道具 举报

0

主题

78

回帖

334

积分

中级会员

积分
334
金钱
256
HASS币
0
发表于 2025-12-5 12:27:10 | 显示全部楼层
修改代码sync_sensor.py
删除17行的导入
from .sync import SYNC_TYPES, Sync

_LOGGING = logging.getLogger(__name__)

# 增加以下代码
def area_entities(hass: HomeAssistant, area_id: str) -> list[str]:
    ar = area_registry.async_get(hass)
    target_area = ar.async_get_area(area_id)
    if not target_area:
        return []
    # 递归获取当前区域 + 所有子区域的实体ID
    entity_ids = []
    for entity_id in hass.states.async_entity_ids():
        state = hass.states.get(entity_id)
        if state and state.attributes.get("area_id") == area_id:
            entity_ids.append(entity_id)
    for sub_area in ar.async_get_children(area_id):
        entity_ids.extend(area_entities(hass, sub_area.id))
    return list(set(entity_ids))
回复

使用道具 举报

75

主题

524

回帖

2497

积分

金牌会员

积分
2497
金钱
1898
HASS币
50
发表于 2025-12-5 15:43:41 | 显示全部楼层
fanyan1026 发表于 2025-12-5 12:27
修改代码sync_sensor.py
删除17行的导入
from .sync import SYNC_TYPES, Sync

可以详细一点吗???没搞定。
回复

使用道具 举报

0

主题

34

回帖

400

积分

中级会员

积分
400
金钱
366
HASS币
0
发表于 2025-12-5 18:15:00 | 显示全部楼层
本帖最后由 hanxuefeng000 于 2025-12-5 18:16 编辑

找到sync_sensor.py文件 打开后删除原有代码,替换为以下代码
"""Support for bemfa service."""

import logging
from typing import Any
import voluptuous as vol

from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN, SensorDeviceClass
from homeassistant.const import ATTR_DEVICE_CLASS
from homeassistant.core import HomeAssistant
from homeassistant.helpers import area_registry
from homeassistant.helpers.selector import (
    SelectOptionDict,
    SelectSelector,
    SelectSelectorConfig,
    SelectSelectorMode,
)
# 尝试从新位置导入 area_entities
try:
    from homeassistant.helpers.area_registry import async_get as async_get_area_registry
except ImportError:
    # 如果 HA 版本更老,或者路径不对,尝试备用方案(虽然可能性低)
    try:
        from homeassistant.helpers.template import area_entities
    except ImportError:
        # 如果都找不到,定义一个空的作为占位符,避免集成崩溃
        # 注意:这会导致传感器功能完全失效,但至少不让集成挂掉
        def async_get_area_registry(hass):
            return None

from .utils import has_key
from .const import (
    OPTIONS_CO2,
    OPTIONS_HUMIDITY,
    OPTIONS_ILLUMINANCE,
    OPTIONS_PM25,
    OPTIONS_TEMPERATURE,
    TopicSuffix,
)
from .sync import SYNC_TYPES, Sync

_LOGGING = logging.getLogger(__name__)


@SYNC_TYPES.register("sensor")
class Sensor(Sync):
    """Sync a hass area to bemfa sensor device."""

    @staticmethod
    def get_config_step_id() -> str:
        return "sync_config_sensor"

    @staticmethod
    def _get_topic_suffix() -> TopicSuffix:
        return TopicSuffix.SENSOR

    @classmethod
    def collect_supported_syncs(cls, hass: HomeAssistant):
        """Group hass sensors by area. Each area maps a bemfa sensor device."""
        return [
            cls(hass, "area.{id}".format(id=area.id), area.name)
            for area in area_registry.async_get(hass).async_list_areas()
        ]

    def generate_details_schema(self) -> dict[str, Any]:
        temperature_sensors: dict[str, str] = {}
        humidity_sensors: dict[str, str] = {}
        illuminance_sensors: dict[str, str] = {}
        pm25_sensors: dict[str, str] = {}
        co2_sensors: dict[str, str] = {}

        # filter entities in our area
        a_entities = area_entities(self._hass, self._entity_id.split(".")[1])

        for state in self._hass.states.async_all(SENSOR_DOMAIN):
            if state.entity_id not in a_entities:
                continue
            if not has_key(state.attributes, ATTR_DEVICE_CLASS):
                continue
            for (_d, _c) in (
                (temperature_sensors, SensorDeviceClass.TEMPERATURE),
                (humidity_sensors, SensorDeviceClass.HUMIDITY),
                (illuminance_sensors, SensorDeviceClass.ILLUMINANCE),
                (pm25_sensors, SensorDeviceClass.PM25),
                (co2_sensors, SensorDeviceClass.CO2),
            ):
                if state.attributes[ATTR_DEVICE_CLASS] == _c:
                    _d[state.entity_id] = "{name} ({id})".format(
                        name=state.name, id=state.entity_id
                    )
                    break
        schema = super().generate_details_schema()
        for (_t, _d) in (
            (OPTIONS_TEMPERATURE, temperature_sensors),
            (OPTIONS_HUMIDITY, humidity_sensors),
            (OPTIONS_ILLUMINANCE, illuminance_sensors),
            (OPTIONS_PM25, pm25_sensors),
            (OPTIONS_CO2, co2_sensors),
        ):
            if _d:
                schema[
                    vol.Optional(
                        _t,
                        description={
                            "suggested_value": self._config[_t]
                            if _t in self._config and self._config[_t] in _d
                            else list(_d.keys())[0]
                        },
                    )
                ] = SelectSelector(
                    SelectSelectorConfig(
                        options=[
                            SelectOptionDict(
                                value=value,
                                label=label,
                            )
                            for (value, label) in _d.items()
                        ],
                        mode=SelectSelectorMode.DROPDOWN,
                    )
                )
        return schema

    def get_watched_entity_ids(self) -> list[str]:
        ids: list[str] = []
        for name in (
            OPTIONS_TEMPERATURE,
            OPTIONS_HUMIDITY,
            OPTIONS_ILLUMINANCE,
            OPTIONS_PM25,
            OPTIONS_CO2,
        ):
            if name in self._config:
                ids.append(self._config[name])
        return ids

    def _generate_msg_parts(self) -> list[str]:
        msg: list[str] = [""]
        for name in (
            OPTIONS_TEMPERATURE,
            OPTIONS_HUMIDITY,
            "",
            OPTIONS_ILLUMINANCE,
            OPTIONS_PM25,
            OPTIONS_CO2,
        ):
            if name in self._config:
                state = self._hass.states.get(self._config[name])
                if state is not None:
                    msg.append(state.state)
        return msg
回复

使用道具 举报

0

主题

46

回帖

834

积分

高级会员

积分
834
金钱
788
HASS币
0
发表于 2025-12-7 22:09:26 | 显示全部楼层
hanxuefeng000 发表于 2025-12-5 18:15
找到sync_sensor.py文件 打开后删除原有代码,替换为以下代码

试过了,不行
回复

使用道具 举报

0

主题

78

回帖

334

积分

中级会员

积分
334
金钱
256
HASS币
0
发表于 2025-12-8 14:17:02 | 显示全部楼层
tanbobo 发表于 2025-12-5 15:43
可以详细一点吗???没搞定。

删除第17行的导入
然后增加我贴出来的那些代码就行
位置在_LOGGING = logging.getLogger(__name__)下面

只要注意缩进没问题就行
回复

使用道具 举报

0

主题

78

回帖

334

积分

中级会员

积分
334
金钱
256
HASS币
0
发表于 2025-12-8 14:26:04 | 显示全部楼层
tanbobo 发表于 2025-12-5 15:43
可以详细一点吗???没搞定。

sync_sensor.zip (1.92 KB, 下载次数: 21)
解压出来 替换就行了!

我用的是1.4.2版的
回复

使用道具 举报

28

主题

255

回帖

2861

积分

金牌会员

积分
2861
金钱
2578
HASS币
0
 楼主| 发表于 2025-12-10 15:23:34 来自手机 | 显示全部楼层
我用的是1.4.1的版本,没有1.4.2的呀
回复

使用道具 举报

18

主题

353

回帖

1827

积分

金牌会员

积分
1827
金钱
1446
HASS币
40
发表于 2025-12-10 15:32:23 | 显示全部楼层
这里
https://github.com/cqu-william/bemfa
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian ( 晋ICP备17001384号-1 )

GMT+8, 2026-1-23 02:23 , Processed in 0.333345 second(s), 10 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表