Index: leahi_dialin/fp/modules/valves.py =================================================================== diff -u -r11e7bd014a4b44e94c055a15881b1e01b35f5749 -r11fe14dad253faa257f49a1325b24a5f6846501e --- leahi_dialin/fp/modules/valves.py (.../valves.py) (revision 11e7bd014a4b44e94c055a15881b1e01b35f5749) +++ leahi_dialin/fp/modules/valves.py (.../valves.py) (revision 11fe14dad253faa257f49a1325b24a5f6846501e) @@ -61,12 +61,12 @@ self.valve_states_all = 0x0000 self.m4_valv = {"id": FPValveNames.M4_VALV.value, "state": DEENERGIZED} + self.m12_valv = {"id": FPValveNames.M12_VALV.value, "state": DEENERGIZED} self.p11_valv = {"id": FPValveNames.P11_VALV.value, "state": DEENERGIZED} self.p33_valv = {"id": FPValveNames.P33_VALV.value, "state": DEENERGIZED} self.p34_valv = {"id": FPValveNames.P34_VALV.value, "state": DEENERGIZED} self.p37_valv = {"id": FPValveNames.P37_VALV.value, "state": DEENERGIZED} self.p39_valv = {"id": FPValveNames.P39_VALV.value, "state": DEENERGIZED} - self.m12_valv = {"id": FPValveNames.M12_VALV.value, "state": DEENERGIZED} self.p6_valv = {"id": FPValveNames.P6_VALV.value, "state": DEENERGIZED} # NOTE: The len function counts the enums with the same number only once. @@ -83,55 +83,25 @@ """ return [ self.m4_valv.get("state"), + self.m12_valv.get("state"), self.p11_valv.get("state"), self.p33_valv.get("state"), self.p34_valv.get("state"), self.p37_valv.get("state"), self.p39_valv.get("state"), - self.m12_valv.get("state"), self.p6_valv.get("state") ] - @staticmethod - def sort_by_id(observation): - """ - Converts a published dictionary of valve state information to an ordered list - of tuples. - - @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 - @publish([ "msg_id_fp_valves_states_data", "valve_states_all", "m4_valv", + "m12_valv", "p11_valv", "p33_valv", "p34_valv", "p37_valv", "p39_valv", - "m12_valv", "p6_valv", "valve_states_enum", "fp_valves_states_timestamp" @@ -143,17 +113,16 @@ @param message: published FP valves states message @return: none """ - vst = struct.unpack('H', bytearray(message['message'][self.START_POS_VALVES_STATES:self.END_POS_VALVES_STATES])) self.valve_states_all = vst[0] # Extract each valve state from U16 valves states using bit-masking self.m4_valv["state"] = self._binary_to_valve_state(vst[0] & 1) - self.p11_valv["state"] = self._binary_to_valve_state(vst[0] & 2) - self.p33_valv["state"] = self._binary_to_valve_state(vst[0] & 4) - self.p34_valv["state"] = self._binary_to_valve_state(vst[0] & 8) - self.p37_valv["state"] = self._binary_to_valve_state(vst[0] & 16) - self.p39_valv["state"] = self._binary_to_valve_state(vst[0] & 32) - self.m12_valv["state"] = self._binary_to_valve_state(vst[0] & 64) + self.m12_valv["state"] = self._binary_to_valve_state(vst[0] & 2) + self.p11_valv["state"] = self._binary_to_valve_state(vst[0] & 4) + self.p33_valv["state"] = self._binary_to_valve_state(vst[0] & 8) + self.p34_valv["state"] = self._binary_to_valve_state(vst[0] & 16) + self.p37_valv["state"] = self._binary_to_valve_state(vst[0] & 32) + self.p39_valv["state"] = self._binary_to_valve_state(vst[0] & 64) self.p6_valv["state"] = self._binary_to_valve_state(vst[0] & 128) start = self.END_POS_VALVES_STATES @@ -166,6 +135,36 @@ self.fp_valves_states_timestamp = timestamp + @staticmethod + def sort_by_id(observation): + """ + Converts a published dictionary of valve state information to an ordered list + of tuples. + + @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 + def cmd_valve_sensed_state_override(self, valve: int, state: bool, reset: int = NO_RESET) -> int: """ Constructs and sends the valve sensed state override command.