diff --git a/custom_components/JackeryHome/sensor.py b/custom_components/JackeryHome/sensor.py index 7db241b..a17dff0 100644 --- a/custom_components/JackeryHome/sensor.py +++ b/custom_components/JackeryHome/sensor.py @@ -28,13 +28,14 @@ REQUEST_INTERVAL = 5 # 数据请求间隔(秒) METER_SN_MAP = { "battery_soc": "21548033", "solar_energy": "16961537", - "home_energy": "16936961", + "home_energy": "", "grid_import_energy": "16969729", "grid_export_energy": "16970753", "battery_charge_energy": "16964609", "battery_discharge_energy": "16965633", "solar_power": "1026001", - "home_power": "21171201", + "home_power": "16936961", + # 电网与电池功率传感器,使用 *_power 作为 key "grid_import_power": "16930817", "grid_export_power": "16930817", "battery_charge_power": "16931841", @@ -58,28 +59,28 @@ SENSORS = { "device_class": SensorDeviceClass.POWER, "state_class": SensorStateClass.MEASUREMENT, }, - "grid_import": { + "grid_import_power": { "name": "Grid Import", "unit": UnitOfPower.WATT, "icon": "mdi:transmission-tower-import", "device_class": SensorDeviceClass.POWER, "state_class": SensorStateClass.MEASUREMENT, }, - "grid_export": { + "grid_export_power": { "name": "Grid Export", "unit": UnitOfPower.WATT, "icon": "mdi:transmission-tower-export", "device_class": SensorDeviceClass.POWER, "state_class": SensorStateClass.MEASUREMENT, }, - "battery_charge": { + "battery_charge_power": { "name": "Battery Charge", "unit": UnitOfPower.WATT, "icon": "mdi:battery-charging", "device_class": SensorDeviceClass.POWER, "state_class": SensorStateClass.MEASUREMENT, }, - "battery_discharge": { + "battery_discharge_power": { "name": "Battery Discharge", "unit": UnitOfPower.WATT, "icon": "mdi:battery-minus", @@ -297,7 +298,7 @@ class JackeryDataCoordinator: # 遍历所有传感器,找到匹配的 meter_sn for sensor_id, entity in self._sensors.items(): if str(entity._meter_sn) == meter_sn: - # 处理特殊传感器的值(如正负分离) + processed_value = entity._process_meter_value(meter_value) entity._update_sensor_value(processed_value) @@ -450,21 +451,11 @@ class JackeryHomeSensor(SensorEntity): self._attr_native_value = None self._attr_available = False self._attr_should_poll = False - self._attr_has_entity_name =False + self._attr_has_entity_name = False self._coordinator = coordinator # 协调器引用 - - # 获取 meter_sn,对于功率传感器,使用对应的 _power 键 - meter_sn_key_map = { - "grid_import": "grid_import_power", - "grid_export": "grid_export_power", - "battery_charge": "battery_charge_power", - "battery_discharge": "battery_discharge_power", - } - meter_sn_key = meter_sn_key_map.get(sensor_id, sensor_id) - self._meter_sn = METER_SN_MAP.get(meter_sn_key, 0) - - # 能源传感器标识 - self._is_energy_sensor = device_class == SensorDeviceClass.ENERGY + + # 获取 meter_sn,直接根据传感器 ID(包括 *_power 后缀)映射 + self._meter_sn = METER_SN_MAP.get(sensor_id, 0) @property def should_poll(self) -> bool: @@ -472,20 +463,22 @@ class JackeryHomeSensor(SensorEntity): return False def _process_meter_value(self, meter_value: float) -> float: - """根据传感器类型处理 meter 值.""" - if self._sensor_id == "grid_import": - return abs(meter_value) if meter_value < 0 else 0 - elif self._sensor_id == "grid_export": - return meter_value if meter_value > 0 else 0 - elif self._sensor_id == "battery_charge": - return abs(meter_value) if meter_value < 0 else 0 - elif self._sensor_id == "battery_discharge": - return meter_value if meter_value > 0 else 0 - elif self._sensor_id == "battery_soc": + + ## 电池充放电功率 负值为充电,正值为放电 + ## 电网功率 负值为购买,正值为出售 + # if self._sensor_id == "grid_import_power": + # meter_value + # elif self._sensor_id == "grid_export_power": + # return meter_value if meter_value > 0 else 0 + # # 电池功率:同一个 meter_sn,同步更新 battery_charge_power / battery_discharge_power + # elif self._sensor_id == "battery_charge_power": + # return abs(meter_value) if meter_value < 0 else 0 + # elif self._sensor_id == "battery_discharge_power": + # return meter_value if meter_value > 0 else 0 + if self._sensor_id == "battery_soc": # Battery SOC 需要乘以 0.1 转换为百分比 - return meter_value * 0.1 - else: - return meter_value + meter_value = meter_value * 0.1 + return meter_value def _update_sensor_value(self, value: Any) -> None: """更新传感器值并通知 Home Assistant(由协调器调用).""" diff --git a/energy_flow_card_config.yaml b/energy_flow_card_config.yaml index 29c8fcd..e16779c 100644 --- a/energy_flow_card_config.yaml +++ b/energy_flow_card_config.yaml @@ -1,35 +1,36 @@ -type: custom:energy-flow-card-plus +type: custom:power-flow-card-plus entities: - solar: - entity: sensor.jackeryhome_solar_power - name: 太阳能 - icon: mdi:solar-power - grid: - entity: - consumption: sensor.jackeryhome_grid_import - production: sensor.jackeryhome_grid_export - name: 电网 - icon: mdi:transmission-tower - battery: - entity: - consumption: sensor.jackeryhome_battery_charge - production: sensor.jackeryhome_battery_discharge - state_of_charge: sensor.jackeryhome_battery_state_of_charge - name: 电池 - icon: mdi:battery home: - entity: sensor.jackeryhome_home_power - name: 家庭用电 - icon: mdi:home-lightning-bolt -display_zero_lines: - mode: show - transparency: 50 - grey_color: - - 189 - - 189 - - 189 + entity: sensor.home_power + color_icon: solar + fossil_fuel_percentage: + entity: sensor.battery_soc + icon: mdi:pine-tree + color_icon: true + solar: + icon: mdi:solar-panel-large + entity: sensor.solar_power + battery: + name: Bateria + icon: mdi:bat + entity: + consumption: sensor.battery_charge_power + production: sensor.battery_discharge_power + individual: + - entity: sensor.grid_import_power + icon: mdi:transmission-tower-import + color: "#80b8ff" + name: Grid Import + color_icon: false + - entity: sensor.grid_export_power + icon: mdi:transmission-tower-export + color: "#ff8080" + name: Grid Export + color_icon: true w_decimals: 0 kw_decimals: 2 -color_icons: true -animation_speed: 10 -energy_date_selection: false +min_flow_rate: 0.9 +max_flow_rate: 6 +watt_threshold: 10000 +clickable_entities: true +title: Power Flow Card Plus \ No newline at end of file