refactor: update energy flow card configuration and sensor mappings for JackeryHome
- Renamed the energy flow card from `energy-flow-card-plus` to `power-flow-card-plus` for consistency. - Updated entity references in the energy flow card configuration to align with new sensor identifiers, including home power, solar power, and grid import/export. - Adjusted the JackeryHome sensor mappings to reflect the correct meter serial numbers and improved the handling of power sensor values. - Enhanced the configuration with additional properties such as `min_flow_rate`, `max_flow_rate`, and `clickable_entities` for better functionality.
This commit is contained in:
@@ -28,13 +28,14 @@ REQUEST_INTERVAL = 5 # 数据请求间隔(秒)
|
|||||||
METER_SN_MAP = {
|
METER_SN_MAP = {
|
||||||
"battery_soc": "21548033",
|
"battery_soc": "21548033",
|
||||||
"solar_energy": "16961537",
|
"solar_energy": "16961537",
|
||||||
"home_energy": "16936961",
|
"home_energy": "",
|
||||||
"grid_import_energy": "16969729",
|
"grid_import_energy": "16969729",
|
||||||
"grid_export_energy": "16970753",
|
"grid_export_energy": "16970753",
|
||||||
"battery_charge_energy": "16964609",
|
"battery_charge_energy": "16964609",
|
||||||
"battery_discharge_energy": "16965633",
|
"battery_discharge_energy": "16965633",
|
||||||
"solar_power": "1026001",
|
"solar_power": "1026001",
|
||||||
"home_power": "21171201",
|
"home_power": "16936961",
|
||||||
|
# 电网与电池功率传感器,使用 *_power 作为 key
|
||||||
"grid_import_power": "16930817",
|
"grid_import_power": "16930817",
|
||||||
"grid_export_power": "16930817",
|
"grid_export_power": "16930817",
|
||||||
"battery_charge_power": "16931841",
|
"battery_charge_power": "16931841",
|
||||||
@@ -58,28 +59,28 @@ SENSORS = {
|
|||||||
"device_class": SensorDeviceClass.POWER,
|
"device_class": SensorDeviceClass.POWER,
|
||||||
"state_class": SensorStateClass.MEASUREMENT,
|
"state_class": SensorStateClass.MEASUREMENT,
|
||||||
},
|
},
|
||||||
"grid_import": {
|
"grid_import_power": {
|
||||||
"name": "Grid Import",
|
"name": "Grid Import",
|
||||||
"unit": UnitOfPower.WATT,
|
"unit": UnitOfPower.WATT,
|
||||||
"icon": "mdi:transmission-tower-import",
|
"icon": "mdi:transmission-tower-import",
|
||||||
"device_class": SensorDeviceClass.POWER,
|
"device_class": SensorDeviceClass.POWER,
|
||||||
"state_class": SensorStateClass.MEASUREMENT,
|
"state_class": SensorStateClass.MEASUREMENT,
|
||||||
},
|
},
|
||||||
"grid_export": {
|
"grid_export_power": {
|
||||||
"name": "Grid Export",
|
"name": "Grid Export",
|
||||||
"unit": UnitOfPower.WATT,
|
"unit": UnitOfPower.WATT,
|
||||||
"icon": "mdi:transmission-tower-export",
|
"icon": "mdi:transmission-tower-export",
|
||||||
"device_class": SensorDeviceClass.POWER,
|
"device_class": SensorDeviceClass.POWER,
|
||||||
"state_class": SensorStateClass.MEASUREMENT,
|
"state_class": SensorStateClass.MEASUREMENT,
|
||||||
},
|
},
|
||||||
"battery_charge": {
|
"battery_charge_power": {
|
||||||
"name": "Battery Charge",
|
"name": "Battery Charge",
|
||||||
"unit": UnitOfPower.WATT,
|
"unit": UnitOfPower.WATT,
|
||||||
"icon": "mdi:battery-charging",
|
"icon": "mdi:battery-charging",
|
||||||
"device_class": SensorDeviceClass.POWER,
|
"device_class": SensorDeviceClass.POWER,
|
||||||
"state_class": SensorStateClass.MEASUREMENT,
|
"state_class": SensorStateClass.MEASUREMENT,
|
||||||
},
|
},
|
||||||
"battery_discharge": {
|
"battery_discharge_power": {
|
||||||
"name": "Battery Discharge",
|
"name": "Battery Discharge",
|
||||||
"unit": UnitOfPower.WATT,
|
"unit": UnitOfPower.WATT,
|
||||||
"icon": "mdi:battery-minus",
|
"icon": "mdi:battery-minus",
|
||||||
@@ -297,7 +298,7 @@ class JackeryDataCoordinator:
|
|||||||
# 遍历所有传感器,找到匹配的 meter_sn
|
# 遍历所有传感器,找到匹配的 meter_sn
|
||||||
for sensor_id, entity in self._sensors.items():
|
for sensor_id, entity in self._sensors.items():
|
||||||
if str(entity._meter_sn) == meter_sn:
|
if str(entity._meter_sn) == meter_sn:
|
||||||
# 处理特殊传感器的值(如正负分离)
|
|
||||||
processed_value = entity._process_meter_value(meter_value)
|
processed_value = entity._process_meter_value(meter_value)
|
||||||
entity._update_sensor_value(processed_value)
|
entity._update_sensor_value(processed_value)
|
||||||
|
|
||||||
@@ -450,21 +451,11 @@ class JackeryHomeSensor(SensorEntity):
|
|||||||
self._attr_native_value = None
|
self._attr_native_value = None
|
||||||
self._attr_available = False
|
self._attr_available = False
|
||||||
self._attr_should_poll = False
|
self._attr_should_poll = False
|
||||||
self._attr_has_entity_name =False
|
self._attr_has_entity_name = False
|
||||||
self._coordinator = coordinator # 协调器引用
|
self._coordinator = coordinator # 协调器引用
|
||||||
|
|
||||||
# 获取 meter_sn,对于功率传感器,使用对应的 _power 键
|
# 获取 meter_sn,直接根据传感器 ID(包括 *_power 后缀)映射
|
||||||
meter_sn_key_map = {
|
self._meter_sn = METER_SN_MAP.get(sensor_id, 0)
|
||||||
"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
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def should_poll(self) -> bool:
|
def should_poll(self) -> bool:
|
||||||
@@ -472,20 +463,22 @@ class JackeryHomeSensor(SensorEntity):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def _process_meter_value(self, meter_value: float) -> float:
|
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":
|
# if self._sensor_id == "grid_import_power":
|
||||||
return meter_value if meter_value > 0 else 0
|
# meter_value
|
||||||
elif self._sensor_id == "battery_charge":
|
# elif self._sensor_id == "grid_export_power":
|
||||||
return abs(meter_value) if meter_value < 0 else 0
|
# return meter_value if meter_value > 0 else 0
|
||||||
elif self._sensor_id == "battery_discharge":
|
# # 电池功率:同一个 meter_sn,同步更新 battery_charge_power / battery_discharge_power
|
||||||
return meter_value if meter_value > 0 else 0
|
# elif self._sensor_id == "battery_charge_power":
|
||||||
elif self._sensor_id == "battery_soc":
|
# 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 转换为百分比
|
# Battery SOC 需要乘以 0.1 转换为百分比
|
||||||
return meter_value * 0.1
|
meter_value = meter_value * 0.1
|
||||||
else:
|
return meter_value
|
||||||
return meter_value
|
|
||||||
|
|
||||||
def _update_sensor_value(self, value: Any) -> None:
|
def _update_sensor_value(self, value: Any) -> None:
|
||||||
"""更新传感器值并通知 Home Assistant(由协调器调用)."""
|
"""更新传感器值并通知 Home Assistant(由协调器调用)."""
|
||||||
|
|||||||
@@ -1,35 +1,36 @@
|
|||||||
type: custom:energy-flow-card-plus
|
type: custom:power-flow-card-plus
|
||||||
entities:
|
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:
|
home:
|
||||||
entity: sensor.jackeryhome_home_power
|
entity: sensor.home_power
|
||||||
name: 家庭用电
|
color_icon: solar
|
||||||
icon: mdi:home-lightning-bolt
|
fossil_fuel_percentage:
|
||||||
display_zero_lines:
|
entity: sensor.battery_soc
|
||||||
mode: show
|
icon: mdi:pine-tree
|
||||||
transparency: 50
|
color_icon: true
|
||||||
grey_color:
|
solar:
|
||||||
- 189
|
icon: mdi:solar-panel-large
|
||||||
- 189
|
entity: sensor.solar_power
|
||||||
- 189
|
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
|
w_decimals: 0
|
||||||
kw_decimals: 2
|
kw_decimals: 2
|
||||||
color_icons: true
|
min_flow_rate: 0.9
|
||||||
animation_speed: 10
|
max_flow_rate: 6
|
||||||
energy_date_selection: false
|
watt_threshold: 10000
|
||||||
|
clickable_entities: true
|
||||||
|
title: Power Flow Card Plus
|
||||||
Reference in New Issue
Block a user