Index: leahi_dialin/dd/modules/valves.py =================================================================== diff -u -r3f4937e339925dde0b95f08e49969f8983c5cba4 -rba415df9f8e76d6b0f21e8f69ba99346e42f7b09 --- leahi_dialin/dd/modules/valves.py (.../valves.py) (revision 3f4937e339925dde0b95f08e49969f8983c5cba4) +++ leahi_dialin/dd/modules/valves.py (.../valves.py) (revision ba415df9f8e76d6b0f21e8f69ba99346e42f7b09) @@ -26,32 +26,17 @@ from leahi_dialin.common.msg_ids import MsgIds from leahi_dialin.common.override_templates import cmd_generic_broadcast_interval_override, cmd_generic_override from leahi_dialin.protocols.CAN import CanMessenger, CanMessage, CanChannels -from leahi_dialin.utils.abstract_classes import AbstractSubSystem +from leahi_dialin.utils.abstract_classes import AbstractSubSystem, LocalVars from leahi_dialin.utils.base import publish -from leahi_dialin.utils.abstract_classes import AbstractSubSystem -from leahi_dialin.utils.base import publish from leahi_dialin.utils.conversions import integer_to_bytearray -# Valve states -ENERGIZED = True -DEENERGIZED = False - class DDValves(AbstractSubSystem): """ Dialysate Delivery (DD) interface for valve related commands. """ - # Valves states publish message field positions - START_POS_VALVES_STATES = CanMessage.PAYLOAD_START_INDEX - END_POS_VALVES_STATES = START_POS_VALVES_STATES + 2 # Valves States come in as a U16 value (2 bytes) - START_POS_BCV_VALVES_STATES = END_POS_VALVES_STATES - END_POS_BCV_VALVES_STATES = START_POS_BCV_VALVES_STATES + 1 - START_POS_SPARE_VALVES_STATES = END_POS_BCV_VALVES_STATES - END_POS_SPARE_VALVES_STATES = START_POS_SPARE_VALVES_STATES + 1 - END_POS_ALL_VALVES = START_POS_VALVES_STATES + 4 - def __init__(self, can_interface: CanMessenger, logger: Logger): """ @param can_interface: Can Messenger object @@ -68,41 +53,42 @@ self.dd_valves_states_timestamp = 0.0 #: The timestamp of the latest message self.valve_states_all = 0x00000000 #: States of all the vales in binary format self.valves_sensed_states = OrderedDict() #: The Valve's Sensed State data in dictionary format - self.d14_valv = {"id": dd_enum_repository.DDValveNames.D14_VALV.value, "state": DEENERGIZED} #: The D14 valve's value - self.d52_valv = {"id": dd_enum_repository.DDValveNames.D52_VALV.value, "state": DEENERGIZED} #: The D52 valve's value - self.d8_valv = {"id": dd_enum_repository.DDValveNames.D8_VALV.value, "state": DEENERGIZED} #: The D8 valve's value - self.d54_valv = {"id": dd_enum_repository.DDValveNames.D54_VALV.value, "state": DEENERGIZED} #: The D54 valve's value - self.d53_valv = {"id": dd_enum_repository.DDValveNames.D53_VALV.value, "state": DEENERGIZED} #: The D53 valve's value - self.d34_valv = {"id": dd_enum_repository.DDValveNames.D34_VALV.value, "state": DEENERGIZED} #: The D34 valve's value - self.d64_valv = {"id": dd_enum_repository.DDValveNames.D64_VALV.value, "state": DEENERGIZED} #: The D64 valve's value - self.d31_valv = {"id": dd_enum_repository.DDValveNames.D31_VALV.value, "state": DEENERGIZED} #: The D31 valve's value - self.d65_valv = {"id": dd_enum_repository.DDValveNames.D65_VALV.value, "state": DEENERGIZED} #: The D65 valve's value - self.d35_valv = {"id": dd_enum_repository.DDValveNames.D35_VALV.value, "state": DEENERGIZED} #: The D35 valve's value - self.d40_valv = {"id": dd_enum_repository.DDValveNames.D40_VALV.value, "state": DEENERGIZED} #: The D40 valve's value - self.d47_valv = {"id": dd_enum_repository.DDValveNames.D47_VALV.value, "state": DEENERGIZED} #: The D47 valve's value - self.d3_valv = {"id": dd_enum_repository.DDValveNames.D3_VALV.value, "state": DEENERGIZED} #: The D3 valve's value - self.d80_valv = {"id": dd_enum_repository.DDValveNames.D80_VALV.value, "state": DEENERGIZED} #: The D80 valve's value - self.d81_valv = {"id": dd_enum_repository.DDValveNames.D81_VALV.value, "state": DEENERGIZED} #: The D81 valve's value - self.d85_valv = {"id": dd_enum_repository.DDValveNames.D85_VALV.value, "state": DEENERGIZED} #: The D85 valve's value - self.d23_valv = {"id": dd_enum_repository.DDValveNames.D23_VALV.value, "state": DEENERGIZED} #: The D23 valve's value - self.d19_valv = {"id": dd_enum_repository.DDValveNames.D19_VALV.value, "state": DEENERGIZED} #: The D19 valve's value - self.d25_valv = {"id": dd_enum_repository.DDValveNames.D25_VALV.value, "state": DEENERGIZED} #: The D25 valve's value - self.d21_valv = {"id": dd_enum_repository.DDValveNames.D21_VALV.value, "state": DEENERGIZED} #: The D31 valve's value - self.d24_valv = {"id": dd_enum_repository.DDValveNames.D24_VALV.value, "state": DEENERGIZED} #: The D24 valve's value - self.d20_valv = {"id": dd_enum_repository.DDValveNames.D20_VALV.value, "state": DEENERGIZED} #: The D20 valve's value - self.d26_valv = {"id": dd_enum_repository.DDValveNames.D26_VALV.value, "state": DEENERGIZED} #: The D26 valve's value - self.d22_valv = {"id": dd_enum_repository.DDValveNames.D22_VALV.value, "state": DEENERGIZED} #: The D22 valve's value + self.d14_valv = {"id": dd_enum_repository.DDValveNames.D14_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D14 valve's value + self.d52_valv = {"id": dd_enum_repository.DDValveNames.D52_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D52 valve's value + self.d8_valv = {"id": dd_enum_repository.DDValveNames.D8_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D8 valve's value + self.d54_valv = {"id": dd_enum_repository.DDValveNames.D54_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D54 valve's value + self.d53_valv = {"id": dd_enum_repository.DDValveNames.D53_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D53 valve's value + self.d34_valv = {"id": dd_enum_repository.DDValveNames.D34_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D34 valve's value + self.d64_valv = {"id": dd_enum_repository.DDValveNames.D64_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D64 valve's value + self.d31_valv = {"id": dd_enum_repository.DDValveNames.D31_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D31 valve's value + self.d65_valv = {"id": dd_enum_repository.DDValveNames.D65_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D65 valve's value + self.d35_valv = {"id": dd_enum_repository.DDValveNames.D35_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D35 valve's value + self.d40_valv = {"id": dd_enum_repository.DDValveNames.D40_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D40 valve's value + self.d47_valv = {"id": dd_enum_repository.DDValveNames.D47_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D47 valve's value + self.d3_valv = {"id": dd_enum_repository.DDValveNames.D3_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D3 valve's value + self.d80_valv = {"id": dd_enum_repository.DDValveNames.D80_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D80 valve's value + self.d81_valv = {"id": dd_enum_repository.DDValveNames.D81_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D81 valve's value + self.d85_valv = {"id": dd_enum_repository.DDValveNames.D85_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D85 valve's value - self.d88_d79_valv = {"id": dd_enum_repository.DDValveNames.D88_D79_VALV.value, "state": DEENERGIZED} #: The D88 or D79 valve's value - self.d83_valv = {"id": dd_enum_repository.DDValveNames.D83_VALV.value, "state": DEENERGIZED} #: The D83 valve's value - self.d91_valv = {"id": dd_enum_repository.DDValveNames.D91_VALV.value, "state": DEENERGIZED} #: The D91 valve's value - self.d104_valv = {"id": dd_enum_repository.DDValveNames.D104_VALV.value, "state": DEENERGIZED} #: The D104 valve's value - self.d95_valv = {"id": dd_enum_repository.DDValveNames.D95_VALV.value, "state": DEENERGIZED} #: The D95 valve's value - self.spare5_valv = {"id": dd_enum_repository.DDValveNames.SPARE5_VALV.value, "state": DEENERGIZED} #: The Spare5 valve's value - self.d100_valv = {"id": dd_enum_repository.DDValveNames.D100_VALV.value, "state": DEENERGIZED} #: The D100 valve's value - self.spare7_valv = {"id": dd_enum_repository.DDValveNames.SPARE7_VALV.value, "state": DEENERGIZED} #: The Spare7 valve's value + self.d23_valv = {"id": dd_enum_repository.DDValveNames.D23_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D23 valve's value + self.d19_valv = {"id": dd_enum_repository.DDValveNames.D19_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D19 valve's value + self.d25_valv = {"id": dd_enum_repository.DDValveNames.D25_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D25 valve's value + self.d21_valv = {"id": dd_enum_repository.DDValveNames.D21_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D31 valve's value + self.d24_valv = {"id": dd_enum_repository.DDValveNames.D24_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D24 valve's value + self.d20_valv = {"id": dd_enum_repository.DDValveNames.D20_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D20 valve's value + self.d26_valv = {"id": dd_enum_repository.DDValveNames.D26_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D26 valve's value + self.d22_valv = {"id": dd_enum_repository.DDValveNames.D22_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D22 valve's value + self.d88_d79_valv = {"id": dd_enum_repository.DDValveNames.D88_D79_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D88 or D79 valve's value + self.d83_valv = {"id": dd_enum_repository.DDValveNames.D83_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D83 valve's value + self.d91_valv = {"id": dd_enum_repository.DDValveNames.D91_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D91 valve's value + self.d104_valv = {"id": dd_enum_repository.DDValveNames.D104_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D104 valve's value + self.d95_valv = {"id": dd_enum_repository.DDValveNames.D95_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D95 valve's value + self.spare5_valv = {"id": dd_enum_repository.DDValveNames.SPARE5_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The Spare5 valve's value + self.d100_valv = {"id": dd_enum_repository.DDValveNames.D100_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The D100 valve's value + self.spare7_valv = {"id": dd_enum_repository.DDValveNames.SPARE7_VALV.value, "state": dd_enum_repository.DDValveStates.VALVE_STATE_CLOSED.value } #: The Spare7 valve's value + #: States of all the vales in list format self.valve_states_enum = {} for i in range(0, dd_enum_repository.DDValveNames.NUM_OF_DD_VALVES.value): @@ -111,80 +97,49 @@ self.valves_sensed_states[valve_name] = '' - def get_valve_states(self): - """ - Gets the valve states - @return: All valve states +# ============================================================ Properties ============================================================ + @property + def dd_valves(self) -> dict: """ - return [ - self.d14_valv.get("state", None), - self.d52_valv.get("state", None), - self.d8_valv.get("state", None), - self.d54_valv.get("state", None), - self.d53_valv.get("state", None), - self.d34_valv.get("state", None), - self.d64_valv.get("state", None), - self.d31_valv.get("state", None), - self.d65_valv.get("state", None), - self.d35_valv.get("state", None), - self.d40_valv.get("state", None), - self.d47_valv.get("state", None), - self.d3_valv.get("state", None), - self.d80_valv.get("state", None), - self.d81_valv.get("state", None), - self.d85_valv.get("state", None), - - self.d23_valv.get("state", None), - self.d19_valv.get("state", None), - self.d25_valv.get("state", None), - self.d21_valv.get("state", None), - self.d24_valv.get("state", None), - self.d20_valv.get("state", None), - self.d26_valv.get("state", None), - self.d22_valv.get("state", None), - - self.d88_d79_valv.get("state", None), - self.d83_valv.get("state", None), - self.d91_valv.get("state", None), - self.d104_valv.get("state", None), - self.d95_valv.get("state", None), - self.spare5_valv.get("state", None), - self.d100_valv.get("state", None), - self.spare7_valv.get("state", None) - ] - - - @staticmethod - def sort_by_id(observation): + The Valves data """ - Converts a published dictionary of valve state information to an ordered list - of tuples. + return {dd_enum_repository.DDValveNames.D14_VALV.name: self.d14_valv['state'], + dd_enum_repository.DDValveNames.D52_VALV.name: self.spare5_valv['state'], + dd_enum_repository.DDValveNames.D8_VALV.name: self.d8_valv['state'], + dd_enum_repository.DDValveNames.D54_VALV.name: self.d54_valv['state'], + dd_enum_repository.DDValveNames.D53_VALV.name: self.d53_valv['state'], + dd_enum_repository.DDValveNames.D34_VALV.name: self.d34_valv['state'], + dd_enum_repository.DDValveNames.D64_VALV.name: self.d64_valv['state'], + dd_enum_repository.DDValveNames.D31_VALV.name: self.d31_valv['state'], + dd_enum_repository.DDValveNames.D65_VALV.name: self.d65_valv['state'], + dd_enum_repository.DDValveNames.D35_VALV.name: self.d35_valv['state'], + dd_enum_repository.DDValveNames.D40_VALV.name: self.d40_valv['state'], + dd_enum_repository.DDValveNames.D47_VALV.name: self.d47_valv['state'], + dd_enum_repository.DDValveNames.D3_VALV.name: self.d3_valv['state'], + dd_enum_repository.DDValveNames.D80_VALV.name: self.d80_valv['state'], + dd_enum_repository.DDValveNames.D81_VALV.name: self.d81_valv['state'], + dd_enum_repository.DDValveNames.D85_VALV.name: self.d85_valv['state'], + dd_enum_repository.DDValveNames.D23_VALV.name: self.d23_valv['state'], + dd_enum_repository.DDValveNames.D19_VALV.name: self.d19_valv['state'], + dd_enum_repository.DDValveNames.D25_VALV.name: self.d25_valv['state'], + dd_enum_repository.DDValveNames.D21_VALV.name: self.d21_valv['state'], + dd_enum_repository.DDValveNames.D24_VALV.name: self.d24_valv['state'], + dd_enum_repository.DDValveNames.D20_VALV.name: self.d20_valv['state'], + dd_enum_repository.DDValveNames.D26_VALV.name: self.d26_valv['state'], + dd_enum_repository.DDValveNames.D22_VALV.name: self.d22_valv['state'], + dd_enum_repository.DDValveNames.D88_D79_VALV.name: self.d88_d79_valv['state'], + dd_enum_repository.DDValveNames.D83_VALV.name: self.d83_valv['state'], + dd_enum_repository.DDValveNames.D91_VALV.name: self.d91_valv['state'], + dd_enum_repository.DDValveNames.D104_VALV.name: self.d104_valv['state'], + dd_enum_repository.DDValveNames.D95_VALV.name: self.d95_valv['state'], + dd_enum_repository.DDValveNames.SPARE5_VALV.name: self.spare5_valv['state'], + dd_enum_repository.DDValveNames.D100_VALV.name: self.d100_valv['state'], + dd_enum_repository.DDValveNames.SPARE7_VALV.name: self.spare7_valv['state']} - @param observation: dictionary of the observed valve states - @return: a list of tuples of the valve states - """ - result = [] - for key, value in observation.items(): - if isinstance(value, dict): - result.append((key, value.get("id", None), value.get("state", None))) - result = sorted(result, key=lambda each: each[1]) - return result - - @staticmethod - def _binary_to_valve_state(binary) -> bool: - """ - @param binary: binary value - @return: 1 = energized, otherwise de-energized - """ - if binary != 0: - return ENERGIZED - else: - return DEENERGIZED - - +# ============================================================ Handlers ============================================================ @publish(["msg_id_dd_valves_states_data", "valve_states_all", "d14_valv", @@ -233,60 +188,70 @@ vsa = struct.unpack(DataTypes.U32.unpack_attrib(), bytearray(message['message'][self.START_POS_VALVES_STATES:self.END_POS_ALL_VALVES])) self.valve_states_all = vsa[0] - vst = struct.unpack(DataTypes.U16.unpack_attrib(), bytearray(message['message'][self.START_POS_VALVES_STATES:self.END_POS_VALVES_STATES])) + valves = LocalVars('valves') + bc_valves = LocalVars('bc_valves') + spare_valves = LocalVars('spare_valves') + + msg_list = [] + msg_list.append((valves, DataTypes.U16)) + msg_list.append((bc_valves, DataTypes.U08)) + msg_list.append((spare_valves, DataTypes.U08)) + + self.process_into_vars(decoder_list = msg_list, message = message) + # Extract each valve state from U16 valves states using bit-masking - self.d14_valv["state"] = self._binary_to_valve_state(vst[0] & 1) - self.d52_valv["state"] = self._binary_to_valve_state(vst[0] & 2) - self.d8_valv["state"] = self._binary_to_valve_state(vst[0] & 4) - self.d54_valv["state"] = self._binary_to_valve_state(vst[0] & 8) - self.d53_valv["state"] = self._binary_to_valve_state(vst[0] & 16) - self.d34_valv["state"] = self._binary_to_valve_state(vst[0] & 32) - self.d64_valv["state"] = self._binary_to_valve_state(vst[0] & 64) - self.d31_valv["state"] = self._binary_to_valve_state(vst[0] & 128) - self.d65_valv["state"] = self._binary_to_valve_state(vst[0] & 256) - self.d35_valv["state"] = self._binary_to_valve_state(vst[0] & 512) - self.d40_valv["state"] = self._binary_to_valve_state(vst[0] & 1024) - self.d47_valv["state"] = self._binary_to_valve_state(vst[0] & 2048) - self.d3_valv["state"] = self._binary_to_valve_state(vst[0] & 4096) - self.d80_valv["state"] = self._binary_to_valve_state(vst[0] & 8192) - self.d81_valv["state"] = self._binary_to_valve_state(vst[0] & 16384) - self.d85_valv["state"] = self._binary_to_valve_state(vst[0] & 32768) + self.d14_valv["state"] = dd_enum_repository.DDValveStates(valves.value & 1) + self.d52_valv["state"] = dd_enum_repository.DDValveStates(valves.value & 2) + self.d8_valv["state"] = dd_enum_repository.DDValveStates(valves.value & 4) + self.d54_valv["state"] = dd_enum_repository.DDValveStates(valves.value & 8) + self.d53_valv["state"] = dd_enum_repository.DDValveStates(valves.value & 16) + self.d34_valv["state"] = dd_enum_repository.DDValveStates(valves.value & 32) + self.d64_valv["state"] = dd_enum_repository.DDValveStates(valves.value & 64) + self.d31_valv["state"] = dd_enum_repository.DDValveStates(valves.value & 128) + self.d65_valv["state"] = dd_enum_repository.DDValveStates(valves.value & 256) + self.d35_valv["state"] = dd_enum_repository.DDValveStates(valves.value & 512) + self.d40_valv["state"] = dd_enum_repository.DDValveStates(valves.value & 1024) + self.d47_valv["state"] = dd_enum_repository.DDValveStates(valves.value & 2048) + self.d3_valv["state"] = dd_enum_repository.DDValveStates(valves.value & 4096) + self.d80_valv["state"] = dd_enum_repository.DDValveStates(valves.value & 8192) + self.d81_valv["state"] = dd_enum_repository.DDValveStates(valves.value & 16384) + self.d85_valv["state"] = dd_enum_repository.DDValveStates(valves.value & 32768) - bcv = struct.unpack(DataTypes.U08.unpack_attrib(), bytearray(message['message'][self.START_POS_BCV_VALVES_STATES:self.END_POS_BCV_VALVES_STATES])) - self.d23_valv["state"] = self._binary_to_valve_state(bcv[0] & 1) - self.d19_valv["state"] = self._binary_to_valve_state(bcv[0] & 2) - self.d25_valv["state"] = self._binary_to_valve_state(bcv[0] & 4) - self.d21_valv["state"] = self._binary_to_valve_state(bcv[0] & 8) - self.d24_valv["state"] = self._binary_to_valve_state(bcv[0] & 16) - self.d20_valv["state"] = self._binary_to_valve_state(bcv[0] & 32) - self.d26_valv["state"] = self._binary_to_valve_state(bcv[0] & 64) - self.d22_valv["state"] = self._binary_to_valve_state(bcv[0] & 128) + self.d23_valv["state"] = dd_enum_repository.DDValveStates(bc_valves.value & 1) + self.d19_valv["state"] = dd_enum_repository.DDValveStates(bc_valves.value & 2) + self.d25_valv["state"] = dd_enum_repository.DDValveStates(bc_valves.value & 4) + self.d21_valv["state"] = dd_enum_repository.DDValveStates(bc_valves.value & 8) + self.d24_valv["state"] = dd_enum_repository.DDValveStates(bc_valves.value & 16) + self.d20_valv["state"] = dd_enum_repository.DDValveStates(bc_valves.value & 32) + self.d26_valv["state"] = dd_enum_repository.DDValveStates(bc_valves.value & 64) + self.d22_valv["state"] = dd_enum_repository.DDValveStates(bc_valves.value & 128) - spv = struct.unpack(DataTypes.U08.unpack_attrib(), bytearray(message['message'][self.START_POS_SPARE_VALVES_STATES:self.END_POS_SPARE_VALVES_STATES])) - self.d88_d79_valv["state"] = self._binary_to_valve_state(spv[0] & 1) - self.d83_valv["state"] = self._binary_to_valve_state(spv[0] & 2) - self.d91_valv["state"] = self._binary_to_valve_state(spv[0] & 4) - self.d104_valv["state"] = self._binary_to_valve_state(spv[0] & 8) - self.d95_valv["state"] = self._binary_to_valve_state(spv[0] & 16) - self.spare5_valv["state"] = self._binary_to_valve_state(spv[0] & 32) - self.d100_valv["state"] = self._binary_to_valve_state(spv[0] & 64) - self.spare7_valv["state"] = self._binary_to_valve_state(spv[0] & 128) + self.d88_d79_valv["state"] = dd_enum_repository.DDValveStates(spare_valves.value & 1) + self.d83_valv["state"] = dd_enum_repository.DDValveStates(spare_valves.value & 2) + self.d91_valv["state"] = dd_enum_repository.DDValveStates(spare_valves.value & 4) + self.d104_valv["state"] = dd_enum_repository.DDValveStates(spare_valves.value & 8) + self.d95_valv["state"] = dd_enum_repository.DDValveStates(spare_valves.value & 16) + self.spare5_valv["state"] = dd_enum_repository.DDValveStates(spare_valves.value & 32) + self.d100_valv["state"] = dd_enum_repository.DDValveStates(spare_valves.value & 64) + self.spare7_valv["state"] = dd_enum_repository.DDValveStates(spare_valves.value & 128) # Updating Valve_states_enum for i in range(0, dd_enum_repository.DDValveNames.NUM_OF_DD_VALVES.value): valve_name = dd_enum_repository.DDValveNames(i).name self.valve_states_enum[valve_name] = eval(f'self.{valve_name.lower()}["state"]') - start = self.END_POS_SPARE_VALVES_STATES - end = start + 1 + # Extract each valve sensed state + start = DataTypes.U32.size() + msg_list_2 = [] for valve_id in self.valves_sensed_states: - valve_state_number = struct.unpack(DataTypes.U08.unpack_attrib(), bytearray(message['message'][start:end]))[0] - self.valves_sensed_states[valve_id] = valve_state_number - start = end - end += 1 + msg_list.append((self.valves_sensed_states, valve_id, DataTypes.U08)) + + self.process_into_vars(decoder_list = msg_list_2, message = message, start_from_byte = start) self.dd_valves_states_timestamp = timestamp + +# ============================================================ Overrides and Requests ============================================================ def cmd_valve_broadcast_interval_override(self, ms: int, reset: int = NO_RESET) -> int: """ Constructs and sends the valve state override command.