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)
Example #3
0
 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)