import json from hoymiles_wifi.dtu import DTU import asyncio import aiohttp import logging import math import time from typing import List from dataclasses import dataclass from dataclasses import field UPDATE_INTERVAL = 31 _LOGGER = logging.getLogger(__name__) dtu = DTU("192.168.179.184") @dataclass class DTUBIInvData: p_PV:List[float] = field(default_factory=lambda: [0.0,0.0]) p_AC:float = 0.0 temp:float = 0.0 error:int = 0 name:str = "" @dataclass class DTUBIData: inverter:List[DTUBIInvData] = field(default_factory=lambda: [DTUBIInvData()])#default_factory=lambda: [DTUInvData(), DTUInvData(),DTUInvData(),DTUInvData(),DTUInvData(),DTUInvData()]) p_AC_sum:float = 0 error = 0 ret = DTUBIData() ret.lastUpdate = time.clock_gettime(0)-UPDATE_INTERVAL ret.inverter[0].name = "Veranda UG2" async def gatherData() -> DTUBIData: if(time.clock_gettime(0) >= ret.lastUpdate + UPDATE_INTERVAL): ret.lastUpdate = time.clock_gettime(0) #print("get charger status..."); try: state = await dtu.async_get_real_data_new() #logging.warning(html) #state = json.load(html) ret.inverter[0].error = 0 ret.inverter[0].p_PV[0] = state.pv_data[0].power/10 ret.inverter[0].p_PV[1] = state.pv_data[1].power/10 ret.inverter[0].p_AC = state.sgs_data[0].active_power/10 ret.p_AC_sum = ret.inverter[0].p_AC ret.inverter[0].temp = state.sgs_data[0].temperature/10 except: if(ret.inverter[0].error > 1): ret.p_AC_sum = 0 ret.inverter[0].p_PV[0] = 0 ret.inverter[0].p_PV[1] = 0 ret.inverter[0].temp = 0 ret.inverter[0].p_AC = 0 else: ret.inverter[0].error += 1 return ret