def run(self): # start endless loop for listening while self.enocean.is_alive(): # Request transmitter ID, if needed if self.enocean_sender is None: self.enocean_sender = self.enocean.base_id # Loop to empty the queue... try: # get next packet if (platform.system() == 'Windows'): # only timeout on Windows for KeyboardInterrupt checking packet = self.enocean.receive.get(block=True, timeout=1) else: packet = self.enocean.receive.get(block=True) # check packet type if packet.packet_type == PACKET.RADIO: self._process_radio_packet(packet) elif packet.packet_type == PACKET.RESPONSE: response_code = RETURN_CODE(packet.data[0]) logging.info("got response packet: {}".format( response_code.name)) else: logging.info("got non-RF packet: {}".format(packet)) continue except queue.Empty: continue except KeyboardInterrupt: logging.debug("Exception: KeyboardInterrupt") break # Run finished, close MQTT client and stop Enocean thread logging.debug("Cleaning up") self.mqtt.loop_stop() self.mqtt.disconnect() self.mqtt.loop_forever() # will block until disconnect complete self.enocean.stop()
def run(self): # start endless loop for listening while self.enocean.is_alive(): # Request transmitter ID, if needed if self.enocean_sender is None: self.enocean_sender = self.enocean.base_id # Loop to empty the queue... try: # get next packet packet = self.enocean.receive.get(block=True, timeout=1) # check packet type if packet.packet_type == PACKET.RADIO: self._process_radio_packet(packet) elif packet.packet_type == PACKET.RESPONSE: response_code = RETURN_CODE(packet.data[0]) logging.info("got response packet: {}".format( response_code.name)) else: logging.info("got non-RF packet: {}".format(packet)) continue except queue.Empty: continue