diff --git a/homeassistant/components/light/tellstick.py b/homeassistant/components/light/tellstick.py new file mode 100644 index 00000000000..c9eba19b992 --- /dev/null +++ b/homeassistant/components/light/tellstick.py @@ -0,0 +1,94 @@ +""" Support for Tellstick lights. """ +import logging +# pylint: disable=no-name-in-module, import-error +from homeassistant.components.light import ATTR_BRIGHTNESS +from homeassistant.const import ATTR_FRIENDLY_NAME +from homeassistant.helpers import ToggleDevice +import tellcore.constants as tellcore_constants + + +def setup_platform(hass, config, add_devices_callback, discovery_info=None): + """ Find and return tellstick lights. """ + + try: + import tellcore.telldus as telldus + except ImportError: + logging.getLogger(__name__).exception( + "Failed to import tellcore") + return [] + + core = telldus.TelldusCore() + switches_and_lights = core.devices() + lights = [] + + for switch in switches_and_lights: + if switch.methods(tellcore_constants.TELLSTICK_DIM): + lights.append(TellstickLight(switch)) + add_devices_callback(lights) + + +class TellstickLight(ToggleDevice): + """ Represents a tellstick light """ + last_sent_command_mask = (tellcore_constants.TELLSTICK_TURNON | + tellcore_constants.TELLSTICK_TURNOFF | + tellcore_constants.TELLSTICK_DIM | + tellcore_constants.TELLSTICK_UP | + tellcore_constants.TELLSTICK_DOWN) + + def __init__(self, tellstick): + self.tellstick = tellstick + self.state_attr = {ATTR_FRIENDLY_NAME: tellstick.name} + self.brightness = 0 + + @property + def name(self): + """ Returns the name of the switch if any. """ + return self.tellstick.name + + @property + def is_on(self): + """ True if switch is on. """ + return self.brightness > 0 + + def turn_off(self, **kwargs): + """ Turns the switch off. """ + self.tellstick.turn_off() + self.brightness = 0 + + def turn_on(self, **kwargs): + """ Turns the switch on. """ + brightness = kwargs.get(ATTR_BRIGHTNESS) + + if brightness is None: + self.brightness = 255 + else: + self.brightness = brightness + + self.tellstick.dim(self.brightness) + + @property + def state_attributes(self): + """ Returns optional state attributes. """ + attr = { + ATTR_FRIENDLY_NAME: self.name + } + + attr[ATTR_BRIGHTNESS] = int(self.brightness) + + return attr + + def update(self): + """ Update state of the light. """ + last_command = self.tellstick.last_sent_command( + self.last_sent_command_mask) + + if last_command == tellcore_constants.TELLSTICK_TURNON: + self.brightness = 255 + elif last_command == tellcore_constants.TELLSTICK_TURNOFF: + self.brightness = 0 + elif (last_command == tellcore_constants.TELLSTICK_DIM or + last_command == tellcore_constants.TELLSTICK_UP or + last_command == tellcore_constants.TELLSTICK_DOWN): + last_sent_value = self.tellstick.last_sent_value() + if not last_sent_value is None: + self.brightness = last_sent_value diff --git a/homeassistant/components/switch/tellstick.py b/homeassistant/components/switch/tellstick.py index 1f2cd5c66a8..5b3ffc85fec 100644 --- a/homeassistant/components/switch/tellstick.py +++ b/homeassistant/components/switch/tellstick.py @@ -1,18 +1,24 @@ """ Support for Tellstick switches. """ import logging -from homeassistant.helpers import ToggleDevice -from homeassistant.const import ATTR_FRIENDLY_NAME -try: - import tellcore.constants as tc_constants -except ImportError: - # Don't care for now. Warning will come when get_switches is called. - pass +from homeassistant.const import ATTR_FRIENDLY_NAME +from homeassistant.helpers import ToggleDevice +import tellcore.constants as tellcore_constants def get_devices(hass, config): """ Find and return Tellstick switches. """ + return get_switches() + + +def devices_discovered(hass, config, info): + """ Called when a device is discovered. """ + return get_switches() + + +def get_switches(): + """ Returns the Wink switches. """ try: import tellcore.telldus as telldus except ImportError: @@ -21,15 +27,21 @@ def get_devices(hass, config): return [] core = telldus.TelldusCore() - switches = core.devices() + switches_and_lights = core.devices() - return [TellstickSwitch(switch) for switch in switches] + switches = [] + + for switch in switches_and_lights: + if not switch.methods(tellcore_constants.TELLSTICK_DIM): + switches.append(TellstickSwitchDevice(switch)) + + return switches -class TellstickSwitch(ToggleDevice): +class TellstickSwitchDevice(ToggleDevice): """ represents a Tellstick switch within home assistant. """ - last_sent_command_mask = (tc_constants.TELLSTICK_TURNON | - tc_constants.TELLSTICK_TURNOFF) + last_sent_command_mask = (tellcore_constants.TELLSTICK_TURNON | + tellcore_constants.TELLSTICK_TURNOFF) def __init__(self, tellstick): self.tellstick = tellstick @@ -51,7 +63,7 @@ class TellstickSwitch(ToggleDevice): last_command = self.tellstick.last_sent_command( self.last_sent_command_mask) - return last_command == tc_constants.TELLSTICK_TURNON + return last_command == tellcore_constants.TELLSTICK_TURNON def turn_on(self, **kwargs): """ Turns the switch on. """