File: system.py

package info (click to toggle)
python-aioairzone-cloud 0.6.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 396 kB
  • sloc: python: 3,600; makefile: 4
file content (95 lines) | stat: -rw-r--r-- 2,603 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
"""Airzone Cloud API System."""

from __future__ import annotations

from typing import TYPE_CHECKING, Any

from .common import parse_str
from .const import (
    API_MODE,
    API_SYSTEM_FW,
    API_SYSTEM_NUMBER,
    API_SYSTEM_TYPE,
    API_VALUE,
    AZD_FIRMWARE,
    AZD_MODEL,
    AZD_SYSTEM,
)
from .device import Device
from .entity import EntityUpdate

if TYPE_CHECKING:
    from .zone import Zone


class System(Device):
    """Airzone Cloud System device."""

    def __init__(self, inst_id: str, ws_id: str, device_data: dict[str, Any]):
        """Airzone Cloud System device init."""
        super().__init__(inst_id, ws_id, device_data)

        self.system_fw: str | None = None
        self.system_type: str | None = None
        self.zones: dict[str, Zone] = {}

        sub_data = self.sub_data(device_data)
        self.system_number = int(sub_data[API_SYSTEM_NUMBER])

        self.name = f"System {self.system_number}"

    def data(self) -> dict[str, Any]:
        """Return System device data."""
        data = super().data()

        data[AZD_SYSTEM] = self.get_system_num()

        system_fw = self.get_system_fw()
        if system_fw is not None:
            data[AZD_FIRMWARE] = system_fw

        system_type = self.get_system_type()
        if system_type is not None:
            data[AZD_MODEL] = system_type

        return data

    def add_zone(self, zone: Zone) -> None:
        """Add System zone."""
        zone_id = zone.get_id()
        if zone_id not in self.zones:
            self.zones[zone_id] = zone

    def get_system_fw(self) -> str | None:
        """Return System firmware."""
        return self.system_fw

    def get_system_num(self) -> int:
        """Return System number."""
        return self.system_number

    def get_system_type(self) -> str | None:
        """Return System type."""
        return self.system_type

    def set_param(self, param: str, data: dict[str, Any]) -> None:
        """Update System parameter from API request."""

        if param == API_MODE:
            self.set_mode(data[API_VALUE])
            for zone in self.zones.values():
                zone.set_mode(data[API_VALUE])

    def update_data(self, update: EntityUpdate) -> None:
        """Update System data."""
        super().update_data(update)

        data = update.get_data()

        system_fw = parse_str(data.get(API_SYSTEM_FW))
        if system_fw is not None:
            self.system_fw = system_fw

        system_type = parse_str(data.get(API_SYSTEM_TYPE))
        if system_type is not None:
            self.system_type = system_type