TV sleep timer app
This commit is contained in:
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user