mirror of
https://github.com/python-kasa/python-kasa.git
synced 2024-12-22 19:23:34 +00:00
Initial trigger logs implementation (#900)
Co-authored-by: Steven B. <51370195+sdb9696@users.noreply.github.com>
This commit is contained in:
parent
8969b54b87
commit
70c96b5a5d
@ -193,3 +193,13 @@ async def update_credentials(dev, username, password):
|
|||||||
click.confirm("Do you really want to replace the existing credentials?", abort=True)
|
click.confirm("Do you really want to replace the existing credentials?", abort=True)
|
||||||
|
|
||||||
return await dev.update_credentials(username, password)
|
return await dev.update_credentials(username, password)
|
||||||
|
|
||||||
|
|
||||||
|
@device.command(name="logs")
|
||||||
|
@pass_dev_or_child
|
||||||
|
async def child_logs(dev):
|
||||||
|
"""Print child device trigger logs."""
|
||||||
|
if logs := dev.modules.get(Module.TriggerLogs):
|
||||||
|
await dev.update(update_children=True)
|
||||||
|
for entry in logs.logs:
|
||||||
|
print(entry)
|
||||||
|
@ -127,6 +127,7 @@ class Module(ABC):
|
|||||||
WaterleakSensor: Final[ModuleName[smart.WaterleakSensor]] = ModuleName(
|
WaterleakSensor: Final[ModuleName[smart.WaterleakSensor]] = ModuleName(
|
||||||
"WaterleakSensor"
|
"WaterleakSensor"
|
||||||
)
|
)
|
||||||
|
TriggerLogs: Final[ModuleName[smart.TriggerLogs]] = ModuleName("TriggerLogs")
|
||||||
|
|
||||||
# SMARTCAMERA only modules
|
# SMARTCAMERA only modules
|
||||||
Camera: Final[ModuleName[experimental.Camera]] = ModuleName("Camera")
|
Camera: Final[ModuleName[experimental.Camera]] = ModuleName("Camera")
|
||||||
|
@ -27,6 +27,7 @@ from .reportmode import ReportMode
|
|||||||
from .temperaturecontrol import TemperatureControl
|
from .temperaturecontrol import TemperatureControl
|
||||||
from .temperaturesensor import TemperatureSensor
|
from .temperaturesensor import TemperatureSensor
|
||||||
from .time import Time
|
from .time import Time
|
||||||
|
from .triggerlogs import TriggerLogs
|
||||||
from .waterleaksensor import WaterleakSensor
|
from .waterleaksensor import WaterleakSensor
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
@ -56,6 +57,7 @@ __all__ = [
|
|||||||
"WaterleakSensor",
|
"WaterleakSensor",
|
||||||
"ContactSensor",
|
"ContactSensor",
|
||||||
"MotionSensor",
|
"MotionSensor",
|
||||||
|
"TriggerLogs",
|
||||||
"FrostProtection",
|
"FrostProtection",
|
||||||
"SmartLightEffect",
|
"SmartLightEffect",
|
||||||
]
|
]
|
||||||
|
34
kasa/smart/modules/triggerlogs.py
Normal file
34
kasa/smart/modules/triggerlogs.py
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
"""Implementation of trigger logs module."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from pydantic.v1 import BaseModel, Field, parse_obj_as
|
||||||
|
|
||||||
|
from ..smartmodule import SmartModule
|
||||||
|
|
||||||
|
|
||||||
|
class LogEntry(BaseModel):
|
||||||
|
"""Presentation of a single log entry."""
|
||||||
|
|
||||||
|
id: int
|
||||||
|
event_id: str = Field(alias="eventId")
|
||||||
|
timestamp: datetime
|
||||||
|
event: str
|
||||||
|
|
||||||
|
|
||||||
|
class TriggerLogs(SmartModule):
|
||||||
|
"""Implementation of trigger logs."""
|
||||||
|
|
||||||
|
REQUIRED_COMPONENT = "trigger_log"
|
||||||
|
MINIMUM_UPDATE_INTERVAL_SECS = 60 * 60
|
||||||
|
|
||||||
|
def query(self) -> dict:
|
||||||
|
"""Query to execute during the update cycle."""
|
||||||
|
return {"get_trigger_logs": {"start_id": 0}}
|
||||||
|
|
||||||
|
@property
|
||||||
|
def logs(self) -> list[LogEntry]:
|
||||||
|
"""Return logs."""
|
||||||
|
return parse_obj_as(list[LogEntry], self.data["logs"])
|
Loading…
Reference in New Issue
Block a user