From 9f083471dbc3b022b8f9c5b76101e25fbd29d2fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrik=20T=C5=99e=C5=A1t=C3=ADk?= Date: Thu, 19 Dec 2024 15:24:12 +0100 Subject: [PATCH] Mapping first Options for G2 (read only) --- .../solax_http/entity_definitions.py | 2 +- .../solax_http/plugin_solax_ev_charger_g2.py | 86 +++++++++--------- doc/Mapping.xlsx | Bin 17137 -> 18621 bytes 3 files changed, 44 insertions(+), 44 deletions(-) diff --git a/custom_components/solax_http/entity_definitions.py b/custom_components/solax_http/entity_definitions.py index 658c2ff..556801c 100644 --- a/custom_components/solax_http/entity_definitions.py +++ b/custom_components/solax_http/entity_definitions.py @@ -476,7 +476,7 @@ class SolaXEVChargerHttpSensorEntityDescription(BaseHttpSensorEntityDescription) native_unit_of_measurement=UnitOfElectricCurrent.AMPERE, device_class=SensorDeviceClass.CURRENT, entity_registry_enabled_default=False, - allowedtypes=G1, + allowedtypes=G1 | G2, ), # SolaXEVChargerHttpSensorEntityDescription( # name = "Control Command", diff --git a/custom_components/solax_http/plugin_solax_ev_charger_g2.py b/custom_components/solax_http/plugin_solax_ev_charger_g2.py index c7c1133..bb148ce 100644 --- a/custom_components/solax_http/plugin_solax_ev_charger_g2.py +++ b/custom_components/solax_http/plugin_solax_ev_charger_g2.py @@ -90,20 +90,20 @@ def map_data(self, descr, data) -> any: # return_value = datetime.datetime( # 2000 + year, month, day, hour, minute, second # ).astimezone() - case 0x600: - return_value = Info.get(2) - case 0x60C: - return_value = Set.get(0) - case 0x60D: - return_value = Set.get(1) - case 0x60E: - return_value = Set.get(2) - case 0x60F: - return_value = Set.get(3) - case 0x610: - return_value = Set.get(4) - case 0x613: - return_value = Set.get(11) + # case 0x600: #SN + # return_value = Info.get(2) + # case 0x60C: #Grid Data Source + # return_value = Set.get(0) + # case 0x60D: #Mode + # return_value = Set.get(1) + # case 0x60E: #Eco Gear + # return_value = Set.get(2) + # case 0x60F: #Green Gear + # return_value = Set.get(3) + # case 0x610: #StartChargeMode + # return_value = Set.get(4) + # case 0x613: #Smart boost Type + # return_value = Set.get(11) # case 0x615: # return_value=Data[] # case 0x616: @@ -112,31 +112,31 @@ def map_data(self, descr, data) -> any: # return_value=[Data[38]H, Data[38]L, Data[37]H, Data[37]L, Data[36]H, Data[36]L] # case 0x625: # return_value = Data.get(65) - case 0x628: - return_value = Set.get(76) - case 0x634: - val = Set.get(12) - if val is not None: - hour = val >> 8 - minute = val & 0x00FF - if hour >= 0 and hour < 24 and minute >= 0 and minute < 60: - return_value = datetime.time(hour, minute) - case 0x636: - val = Set.get(13) - if val is not None: - hour = val >> 8 - minute = val & 0x00FF - if hour >= 0 and hour < 24 and minute >= 0 and minute < 60: - return_value = datetime.time(hour, minute) - case 0x638: - val = Set.get(15) - if val is not None: - hour = val >> 8 - minute = val & 0x00FF - if hour >= 0 and hour < 24 and minute >= 0 and minute < 60: - return_value = datetime.time(hour, minute) - case 0x63A: - return_value = Set.get(14) + case 0x628: # Max Charge Current + return_value = Set.get(3) + # case 0x634: #Boost time start + # val = Set.get(12) + # if val is not None: + # hour = val >> 8 + # minute = val & 0x00FF + # if hour >= 0 and hour < 24 and minute >= 0 and minute < 60: + # return_value = datetime.time(hour, minute) + # case 0x636: + # val = Set.get(13) + # if val is not None: + # hour = val >> 8 + # minute = val & 0x00FF + # if hour >= 0 and hour < 24 and minute >= 0 and minute < 60: + # return_value = datetime.time(hour, minute) + # case 0x638: #Boost time + # val = Set.get(15) + # if val is not None: + # hour = val >> 8 + # minute = val & 0x00FF + # if hour >= 0 and hour < 24 and minute >= 0 and minute < 60: + # return_value = datetime.time(hour, minute) + # case 0x63A: #Boost charge + # return_value = Set.get(14) case 0x0: return_value = Data.get(3) case 0x1: @@ -188,10 +188,10 @@ def map_data(self, descr, data) -> any: # return_value = Data.get(24) case 0x1D: return_value = Data.get(0) - case 0x25: - ver = str(Set.get(19)) - if ver is not None: - return_value = f"{ver[0]}.{ver[1:]}" + # case 0x25: #Firmware/ Factory reset + # ver = str(Set.get(19)) + # if ver is not None: + # return_value = f"{ver[0]}.{ver[1:]}" # case 0x2B: #Charge time # datH = Data.get(81) # datL = Data.get(80) diff --git a/doc/Mapping.xlsx b/doc/Mapping.xlsx index 060e725d63fe88c48df7f09be2161385b19cd3eb..720192bad70cdfd084059fe9651399dd5fb5fcde 100644 GIT binary patch delta 10144 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 OUxNEcNKr5E-u@5D)7lUK delta 9296 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 U2Ij3=eB{>wxs3>sxc&G40De3sO#lD@