1 """The ATEN PE switch component."""
3 from __future__
import annotations
8 from atenpdu
import AtenPE, AtenPEError
9 import voluptuous
as vol
12 PLATFORM_SCHEMA
as SWITCH_PLATFORM_SCHEMA,
24 _LOGGER = logging.getLogger(__name__)
26 CONF_AUTH_KEY =
"auth_key"
27 CONF_COMMUNITY =
"community"
28 CONF_PRIV_KEY =
"priv_key"
29 DEFAULT_COMMUNITY =
"private"
31 DEFAULT_USERNAME =
"administrator"
33 PLATFORM_SCHEMA = SWITCH_PLATFORM_SCHEMA.extend(
35 vol.Required(CONF_HOST): cv.string,
36 vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
37 vol.Optional(CONF_COMMUNITY, default=DEFAULT_COMMUNITY): cv.string,
38 vol.Optional(CONF_USERNAME, default=DEFAULT_USERNAME): cv.string,
39 vol.Optional(CONF_AUTH_KEY): cv.string,
40 vol.Optional(CONF_PRIV_KEY): cv.string,
48 async_add_entities: AddEntitiesCallback,
49 discovery_info: DiscoveryInfoType |
None =
None,
51 """Set up the ATEN PE switch."""
52 node = config[CONF_HOST]
53 serv = config[CONF_PORT]
58 community=config[CONF_COMMUNITY],
59 username=config[CONF_USERNAME],
60 authkey=config.get(CONF_AUTH_KEY),
61 privkey=config.get(CONF_PRIV_KEY),
65 await hass.async_add_executor_job(dev.initialize)
66 mac = await dev.deviceMAC()
67 outlets = dev.outlets()
68 name = await dev.deviceName()
69 model = await dev.modelName()
70 sw_version = await dev.deviceFWversion()
71 except AtenPEError
as exc:
72 _LOGGER.error(
"Failed to initialize %s:%s: %s", node, serv,
str(exc))
73 raise PlatformNotReady
from exc
76 connections={(CONNECTION_NETWORK_MAC, mac)},
80 sw_version=sw_version,
84 (
AtenSwitch(dev, info, mac, outlet.id, outlet.name)
for outlet
in outlets),
True
89 """Represents an ATEN PE switch."""
91 _attr_device_class = SwitchDeviceClass.OUTLET
94 self, device: AtenPE, info: DeviceInfo, mac: str, outlet: str, name: str
96 """Initialize an ATEN PE switch."""
104 """Turn the switch on."""
105 await self.
_device_device.setOutletStatus(self.
_outlet_outlet,
"on")
109 """Turn the switch off."""
110 await self.
_device_device.setOutletStatus(self.
_outlet_outlet,
"off")
114 """Process update from entity."""
115 status = await self.
_device_device.displayOutletStatus(self.
_outlet_outlet)
118 elif status ==
"off":
None __init__(self, AtenPE device, DeviceInfo info, str mac, str outlet, str name)
None async_turn_off(self, **Any kwargs)
None async_turn_on(self, **Any kwargs)
None async_setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback async_add_entities, DiscoveryInfoType|None discovery_info=None)