From 6481cda20291b483d6ed3399f19f05914d763aea Mon Sep 17 00:00:00 2001 From: Anko Hanse Date: Tue, 12 Dec 2023 16:33:47 +1300 Subject: [PATCH] Add sensor fields for ESybox.mini --- custom_components/dabpumps/sensor.py | 160 +++++++++++++++++++++++++-- 1 file changed, 150 insertions(+), 10 deletions(-) diff --git a/custom_components/dabpumps/sensor.py b/custom_components/dabpumps/sensor.py index daed3d2..15cdc5d 100644 --- a/custom_components/dabpumps/sensor.py +++ b/custom_components/dabpumps/sensor.py @@ -57,11 +57,12 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry, asyn # only process statusses that we know can be transformed into a sensor if status.key not in SENSOR_FIELDS.keys(): - _LOGGER.info(f"No item in knowledgebase to create sensor for '{status.key}' with value '{status.val}'. You may want to ask the maintainer of this custom integration to add it.") + _LOGGER.info(f"Sensor fields list holds no info to create a sensor for '{status.key}' with value '{status.val}'. You may want to ask the maintainer of this custom integration to add it.") continue if not SENSOR_FIELDS.get(status.key, None): # Some statusses (error1...error64) are deliberately skipped + _LOGGER.info(f"Sensor fields list indicates to not create a sensor for '{status.key}' with value '{status.val}'.") continue device = device_map.get(status.serial, None) @@ -229,8 +230,10 @@ def _get_device_class(self, field): case 'kB/s': return SensorDeviceClass.DATA_RATE case '%': return SensorDeviceClass.POWER_FACTOR case 'A ': return SensorDeviceClass.CURRENT + case 'V ': return SensorDeviceClass.VOLTAGE case 'W ': return SensorDeviceClass.POWER case 'Wh': return SensorDeviceClass.ENERGY + case 'kWh': return SensorDeviceClass.ENERGY case _: return None @@ -253,8 +256,10 @@ def _get_icon(self, field, field_val): case 'kB/s': return 'mdi:memory-arrow-down' case '%': return 'mdi:percent' case 'A': return 'mdi:lightning-bolt' + case 'V': return 'mdi:lightning-bolt' case 'W': return 'mdi:power-plug' case 'Wh': return 'mdi:lightning' + case 'kWh': return 'mdi:lightning' case _: return None @@ -284,7 +289,7 @@ def _get_enum_value(self, field, status_key, status_val): '5': '4', } - case 'AE_AntiLock' | 'AF AntiFreeze' | 'AY_AntiCycling': + case 'AE_AntiLock' | 'AF AntiFreeze' | 'AY_AntiCycling' | 'CheckUpdates' | 'SleepModeEnable': dict = { '0': 'Enabled', '1': 'Disabled', @@ -389,6 +394,10 @@ def _get_enum_value(self, field, status_key, status_val): '0': 'Operative', '1': 'Disconnected', } + + case 'WSstatus': + dict = { + } case _: dict = {} @@ -405,8 +414,11 @@ def _get_enum_value(self, field, status_key, status_val): SF = namedtuple('SF', 'friendly, type, scale, unit, sc, ec') SENSOR_FIELDS = { # - # Esybox - # + # Esybox / Esybox.mini + # + 'Actual_Period_Flow_Counter': SF(friendly='Actual period flow counter', type='int', scale=1, unit= 'L', sc=None, ec=None ), + 'Actual_Period_Flow_Counter_Gall': SF(friendly='Actual period flow counter', type='int', scale=1, unit= 'gal', sc=None, ec=None ), + 'Actual_Period_Energy_Counter': SF(friendly='Actual period energy counter', type='int', scale=1, unit= 'kWh', sc=None, ec=None ), 'AD_AddressConfig': SF(friendly='Address config (AD)', type='enum', scale=1, unit= None, sc=None, ec='d' ), 'AE_AntiLock': SF(friendly='Anti lock (AE)', type='enum', scale=1, unit= None, sc=None, ec='d' ), 'AF_AntiFreeze': SF(friendly='Anti freeze (AF)', type='enum', scale=1, unit= None, sc=None, ec='d' ), @@ -414,8 +426,10 @@ def _get_enum_value(self, field, status_key, status_val): 'ActiveInverterNumber': SF(friendly='Active inverter number', type='int', scale=1, unit= None, sc=None, ec=None ), 'C1_PumpPhaseCurrent': SF(friendly='Pump phase current (C1)', type='float', scale=10, unit='A', sc='m', ec=None ), 'ContemporaryInverterNumber': SF(friendly='Contemporary Inverter number', type='int', scale=1, unit= None, sc=None, ec=None ), + 'DPlusVersion': SF(friendly='DPlus version', type='string', scale=1, unit= None, sc=None, ec='d' ), 'EK_LowPressureEnable': SF(friendly='Low pressure enable (EK)', type='int', scale=1, unit= None, sc=None, ec='d' ), 'ET_ExchangeTime': SF(friendly='Exchange time (ET)', type='int', scale=1, unit= None, sc=None, ec=None ), + 'FactoryDefault': SF(friendly='Factory default', type='int', scale=1, unit= None, sc=None, ec=None ), 'FCp_Partial_Delivered_Flow_Gall': SF(friendly='Partial Delived Flow (FCp)', type='int', scale=1, unit='gal', sc='ti', ec=None ), 'FCp_Partial_Delivered_Flow_mc': SF(friendly='Partial delived flow (FCp)', type='float', scale=1000, unit='m³', sc='ti', ec=None ), 'FCt_Total_Delivered_Flow_Gall': SF(friendly='Total delived flow (FCt)', type='int', scale=1, unit='gal' , sc='ti', ec=None ), @@ -429,18 +443,23 @@ def _get_enum_value(self, field, status_key, status_val): 'GroupFlowGall': SF(friendly='Group flow', type='int', scale=10, unit='gal/m', sc='m', ec=None ), 'GroupFlowLiter': SF(friendly='Group flow', type='int', scale=10, unit='L/m', sc='m', ec=None ), 'GroupPower': SF(friendly='Group power', type='int', scale=1, unit='W', sc='m', ec=None ), - 'HO_PowerOnHours': SF(friendly='Working hours', type='int', scale=1, unit='h', sc='ti', ec=None ), + 'HO_PowerOnHours': SF(friendly='Working hours (HO)', type='int', scale=1, unit='h', sc='ti', ec=None ), 'HO_PumpRunHours': SF(friendly='Pump running hours (HO)', type='int', scale=1, unit='h', sc='ti', ec=None ), 'HvBoardId': SF(friendly='Hv board id', type='string', scale=1, unit=None, sc=None, ec='d' ), 'HvFwVersion': SF(friendly='Hv firmware version', type='string', scale=0, unit=None, sc=None, ec='d' ), + 'HvVersion': SF(friendly='Hv version', type='string', scale=0, unit=None, sc=None, ec='d' ), 'IC_InverterConfig': SF(friendly='Inverter config (IC)', type='string', scale=1, unit=None, sc=None, ec='d' ), 'InverterPresentNumber': SF(friendly='Inverter present number', type='int', scale=1, unit=None, sc=None, ec='d' ), 'KernelVersion': SF(friendly='Kernel version', type='string', scale=1, unit=None, sc=None, ec='d' ), 'LA_Language': SF(friendly='Language (LA)', type='enum', scale=1, unit=None, sc=None, ec='d' ), + 'Last_Period_Flow_Counter': SF(friendly='Last period flow counter', type='int', scale=1, unit= None, sc=None, ec=None ), + 'Last_Period_Flow_Counter_Gall': SF(friendly='Last period flow counter', type='int', scale=1, unit= 'gal', sc=None, ec=None ), + 'Last_Period_Energy_Counter': SF(friendly='Last period energy counter', type='int', scale=1, unit= None, sc=None, ec=None ), 'LastErrorOccurency': SF(friendly='Last error occurency', type='string', scale=1, unit=None, sc=None, ec='d' ), 'LastErrorTimePowerOn': SF(friendly='Last error time', type='int', scale=1, unit='h', sc=None, ec='d' ), 'LatestError': SF(friendly='Latest error', type='string', scale=1, unit=None, sc=None, ec='d' ), 'LvFwVersion': SF(friendly='Lv firmware version', type='string', scale=0, unit=None, sc=None, ec='d' ), + 'LvVersion': SF(friendly='Lv version', type='string', scale=0, unit=None, sc=None, ec='d' ), 'MS_MeasureSystem': SF(friendly='Measure system (MS)', type='enum', scale=1, unit=None, sc=None, ec='d' ), 'MainloopMaxTime': SF(friendly='Main loop max time', type='int', scale=1, unit=None, sc='m', ec='d' ), 'MainloopMinTime': SF(friendly='Main loop min time', type='int', scale=1, unit=None, sc='m', ec='d' ), @@ -462,6 +481,7 @@ def _get_enum_value(self, field, status_key, status_val): 'PO_OutputPower': SF(friendly='Output power (PO)', type='int', scale=1, unit='W', sc='m', ec=None ), 'PR_RemotePressureSensor': SF(friendly='Remote pressure sensor (PR)', type='string', scale=1, unit=None, sc=None, ec='d' ), 'PanelBoardId': SF(friendly='Panel board id', type='string', scale=1, unit=None, sc=None, ec='d' ), + 'PartialEnergy': SF(friendly='Partial energy', type='int', scale=1, unit='kWh', sc=None, ec=None ), 'PowerShowerBoost': SF(friendly='Power shower boost', type='int', scale=1, unit='%', sc=None, ec='d' ), 'PowerShowerCommand': SF(friendly='Power shower command', type='string', scale=1, unit=None, sc=None, ec='d' ), 'PowerShowerCountdown': SF(friendly='Power shower countdown', type='int', scale=1, unit='s', sc=None, ec='d' ), @@ -470,6 +490,7 @@ def _get_enum_value(self, field, status_key, status_val): 'PowerShowerPressurePsi': SF(friendly='Power shower pressure', type='float', scale=1, unit='psi', sc=None, ec='d' ), 'PressureTarget': SF(friendly='Pressure target', type='int', scale=1, unit=None, sc=None, ec='d' ), 'ProductType': SF(friendly='Product type', type='string', scale=1, unit=None, sc=None, ec='d' ), + 'ProductSerialNumber': SF(friendly='Product serial number', type='string', scale=1, unit=None, sc=None, ec='d' ), 'PumpDisable': SF(friendly='Pump disable', type='string', scale=1, unit=None, sc='m', ec='d' ), 'PumpStatus': SF(friendly='Pump status', type='enum', scale=1, unit=None, sc=None, ec=None ), 'RM_MaximumSpeed': SF(friendly='Maximum speed (RM)', type='int', scale=1, unit='rpm', sc=None, ec='d' ), @@ -480,14 +501,18 @@ def _get_enum_value(self, field, status_key, status_val): 'RamUsedMax': SF(friendly='Ram used max', type='int', scale=1, unit='kB', sc='m', ec='d' ), 'RemotePressureSensorStatus': SF(friendly='Remote pressure sensor status', type='string', scale=1, unit=None, sc='m', ec='d' ), 'RunningPumpsNumber': SF(friendly='Running pumps number', type='int', scale=1, unit=None, sc='m', ec=None ), + 'Saving': SF(friendly='Saving', type='int', scale=1, unit=None, sc=None, ec=None ), 'SP_SetpointPressureBar': SF(friendly='Setpoint pressure (SP)', type='float', scale=10, unit='bar', sc=None, ec='d' ), 'SP_SetpointPressurePsi': SF(friendly='Setpoint pressure (SP)', type='float', scale=1, unit='psi', sc=None, ec='d' ), + 'SleepModeEnable': SF(friendly='Sleep mode enable', type='enum', scale=1, unit=None, sc=None, ec='d' ), 'SleepModeCountdown': SF(friendly='Sleep mode countdown', type='int', scale=1, unit='s', sc=None, ec='d' ), 'SleepModeDuration': SF(friendly='Sleep mode duration', type='int', scale=1, unit='s', sc=None, ec='d' ), 'SleepModePressureBar': SF(friendly='Sleep mode pressure', type='float', scale=10, unit='bar', sc=None, ec='d' ), 'SleepModePressurePsi': SF(friendly='Sleep mode pressure', type='float', scale=1, unit='psi', sc=None, ec='d' ), 'SleepModeReduction': SF(friendly='Sleep mode reduction', type='int', scale=1, unit='%', sc=None, ec='d' ), 'SleepModeStartTime': SF(friendly='Sleep mode start time', type='int', scale=1, unit='s', sc=None, ec='d' ), + 'SO_PowerOnSeconds': SF(friendly='Power on time (SO)', type='float', scale=3600, unit='h', sc='ti', ec=None ), + 'SO_PumpRunSeconds': SF(friendly='Pump run time (SO)', type='float', scale=3600, unit='h', sc='ti', ec=None ), 'StartNumber': SF(friendly='Starts number', type='int', scale=1, unit=None, sc='ti', ec=None ), 'SystemStatus': SF(friendly='System status', type='string', scale=1, unit=None, sc=None, ec=None ), 'T1_LowPressureDelay': SF(friendly='Low pressure delay (T1)', type='int', scale=1, unit='s', sc=None, ec='d' ), @@ -495,18 +520,22 @@ def _get_enum_value(self, field, status_key, status_val): 'TB_DryRunDetectTime': SF(friendly='Dry run detect time (TB)', type='int', scale=1, unit='s', sc=None, ec='d' ), 'TE_HeatsinkTemperatureC': SF(friendly='Heatsink temperature (TE)', type='int', scale=1, unit='°C', sc='m', ec=None ), 'TE_HeatsinkTemperatureF': SF(friendly='Heatsink temperature (TE)', type='int', scale=1, unit='°F', sc='m', ec=None ), + 'TotalEnergy': SF(friendly='Total energy', type='int', scale=1, unit='kWh', sc=None, ec=None ), 'UpdateFirmware': SF(friendly='Firmware update', type='int', scale=1, unit=None, sc=None, ec='d' ), 'UpdateProgress': SF(friendly='Update progress', type='string', scale=1, unit=None, sc=None, ec='d' ), 'UpdateType': SF(friendly='Update type', type='string', scale=1, unit=None, sc=None, ec='d' ), + 'UpdateResult': SF(friendly='Update result', type='string', scale=1, unit=None, sc=None, ec='d' ), 'VF_FlowGall': SF(friendly='Flow (VF)', type='float', scale=10, unit='gal/m', sc='m', ec=None ), 'VF_FlowLiter': SF(friendly='Flow (VF)', type='float', scale=10, unit='L/m', sc='m', ec=None ), 'VP_PressureBar': SF(friendly='Pressure (VP)', type='float', scale=10, unit='bar', sc='m', ec=None ), 'VP_PressurePsi': SF(friendly='Pressure (VP)', type='float', scale=1, unit='psi', sc='m', ec=None ), + 'WSstatus': SF(friendly='WS status', type='enum', scale=1, unit=None, sc=None, ec=None ), # - # DConnect Box2 + # DConnect Box2 (also parts for Esybox.mini) # 'BootTime': SF(friendly='Boot time', type='float', scale=3600, unit='h', sc='m', ec=None ), + 'CheckUpdates': SF(friendly='Check updates', type='enum', scale=1, unit=None, sc=None, ec=None ), 'CpuLoad': SF(friendly='Cpu load', type='int', scale=1, unit='%', sc='m', ec=None ), 'DabMgr': SF(friendly='Dab manager', type='string', scale=0, unit=None, sc=None, ec='d' ), 'ESSID': SF(friendly='Wlan ESSID', type='string', scale=0, unit=None, sc=None, ec='d' ), @@ -527,13 +556,124 @@ def _get_enum_value(self, field, status_key, status_val): 'SampleRate': SF(friendly='Sample rate', type='enum', scale=1, unit=None, sc=None, ec='d' ), 'SignLevel': SF(friendly='Wlan signal level', type='int', scale=1, unit='%', sc='m', ec=None ), 'SystemStatus': SF(friendly='System status', type='enum', scale=1, unit=None, sc=None, ec=None ), - 'Uptime': SF(friendly='Up time', type='float', scale=3600, unit='h', sc='ti', ec=None ), + 'SV_SupplyVoltage': SF(friendly='Supply voltage (SV)', type='int', scale=1, unit='V', sc=None, ec='d' ), + 'SR_SupplyVoltageRange': SF(friendly='Supply voltage range (SR)', type='string', scale=1, unit=None, sc=None, ec='d' ), + 'UpTime': SF(friendly='Up time', type='float', scale=3600, unit='h', sc='ti', ec=None ), 'UpdateSystem': SF(friendly='Update status', type='string', scale=1, unit=None, sc=None, ec='d' ), 'WifiMode': SF(friendly='Wlan mode', type='enum', scale=1, unit=None, sc=None, ec=None ), 'WlanRx': SF(friendly='Wlan data rx', type='float', scale=1000, unit='MB', sc='ti', ec=None ), 'WlanTx': SF(friendly='Wlan data tx', type='float', scale=1000, unit='MB', sc='ti', ec=None ), 'ucVersion': SF(friendly='Version uc', type='string', scale=0, unit=None, sc=None, ec='d', ), + + # + # Excluded + # + '5msHandlerMaxTime': None, + '5msHandlerTime': None, + 'BridgeTotalErrorTimeNumber': None, + 'ErasePartialEnergyCounter': None, + 'ErasePartialFlowCounter': None, + 'IdentifyDevice': None, + 'I1_Input1Function': None, + 'I2_Input2Function': None, + 'I3_Input3Function': None, + 'I4_Input4Function': None, + 'LastErrorOccurrency': None, + 'MainLoopMaxTime': None, + 'MainLoopMinTime': None, + 'MainLoopTime': None, + 'O1_Output1Function': None, + 'O2_Output1Function': None, + 'PW_ModifyPassword': None, + 'RecoverySTNumber': None, + 'ResetActualFault': None, + 'RF_EraseHistoricalFault': None, + 'Device 1 Address': None, + 'Device 1 Identify': None, + 'Device 1 Serial': None, + 'Device 1 Type': None, + 'Device 2 Address': None, + 'Device 2 Identify': None, + 'Device 2 Serial': None, + 'Device 2 Type': None, + 'Device 3 Address': None, + 'Device 3 Identify': None, + 'Device 3 Serial': None, + 'Device 3 Type': None, + 'Device 4 Address': None, + 'Device 4 Identify': None, + 'Device 4 Serial': None, + 'Device 4 Type': None, + 'Error1': None, + 'Error2': None, + 'Error3': None, + 'Error4': None, + 'Error5': None, + 'Error6': None, + 'Error7': None, + 'Error8': None, + 'Error9': None, + 'Error10': None, + 'Error11': None, + 'Error12': None, + 'Error13': None, + 'Error14': None, + 'Error15': None, + 'Error16': None, + 'Error17': None, + 'Error18': None, + 'Error19': None, + 'Error20': None, + 'Error21': None, + 'Error22': None, + 'Error23': None, + 'Error24': None, + 'Error25': None, + 'Error26': None, + 'Error27': None, + 'Error28': None, + 'Error29': None, + 'Error30': None, + 'Error31': None, + 'Error32': None, + 'Error33': None, + 'Error34': None, + 'Error35': None, + 'Error36': None, + 'Error37': None, + 'Error38': None, + 'Error39': None, + 'Error40': None, + 'Error41': None, + 'Error42': None, + 'Error43': None, + 'Error44': None, + 'Error45': None, + 'Error46': None, + 'Error47': None, + 'Error48': None, + 'Error49': None, + 'Error50': None, + 'Error51': None, + 'Error52': None, + 'Error53': None, + 'Error54': None, + 'Error55': None, + 'Error56': None, + 'Error57': None, + 'Error58': None, + 'Error59': None, + 'Error60': None, + 'Error61': None, + 'Error62': None, + 'Error63': None, + 'Error64': None, + 'ErrorTime1': None, + 'ErrorTime2': None, + 'ErrorTime3': None, + 'ErrorTime4': None, + 'ErrorTime5': None, + 'ErrorTime6': None, + 'ErrorTime7': None, + 'ErrorTime8': None, } - - -