Fix and optimize digitalloggers platform (#9203)

* Fix and optimize digitalloggers platform

* Fix line length

* Fix hanging indentation

* Add missing docstring

* Add period to end of docstring

* Add second blank line
This commit is contained in:
Dale Higgs 2017-08-29 08:38:42 -05:00 committed by Pascal Vizeli
parent 5d800c1d51
commit 38071501b4

View File

@ -46,7 +46,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
import dlipower import dlipower
host = config.get(CONF_HOST) host = config.get(CONF_HOST)
controllername = config.get(CONF_NAME) controller_name = config.get(CONF_NAME)
user = config.get(CONF_USERNAME) user = config.get(CONF_USERNAME)
pswd = config.get(CONF_PASSWORD) pswd = config.get(CONF_PASSWORD)
tout = config.get(CONF_TIMEOUT) tout = config.get(CONF_TIMEOUT)
@ -61,37 +61,42 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
_LOGGER.error("Could not connect to DIN III Relay") _LOGGER.error("Could not connect to DIN III Relay")
return False return False
devices = [] outlets = []
parent_device = DINRelayDevice(power_switch) parent_device = DINRelayDevice(power_switch)
devices.extend( outlets.extend(
DINRelay(controllername, device.outlet_number, parent_device) DINRelay(controller_name, parent_device, outlet)
for device in power_switch for outlet in power_switch[0:]
) )
add_devices(devices, True) add_devices(outlets)
class DINRelay(SwitchDevice): class DINRelay(SwitchDevice):
"""Representation of a individual DIN III relay port.""" """Representation of a individual DIN III relay port."""
def __init__(self, name, outletnumber, parent_device): def __init__(self, controller_name, parent_device, outlet):
"""Initialize the DIN III Relay switch.""" """Initialize the DIN III Relay switch."""
self._controller_name = controller_name
self._parent_device = parent_device self._parent_device = parent_device
self.controllername = name self._outlet = outlet
self.outletnumber = outletnumber
self._outletname = '' self._outlet_number = self._outlet.outlet_number
self._is_on = False self._name = self._outlet.description
self._state = self._outlet.state == 'ON'
@property @property
def name(self): def name(self):
"""Return the display name of this relay.""" """Return the display name of this relay."""
return self._outletname return '{}_{}'.format(
self._controller_name,
self._name
)
@property @property
def is_on(self): def is_on(self):
"""Return true if relay is on.""" """Return true if relay is on."""
return self._is_on return self._state
@property @property
def should_poll(self): def should_poll(self):
@ -100,41 +105,36 @@ class DINRelay(SwitchDevice):
def turn_on(self, **kwargs): def turn_on(self, **kwargs):
"""Instruct the relay to turn on.""" """Instruct the relay to turn on."""
self._parent_device.turn_on(outlet=self.outletnumber) self._outlet.on()
def turn_off(self, **kwargs): def turn_off(self, **kwargs):
"""Instruct the relay to turn off.""" """Instruct the relay to turn off."""
self._parent_device.turn_off(outlet=self.outletnumber) self._outlet.off()
def update(self): def update(self):
"""Trigger update for all switches on the parent device.""" """Trigger update for all switches on the parent device."""
self._parent_device.update() self._parent_device.update()
self._is_on = (
self._parent_device.statuslocal[self.outletnumber - 1][2] == 'ON' outlet_status = self._parent_device.get_outlet_status(
) self._outlet_number)
self._outletname = '{}_{}'.format(
self.controllername, self._name = outlet_status[1]
self._parent_device.statuslocal[self.outletnumber - 1][1] self._state = outlet_status[2] == 'ON'
)
class DINRelayDevice(object): class DINRelayDevice(object):
"""Device representation for per device throttling.""" """Device representation for per device throttling."""
def __init__(self, device): def __init__(self, power_switch):
"""Initialize the DINRelay device.""" """Initialize the DINRelay device."""
self._device = device self._power_switch = power_switch
self.statuslocal = None self._statuslist = None
def turn_on(self, **kwargs): def get_outlet_status(self, outlet_number):
"""Instruct the relay to turn on.""" """Get status of outlet from cached status list."""
self._device.on(**kwargs) return self._statuslist[outlet_number - 1]
def turn_off(self, **kwargs):
"""Instruct the relay to turn off."""
self._device.off(**kwargs)
@Throttle(MIN_TIME_BETWEEN_UPDATES) @Throttle(MIN_TIME_BETWEEN_UPDATES)
def update(self): def update(self):
"""Fetch new state data for this device.""" """Fetch new state data for this device."""
self.statuslocal = self._device.statuslist() self._statuslist = self._power_switch.statuslist()