Commit 1fd144f1 authored by Alyx's avatar Alyx
Browse files

added deep sleep, fixed persistent state and increased tick rate to 0.25

parent cefe781c
Loading
Loading
Loading
Loading
+52 −26
Original line number Diff line number Diff line
@@ -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}))
@@ -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
@@ -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":
@@ -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()
@@ -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()
@@ -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()

@@ -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
@@ -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")