def _sensorAlertHandler(self, incomingMessage): logging.debug("[%s]: Received sensor alert." % self.fileName) # extract sensor alert values try: alertLevels = incomingMessage["payload"]["alertLevels"] # check if alertLevels is a list if not isinstance(alertLevels, list): # send error message back try: message = {"clientTime": int(time.time()), "message": message["message"], "error": "alertLevels not of type list"} self.client.send(json.dumps(message)) except Exception as e: pass return False # check if all elements of the alertLevels list # are of type int if not all(isinstance(item, int) for item in alertLevels): # send error message back try: message = {"clientTime": int(time.time()), "message": message["message"], "error": "alertLevels items not of type int"} self.client.send(json.dumps(message)) except Exception as e: pass return False description = str(incomingMessage["payload"]["description"]) # parse received data (if data transfer is activated) data = None dataTransfer = bool(incomingMessage["payload"]["dataTransfer"]) if dataTransfer: data = incomingMessage["payload"]["data"] # check if data is of type dict # => if not ignore it if not isinstance(data, dict): logging.warning("[%s]: Received data in sensor alert " % self.fileName + "not valid. Ignoring it.") data = None dataTransfer = False except Exception as e: logging.exception("[%s]: Received sensor alert " % self.fileName + "invalid.") # send error message back try: message = {"clientTime": int(time.time()), "message": incomingMessage["message"], "error": "received sensor alert invalid"} self.client.send(json.dumps(message)) except Exception as e: pass return False # sending sensor alert response logging.debug("[%s]: Sending sensor alert " % self.fileName + "response message.") try: payload = {"type": "response", "result": "ok"} message = {"clientTime": int(time.time()), "message": "sensoralert", "payload": payload} self.client.send(json.dumps(message)) except Exception as e: logging.exception("[%s]: Sending sensor alert " % self.fileName + "response failed.") return False # trigger all alerts that have the same alert level for alert in self.alerts: for alertLevel in alertLevels: if alertLevel in alert.alertLevels: # trigger alert in an own thread to not block this one alertTriggerProcess = AsynchronousAlertExecuter(alert) alertTriggerProcess.sensorDescription = description alertTriggerProcess.dataTransfer = dataTransfer alertTriggerProcess.data = data # set thread to daemon # => threads terminates when main thread terminates alertTriggerProcess.daemon = True alertTriggerProcess.triggerAlert = True alertTriggerProcess.start() return True
def _sensorAlertHandler(self, incomingMessage): logging.debug("[%s]: Received sensor alert." % self.fileName) # extract sensor alert values try: alertLevels = incomingMessage["payload"]["alertLevels"] # check if alertLevels is a list if not isinstance(alertLevels, list): # send error message back try: message = { "clientTime": int(time.time()), "message": message["message"], "error": "alertLevels not of type list" } self.client.send(json.dumps(message)) except Exception as e: pass return False # check if all elements of the alertLevels list # are of type int if not all(isinstance(item, int) for item in alertLevels): # send error message back try: message = { "clientTime": int(time.time()), "message": message["message"], "error": "alertLevels items not of type int" } self.client.send(json.dumps(message)) except Exception as e: pass return False state = int(incomingMessage["payload"]["state"]) description = str(incomingMessage["payload"]["description"]) # parse received data (if data transfer is activated) data = None dataTransfer = bool(incomingMessage["payload"]["dataTransfer"]) if dataTransfer: data = incomingMessage["payload"]["data"] # check if data is of type dict # => if not ignore it if not isinstance(data, dict): logging.warning("[%s]: Received data in sensor alert " % self.fileName + "not valid. Ignoring it.") data = None dataTransfer = False except Exception as e: logging.exception("[%s]: Received sensor alert " % self.fileName + "invalid.") # send error message back try: message = { "clientTime": int(time.time()), "message": incomingMessage["message"], "error": "received sensor alert invalid" } self.client.send(json.dumps(message)) except Exception as e: pass return False # sending sensor alert response logging.debug("[%s]: Sending sensor alert " % self.fileName + "response message.") try: payload = {"type": "response", "result": "ok"} message = { "clientTime": int(time.time()), "message": "sensoralert", "payload": payload } self.client.send(json.dumps(message)) except Exception as e: logging.exception("[%s]: Sending sensor alert " % self.fileName + "response failed.") return False # trigger all alerts that have the same alert level for alert in self.alerts: for alertLevel in alertLevels: if alertLevel in alert.alertLevels: # trigger alert in an own thread to not block this one alertTriggerProcess = AsynchronousAlertExecuter(alert) alertTriggerProcess.sensorDescription = description alertTriggerProcess.state = state alertTriggerProcess.dataTransfer = dataTransfer alertTriggerProcess.data = data # set thread to daemon # => threads terminates when main thread terminates alertTriggerProcess.daemon = True alertTriggerProcess.triggerAlert = True alertTriggerProcess.start() return True