mirror of
https://github.com/fmtr/haco.git
synced 2026-10-25 18:40:15 -04:00
Refine logging
This commit is contained in:
parent
74f967f7f9
commit
ca3d794587
7 changed files with 30 additions and 21 deletions
|
|
@ -3,15 +3,15 @@ import asyncio
|
|||
|
||||
from fmtr.tools import mqtt, Constants
|
||||
from haco import constants
|
||||
from haco.constants import SUBSCRIBE
|
||||
from haco.obs import logger
|
||||
from haco.utils import get_prefix
|
||||
|
||||
|
||||
class ClientHaco(mqtt.Client):
|
||||
ONLINE = 'online'
|
||||
OFFLINE = 'offline'
|
||||
|
||||
aiomqtt.Client
|
||||
|
||||
def __init__(self, *args, device=None, will=None, identifier=None, **kwargs):
|
||||
self.will = will or mqtt.Will(topic=str(constants.TOPIC_AVAIL), payload=self.OFFLINE, retain=True, qos=1, )
|
||||
identifier = identifier or constants.CLIENT_ID
|
||||
|
|
@ -24,10 +24,9 @@ class ClientHaco(mqtt.Client):
|
|||
return constants.TOPIC_CLIENT
|
||||
|
||||
async def handle(self):
|
||||
"""Listen for command messages from HA."""
|
||||
|
||||
for topic_sub in self.device.subscriptions.keys():
|
||||
logger.info(f"Subscribing to {topic_sub}")
|
||||
logger.info(f"{get_prefix(SUBSCRIBE)}: {topic_sub}")
|
||||
await self.subscribe(topic_sub)
|
||||
|
||||
async for message in self.messages:
|
||||
|
|
|
|||
|
|
@ -13,3 +13,6 @@ TOPIC_ROOT = Path(paths.name) / env.CHANNEL
|
|||
TOPIC_CLIENT = TOPIC_ROOT / CLIENT_ID
|
||||
TOPIC_AVAIL = TOPIC_CLIENT / STATUS
|
||||
PREFIX_MDI = "mdi:"
|
||||
|
||||
ANNOUNCE = 'announce'
|
||||
SUBSCRIBE = 'subscribe'
|
||||
|
|
|
|||
|
|
@ -3,12 +3,13 @@ from __future__ import annotations
|
|||
from dataclasses import dataclass, field
|
||||
from typing import TYPE_CHECKING, TypeVar, Generic, Type, ClassVar
|
||||
|
||||
from fmtr.tools import Constants
|
||||
from fmtr.tools.json_tools import to_json
|
||||
from haco.base import Base
|
||||
from haco.capabilities import Capability
|
||||
from haco.constants import PREFIX_MDI
|
||||
from haco.constants import PREFIX_MDI, ANNOUNCE
|
||||
from haco.obs import logger
|
||||
from haco.utils import sanitize_name, Converters, ConvertersBool
|
||||
from haco.utils import sanitize_name, Converters, ConvertersBool, get_prefix
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from haco.device import Device
|
||||
|
|
@ -27,7 +28,6 @@ class Control(Base, Generic[DeviceT]):
|
|||
unique_id: str | None = field(default=None, init=False)
|
||||
availability_topic: str | None = field(default=None, init=False)
|
||||
|
||||
# announce: dict | None = field(default=None, metadata=dict(exclude=True))
|
||||
subscriptions: dict | None = field(default=None, metadata=dict(exclude=True), init=False)
|
||||
|
||||
def __post_init__(self):
|
||||
|
|
@ -49,9 +49,6 @@ class Control(Base, Generic[DeviceT]):
|
|||
self.unique_id = self.get_unique_id()
|
||||
self.availability_topic = self.get_availability_topic()
|
||||
self.subscriptions = self.get_subscriptions()
|
||||
#self.announce = self.get_announce()
|
||||
|
||||
|
||||
|
||||
@property
|
||||
def parent(self):
|
||||
|
|
@ -111,8 +108,11 @@ class Control(Base, Generic[DeviceT]):
|
|||
|
||||
"""
|
||||
topic = self.announce_topic
|
||||
data_json = to_json(self.get_announce())
|
||||
logger.info(f'Announcing {topic} with {data_json}')
|
||||
data = self.get_announce()
|
||||
data_json = to_json(data)
|
||||
|
||||
logger.info(f'{get_prefix(ANNOUNCE)}: {data} {Constants.ARROW_RIGHT} {topic}')
|
||||
|
||||
await self.device.client.publish(topic, data_json, retain=True)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -34,11 +34,8 @@ class Device(Base):
|
|||
|
||||
for control in self.controls:
|
||||
control.set_parent(self)
|
||||
#self.announce = self.get_announce()
|
||||
self.subscriptions = self.get_subscriptions()
|
||||
|
||||
self
|
||||
|
||||
@cached_property
|
||||
def topic(self):
|
||||
return self.client.topic / self.name_san
|
||||
|
|
|
|||
|
|
@ -4,8 +4,9 @@ from dataclasses import dataclass, field
|
|||
from functools import cached_property
|
||||
from typing import ClassVar, TYPE_CHECKING, Callable
|
||||
|
||||
from fmtr.tools import aio
|
||||
from fmtr.tools import aio, Constants
|
||||
from haco.obs import logger
|
||||
from haco.utils import get_prefix
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from capabilities import Capability
|
||||
|
|
@ -107,6 +108,9 @@ class AnnounceTopicState(AnnounceTopic):
|
|||
|
||||
value_raw = self.capability.converters.state(value)
|
||||
await self.capability.control.device.client.publish(self.topic, value_raw)
|
||||
|
||||
logger.info(f'{get_prefix(self.IO)}: {self.topic} {Constants.ARROW_RIGHT} {value_raw}')
|
||||
|
||||
return value_raw
|
||||
|
||||
@dataclass(kw_only=True)
|
||||
|
|
@ -119,14 +123,17 @@ class AnnounceTopicCommand(AnnounceTopic):
|
|||
|
||||
async def handle(self, message):
|
||||
|
||||
value = message.payload.decode('utf-8')
|
||||
value = self.capability.converters.command(value)
|
||||
|
||||
logger.info(f'{get_prefix(self.IO)}: {value} {Constants.ARROW_LEFT} {self.topic}')
|
||||
|
||||
|
||||
if not self.control_method:
|
||||
logger.error(f'Incomplete base class: {self.callback_class_method_name}')
|
||||
return
|
||||
|
||||
is_async = aio.is_async(self.control_method)
|
||||
value = message.payload.decode('utf-8')
|
||||
value = self.capability.converters.command(value)
|
||||
|
||||
try:
|
||||
|
||||
if is_async:
|
||||
|
|
@ -138,7 +145,6 @@ class AnnounceTopicCommand(AnnounceTopic):
|
|||
logger.warning(f'Subclass has not implemented method: {self.callback_class_method_name} {self.topic} {value}')
|
||||
return
|
||||
|
||||
# Echo back as new state
|
||||
topic_state = self.state
|
||||
if topic_state:
|
||||
await topic_state.handle(value_raw)
|
||||
|
|
|
|||
|
|
@ -57,3 +57,7 @@ class ConvertersNumeric(Converters):
|
|||
@dataclass
|
||||
class Metadata:
|
||||
exclude: bool = False
|
||||
|
||||
|
||||
def get_prefix(io: str) -> str:
|
||||
return io[:2].upper()
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
0.1.4
|
||||
0.1.5
|
||||
Loading…
Add table
Add a link
Reference in a new issue