From: Scott Gasch Date: Mon, 6 Jul 2020 00:16:52 +0000 (-0700) Subject: Various small changes; fix up the camera trigger, improve logging, X-Git-Url: https://wannabe.guru.org/gitweb/?a=commitdiff_plain;h=f2f05b2edb16cc6a8c4e183e5ae3451d291cc428;p=kiosk.git Various small changes; fix up the camera trigger, improve logging, etc... --- diff --git a/camera_trigger.py b/camera_trigger.py index 74829e3..64cb638 100644 --- a/camera_trigger.py +++ b/camera_trigger.py @@ -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))) diff --git a/kiosk.py b/kiosk.py index f25a659..0c8cce0 100755 --- 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) diff --git a/myq_renderer.py b/myq_renderer.py index 333c356..91e946b 100644 --- a/myq_renderer.py +++ b/myq_renderer.py @@ -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("""

Garage Door Status


-""" % now) +""" % self.last_update) html = self.do_door("Near House") if html == None: return False diff --git a/renderer.py b/renderer.py index 491d34d..bfd6a90 100644 --- a/renderer.py +++ b/renderer.py @@ -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() diff --git a/renderer_catalog.py b/renderer_catalog.py index 3cd8406..3c2fb1e 100644 --- a/renderer_catalog.py +++ b/renderer_catalog.py @@ -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)},