diff --git a/homeassistant/components/switch/arduino.py b/homeassistant/components/switch/arduino.py new file mode 100644 index 00000000000..367e7378b27 --- /dev/null +++ b/homeassistant/components/switch/arduino.py @@ -0,0 +1,93 @@ +""" +homeassistant.components.switch.arduino +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Support for switching Arduino pins on and off. So fare only digital pins are +supported. + +Configuration: + +switch: + platform: arduino + pins: + 11: + name: Fan Office + type: digital + 12: + name: Light Desk + type: digital + +Variables: + +pins +*Required +An array specifying the digital pins to use on the Arduino board. + +These are the variables for the pins array: + +name +*Required +The name for the pin that will be used in the frontend. + +type +*Required +The type of the pin: 'digital'. +""" +import logging + +import homeassistant.components.arduino as arduino +from homeassistant.components.switch import SwitchDevice +from homeassistant.const import DEVICE_DEFAULT_NAME + +DEPENDENCIES = ['arduino'] + +_LOGGER = logging.getLogger(__name__) + + +def setup_platform(hass, config, add_devices, discovery_info=None): + """ Sets up the Arduino platform. """ + + # Verify that Arduino board is present + if arduino.BOARD is None: + _LOGGER.error('A connection has not been made to the Arduino board.') + return False + + switches = [] + pins = config.get('pins') + for pinnum, pin in pins.items(): + if pin.get('name'): + switches.append(ArduinoSwitch(pin.get('name'), + pinnum, + pin.get('type'))) + add_devices(switches) + + +class ArduinoSwitch(SwitchDevice): + """ Represents an Arduino Switch. """ + def __init__(self, name, pin, pin_type): + self._pin = pin + self._name = name or DEVICE_DEFAULT_NAME + self.pin_type = pin_type + self.direction = 'out' + self._state = False + + arduino.BOARD.set_mode(self._pin, self.direction, self.pin_type) + + @property + def name(self): + """ Get the name of the pin. """ + return self._name + + @property + def is_on(self): + """ Returns True if pin is high/on. """ + return self._state + + def turn_on(self): + """ Turns the pin to high/on. """ + self._state = True + arduino.BOARD.set_digital_out_high(self._pin) + + def turn_off(self): + """ Turns the pin to low/off. """ + self._state = False + arduino.BOARD.set_digital_out_low(self._pin)