File: outlet.py

package info (click to toggle)
python-aiounifi 79-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 660 kB
  • sloc: python: 11,124; sh: 5; makefile: 5
file content (82 lines) | stat: -rw-r--r-- 2,077 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
"""Device outlet implementation."""

from .api import ApiItem
from .device import TypedDeviceOutletTable


class Outlet(ApiItem):
    """Represents an outlet."""

    raw: TypedDeviceOutletTable

    @property
    def name(self) -> str:
        """Name of outlet."""
        return self.raw["name"]

    @property
    def index(self) -> int:
        """Outlet index."""
        return self.raw["index"]

    @property
    def has_relay(self) -> bool | None:
        """Is the outlet controllable.

        Not reported by USP-PDU-Pro, see caps.
        """
        return self.raw.get("has_relay")

    @property
    def relay_state(self) -> bool:
        """Is outlet power on."""
        return self.raw["relay_state"]

    @property
    def cycle_enabled(self) -> bool | None:
        """Modem Power Cycle."""
        return self.raw.get("cycle_enabled")

    # Metering capabilities of outlet

    @property
    def has_metering(self) -> bool | None:
        """Is metering supported.

        Reported false by UP1 and UP6 which does not have power metering.
        Not reported by by USP-PDU-Pro, see caps.
        """
        return self.raw.get("has_metering")

    @property
    def caps(self) -> int | None:
        """Outlet capabilities.

        1: Outlet supports relay (switching)
        3: Outlet supports relay and metering
        """
        return self.raw.get("outlet_caps")

    @property
    def voltage(self) -> str | None:
        """Voltage draw of outlet."""
        return self.raw.get("outlet_voltage")

    @property
    def current(self) -> str | None:
        """Usage of outlet."""
        return self.raw.get("outlet_current")

    @property
    def power(self) -> str | None:
        """Power consumption of the outlet."""
        return self.raw.get("outlet_power")

    @property
    def power_factor(self) -> str | None:
        """Power factor."""
        return self.raw.get("outlet_power_factor")

    def __repr__(self) -> str:
        """Return the representation."""
        return f"<{self.name}: relay state {self.relay_state}>"