更新数据格式

This commit is contained in:
不求圣剑
2026-01-23 11:02:22 +08:00
parent 7d5fba2abc
commit d4e28a8bfb
2 changed files with 22 additions and 12 deletions

View File

@@ -3,11 +3,10 @@ import logging
from typing import Any
import voluptuous as vol
from homeassistant import config_entries
from homeassistant.components import mqtt
from homeassistant.core import HomeAssistant
from homeassistant.data_entry_flow import FlowResult
from homeassistant.components import mqtt
from . import DOMAIN
@@ -16,7 +15,7 @@ _LOGGER = logging.getLogger(__name__)
# 配置数据模式
DATA_SCHEMA = vol.Schema(
{
vol.Required("mqtt_host"): str,
vol.Required("device_sn"): str,
vol.Required("token"): str,
vol.Optional(
@@ -69,4 +68,3 @@ class JackeryConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
async def async_step_import(self, import_config: dict[str, Any]) -> FlowResult:
"""Import a config entry from configuration.yaml."""
return await self.async_step_user(import_config)

View File

@@ -121,7 +121,7 @@ SENSORS = {
"state_class": SensorStateClass.MEASUREMENT,
},
"grid_export_power": { # System -> Grid/Home (inOngirdPw)
"json_key": "inOngirdPw",
"json_key": "inOngridPw",
"name": "Grid Export Power",
"unit": UnitOfPower.WATT,
"icon": "mdi:transmission-tower-export",
@@ -308,10 +308,7 @@ class JackeryDataCoordinator:
def _distribute_data(self, data: dict) -> None:
"""分发数据给传感器."""
for sensor_id, entity in self._sensors.items():
json_key = SENSORS[sensor_id].get("json_key")
if json_key and json_key in data:
raw_value = data[json_key]
entity._update_from_coordinator(raw_value)
entity._update_from_coordinator(data)
async def _periodic_data_request(self) -> None:
"""定期发送 'type: 25' 指令请求全量数据."""
@@ -428,8 +425,23 @@ class JackerySensor(SensorEntity):
self._coordinator.unregister_sensor(self._sensor_id)
await super().async_will_remove_from_hass()
def _update_from_coordinator(self, value: Any) -> None:
def _update_from_coordinator(self, data: dict) -> None:
"""Receive data from coordinator."""
# Special handling for EPS Output Power (Bidirectional)
if self._sensor_id == "eps_output_power":
out_p = float(data.get("swEpsOutPw", 0))
in_p = float(data.get("swEpsInPw", 0))
self._attr_native_value = out_p - in_p
self._attr_available = True
self.async_write_ha_state()
return
json_key = self._config.get("json_key")
if not json_key or json_key not in data:
return
value = data[json_key]
# Process specific conversions
if self._sensor_id == "battery_temperature":
# cellTemp is 0.1 C