From e21eca4f42150d331c1e620c4b63c143a4e46909 Mon Sep 17 00:00:00 2001 From: John Lancaster <32917998+jsl12@users.noreply.github.com> Date: Tue, 2 Dec 2025 22:08:15 -0600 Subject: [PATCH] started gone app --- apps/apps.yaml | 8 ++++++++ apps/gone.py | 27 +++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 apps/gone.py diff --git a/apps/apps.yaml b/apps/apps.yaml index 98ce4cc..6724d55 100644 --- a/apps/apps.yaml +++ b/apps/apps.yaml @@ -1,3 +1,11 @@ hello-world: module: hello class: HelloWorld + +gone: + module: gone + class: Gone + entities: + - light.bar + - light.h6076 + - light.h6076_2 diff --git a/apps/gone.py b/apps/gone.py new file mode 100644 index 0000000..a1e9eea --- /dev/null +++ b/apps/gone.py @@ -0,0 +1,27 @@ +from typing import Any + +from appdaemon.plugins.hass import Hass + + +class Gone(Hass): + def initialize(self): + people = self.get_state('person') + # self.log(json.dumps(people, indent=2)) + + self.log(list(people.keys())) + for person in self.get_state('person'): + self.listen_state(self.handle_state, entity_id=person, new='not_home') + + self.log(f'No one home: {self.no_one_home()}') + + def no_one_home(self) -> bool: + return all(state.get('state') != 'home' for state in self.get_state('person', copy=False).values()) + + def handle_state(self, entity: str, attribute: str, old: Any, new: Any, **kwargs: Any) -> None: + if self.no_one_home(): + for ent in self.args['entities']: + try: + self.turn_off(ent) + except Exception: + self.log(f'Failed to turn off {ent}', level='ERROR') + continue