Index: leahi_dialin/common/defs_base.py =================================================================== diff -u --- leahi_dialin/common/defs_base.py (revision 0) +++ leahi_dialin/common/defs_base.py (revision 9722173f20de6153594c9b1b54905cbdea76f171) @@ -0,0 +1,69 @@ +########################################################################### +# +# Copyright (c) 2021-2024 Diality Inc. - All Rights Reserved. +# +# THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN +# WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +# +# @file defs_base.py +# +# @author (last) Zoltan Miskolci +# @date (last) 28-Jan-2026 +# @author (original) Zoltan Miskolci +# @date (original) 28-Jan-2026 +# +############################################################################ + +from enum import auto + +from ..utils.base import DialinEnum + + +class Defs_Base: + + def __init__(self): + self.update_enums() + + + def __getattr__(self, name) -> DialinEnum: + if name in self._properties: + enum = getattr(self, self._properties[name])() + setattr(self, name, enum) + return enum + raise AttributeError(name) + + + def create_members(self, enum_dict: dict) -> dict: + members = {} + for enum_member in enum_dict: + members[enum_member] = auto() + return members + + + def from_str(self, cls, label: str): + for enum_member in cls.__members__.values(): + # If the string matching with the enum's name + if label.lower() == enum_member.name.lower(): + return enum_member + # If the string matching with the enum's state without the 'mode_' text + elif label.lower() == enum_member.name.lower().replace('mode_', ''): + return enum_member + # If it's in the string list provided for the enum + elif label.lower() in cls._str_list[enum_member.name]: + return enum_member + # Replace _ with ' ' and check the list again + elif label.lower().replace('_', ' ') in cls._str_list[enum_member.name]: + return enum_member + # If the enum is the NUM_ collector, then return stop as after that only aliases are present + elif enum_member.name.lower().startswith('num_'): + return None + return False + + + def update_enums(self) -> None: + for prop_name in self._properties: + # Cleans the cached value + self.__dict__.pop(prop_name, None) + + # Reinitializing the enum as it's not in the cache + self.__getattr__(prop_name) Index: leahi_dialin/common/fp_defs.py =================================================================== diff -u -rd3147dff7c95e3ab5a507591ce5b9e1e74911a19 -r9722173f20de6153594c9b1b54905cbdea76f171 --- leahi_dialin/common/fp_defs.py (.../fp_defs.py) (revision d3147dff7c95e3ab5a507591ce5b9e1e74911a19) +++ leahi_dialin/common/fp_defs.py (.../fp_defs.py) (revision 9722173f20de6153594c9b1b54905cbdea76f171) @@ -8,7 +8,7 @@ # @file fp_defs.py # # @author (last) Zoltan Miskolci -# @date (last) 12-Jan-2026 +# @date (last) 28-Jan-2026 # @author (original) Peter Lucia # @date (original) 22-Jun-2021 # @@ -19,14 +19,14 @@ from aenum import extend_enum from typing import TYPE_CHECKING +from .defs_base import Defs_Base from .dd_defs import dd_enum_repository from .global_vars import GlobalVariables, test_config_change from ..utils.base import DialinEnum +class FP_Defs(Defs_Base): -class FP_Defs: - # IDE autocomplete suppor if TYPE_CHECKING: FPOpModes: DialinEnum @@ -93,283 +93,311 @@ 'FPValveStates': '_create_fp_valve_states', } - def __init__(self): - self.update_enums() - # Dynamically creates all the properties in runtime - def __getattr__(self, name) -> DialinEnum: - if name in self._properties: - value = getattr(self, self._properties[name])() - setattr(self, name, value) - return value - raise AttributeError(name) - - - # Attached to a listener to update the enums when the listener is triggered - def update_enums(self) -> None: - for prop_name in self._properties: - # Cleans the cached value - self.__dict__.pop(prop_name, None) - - # Reinitializing the enum as it's not in the cache - self.__getattr__(prop_name) - - - # ================================================== Enum Creators: Operations ================================================== def _create_fp_operation_modes(self): members = { - 'MODE_FAUL': 0, # Fault mode - 'MODE_SERV': 1, # Service mode - 'MODE_INIT': 2, # Initialization & POST mode - 'MODE_STAN': 3, # Standby mode - 'MODE_PRE_GENP': 4, # Pre Generate Permeate mode - 'MODE_GENP': 5, # Generate Permeate mode - 'MODE_DPGP': 6, # Defeatured Pre-Generate Permeate mode - 'MODE_DEGP': 7, # Defeatured Generate Permeate mode - 'MODE_NLEG': 8, # Not legal - an illegal mode transition occurred - 'NUM_OF_FP_MODES': 9, # Number of FP operation modes + # Official Name : Accepted strings + 'MODE_FAUL': ['fault'], # Fault mode + 'MODE_SERV': ['service'], # Service mode + 'MODE_INIT': ['initialization'], # Initialization & POST mode + 'MODE_STAN': ['standby'], # Standby mode + 'MODE_PRE_GENP': ['pre-gen', 'pre-generate permeate'], # Pre Generate Permeate mode + 'MODE_GENP': ['generate permeate'], # Generate Permeate mode + 'MODE_DPGP': ['defeatured pre-generate permeate', 'defeatured pre-gen'], # Defeatured Pre-Generate Permeate mode + 'MODE_DEGP': ['defeatured generate permeate'], # Defeatured Generate Permeate mode + 'MODE_NLEG': ['not legal'], # Not legal - an illegal mode transition occurred + 'NUM_OF_FP_MODES': [], # Number of FP operation modes } - return unique(DialinEnum('FPOpModes', members)) + created_enum = unique(DialinEnum('FPOpModes', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum def _create_fp_fault_states(self): members = { - 'FP_FAULT_STATE_START': 0, # FP Fault Start State - 'FP_FAULT_DEENERGIZED_STATE': 1, # FP Fault De-energized State - 'FP_FAULT_ENERGIZED_STATE': 2, # FP Fault Energized State - 'NUM_OF_FP_FAULT_STATES': 3, # Number of Fault Mode State + # Official Name : Accepted strings + 'FP_FAULT_STATE_START': ['fault start'], # FP Fault Start State + 'FP_FAULT_DEENERGIZED_STATE': ['fault deenergized'], # FP Fault De-energized State + 'FP_FAULT_ENERGIZED_STATE': ['fault energized'], # FP Fault Energized State + 'NUM_OF_FP_FAULT_STATES': [], # Number of Fault Mode State } - return unique(DialinEnum('FPFaultStates', members)) + created_enum = unique(DialinEnum('FPFaultStates', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum def _create_fp_service_states(self): members = { - 'NUM_OF_FP_SERV_STATES': 0, # Number of FP service states + # Official Name : Accepted strings + 'NUM_OF_FP_SERV_STATES': [], # Number of FP service states } - return unique(DialinEnum('FPServiceStates', members)) + created_enum = unique(DialinEnum('FPServiceStates', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum def _create_fp_init_post_states(self): members = { - 'FP_POST_STATE_START': 0, # Start initialize & POST mode state - 'FP_POST_STATE_FW_INTEGRITY': 1, # Run firmware integrity test state - 'FP_POST_STATE_NVDATAMGMT': 2, # Run NV Data Mgmt. test state - 'FP_POST_STATE_WATCHDOG': 3, # Run watchdog test state - 'FP_POST_STATE_SAFETY_SHUTDOWN': 4, # Run safety shutdown test state - 'FP_POST_STATE_TEMPERATURES': 5, # Run temperatures POST state - 'FP_POST_STATE_FW_COMPATIBILITY': 6, # Run firmware compatibility test state - 'FP_POST_STATE_FPGA': 7, # Run FPGA test state - 'FP_POST_STATE_COMPLETED': 8, # POST self-tests completed state - 'FP_POST_STATE_FAILED': 9, # POST self-tests failed state - 'NUM_OF_FP_POST_STATES': 10 # Number of initialize & POST mode states + # Official Name : Accepted strings + 'FP_POST_STATE_START': ['start'], # Start initialize & POST mode state + 'FP_POST_STATE_FW_INTEGRITY': ['fw integrity'], # Run firmware integrity test state + 'FP_POST_STATE_NVDATAMGMT': ['nv data management', 'data management'], # Run NV Data Mgmt. test state + 'FP_POST_STATE_WATCHDOG': ['watchdog'], # Run watchdog test state + 'FP_POST_STATE_SAFETY_SHUTDOWN': ['safety shutdown'], # Run safety shutdown test state + 'FP_POST_STATE_TEMPERATURES': ['temperatures', 'temperatures check'], # Run temperatures POST state + 'FP_POST_STATE_FW_COMPATIBILITY': ['fw compatibility'], # Run firmware compatibility test state + 'FP_POST_STATE_FPGA': ['fpga'], # Run FPGA test state + 'FP_POST_STATE_COMPLETED': ['completed'], # POST self-tests completed state + 'FP_POST_STATE_FAILED': ['failed'], # POST self-tests failed state + 'NUM_OF_FP_POST_STATES': [] # Number of initialize & POST mode states } - return unique(DialinEnum('FPPostStates', members)) + created_enum = unique(DialinEnum('FPPostStates', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum def _create_fp_standby_states(self): members = { - 'FP_STANDBY_MODE_STATE_IDLE': 0, # Idle standby mode state - 'NUM_OF_FP_STANDBY_MODE_STATES': 1, # Number of standby mode states + # Official Name : Accepted strings + 'FP_STANDBY_MODE_STATE_IDLE': ['idle'], # Idle standby mode state + 'NUM_OF_FP_STANDBY_MODE_STATES': [], # Number of standby mode states } - return unique(DialinEnum('FPStandbyStates', members)) + created_enum = unique(DialinEnum('FPStandbyStates', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum def _create_fp_pregen_states(self): members = { - 'FP_PRE_GENP_INLET_PRES_CHECK': 0, # FP Pre Gen Permeate Inlet Pressure Check State - 'FP_PRE_GENP_FILTER_FLUSH': 1, # FP Pre Gen Permeate Filter Flush State - 'FP_PRE_GENP_PERMEATE_FLUSH': 2, # FP Pre Gen Permeate Permeate Flush State - 'FP_PRE_GENP_CONCENTRATE_FLUSH': 3, # FP Pre Gen Permeate Concentrate Flush State - 'FP_PRE_GENP_VERIFY_WATER': 4, # FP Pre Gen Permeate Verify Water State - 'FP_PRE_GENP_PAUSED': 5, # FP Pre Gen Permeate Paused State - 'NUM_OF_FP_PRE_GENP_MODE_STATES': 6, # Number of Pre-Gen Permeate mode states + # Official Name : Accepted strings + 'FP_PRE_GENP_INLET_PRES_CHECK': ['inlet pressure check', 'pressure check'], # FP Pre Gen Permeate Inlet Pressure Check State + 'FP_PRE_GENP_FILTER_FLUSH': ['filter flush'], # FP Pre Gen Permeate Filter Flush State + 'FP_PRE_GENP_PERMEATE_FLUSH': ['permeate flush'], # FP Pre Gen Permeate Permeate Flush State + 'FP_PRE_GENP_CONCENTRATE_FLUSH': ['concentrate flush'], # FP Pre Gen Permeate Concentrate Flush State + 'FP_PRE_GENP_VERIFY_WATER': ['verify water'], # FP Pre Gen Permeate Verify Water State + 'FP_PRE_GENP_PAUSED': ['paused'], # FP Pre Gen Permeate Paused State + 'NUM_OF_FP_PRE_GENP_MODE_STATES': [], # Number of Pre-Gen Permeate mode states } - return unique(DialinEnum('FPPreGenPermeateStates', members)) + created_enum = unique(DialinEnum('FPPreGenPermeateStates', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum def _create_fp_pregen_defeatured_states(self): members = { - 'FP_PRE_GENP_DEF_FLUSH': 0, # Pre Gen Permeate Defeatured Flush state - 'FP_PRE_GENP_DEF_INLET_WATER_CHECK': 1, # Pre Gen Permeate Defeatured Inlet Water Check state - 'FP_PRE_GENP_DEF_PAUSED': 2, # Defeatured Pre Gen Permeate Paused state - 'NUM_OF_FP_PRE_GENP_DEF_MODE_STATES': 3, # Number of Defeatured Pre Gen Permeate states + # Official Name : Accepted strings + 'FP_PRE_GENP_DEF_FLUSH': ['flush', 'defeatured flush', 'def flush'], # Pre Gen Permeate Defeatured Flush state + 'FP_PRE_GENP_DEF_INLET_WATER_CHECK': ['inlet water check', 'def inlet water check', 'defeatured inlet water check'], # Pre Gen Permeate Defeatured Inlet Water Check state + 'FP_PRE_GENP_DEF_PAUSED': ['paused', 'defeatured paused', 'def paused'], # Defeatured Pre Gen Permeate Paused state + 'NUM_OF_FP_PRE_GENP_DEF_MODE_STATES': [], # Number of Defeatured Pre Gen Permeate states } - return unique(DialinEnum('FPPreGenPDefStates', members)) + created_enum = unique(DialinEnum('FPPreGenPDefStates', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum def _create_fp_gen_permeate_states(self): members = { - 'FP_GENP_TANK_FILL_STATE': 0, # Gen Permeate Tank Fill low state - 'FP_GENP_TANK_FULL_STATE': 1, # Gen Permeate Tank Full state - 'NUM_OF_FP_GENP_MODE_STATES': 2, # Number of Gen permeate states + # Official Name : Accepted strings + 'FP_GENP_TANK_FILL_STATE': ['fill', 'tank fill'], # Gen Permeate Tank Fill low state + 'FP_GENP_TANK_FULL_STATE': ['full', 'tank full'], # Gen Permeate Tank Full state + 'NUM_OF_FP_GENP_MODE_STATES': [], # Number of Gen permeate states } - return unique(DialinEnum('FPGenPermeateStates', members)) + created_enum = unique(DialinEnum('FPGenPermeateStates', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum def _create_fp_gen_permeate_defeatured_states(self): members = { - 'FP_GENP_DEF_SUPPLY_WATER': 0, # Gen Permeate Defeatured Supply Water statee - 'FP_GENP_DEF_PAUSED': 1, # Gen Permeate Defeatured Paused state - 'NUM_OF_FP_GENP_DEF_MODE_STATES': 2, # Number of Defeatured Gen permeate states + # Official Name : Accepted strings + 'FP_GENP_DEF_SUPPLY_WATER': ['supply water', 'def supply water', 'defeatured supply water'], # Gen Permeate Defeatured Supply Water statee + 'FP_GENP_DEF_PAUSED': ['paused', 'def paused', 'defeatured paused'], # Gen Permeate Defeatured Paused state + 'NUM_OF_FP_GENP_DEF_MODE_STATES': [], # Number of Defeatured Gen permeate states } - return unique(DialinEnum('FPGenPermeateDefStates', members)) + created_enum = unique(DialinEnum('FPGenPermeateDefStates', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum def _create_fp_not_legal_states(self): members = { - 'NUM_OF_NOT_LEGAL_STATES': 0, # Number of Not Legal states + # Official Name : Accepted strings + 'NUM_OF_NOT_LEGAL_STATES': [], # Number of Not Legal states } - return unique(DialinEnum('FPNotLegalStates', members)) + created_enum = unique(DialinEnum('FPNotLegalStates', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum def _create_fp_eventlist(self): members = { - 'FP_EVENT_STARTUP': 0, # FP startup event - 'FP_EVENT_OP_MODE_CHANGE': 1, # FP Op mode change event - 'FP_EVENT_SUB_MODE_CHANGE': 2, # FP Op sub-mode change event - 'FP_EVENT_PRE_GEN_RO_SET_PWM': 3, # FP gen permeate ro set pwm event - 'FP_EVENT_GENP_BOOST_SET_PWM': 4, # FP gen permeate boost set pwm event - 'FP_EVENT_GENP_CHANGE': 5, # FP gen permeate state change - 'FP_EVENT_PRE_GEN_CHANGE': 6, # FP pre gen state change - 'FP_EVENT_PRE_GEN_DEF_CHANGE': 7, # FP defeatured pre gen state change - 'FP_EVENT_GENP_DEF_CHANGE': 8, # FP defeatured gen permeate state change - 'FP_EVENT_FAULT_ALARM_TRIGGER': 9, # FP event for alarms that would trigger - 'NUM_OF_FP_EVENT_IDS': 10, # Number of FP events + # Official Name : Accepted strings + 'FP_EVENT_STARTUP': ['startup'], # FP startup event + 'FP_EVENT_OP_MODE_CHANGE': ['op mode change'], # FP Op mode change event + 'FP_EVENT_SUB_MODE_CHANGE': ['sub mode change'], # FP Op sub-mode change event + 'FP_EVENT_PRE_GEN_RO_SET_PWM': ['ro pump set pwm'], # FP gen permeate ro set pwm event + 'FP_EVENT_GENP_BOOST_SET_PWM': ['boost pump set pwm'], # FP gen permeate boost set pwm event + 'FP_EVENT_GENP_CHANGE': ['generate permeate change', 'genp change'], # FP gen permeate state change + 'FP_EVENT_PRE_GEN_CHANGE': ['pre-generate permeate change', 'pre-genp change'], # FP pre gen state change + 'FP_EVENT_PRE_GEN_DEF_CHANGE': ['defeatured pre-generate permeate change', 'def pre-genp change'], # FP defeatured pre gen state change + 'FP_EVENT_GENP_DEF_CHANGE': ['defeatured generate permeate change', 'def genp change'], # FP defeatured gen permeate state change + 'FP_EVENT_FAULT_ALARM_TRIGGER': ['alarm', 'alarm trigger', 'fault alarm trigger'], # FP event for alarms that would trigger + 'NUM_OF_FP_EVENT_IDS': [], # Number of FP events } - return unique(DialinEnum('FPEventList', members)) + created_enum = unique(DialinEnum('FPEventList', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum def _create_fp_event_data_types(self): members = { - 'EVENT_DATA_TYPE_NONE': 0, # No Event Data Type - 'EVENT_DATA_TYPE_U32': 1, # Unsigned 32bit Event Data Type - 'EVENT_DATA_TYPE_S32': 2, # Signed 32bit Event Data Type - 'EVENT_DATA_TYPE_F32': 3, # Float 32bit Event Data Type - 'EVENT_DATA_TYPE_BOOL': 4, # Boolean Event Data Type - 'NUM_OF_EVENT_DATA_TYPES': 5, # Number of Event Data Types + # Official Name : Accepted strings + 'EVENT_DATA_TYPE_NONE': ['none'], # No Event Data Type + 'EVENT_DATA_TYPE_U32': ['u32'], # Unsigned 32bit Event Data Type + 'EVENT_DATA_TYPE_S32': ['s32'], # Signed 32bit Event Data Type + 'EVENT_DATA_TYPE_F32': ['f32'], # Float 32bit Event Data Type + 'EVENT_DATA_TYPE_BOOL': ['bool', 'boolean'], # Boolean Event Data Type + 'NUM_OF_EVENT_DATA_TYPES': [], # Number of Event Data Types } - return unique(DialinEnum('FPEventDataTypes', members)) + created_enum = unique(DialinEnum('FPEventDataTypes', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum # ================================================== Enum Creators: Names ================================================== def _create_fp_boost_pump_names(self): members = { - 'P40_PUMP': 0, # FP Boost Pump - 'NUM_OF_BOOST_PUMPS': 1, # Number of FP Boost Pumps + # Official Name : Accepted strings + 'P40_PUMP': ['p40'], # FP Boost Pump + 'NUM_OF_BOOST_PUMPS': [], # Number of FP Boost Pumps } - return unique(DialinEnum('FPBoostPumpNames', members)) + created_enum = unique(DialinEnum('FPBoostPumpNames', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum def _create_fp_conductivity_sensor_names(self): members = { - 'P9_COND': 0, # CPi (P9) conductivity sensor value - 'P18_COND': 1, # CPo (P18) conductivity sensor value - 'NUM_OF_FP_CONDUCTIVITY_SENSRORS': 2, # Number of Conductivity sensors + # Official Name : Accepted strings + 'P9_COND': ['p9'], # CPi (P9) conductivity sensor value + 'P18_COND': ['p18'], # CPo (P18) conductivity sensor value + 'NUM_OF_FP_CONDUCTIVITY_SENSRORS': [], # Number of Conductivity sensors } + created_enum = unique(DialinEnum('FPConductivitySensorNames', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum - return unique(DialinEnum('FPConductivitySensorNames', members)) - def _create_fp_ro_rejection_ratio_names(self): members = { - 'RAW_RO_REJECTION_RATIO': 0, # Raw RO Rejection Ratio value - 'RAW_RO_REJECTION_RATIO_TANK_FILL': 1, # Raw RO Rejection Ratio Tank Fill value - 'AVG_RO_REJECTION_RATIO': 2, # Average RO Rejection Ratio value - 'AVG_RO_REJECTION_RATIO_TANK_FILL': 3, # Average RO Rejection Ratio Tank Fill value - 'GEN_PERMEATE_STATE': 4, # Generate Permeate State value - 'NUM_OF_FP_RO_REJECTION_RATIO': 5, # Number of RO Rejection Ratio items + # Official Name : Accepted strings + 'RAW_RO_REJECTION_RATIO': ['raw ro rejection ratio'], # Raw RO Rejection Ratio value + 'RAW_RO_REJECTION_RATIO_TANK_FILL': ['raw ro tank fill rejection ratio'], # Raw RO Rejection Ratio Tank Fill value + 'AVG_RO_REJECTION_RATIO': ['avg ro rejection ratio', 'average ro rejection ratio'], # Average RO Rejection Ratio value + 'AVG_RO_REJECTION_RATIO_TANK_FILL': ['avg ro tank fill rejection ratio', 'average ro tank fill rejection ratio'], # Average RO Rejection Ratio Tank Fill value + 'GEN_PERMEATE_STATE': ['generate permeate state', 'generate permeate'], # Generate Permeate State value + 'NUM_OF_FP_RO_REJECTION_RATIO': [], # Number of RO Rejection Ratio items } - return unique(DialinEnum('FPRORejectionRatioNames', members)) + created_enum = unique(DialinEnum('FPRORejectionRatioNames', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum def _create_fp_flow_sensor_names(self): members = { - 'P7_FLOW': 0, # Water inlet flow sensor (FMS P7) - 'P16_FLOW': 1, # RO outlet flow sensor (FMP P16) - 'NUM_OF_FP_FLOW_SENSORS': 2, # Number of FP Flow Sensors + # Official Name : Accepted strings + 'P7_FLOW': ['p7'], # Water inlet flow sensor (FMS P7) + 'P16_FLOW': ['p16'], # RO outlet flow sensor (FMP P16) + 'NUM_OF_FP_FLOW_SENSORS': [], # Number of FP Flow Sensors } - return unique(DialinEnum('FPFlowSensorNames', members)) + created_enum = unique(DialinEnum('FPFlowSensorNames', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum def _create_fp_floater_sensor_names(self): members = { - 'P25_LEVEL': 0, # P25 Level sensor - 'NUM_OF_FP_LEVEL_SENSORS': 1, # Number of Level Sensors + # Official Name : Accepted strings + 'P25_LEVEL': ['p25'], # P25 Level sensor + 'NUM_OF_FP_LEVEL_SENSORS': [], # Number of Level Sensors } - return unique(DialinEnum('FPFloaterLevelSensorNames', members)) + created_enum = unique(DialinEnum('FPFloaterLevelSensorNames', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum def _create_fp_pressure_sensor_names(self): - if GlobalVariables().HW_BETA_1_9 == True: - members = { - 'M3_PRES' : 0, # Water inlet pressure before regulator - 'P8_PRES' : 1, # Water inlet pressure after regulator - 'P13_PRES' : 2, # Water inlet pressure before the conductivity sensor - 'P17_PRES' : 3, # Pressure before the RO filter - 'P46_PRES' : 4, # Pressure after the RO filter - 'NUM_OF_FP_PRES_SENSORS' : 5, # Number of Pressure Sensors - } - else: - members = { - 'M3_PRES' : 0, # Water inlet pressure before regulator - 'P8_PRES' : 1, # Water inlet pressure after regulator - 'P13_PRES' : 2, # Water inlet pressure before the conductivity sensor - 'P17_PRES' : 3, # Pressure before the RO filter - 'P46_PRES' : 4, # Pressure after the RO filter - 'NUM_OF_FP_PRES_SENSORS' : 5, # Number of Pressure Sensors - } - return unique(DialinEnum('FPPressureSensorNames', members)) + members = { + # Official Name : Accepted strings + 'M3_PRES': ['m3'], # Water inlet pressure before regulator + 'P8_PRES': ['p8'], # Water inlet pressure after regulator + 'P13_PRES': ['p13'], # Water inlet pressure before the conductivity sensor + 'P17_PRES': ['p17'], # Pressure before the RO filter + 'P46_PRES': ['p46'], # Pressure after the RO filter + 'NUM_OF_FP_PRES_SENSORS': [], # Number of Pressure Sensors + } + created_enum = unique(DialinEnum('FPPressureSensorNames', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum def _create_fp_ro_pump_names(self): members = { - 'P12_PUMP': 0, # P12 RO Pump - 'NUM_OF_RO_PUMPS': 1, # Number of RO Pumps + # Official Name : Accepted strings + 'P12_PUMP': ['p12'], # P12 RO Pump + 'NUM_OF_RO_PUMPS': [], # Number of RO Pumps } - return unique(DialinEnum('FPROPumpNames', members)) + created_enum = unique(DialinEnum('FPROPumpNames', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum def _create_fp_temperature_sensor_names(self): - if GlobalVariables().HW_BETA_1_9 == True: - members = { - 'M3_TEMP' : 0, # Temperature after pressure regulator (M3) - 'P8_TEMP' : 1, # Temperature before inlet conductivity sensor (P8) - 'P13_TEMP' : 2, # Temperature before RO filter (P13) - 'P17_TEMP' : 3, # Temperature after RO filter (P17) - 'P46_TEMP' : 4, # Temperature after sediment filter (P46) - 'P10_TEMP' : 5, # P10 temperature from inlet conductivity sensor. - 'P19_TEMP' : 6, # P19 temperature from outlet conductivity sensor. - 'P7_TEMP' : 7, # Temperature at p7 flow meter - 'P16_TEMP' : 8, # Temperature at p16 flow meter - 'P7_INTERNAL_TEMP' : 9, # Interal Temperature at p7 flow meter - 'P16_INTERNAL_TEMP' : 10, # Interal Temperature at p16 flow meter - 'NUM_OF_TEMPERATURE_SENSORS' : 11, # Number of Temperature Sensors - } - else: - members = { - 'M3_TEMP' : 0, # Temperature after pressure regulator (M3) - 'P8_TEMP' : 1, # Temperature before inlet conductivity sensor (P8) - 'P13_TEMP' : 2, # Temperature before RO filter (P13) - 'P17_TEMP' : 3, # Temperature after RO filter (P17) - 'P46_TEMP' : 4, # Temperature after sediment filter (P46) - 'P10_TEMP' : 5, # P10 temperature from inlet conductivity sensor. - 'P19_TEMP' : 6, # P19 temperature from outlet conductivity sensor. - 'P7_TEMP' : 7, # Temperature at p7 flow meter - 'P16_TEMP' : 8, # Temperature at p16 flow meter - 'P7_INTERNAL_TEMP' : 9, # Interal Temperature at p7 flow meter - 'P16_INTERNAL_TEMP' : 10, # Interal Temperature at p16 flow meter - 'NUM_OF_TEMPERATURE_SENSORS' : 11, # Number of Temperature Sensors - } + members = { + # Official Name : Accepted strings + 'M3_TEMP': ['m3'], # Temperature after pressure regulator (M3) + 'P8_TEMP': ['p8'], # Temperature before inlet conductivity sensor (P8) + 'P13_TEMP': ['p13'], # Temperature before RO filter (P13) + 'P17_TEMP': ['p17'], # Temperature after RO filter (P17) + 'P46_TEMP': ['p46'], # Temperature after sediment filter (P46) + 'P10_TEMP': ['p10'], # P10 temperature from inlet conductivity sensor. + 'P19_TEMP': ['p19'], # P19 temperature from outlet conductivity sensor. + 'P7_TEMP': ['p7'], # Temperature at p7 flow meter + 'P16_TEMP': ['p16'], # Temperature at p16 flow meter + 'P7_INTERNAL_TEMP': ['p7 internal'], # Interal Temperature at p7 flow meter + 'P16_INTERNAL_TEMP': ['p16 internal'], # Interal Temperature at p16 flow meter + 'NUM_OF_TEMPERATURE_SENSORS': [], # Number of Temperature Sensors + } + created_enum = DialinEnum('FPTemperatureSensorNames', self.create_members(members)) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) - # Create the enum - created_enum = DialinEnum('FPTemperatureSensorNames', members) - # Add aliases extend_enum(created_enum, 'FIRST_PRESSURE_SENSOR', created_enum.M3_TEMP.value) - extend_enum(created_enum, 'LAST_PRESSURE_SENSOR', created_enum.P46_TEMP.value if GlobalVariables().HW_BETA_1_9 == True else created_enum.P46_TEMP.value) + extend_enum(created_enum, 'LAST_PRESSURE_SENSOR', created_enum.P46_TEMP.value) extend_enum(created_enum, 'FIRST_CONDUCTIVITY_SENSOR', created_enum.P10_TEMP.value) extend_enum(created_enum, 'LAST_CONDUCTIVITY_SENSOR', created_enum.P19_TEMP.value) extend_enum(created_enum, 'FIRST_FLOW_SENSOR', created_enum.P7_TEMP.value) @@ -388,64 +416,85 @@ def _create_fp_valve_names(self): members = { - 'M4_VALV': 0, # Valve (M4 VWi) - 'M12_VALV': 1, # Valve (M12) - 'P11_VALV': 2, # Valve (P11 VPi) - 'P33_VALV': 3, # Valve (P33 VCr) - 'P34_VALV': 4, # Valve (P34 VCb) - 'P37_VALV': 5, # Valve (P37 VCd) - 'P39_VALV': 6, # Valve (P39 VROd) - 'P6_VALV': 7, # Valve (P6 VFF) - 'NUM_OF_FP_VALVES': 8, # Number of valves + # Official Name : Accepted strings + 'M4_VALV': ['m4'], # Valve (M4 VWi) + 'M12_VALV': ['m12'], # Valve (M12) + 'P11_VALV': ['p11'], # Valve (P11 VPi) + 'P33_VALV': ['p33'], # Valve (P33 VCr) + 'P34_VALV': ['p34'], # Valve (P34 VCb) + 'P37_VALV': ['p37'], # Valve (P37 VCd) + 'P39_VALV': ['p39'], # Valve (P39 VROd) + 'P6_VALV': ['p6'], # Valve (P6 VFF) + 'NUM_OF_FP_VALVES': [], # Number of valves } - return unique(DialinEnum('FPValveNames', members)) + created_enum = unique(DialinEnum('FPValveNames', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum - def _create_fp_all_pump_names(self): members = { - 'P12_PUMP_RO': 0, # P14 RO Pump - 'P40_PUMP_BOOSTER': 1, # P40 Boost Pump + # Official Name : Accepted strings + 'P12_PUMP_RO': ['p12', 'ro pump'], # P12 RO Pump + 'P40_PUMP_BOOSTER': ['p40', 'boost pump'], # P40 Boost Pump + 'NUM_OF_PUMPS': [], # Number of pumps } - return unique(DialinEnum('FPAllPumpNames', members)) + created_enum = unique(DialinEnum('FPAllPumpNames', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum # ================================================== Enum Creators: Support ================================================== def _create_fp_floater_levels(self): members = { - 'LEVEL_STATE_EMPTY': 0, # Empty level for the FP Floater Level Sensors - 'LEVEL_STATE_LOW': 1, # Low level for the FP Floater Level Sensors - 'LEVEL_STATE_MEDIUM': 2, # Medium level for the FP Floater Level Sensors - 'LEVEL_STATE_HIGH': 3, # High level for the FP Floater Level Sensors - 'LEVEL_STATE_ILLEGAL': 4, # Illegal level for FP Floater Level Sensor (indicates investigation) - 'NUM_OF_LEVEL_STATES': 5, # Number of Level States + # Official Name : Accepted strings + 'LEVEL_STATE_EMPTY': ['empty'], # Empty level for the FP Floater Level Sensors + 'LEVEL_STATE_LOW': ['low'], # Low level for the FP Floater Level Sensors + 'LEVEL_STATE_MEDIUM': ['medium'], # Medium level for the FP Floater Level Sensors + 'LEVEL_STATE_HIGH': ['high'], # High level for the FP Floater Level Sensors + 'LEVEL_STATE_ILLEGAL': ['illegal'], # Illegal level for FP Floater Level Sensor (indicates investigation) + 'NUM_OF_LEVEL_STATES': [], # Number of Level States } - return unique(DialinEnum('FPFloaterLevels', members)) + created_enum = unique(DialinEnum('FPFloaterLevels', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum def _create_fp_pump_attributes(self): members = { - 'STATE': 0, # State to command attribute for Pumps - 'DUTY_CYCLE': 1, # Duty Cycle attribute for Pumps - 'FB_DUTY_CYCLE': 2, # Feedback Duty Cycle attribute for Pumps - 'SPEED': 3, # Current Speed attribute for pumps - 'TARGET_PRES': 4, # Target Pressure attribute for pumps - 'TARGET_FLOW': 5, # Target Flow attribute for pumps - 'TARGET_DUTY_CYCLE': 6, # Target Duty Cycle attribute for pumps - 'DUTY_CYCLE_PCT': 7, # Duty Cycle Percentage attribute for pumps - 'FB_DUTY_CYCLE_PCT': 8, # Feedback Duty Cycle Percentage attribute for pumps - 'NUM_OF_RO_PUMP_ATTRIBUTES': 9, # Number of pump attributes + # Official Name : Accepted strings + 'STATE': [], # State to command attribute for Pumps + 'DUTY_CYCLE': [], # Duty Cycle attribute for Pumps + 'FB_DUTY_CYCLE': ['feedback duty cycle'], # Feedback Duty Cycle attribute for Pumps + 'SPEED': [], # Current Speed attribute for pumps + 'TARGET_PRES': ['target pressure'], # Target Pressure attribute for pumps + 'TARGET_FLOW': [], # Target Flow attribute for pumps + 'TARGET_DUTY_CYCLE': [], # Target Duty Cycle attribute for pumps + 'DUTY_CYCLE_PCT': ['duty cycle percentage'], # Duty Cycle Percentage attribute for pumps + 'FB_DUTY_CYCLE_PCT': ['feedback duty cycle percentage'], # Feedback Duty Cycle Percentage attribute for pumps + 'NUM_OF_RO_PUMP_ATTRIBUTES': [], # Number of pump attributes } - return unique(DialinEnum('FPPumpAttributes', members)) + created_enum = unique(DialinEnum('FPPumpAttributes', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum def _create_fp_valve_states(self): members = { - 'VALVE_STATE_CLOSED': 0, # Valve Closed State - 'VALVE_STATE_OPEN': 1, # Valve Open State + # Official Name : Accepted strings + 'VALVE_STATE_CLOSED': ['closed'], # Valve Closed State + 'VALVE_STATE_OPEN': ['open'], # Valve Open State + 'NUM_OF_VALVE_STATES': [], # Valve Open State } - return unique(DialinEnum('FPValveStates', members)) + created_enum = unique(DialinEnum('FPValveStates', self.create_members(members))) + created_enum._str_list = members + created_enum.from_str = classmethod(self.from_str) + return created_enum