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}>"
|