mirror of
https://github.com/home-assistant/core.git
synced 2025-07-18 18:57:06 +00:00
Support SmartStrip type devices (HS300, HS107) in tplink component (#26220)
* Add support for SmartStrip type devices (HS300, HS107) to tplink component * Incorporate feedback from @MartinHjelmare using changes suggested by @shbatm - Setting `_state` now uses a list comprehension - `_alias` will use aliases from the Kasa app - `_device_id` will be set to `_mac` for single plugs to retain backwards compatibility
This commit is contained in:
parent
09d8a4204a
commit
ab22c61764
@ -14,6 +14,7 @@ from .common import (
|
|||||||
CONF_DISCOVERY,
|
CONF_DISCOVERY,
|
||||||
CONF_LIGHT,
|
CONF_LIGHT,
|
||||||
CONF_SWITCH,
|
CONF_SWITCH,
|
||||||
|
CONF_STRIP,
|
||||||
SmartDevices,
|
SmartDevices,
|
||||||
async_discover_devices,
|
async_discover_devices,
|
||||||
get_static_devices,
|
get_static_devices,
|
||||||
@ -36,6 +37,9 @@ CONFIG_SCHEMA = vol.Schema(
|
|||||||
vol.Optional(CONF_SWITCH, default=[]): vol.All(
|
vol.Optional(CONF_SWITCH, default=[]): vol.All(
|
||||||
cv.ensure_list, [TPLINK_HOST_SCHEMA]
|
cv.ensure_list, [TPLINK_HOST_SCHEMA]
|
||||||
),
|
),
|
||||||
|
vol.Optional(CONF_STRIP, default=[]): vol.All(
|
||||||
|
cv.ensure_list, [TPLINK_HOST_SCHEMA]
|
||||||
|
),
|
||||||
vol.Optional(CONF_DIMMER, default=[]): vol.All(
|
vol.Optional(CONF_DIMMER, default=[]): vol.All(
|
||||||
cv.ensure_list, [TPLINK_HOST_SCHEMA]
|
cv.ensure_list, [TPLINK_HOST_SCHEMA]
|
||||||
),
|
),
|
||||||
|
@ -4,7 +4,14 @@ from datetime import timedelta
|
|||||||
import logging
|
import logging
|
||||||
from typing import Any, Callable, List
|
from typing import Any, Callable, List
|
||||||
|
|
||||||
from pyHS100 import Discover, SmartBulb, SmartDevice, SmartDeviceException, SmartPlug
|
from pyHS100 import (
|
||||||
|
Discover,
|
||||||
|
SmartBulb,
|
||||||
|
SmartDevice,
|
||||||
|
SmartDeviceException,
|
||||||
|
SmartPlug,
|
||||||
|
SmartStrip,
|
||||||
|
)
|
||||||
|
|
||||||
from homeassistant.helpers.typing import HomeAssistantType
|
from homeassistant.helpers.typing import HomeAssistantType
|
||||||
|
|
||||||
@ -15,6 +22,7 @@ ATTR_CONFIG = "config"
|
|||||||
CONF_DIMMER = "dimmer"
|
CONF_DIMMER = "dimmer"
|
||||||
CONF_DISCOVERY = "discovery"
|
CONF_DISCOVERY = "discovery"
|
||||||
CONF_LIGHT = "light"
|
CONF_LIGHT = "light"
|
||||||
|
CONF_STRIP = "strip"
|
||||||
CONF_SWITCH = "switch"
|
CONF_SWITCH = "switch"
|
||||||
|
|
||||||
|
|
||||||
@ -74,7 +82,10 @@ async def async_discover_devices(
|
|||||||
if existing_devices.has_device_with_host(dev.host):
|
if existing_devices.has_device_with_host(dev.host):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if isinstance(dev, SmartPlug):
|
if isinstance(dev, SmartStrip):
|
||||||
|
for plug in dev.plugs.values():
|
||||||
|
switches.append(plug)
|
||||||
|
elif isinstance(dev, SmartPlug):
|
||||||
try:
|
try:
|
||||||
if dev.is_dimmable: # Dimmers act as lights
|
if dev.is_dimmable: # Dimmers act as lights
|
||||||
lights.append(dev)
|
lights.append(dev)
|
||||||
@ -99,7 +110,7 @@ def get_static_devices(config_data) -> SmartDevices:
|
|||||||
lights = []
|
lights = []
|
||||||
switches = []
|
switches = []
|
||||||
|
|
||||||
for type_ in [CONF_LIGHT, CONF_SWITCH, CONF_DIMMER]:
|
for type_ in [CONF_LIGHT, CONF_SWITCH, CONF_STRIP, CONF_DIMMER]:
|
||||||
for entry in config_data[type_]:
|
for entry in config_data[type_]:
|
||||||
host = entry["host"]
|
host = entry["host"]
|
||||||
|
|
||||||
@ -107,6 +118,9 @@ def get_static_devices(config_data) -> SmartDevices:
|
|||||||
lights.append(SmartBulb(host))
|
lights.append(SmartBulb(host))
|
||||||
elif type_ == CONF_SWITCH:
|
elif type_ == CONF_SWITCH:
|
||||||
switches.append(SmartPlug(host))
|
switches.append(SmartPlug(host))
|
||||||
|
elif type_ == CONF_STRIP:
|
||||||
|
for plug in SmartStrip(host).plugs.values():
|
||||||
|
switches.append(plug)
|
||||||
# Dimmers need to be defined as smart plugs to work correctly.
|
# Dimmers need to be defined as smart plugs to work correctly.
|
||||||
elif type_ == CONF_DIMMER:
|
elif type_ == CONF_DIMMER:
|
||||||
lights.append(SmartPlug(host))
|
lights.append(SmartPlug(host))
|
||||||
|
@ -69,11 +69,12 @@ class SmartPlugSwitch(SwitchDevice):
|
|||||||
self._mac = None
|
self._mac = None
|
||||||
self._alias = None
|
self._alias = None
|
||||||
self._model = None
|
self._model = None
|
||||||
|
self._device_id = None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def unique_id(self):
|
def unique_id(self):
|
||||||
"""Return a unique ID."""
|
"""Return a unique ID."""
|
||||||
return self._mac
|
return self._device_id
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def name(self):
|
def name(self):
|
||||||
@ -120,10 +121,26 @@ class SmartPlugSwitch(SwitchDevice):
|
|||||||
if not self._sysinfo:
|
if not self._sysinfo:
|
||||||
self._sysinfo = self.smartplug.sys_info
|
self._sysinfo = self.smartplug.sys_info
|
||||||
self._mac = self.smartplug.mac
|
self._mac = self.smartplug.mac
|
||||||
self._alias = self.smartplug.alias
|
|
||||||
self._model = self.smartplug.model
|
self._model = self.smartplug.model
|
||||||
|
if self.smartplug.context is None:
|
||||||
|
self._alias = self.smartplug.alias
|
||||||
|
self._device_id = self._mac
|
||||||
|
else:
|
||||||
|
self._alias = [
|
||||||
|
child
|
||||||
|
for child in self.smartplug.sys_info["children"]
|
||||||
|
if child["id"] == self.smartplug.context
|
||||||
|
][0]["alias"]
|
||||||
|
self._device_id = self.smartplug.context
|
||||||
|
|
||||||
self._state = self.smartplug.state == self.smartplug.SWITCH_STATE_ON
|
if self.smartplug.context is None:
|
||||||
|
self._state = self.smartplug.state == self.smartplug.SWITCH_STATE_ON
|
||||||
|
else:
|
||||||
|
self._state = [
|
||||||
|
child
|
||||||
|
for child in self.smartplug.sys_info["children"]
|
||||||
|
if child["id"] == self.smartplug.context
|
||||||
|
][0]["state"] == 1
|
||||||
|
|
||||||
if self.smartplug.has_emeter:
|
if self.smartplug.has_emeter:
|
||||||
emeter_readings = self.smartplug.get_emeter_realtime()
|
emeter_readings = self.smartplug.get_emeter_realtime()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user