formatting
This commit is contained in:
@@ -1,11 +1,14 @@
|
|||||||
import logging
|
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from typing import Literal, Optional
|
from logging import Logger
|
||||||
|
from typing import TYPE_CHECKING, Literal, Optional
|
||||||
|
|
||||||
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 pydantic import BaseModel, Field, TypeAdapter, field_validator
|
from pydantic import BaseModel, Field, TypeAdapter, field_validator
|
||||||
from room_control.console import setup_component_logging
|
from room_control import console
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from room_control import RoomController
|
||||||
|
|
||||||
|
|
||||||
class Side(int, Enum):
|
class Side(int, Enum):
|
||||||
@@ -62,19 +65,21 @@ Callbacks = dict[str, dict[str, CallbackEntry]]
|
|||||||
|
|
||||||
|
|
||||||
class AqaraCube(Hass, Mqtt):
|
class AqaraCube(Hass, Mqtt):
|
||||||
|
app: 'RoomController'
|
||||||
|
logger: Logger
|
||||||
|
|
||||||
def initialize(self):
|
def initialize(self):
|
||||||
setup_component_logging(self)
|
self.app: 'RoomController' = self.get_app(self.args['app'])
|
||||||
self.logger.setLevel(self.args.get('rich', logging.INFO))
|
self.logger = console.load_rich_config(self.app.name, type(self).__name__, level='DEBUG')
|
||||||
|
|
||||||
topic = f'zigbee2mqtt/{self.args["cube"]}'
|
topic = f'zigbee2mqtt/{self.args["cube"]}'
|
||||||
self.mqtt_subscribe(topic, namespace='mqtt')
|
self.mqtt_subscribe(topic, namespace='mqtt')
|
||||||
self.listen_event(self.handle_event, 'MQTT_MESSAGE', topic=topic, namespace='mqtt')
|
self.listen_event(self.handle_event, 'MQTT_MESSAGE', topic=topic, namespace='mqtt')
|
||||||
self.log(f'Listening for cube events on: [topic]{topic}[/]')
|
self.log(f'Listening for cube events on: [topic]{topic}[/]')
|
||||||
|
|
||||||
self.app = self.get_app(self.args['app'])
|
# self.log(f'Number of callbacks: {len(self.callbacks())}')
|
||||||
self.log(f'Connected to AD app: [room]{self.app.name}[/]')
|
# for handle, cb in self.callbacks().items():
|
||||||
|
# self.log(repr(cb))
|
||||||
self.log(self.callbacks())
|
|
||||||
|
|
||||||
def terminate(self):
|
def terminate(self):
|
||||||
self.log('[bold red]Terminating[/]', level='DEBUG')
|
self.log('[bold red]Terminating[/]', level='DEBUG')
|
||||||
|
|||||||
@@ -3,10 +3,16 @@ from appdaemon.plugins.hass.hassapi import Hass
|
|||||||
|
|
||||||
class SceneDetector(Hass):
|
class SceneDetector(Hass):
|
||||||
def initialize(self):
|
def initialize(self):
|
||||||
self.scene_entity = self.args['scene'] if self.args['scene'].startswith('scene.') else f'scene.{self.args["scene"]}'
|
self.scene_entity = (
|
||||||
|
self.args['scene']
|
||||||
|
if self.args['scene'].startswith('scene.')
|
||||||
|
else f'scene.{self.args["scene"]}'
|
||||||
|
)
|
||||||
self.scene_entity = self.get_entity(self.scene_entity)
|
self.scene_entity = self.get_entity(self.scene_entity)
|
||||||
|
|
||||||
self.listen_event(self.event_callback, event='call_service', domain='scene', service='turn_on')
|
self.listen_event(
|
||||||
|
self.event_callback, event='call_service', domain='scene', service='turn_on'
|
||||||
|
)
|
||||||
self.log(f'Waiting for {self.scene_entity.friendly_name} to activate')
|
self.log(f'Waiting for {self.scene_entity.friendly_name} to activate')
|
||||||
|
|
||||||
def event_callback(self, event_name, data, cb_args):
|
def event_callback(self, event_name, data, cb_args):
|
||||||
@@ -23,11 +29,11 @@ class MotionCanceller(SceneDetector):
|
|||||||
super().scene_detected()
|
super().scene_detected()
|
||||||
app = self.get_app(self.args['app'])
|
app = self.get_app(self.args['app'])
|
||||||
try:
|
try:
|
||||||
self.run_in(
|
self.run_in(callback=lambda *args, **kwargs: app.cancel_motion_callback(), delay=0.5)
|
||||||
callback=lambda *args, **kwargs: app.cancel_motion_callback(),
|
|
||||||
delay=0.5
|
|
||||||
)
|
|
||||||
except Exception:
|
except Exception:
|
||||||
self.log(f'Error cancelling motion callback for {self.args["app"]}', level='ERROR')
|
self.log(
|
||||||
|
f'Error cancelling motion callback for {self.args["app"]}',
|
||||||
|
level='ERROR',
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
self.log('Cancelled motion callback')
|
self.log('Cancelled motion callback')
|
||||||
|
|||||||
@@ -21,7 +21,13 @@ 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.handle_button, "MQTT_MESSAGE", topic=topic, namespace='mqtt', button=name)
|
self.listen_event(
|
||||||
|
self.handle_button,
|
||||||
|
'MQTT_MESSAGE',
|
||||||
|
topic=topic,
|
||||||
|
namespace='mqtt',
|
||||||
|
button=name,
|
||||||
|
)
|
||||||
self.log(f'Subscribed: {topic}')
|
self.log(f'Subscribed: {topic}')
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|||||||
@@ -7,9 +7,7 @@ from rich import print
|
|||||||
class Speakers(Hass):
|
class Speakers(Hass):
|
||||||
def initialize(self):
|
def initialize(self):
|
||||||
self.listen_state(
|
self.listen_state(
|
||||||
callback=self.set_volume,
|
callback=self.set_volume, entity_id='media_player.nest_minis', new='playing'
|
||||||
entity_id='media_player.nest_minis',
|
|
||||||
new='playing'
|
|
||||||
)
|
)
|
||||||
self.set_volume()
|
self.set_volume()
|
||||||
|
|
||||||
@@ -51,7 +49,7 @@ class Speakers(Hass):
|
|||||||
entity_id=[
|
entity_id=[
|
||||||
'media_player.kitchen_speaker',
|
'media_player.kitchen_speaker',
|
||||||
'media_player.desk_speaker',
|
'media_player.desk_speaker',
|
||||||
]
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
self.call_service(
|
self.call_service(
|
||||||
@@ -60,15 +58,13 @@ class Speakers(Hass):
|
|||||||
entity_id=[
|
entity_id=[
|
||||||
'media_player.bedroom_speaker',
|
'media_player.bedroom_speaker',
|
||||||
'media_player.bathroom_speaker',
|
'media_player.bathroom_speaker',
|
||||||
]
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
self.call_service(
|
self.call_service(
|
||||||
'media_player/volume_set',
|
'media_player/volume_set',
|
||||||
volume_level=0.0,
|
volume_level=0.0,
|
||||||
entity_id=[
|
entity_id=['media_player.patio_speaker'],
|
||||||
'media_player.patio_speaker'
|
|
||||||
]
|
|
||||||
)
|
)
|
||||||
|
|
||||||
elif self.get_now().time() < datetime.strptime('10:00', '%H:%M').time():
|
elif self.get_now().time() < datetime.strptime('10:00', '%H:%M').time():
|
||||||
@@ -79,7 +75,7 @@ class Speakers(Hass):
|
|||||||
entity_id=[
|
entity_id=[
|
||||||
'media_player.kitchen_speaker',
|
'media_player.kitchen_speaker',
|
||||||
'media_player.desk_speaker',
|
'media_player.desk_speaker',
|
||||||
]
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
self.call_service(
|
self.call_service(
|
||||||
@@ -88,15 +84,13 @@ class Speakers(Hass):
|
|||||||
entity_id=[
|
entity_id=[
|
||||||
'media_player.bedroom_speaker',
|
'media_player.bedroom_speaker',
|
||||||
'media_player.bathroom_speaker',
|
'media_player.bathroom_speaker',
|
||||||
]
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
self.call_service(
|
self.call_service(
|
||||||
'media_player/volume_set',
|
'media_player/volume_set',
|
||||||
volume_level=0.0,
|
volume_level=0.0,
|
||||||
entity_id=[
|
entity_id=['media_player.patio_speaker'],
|
||||||
'media_player.patio_speaker'
|
|
||||||
]
|
|
||||||
)
|
)
|
||||||
|
|
||||||
elif self.solar_elevation < 0:
|
elif self.solar_elevation < 0:
|
||||||
@@ -107,7 +101,7 @@ class Speakers(Hass):
|
|||||||
entity_id=[
|
entity_id=[
|
||||||
'media_player.kitchen_speaker',
|
'media_player.kitchen_speaker',
|
||||||
'media_player.desk_speaker',
|
'media_player.desk_speaker',
|
||||||
]
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
self.call_service(
|
self.call_service(
|
||||||
@@ -116,15 +110,13 @@ class Speakers(Hass):
|
|||||||
entity_id=[
|
entity_id=[
|
||||||
'media_player.bedroom_speaker',
|
'media_player.bedroom_speaker',
|
||||||
'media_player.bathroom_speaker',
|
'media_player.bathroom_speaker',
|
||||||
]
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
self.call_service(
|
self.call_service(
|
||||||
'media_player/volume_set',
|
'media_player/volume_set',
|
||||||
volume_level=0.0,
|
volume_level=0.0,
|
||||||
entity_id=[
|
entity_id=['media_player.patio_speaker'],
|
||||||
'media_player.patio_speaker'
|
|
||||||
]
|
|
||||||
)
|
)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@@ -135,7 +127,7 @@ class Speakers(Hass):
|
|||||||
entity_id=[
|
entity_id=[
|
||||||
'media_player.kitchen_speaker',
|
'media_player.kitchen_speaker',
|
||||||
'media_player.desk_speaker',
|
'media_player.desk_speaker',
|
||||||
]
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
self.call_service(
|
self.call_service(
|
||||||
@@ -144,13 +136,11 @@ class Speakers(Hass):
|
|||||||
entity_id=[
|
entity_id=[
|
||||||
'media_player.bedroom_speaker',
|
'media_player.bedroom_speaker',
|
||||||
'media_player.bathroom_speaker',
|
'media_player.bathroom_speaker',
|
||||||
]
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
self.call_service(
|
self.call_service(
|
||||||
'media_player/volume_set',
|
'media_player/volume_set',
|
||||||
volume_level=0.0,
|
volume_level=0.0,
|
||||||
entity_id=[
|
entity_id=['media_player.patio_speaker'],
|
||||||
'media_player.patio_speaker'
|
|
||||||
]
|
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user