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 import json
from appdaemon.entity import Entity from appdaemon.entity import Entity
from appdaemon.plugins.hass.hassapi import Hass from appdaemon.plugins.hass.hassapi import Hass
from appdaemon.plugins.mqtt.mqttapi import Mqtt 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): class SleepSetter(Hass, Mqtt):
def initialize(self): def initialize(self):
assert self.entity_exists(entity_id=self.variable), f'{self.variable} does not exist' 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() self.setup_buttons()
def setup_buttons(self): def setup_buttons(self):
@@ -20,7 +50,7 @@ class SleepSetter(Hass, Mqtt):
def setup_button(self, name: str): def setup_button(self, name: str):
topic = f'zigbee2mqtt/{name}' topic = f'zigbee2mqtt/{name}'
self.mqtt_subscribe(topic, namespace='mqtt') # self.mqtt_subscribe(topic, namespace='mqtt')
self.listen_event( self.listen_event(
self.handle_button, self.handle_button,
'MQTT_MESSAGE', 'MQTT_MESSAGE',

View File

@@ -9,6 +9,7 @@ sleep:
- Bedroom Button 2 - Bedroom Button 2
- Living Room Button - Living Room Button
- Bathroom Button - Bathroom Button
off_apps: off_apps:
# - bedroom # - bedroom
- living_room - living_room
@@ -21,3 +22,9 @@ sleep:
on_apps: on_apps:
- living_room - living_room
- bedroom - bedroom
sleep_tv:
module: sleep
class: SleepTV
sleep_time: input_datetime.tv_sleep_time
tv: media_player.bedroom_vizio