hass-core/homeassistant/components/vesync/switch.py

101 lines
3.1 KiB
Python
Raw Normal View History

"""Support for Etekcity VeSync switches."""
import logging
from homeassistant.core import callback
from homeassistant.components.switch import SwitchDevice
from homeassistant.helpers.dispatcher import async_dispatcher_connect
from .const import VS_DISCOVERY, VS_DISPATCHERS, VS_SWITCHES, DOMAIN
from .common import VeSyncDevice
_LOGGER = logging.getLogger(__name__)
DEV_TYPE_TO_HA = {
'wifi-switch-1.3': 'outlet',
'ESW03-USA': 'outlet',
'ESW01-EU': 'outlet',
'ESW15-USA': 'outlet',
'ESWL01': 'switch',
'ESWL03': 'switch',
'ESO15-TB': 'outlet'
}
async def async_setup_entry(hass, config_entry, async_add_entities):
"""Set up switches."""
async def async_discover(devices):
"""Add new devices to platform."""
_async_setup_entities(devices, async_add_entities)
disp = async_dispatcher_connect(
hass, VS_DISCOVERY.format(VS_SWITCHES), async_discover)
hass.data[DOMAIN][VS_DISPATCHERS].append(disp)
_async_setup_entities(
hass.data[DOMAIN][VS_SWITCHES],
async_add_entities
)
return True
@callback
def _async_setup_entities(devices, async_add_entities):
"""Check if device is online and add entity."""
dev_list = []
for dev in devices:
if DEV_TYPE_TO_HA.get(dev.device_type) == 'outlet':
dev_list.append(VeSyncSwitchHA(dev))
elif DEV_TYPE_TO_HA.get(dev.device_type) == 'switch':
dev_list.append(VeSyncLightSwitch(dev))
else:
_LOGGER.warning("%s - Unkown device type - %s",
dev.device_name, dev.device_type)
continue
async_add_entities(
dev_list,
update_before_add=True
)
class VeSyncSwitchHA(VeSyncDevice, SwitchDevice):
"""Representation of a VeSync switch."""
def __init__(self, plug):
"""Initialize the VeSync switch device."""
super().__init__(plug)
self.smartplug = plug
@property
def device_state_attributes(self):
"""Return the state attributes of the device."""
attr = {}
if hasattr(self.smartplug, 'weekly_energy_total'):
attr['voltage'] = self.smartplug.voltage
attr['weekly_energy_total'] = self.smartplug.weekly_energy_total
attr['monthly_energy_total'] = self.smartplug.monthly_energy_total
attr['yearly_energy_total'] = self.smartplug.yearly_energy_total
return attr
@property
def current_power_w(self):
"""Return the current power usage in W."""
return self.smartplug.power
@property
def today_energy_kwh(self):
"""Return the today total energy usage in kWh."""
return self.smartplug.energy_today
def update(self):
"""Update outlet details and energy usage."""
self.smartplug.update()
self.smartplug.update_energy()
class VeSyncLightSwitch(VeSyncDevice, SwitchDevice):
"""Handle representation of VeSync Light Switch."""
def __init__(self, switch):
"""Initialize Light Switch device class."""
super().__init__(switch)
self.switch = switch