Various small changes; fix up the camera trigger, improve logging,
authorScott Gasch <[email protected]>
Mon, 6 Jul 2020 00:16:52 +0000 (17:16 -0700)
committerScott Gasch <[email protected]>
Mon, 6 Jul 2020 00:16:52 +0000 (17:16 -0700)
etc...

camera_trigger.py
kiosk.py
myq_renderer.py
renderer.py
renderer_catalog.py

index 74829e32d8b54cd9612e3b9259f515f596be848d..64cb6383f375c6fdd58e067abc7e308311d3333c 100644 (file)
@@ -51,16 +51,21 @@ class any_camera_trigger(trigger.trigger):
             for camera in camera_list:
                 file = "/timestamps/last_camera_motion_%s" % camera
                 ts = os.stat(file).st_ctime
-                age = now - ts
-                # print "Camera: %s, age %s" % (camera, age)
-                if age < 60:
+                if (ts != self.last_trigger[camera] and
+                    (now - ts) < 10):
+                    print("Camera: %s, age %s" % (camera, (now - ts)))
+                    self.last_trigger[camera] = ts
                     cameras_with_recent_triggers += 1
-                    time_since_last_trigger = now - self.last_trigger[camera]
-                    self.last_trigger[camera] = now
-                    if time_since_last_trigger < (60 * 7):
-                        self.triggers_in_the_past_seven_min[camera] += 1
-                    else:
-                        self.triggers_in_the_past_seven_min[camera] = 1
+                    self.triggers_in_the_past_seven_min[camera] = 0
+                    file = "/timestamps/camera_motion_history_%s" % camera
+                    f = open(file, "r")
+                    contents = f.readlines()
+                    f.close()
+                    for x in contents:
+                        x.strip()
+                        age = now - int(x)
+                        if age < (60 * 7):
+                            self.triggers_in_the_past_seven_min[camera] += 1
 
             # Second pass, see whether we want to trigger due to
             # camera activity we found.  All cameras timestamps were
@@ -68,10 +73,10 @@ class any_camera_trigger(trigger.trigger):
             # squelch spammy cameras unless more than one is
             # triggered at the same time.
             for camera in camera_list:
-                if self.last_trigger[camera] == now:
-                    ts = utils.timestamp()
+                if (now - self.last_trigger[camera]) < 10:
                     if (self.triggers_in_the_past_seven_min[camera] <= 4 or
                         cameras_with_recent_triggers > 1):
+                        ts = utils.timestamp()
                         p = self.choose_priority(camera, age)
                         print(("%s: ****** %s[%d] CAMERA TRIGGER ******" % (
                             ts, camera, p)))
index f25a659c17bb153a08281b0c5c5743ad59fde0d4..0c8cce09f3a6b0bc92a636ada326cee71eb27cf7 100755 (executable)
--- a/kiosk.py
+++ b/kiosk.py
@@ -254,7 +254,6 @@ def thread_invoke_renderers():
             utils.timestamp()))
         for r in renderer_catalog.get_renderers():
             now = time.time()
-            print("renderer[%s]: Rendering %s" % (utils.timestamp(), r.get_name()))
             try:
                 r.render()
             except Exception as e:
@@ -266,8 +265,9 @@ def thread_invoke_renderers():
                 print("renderer[%s] unknown error in %s, swallowing it." % (
                     utils.timestamp(), r.get_name()))
             delta = time.time() - now
-            print("renderer[%s]: Back from %s, that took %5.2fs." % (
-                utils.timestamp(), r.get_name(), delta))
+            if (delta > 1.0):
+                print("renderer[%s]: Warning: %s's rendering took %5.2fs." % (
+                    utils.timestamp(), r.get_name(), delta))
         print("renderer[%s]: thread having a little break for %ds..." % (
             utils.timestamp(), constants.render_period_sec))
         time.sleep(constants.render_period_sec)
index 333c356a6e96891a26ddf8c36f743636c785b155..91e946b9a621291046e56f4e681f2eb80ce9bd74 100644 (file)
@@ -1,5 +1,3 @@
-#!/usr/local/bin/python3.7
-
 import pymyq
 from aiohttp import ClientSession
 import asyncio
@@ -14,13 +12,15 @@ class garage_door_renderer(renderer.debuggable_abstaining_renderer):
     def __init__(self, name_to_timeout_dict):
         super(garage_door_renderer, self).__init__(name_to_timeout_dict, False)
         self.doors = None
+        self.last_update = None
 
     def debug_prefix(self):
         return "myq"
 
     def periodic_render(self, key):
         if key == "Poll MyQ":
-            asyncio.get_event_loop().run_until_complete(self.poll_myq())
+            self.last_update = datetime.datetime.now()
+            return asyncio.run(self.poll_myq())
         elif key == "Update Page":
             return self.update_page()
         else:
@@ -32,17 +32,17 @@ class garage_door_renderer(renderer.debuggable_abstaining_renderer):
                                     secrets.myq_password,
                                     websession)
             self.doors = myq.devices
+            return len(self.doors) > 0
 
     def update_page(self):
         f = file_writer.file_writer(constants.myq_pagename)
-        now = datetime.datetime.now()
         f.write("""
 <H1>Garage Door Status</H1>
 <!-- Last updated at %s -->
 <HR>
 <TABLE BORDER=0 WIDTH=99%%>
   <TR>
-""" % now)
+""" % self.last_update)
         html = self.do_door("Near House")
         if html == None:
             return False
index 491d34d52f9b32a9090294b40c21358e42f892fd..bfd6a9012267e202f0004c68ee543290b3765c97 100644 (file)
@@ -45,7 +45,7 @@ class abstaining_renderer(renderer):
             else:
                 msg = 'renderer: executing "%s.%s"' % (self.get_name(), key)
                 if (tries_per_key[key] > 1):
-                    msg = msg + " (retry %d)" % tries_per_key[key]
+                    msg = msg + " (retry #%d)" % tries_per_key[key]
                 print(msg)
                 if (self.periodic_render(key)):
                     self.last_runs[key] = time.time()
index 3cd8406b4d2b8e02770dc54682162d3874df829f..3c2fb1e2666c7380a7aa73bed20fe4be577e3fc3 100644 (file)
@@ -45,7 +45,7 @@ __registry = [
 #                     {"Poll" : (hours * 1)}),
                  myq_renderer.garage_door_renderer(
                      {"Poll MyQ" : (minutes * 5),
-                      "Update Page" : (minutes * 5)}),
+                      "Update Page" : (always)}),
                  bellevue_reporter_rss_renderer.bellevue_reporter_rss_renderer(
                      {"Fetch News" : (hours * 1),
                       "Shuffle News" : (always)},