Loading kronk.py +52 −26 Original line number Diff line number Diff line Loading @@ -43,6 +43,9 @@ class Kronk: else: self.space_status = "CLOSED" self.last_space_status_change = time.time() self.save_persistent_state() def save_persistent_state(self): f = open("kronk.conf", "w") f.write(json.dumps( {'space_status': self.space_status, 'last_space_status_change': self.last_space_status_change})) Loading @@ -50,6 +53,7 @@ class Kronk: def airquality_update(self): # if PPM CO2 is <1000, green light for bottom LED if (self.panel_status != "deepsleep"): if self.ppm < 1000: self.panel.set_device_led(2, 1) # if PPM CO2 is between 1000 and 2000, yellow light Loading Loading @@ -102,6 +106,7 @@ class Kronk: self.panel.write_line(8, f"doorhold menu") def set_space_status_led(self): if (self.panel_status != "deepsleep"): if self.space_status == "OPEN": self.panel.set_device_led(0, 1) if self.space_status == "INVISIBLE": Loading @@ -112,8 +117,18 @@ class Kronk: def wakeup(self): print("WAKING UP") self.menu_index = 0 self.panel.display_backlight_on(0) # Full brightness self.panel.display_backlight_on(0) self.panel.set_keypad_backlight_brightness(255) self.set_space_status_led() self.airquality_update() def deepsleep(self): # sleep all LEDs self.panel.set_device_led(0, 0) self.panel.set_device_led(1, 0) self.panel.set_device_led(2, 0) self.panel.display_backlight_off() self.panel.keypad_backlight_off() def partial_draw_clock(self): now = datetime.datetime.now() Loading Loading @@ -179,9 +194,14 @@ class Kronk: self.selector = 2 self.draw_space_update_menu() # if we're in a menu, and the enter key is pressed, set that if char == "E" and self.panel_status != "in_menu": self.panel_status = "in_menu" self.draw_space_update_menu() if char == "E" and self.panel_status == "in_menu": # update the space status self.space_status = self.status_options[self.selector] self.save_persistent_state() print(f"STATUS CHANGED to {self.status_options[self.selector]}") # poke the last space status change self.last_space_status_change = time.time() Loading @@ -189,9 +209,7 @@ class Kronk: self.panel_status = "awake" # redraw panel self.full_draw() if char == "E" and self.panel_status != "in_menu": self.panel_status = "in_menu" self.draw_space_update_menu() if (self.panel_status == "in_menu" and self.menus[self.menu_index] == "DOORHOLD"): self.draw_space_update_menu() Loading @@ -202,24 +220,31 @@ class Kronk: if int(time.time()) - self.last_sensor_poll > 120: self.poll_sensors() # do not run a full draw every second if it's in a menu if self.panel_status == "in_menu": if self.panel_status == "in_menu" or self.panel_status == "asleep" or self.panel_status == "deepsleep": self.partial_draw_clock() else: self.full_draw(0) # sleep timer if self.panel_status != "asleep": if self.panel_status != "asleep" and self.panel_status != "deepsleep": print( "BACKLIGHT TIMEOUT COUNTER:" + str(int(time.time() - self.last_interaction_time)) ) if int(time.time()) - self.last_interaction_time > 14: if int(time.time()) - self.last_interaction_time > 15: self.panel.keypad_backlight_off() self.panel.display_backlight_off() self.full_draw() print("SLEEPING BACKLIGHT") self.panel_status = "asleep" await asyncio.sleep(1) # deepsleep to disable LEDs when space inactive to prevent burnout if self.space_status == "CLOSED" and int( time.time()) - self.last_interaction_time > 900 and self.panel_status != "deepsleep": print("ENTERING DEEPSLEEP") self.panel_status = "deepsleep" self.deepsleep() await asyncio.sleep(0.25) async def main(self): # start flask Loading Loading @@ -273,6 +298,7 @@ class Kronk: self.space_status = new_state self.last_space_status_change = time.time() self.clock_force_draw = 1 self.save_persistent_state() return Response("ok", mimetype="application/json") else: abort(400, message="Invalid state") Loading Loading
kronk.py +52 −26 Original line number Diff line number Diff line Loading @@ -43,6 +43,9 @@ class Kronk: else: self.space_status = "CLOSED" self.last_space_status_change = time.time() self.save_persistent_state() def save_persistent_state(self): f = open("kronk.conf", "w") f.write(json.dumps( {'space_status': self.space_status, 'last_space_status_change': self.last_space_status_change})) Loading @@ -50,6 +53,7 @@ class Kronk: def airquality_update(self): # if PPM CO2 is <1000, green light for bottom LED if (self.panel_status != "deepsleep"): if self.ppm < 1000: self.panel.set_device_led(2, 1) # if PPM CO2 is between 1000 and 2000, yellow light Loading Loading @@ -102,6 +106,7 @@ class Kronk: self.panel.write_line(8, f"doorhold menu") def set_space_status_led(self): if (self.panel_status != "deepsleep"): if self.space_status == "OPEN": self.panel.set_device_led(0, 1) if self.space_status == "INVISIBLE": Loading @@ -112,8 +117,18 @@ class Kronk: def wakeup(self): print("WAKING UP") self.menu_index = 0 self.panel.display_backlight_on(0) # Full brightness self.panel.display_backlight_on(0) self.panel.set_keypad_backlight_brightness(255) self.set_space_status_led() self.airquality_update() def deepsleep(self): # sleep all LEDs self.panel.set_device_led(0, 0) self.panel.set_device_led(1, 0) self.panel.set_device_led(2, 0) self.panel.display_backlight_off() self.panel.keypad_backlight_off() def partial_draw_clock(self): now = datetime.datetime.now() Loading Loading @@ -179,9 +194,14 @@ class Kronk: self.selector = 2 self.draw_space_update_menu() # if we're in a menu, and the enter key is pressed, set that if char == "E" and self.panel_status != "in_menu": self.panel_status = "in_menu" self.draw_space_update_menu() if char == "E" and self.panel_status == "in_menu": # update the space status self.space_status = self.status_options[self.selector] self.save_persistent_state() print(f"STATUS CHANGED to {self.status_options[self.selector]}") # poke the last space status change self.last_space_status_change = time.time() Loading @@ -189,9 +209,7 @@ class Kronk: self.panel_status = "awake" # redraw panel self.full_draw() if char == "E" and self.panel_status != "in_menu": self.panel_status = "in_menu" self.draw_space_update_menu() if (self.panel_status == "in_menu" and self.menus[self.menu_index] == "DOORHOLD"): self.draw_space_update_menu() Loading @@ -202,24 +220,31 @@ class Kronk: if int(time.time()) - self.last_sensor_poll > 120: self.poll_sensors() # do not run a full draw every second if it's in a menu if self.panel_status == "in_menu": if self.panel_status == "in_menu" or self.panel_status == "asleep" or self.panel_status == "deepsleep": self.partial_draw_clock() else: self.full_draw(0) # sleep timer if self.panel_status != "asleep": if self.panel_status != "asleep" and self.panel_status != "deepsleep": print( "BACKLIGHT TIMEOUT COUNTER:" + str(int(time.time() - self.last_interaction_time)) ) if int(time.time()) - self.last_interaction_time > 14: if int(time.time()) - self.last_interaction_time > 15: self.panel.keypad_backlight_off() self.panel.display_backlight_off() self.full_draw() print("SLEEPING BACKLIGHT") self.panel_status = "asleep" await asyncio.sleep(1) # deepsleep to disable LEDs when space inactive to prevent burnout if self.space_status == "CLOSED" and int( time.time()) - self.last_interaction_time > 900 and self.panel_status != "deepsleep": print("ENTERING DEEPSLEEP") self.panel_status = "deepsleep" self.deepsleep() await asyncio.sleep(0.25) async def main(self): # start flask Loading Loading @@ -273,6 +298,7 @@ class Kronk: self.space_status = new_state self.last_space_status_change = time.time() self.clock_force_draw = 1 self.save_persistent_state() return Response("ok", mimetype="application/json") else: abort(400, message="Invalid state") Loading