added critical notification example
This commit is contained in:
68
apps/examples/critical.py
Normal file
68
apps/examples/critical.py
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
from appdaemon import Hass
|
||||||
|
from appdaemon.entity import Entity
|
||||||
|
from appdaemon.plugins.hass.notifications import AndroidNotification
|
||||||
|
|
||||||
|
|
||||||
|
class CriticalAlert(Hass):
|
||||||
|
msg: str
|
||||||
|
alert_active: bool = False
|
||||||
|
alert_handle: str = None
|
||||||
|
context: str = None
|
||||||
|
|
||||||
|
def initialize(self):
|
||||||
|
self.set_log_level('DEBUG')
|
||||||
|
self.critical_sensor.listen_state(self.alert)
|
||||||
|
self.listen_notification_action(self.clear_alert, 'clear')
|
||||||
|
|
||||||
|
@property
|
||||||
|
def msg(self) -> str:
|
||||||
|
return self.args['msg']
|
||||||
|
|
||||||
|
@property
|
||||||
|
def critical_sensor(self) -> Entity:
|
||||||
|
return self.get_entity(self.args['sensor'])
|
||||||
|
|
||||||
|
@property
|
||||||
|
def critical_notification(self) -> AndroidNotification:
|
||||||
|
n = AndroidNotification(
|
||||||
|
device=self.args['device'],
|
||||||
|
message=self.msg,
|
||||||
|
tag=self.name,
|
||||||
|
)
|
||||||
|
n.critical = True
|
||||||
|
n.color = 'red'
|
||||||
|
n.icon = 'fire-alert'
|
||||||
|
n.add_action('clear', 'Clear Alert')
|
||||||
|
return n
|
||||||
|
|
||||||
|
async def alert(self,
|
||||||
|
entity: str,
|
||||||
|
attribute: str,
|
||||||
|
old: str, new: str,
|
||||||
|
**kwargs):
|
||||||
|
self.alert_active = new == 'on'
|
||||||
|
|
||||||
|
if self.alert_active:
|
||||||
|
self.alert_handle = await self.run_every(
|
||||||
|
self.repeat_alert,
|
||||||
|
start='now', interval=2.0
|
||||||
|
)
|
||||||
|
self.log(f'Alert Handle: {self.alert_handle}', level='DEBUG')
|
||||||
|
else:
|
||||||
|
if self.alert_handle:
|
||||||
|
self.clear_alert()
|
||||||
|
|
||||||
|
def repeat_alert(self, **kwargs):
|
||||||
|
if self.alert_active:
|
||||||
|
self.android_tts(
|
||||||
|
self.args['device'],
|
||||||
|
tts_text=self.msg,
|
||||||
|
critical=True
|
||||||
|
)
|
||||||
|
self.call_service(**self.critical_notification.to_service_call())
|
||||||
|
|
||||||
|
def clear_alert(self, event_name: str = None, data: dict = None, **cb_args: dict):
|
||||||
|
if self.alert_active:
|
||||||
|
self.alert_active = False
|
||||||
|
self.cancel_timer(self.alert_handle)
|
||||||
|
self.alert_handle = None
|
||||||
Reference in New Issue
Block a user