Initial support for cleaning records

This commit is contained in:
Teemu Rytilahti 2024-06-02 19:17:00 +02:00
parent 74b59d7f98
commit b961c5e4f7
2 changed files with 145 additions and 0 deletions

View File

@ -30,6 +30,7 @@ from .temperaturesensor import TemperatureSensor
from .thermostat import Thermostat from .thermostat import Thermostat
from .time import Time from .time import Time
from .triggerlogs import TriggerLogs from .triggerlogs import TriggerLogs
from .vacuumrecords import VacuumRecords
from .waterleaksensor import WaterleakSensor from .waterleaksensor import WaterleakSensor
__all__ = [ __all__ = [
@ -63,5 +64,6 @@ __all__ = [
"TriggerLogs", "TriggerLogs",
"FrostProtection", "FrostProtection",
"Thermostat", "Thermostat",
"VacuumRecords",
"SmartLightEffect", "SmartLightEffect",
] ]

View File

@ -0,0 +1,143 @@
"""Implementation of vacuum records for experimental vacuum support."""
from __future__ import annotations
import logging
from datetime import datetime
from pydantic.v1 import BaseModel
from ...feature import Feature
from ..smartmodule import SmartModule
_LOGGER = logging.getLogger(__name__)
class LatestRecord(BaseModel):
"""Stats from last clean.
TODO: this is just a list-formatted Record, with only some fields being available.
"""
timestamp: datetime
clean_time: int
clean_area: int
error: int # most likely
class Record(BaseModel):
"""Historical cleanup result.
Example:
{
"error": 1,
"clean_time": 19,
"clean_area": 11,
"dust_collection": false,
"timestamp": 1705156162,
"start_type": 1,
"task_type": 0,
"record_index": 9
}
"""
#: Error code from cleaning
error: int
#: Total time cleaned (in minutes)
clean_time: int
#: Total area cleaned (in sqm?)
clean_area: int
dust_collection: bool
timestamp: datetime
start_type: int
task_type: int
record_index: int
class Records(BaseModel):
"""Response payload for getCleanRecords.
Example:
{"total_time": 185,
"total_area": 149,
"total_number": 10,
"record_list_num": 10,
"lastest_day_record": [
1705156162,
19,
11,
1
],
"record_list": [
<record>,
]
}
"""
total_time: int
total_area: int
total_number: int
record_list_num: int
record_list: list[Record]
# TODO: conversion from list to dict/basemodel input TBD
# latest_clean: LatestRecord = Field(alias="lastest_day_record"))
class VacuumRecords(SmartModule):
"""Implementation of vacuum records for experimental vacuum support."""
REQUIRED_COMPONENT = "consumables"
QUERY_GETTER_NAME = "getCleanRecords"
def _initialize_features(self):
"""Initialize features."""
self._add_feature(
Feature(
self._device,
"total_clean_area",
"Total area cleaned",
container=self,
attribute_getter="total_clean_area",
unit="sqm",
category=Feature.Category.Info,
type=Feature.Type.Sensor,
)
)
self._add_feature(
Feature(
self._device,
"total_clean_time",
"Total time cleaned",
container=self,
attribute_getter="total_clean_area",
category=Feature.Category.Info,
type=Feature.Type.Sensor,
)
)
self._add_feature(
Feature(
self._device,
"total_clean_count",
"Total clean count",
container=self,
attribute_getter="total_clean_count",
category=Feature.Category.Debug,
type=Feature.Type.Sensor,
)
)
@property
def total_clean_area(self) -> int:
"""Return total cleaning area."""
return self.data["total_area"]
@property
def total_clean_time(self) -> int:
"""Return total cleaning time."""
return self.data["total_time"]
@property
def total_clean_count(self) -> int:
"""Return total clean count."""
return self.data["total_number"]