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