Skip to content

Commit

Permalink
Merge pull request #7 from tijsverkoyen/6-realtime-power-missing
Browse files Browse the repository at this point in the history
Support for string inverter
  • Loading branch information
tijsverkoyen authored Nov 3, 2022
2 parents f6db7f9 + b8c2092 commit 31aa62a
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 13 deletions.
5 changes: 4 additions & 1 deletion custom_components/fusion_solar/fusion_solar/const.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,7 @@
ATTR_DEVICE_REAL_KPI_DATA_ITEM_MAP = 'dataItemMap'
ATTR_DEVICE_REAL_KPI_ACTIVE_POWER = 'active_power'

PARAM_DEVICE_TYPE_ID_RESIDENTIAL_INVERTER = 38
PARAM_DEVICE_TYPE_ID_STRING_INVERTER = 1
PARAM_DEVICE_TYPE_ID_GRID_METER = 17
PARAM_DEVICE_TYPE_ID_RESIDENTIAL_INVERTER = 38
PARAM_DEVICE_TYPE_ID_POWER_SENSOR = 47
36 changes: 24 additions & 12 deletions custom_components/fusion_solar/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@
ATTR_STATION_CODE, ATTR_STATION_REAL_KPI_DATA_ITEM_MAP, ATTR_STATION_REAL_KPI_TOTAL_CURRENT_DAY_ENERGY, \
ATTR_STATION_REAL_KPI_TOTAL_CURRENT_MONTH_ENERGY, ATTR_STATION_REAL_KPI_TOTAL_LIFETIME_ENERGY, \
ATTR_DATA_COLLECT_TIME, ATTR_KPI_YEAR_INVERTER_POWER, ATTR_DEVICE_REAL_KPI_ACTIVE_POWER, \
PARAM_DEVICE_TYPE_ID_RESIDENTIAL_INVERTER, ATTR_DEVICE_REAL_KPI_DEV_ID, ATTR_DEVICE_REAL_KPI_DATA_ITEM_MAP
PARAM_DEVICE_TYPE_ID_STRING_INVERTER, PARAM_DEVICE_TYPE_ID_GRID_METER, PARAM_DEVICE_TYPE_ID_RESIDENTIAL_INVERTER, \
PARAM_DEVICE_TYPE_ID_POWER_SENSOR, ATTR_DEVICE_REAL_KPI_DEV_ID, ATTR_DEVICE_REAL_KPI_DATA_ITEM_MAP, \
ATTR_DEVICE_TYPE_ID
from .fusion_solar.kiosk.kiosk import FusionSolarKiosk
from .fusion_solar.kiosk.kiosk_api import FusionSolarKioskApi
from .fusion_solar.openapi.openapi_api import FusionSolarOpenApi
Expand Down Expand Up @@ -225,21 +227,30 @@ async def async_update_station_year_kpi_data():
])

devices = await hass.async_add_executor_job(api.get_dev_list, station_codes)
device_ids = [str(device.device_id) for device in devices]
devices_grouped_per_type_id = {}
for device in devices:
if device.type_id not in [PARAM_DEVICE_TYPE_ID_STRING_INVERTER, PARAM_DEVICE_TYPE_ID_GRID_METER,
PARAM_DEVICE_TYPE_ID_RESIDENTIAL_INVERTER, PARAM_DEVICE_TYPE_ID_POWER_SENSOR]:
continue

if device.type_id not in devices_grouped_per_type_id:
devices_grouped_per_type_id[device.type_id] = []
devices_grouped_per_type_id[device.type_id].append(str(device.device_id))

async def async_update_device_real_kpi_data():
data = {}
response = await hass.async_add_executor_job(
api.get_dev_real_kpi,
device_ids,
PARAM_DEVICE_TYPE_ID_RESIDENTIAL_INVERTER
)
for type_id in devices_grouped_per_type_id:
response = await hass.async_add_executor_job(
api.get_dev_real_kpi,
devices_grouped_per_type_id[type_id],
type_id
)

for response_data in response:
key = f'{DOMAIN}-{response_data[ATTR_DEVICE_REAL_KPI_DEV_ID]}'
data[key] = response_data[ATTR_DEVICE_REAL_KPI_DATA_ITEM_MAP];
for response_data in response:
key = f'{DOMAIN}-{response_data[ATTR_DEVICE_REAL_KPI_DEV_ID]}'
data[key] = response_data[ATTR_DEVICE_REAL_KPI_DATA_ITEM_MAP];

_LOGGER.debug(f'async_update_device_real_kpi_data: {data}')
_LOGGER.debug(f'async_update_device_real_kpi_data: {data}')

return data

Expand All @@ -255,7 +266,8 @@ async def async_update_device_real_kpi_data():
await coordinator.async_refresh()

for device in devices:
if device.type_id != PARAM_DEVICE_TYPE_ID_RESIDENTIAL_INVERTER:
if device.type_id not in [PARAM_DEVICE_TYPE_ID_STRING_INVERTER, PARAM_DEVICE_TYPE_ID_GRID_METER,
PARAM_DEVICE_TYPE_ID_RESIDENTIAL_INVERTER, PARAM_DEVICE_TYPE_ID_POWER_SENSOR]:
continue

async_add_entities([
Expand Down

0 comments on commit 31aa62a

Please sign in to comment.