TV sleep timer app

This commit is contained in:
John Lancaster
2024-10-14 00:32:46 +00:00
parent 3781a36be6
commit ea5a9542e1
2 changed files with 39 additions and 2 deletions

View File

@@ -1,14 +1,44 @@
from datetime import datetime, timedelta
import json
from appdaemon.entity import Entity
from appdaemon.plugins.hass.hassapi import Hass
from appdaemon.plugins.mqtt.mqttapi import Mqtt
from appdaemon.adbase import ADBase
class SleepTV(ADBase):
handle: str = None
def initialize(self):
self.adapi = self.get_ad_api()
self.adapi.set_log_level('DEBUG')
self.sleep_time.listen_state(self.handle_sleep_time_change)
@property
def sleep_time(self) -> Entity:
return self.adapi.get_entity(self.args['sleep_time'])
@property
def tv(self) -> Entity:
return self.adapi.get_entity(self.args['tv'])
def handle_sleep_time_change(self, entity: str, attribute: str, old: str, new: str, **kwargs):
now = self.adapi.get_now()
dt = datetime.strptime(new, '%H:%M:%S')
dt = datetime.combine(now.date(), dt.time())
if dt.time() < now.time():
dt += timedelta(days=1)
self.adapi.cancel_timer(self.handle, silent=True)
self.handle = self.adapi.run_at(lambda **kwargs: self.tv.turn_off(), dt)
class SleepSetter(Hass, Mqtt):
def initialize(self):
assert self.entity_exists(entity_id=self.variable), f'{self.variable} does not exist'
self.listen_state(callback=self.handle_state, entity_id=self.variable)
self.variable_entity.listen_state(self.handle_state)
self.setup_buttons()
def setup_buttons(self):
@@ -20,7 +50,7 @@ class SleepSetter(Hass, Mqtt):
def setup_button(self, name: str):
topic = f'zigbee2mqtt/{name}'
self.mqtt_subscribe(topic, namespace='mqtt')
# self.mqtt_subscribe(topic, namespace='mqtt')
self.listen_event(
self.handle_button,
'MQTT_MESSAGE',