Index: leahi_dialin/fp/modules/valves.py =================================================================== diff -u -re60ad12bcc58d5905d7268bbeaae139d8233e023 -r71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0 --- leahi_dialin/fp/modules/valves.py (.../valves.py) (revision e60ad12bcc58d5905d7268bbeaae139d8233e023) +++ leahi_dialin/fp/modules/valves.py (.../valves.py) (revision 71975b0c600fd9bd4b2a43cc707e6b0a2012f8b0) @@ -173,6 +173,50 @@ 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", + "p6_valv", + "valve_states_enum", + "fp_valves_states_timestamp" + ]) + def _handler_valves_sync(self, message, timestamp=0.0): + """ + Handles published FP valves states message. + + @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.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 + end = start + 1 + for valve_id in self.valves_sensed_states: + valve_state_number = struct.unpack('B', bytearray(message['message'][start:end]))[0] + self.valves_sensed_states[valve_id] = FPValveStates(valve_state_number).name + start = end + end += 1 + + self.fp_valves_states_timestamp = timestamp + 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. @@ -216,7 +260,7 @@ Given valve ID must be one of the valve IDs listed below. @param valve: unsigned int - valve ID - @param state: int - valve state + @param state: int - valve state (0=de-energized/closed, 1=energized/open) @param reset: integer - 1 to reset a previous override, 0 to override @return: 1 if successful, zero otherwise """