def monitor(self): # Called every 5 seconds #self.cbLog("debug", "monitor. taken: " + str(self.taken)) try: if self.taken: self.taken = False inSlot = False for s in config["time_slots"]: if betweenTimes(self.lastTime, s["start"], s["end"]): inSlot = True break joinedName = self.name.replace(" ", "_") if inSlot: values = { "name": self.bridge_id + "/" + joinedName + "/" + "in_slot", "points": [[int(self.lastTime*1000), 1]] } else: values = { "name": self.bridge_id + "/" + joinedName + "/" + "out_slot", "points": [[int(self.lastTime*1000), 1]] } self.storeValues(values) except Exception as ex: self.cbLog("warning", "medicine monitor encountered problems in taken. Exception: " + str(type(ex)) + str(ex.args)) try: if config["reminders"]: now = time.time() if now - self.lastReminderTime > config["reminder_time"] + 10: for s in config["time_slots"]: if betweenTimes(now, s["start"], s["end"]): if not betweenTimes(self.lastTime, s["start"], s["end"]): epochEnd = hourMin2Epoch(s["end"]) if epochEnd - now < config["reminder_time"]: self.cbLog("debug", "monitor. start: " + str(s["start"]) + ", end: " + str(s["end"])) msg = {"m": "alert", "a": "Remember to take your " + self.name + " by " + nicetime(epochEnd)[:5], "t": now } self.client.send(msg) self.cbLog("debug", "msg send to client: " + str(json.dumps(msg, indent=4))) self.lastReminderTime = now break except Exception as ex: self.cbLog("warning", "medicine monitor encountered problems in reminders. Exception: " + str(type(ex)) + str(ex.args)) reactor.callLater(5, self.monitor)
def onChange(self, devID, timeStamp, value): #self.cbLog("debug", "onChange, devID: " + devID + " value: " + value) if value == "on": alert = betweenTimes(timeStamp, config["night_start"], config["night_end"]) self.cbLog("debug", "alert: " + str(alert) + ", activatedSensors: " + str(self.activatedSensors)) if alert: sensor = self.idToName[devID] self.cbLog("debug", "sensor: " + sensor) values = { "name": self.bridge_id + "/Night_Wander/" + sensor, "points": [[int(timeStamp*1000), 1]] } self.storeValues(values) if sensor not in self.activatedSensors: self.activatedSensors.append(sensor) if len(self.activatedSensors) == 1: self.state["wanderCount"] += 1 reactor.callLater(config["night_ignore_time"], self.endIgnoreTime) self.reportAlert(timeStamp)
def monitor(self): # Called every 5 seconds #self.cbLog("debug", "monitor. taken: " + str(self.taken)) try: if self.taken: self.taken = False inSlot = False for s in config["time_slots"]: if betweenTimes(self.lastTime, s["start"], s["end"]): inSlot = True break joinedName = self.name.replace(" ", "_") if inSlot: values = { "name": self.bridge_id + "/" + joinedName + "/" + "in_slot", "points": [[int(self.lastTime * 1000), 1]] } else: values = { "name": self.bridge_id + "/" + joinedName + "/" + "out_slot", "points": [[int(self.lastTime * 1000), 1]] } self.storeValues(values) except Exception as ex: self.cbLog( "warning", "medicine monitor encountered problems in taken. Exception: " + str(type(ex)) + str(ex.args)) try: if config["reminders"]: now = time.time() if now - self.lastReminderTime > config["reminder_time"] + 10: for s in config["time_slots"]: if betweenTimes(now, s["start"], s["end"]): if not betweenTimes(self.lastTime, s["start"], s["end"]): epochEnd = hourMin2Epoch(s["end"]) if epochEnd - now < config["reminder_time"]: self.cbLog( "debug", "monitor. start: " + str(s["start"]) + ", end: " + str(s["end"])) msg = { "m": "alert", "a": "Remember to take your " + self.name + " by " + nicetime(epochEnd)[:5], "t": now } self.client.send(msg) self.cbLog( "debug", "msg send to client: " + str(json.dumps(msg, indent=4))) self.lastReminderTime = now break except Exception as ex: self.cbLog( "warning", "medicine monitor encountered problems in reminders. Exception: " + str(type(ex)) + str(ex.args)) reactor.callLater(5, self.monitor)