From 455ac9724a8e85f5aeda9df65d716a1975d34a70 Mon Sep 17 00:00:00 2001 From: gwhiteCL Date: Mon, 31 Jul 2017 18:24:21 -0600 Subject: [PATCH] added invert_state optional parameter (#8695) * added invert_state optional parameter * removed superfluous parens * moved state inversion to the is_closed method * added relay_invert feature * fixed syntax to comply with houndci-bot rules * changed state_invert to invert_state and relay_invert to invert_relay --- homeassistant/components/cover/rpi_gpio.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/cover/rpi_gpio.py b/homeassistant/components/cover/rpi_gpio.py index 07be998035c..1ee3ea00476 100644 --- a/homeassistant/components/cover/rpi_gpio.py +++ b/homeassistant/components/cover/rpi_gpio.py @@ -24,9 +24,13 @@ CONF_RELAY_PIN = 'relay_pin' CONF_RELAY_TIME = 'relay_time' CONF_STATE_PIN = 'state_pin' CONF_STATE_PULL_MODE = 'state_pull_mode' +CONF_INVERT_STATE = 'invert_state' +CONF_INVERT_RELAY = 'invert_relay' DEFAULT_RELAY_TIME = .2 DEFAULT_STATE_PULL_MODE = 'UP' +DEFAULT_INVERT_STATE = False +DEFAULT_INVERT_RELAY = False DEPENDENCIES = ['rpi_gpio'] _COVERS_SCHEMA = vol.All( @@ -45,6 +49,8 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_STATE_PULL_MODE, default=DEFAULT_STATE_PULL_MODE): cv.string, vol.Optional(CONF_RELAY_TIME, default=DEFAULT_RELAY_TIME): cv.positive_int, + vol.Optional(CONF_INVERT_STATE, default=DEFAULT_INVERT_STATE): cv.boolean, + vol.Optional(CONF_INVERT_RELAY, default=DEFAULT_INVERT_RELAY): cv.boolean, }) @@ -53,13 +59,15 @@ def setup_platform(hass, config, add_devices, discovery_info=None): """Set up the RPi cover platform.""" relay_time = config.get(CONF_RELAY_TIME) state_pull_mode = config.get(CONF_STATE_PULL_MODE) + invert_state = config.get(CONF_INVERT_STATE) + invert_relay = config.get(CONF_INVERT_RELAY) covers = [] covers_conf = config.get(CONF_COVERS) for cover in covers_conf: covers.append(RPiGPIOCover( cover[CONF_NAME], cover[CONF_RELAY_PIN], cover[CONF_STATE_PIN], - state_pull_mode, relay_time)) + state_pull_mode, relay_time, invert_state, invert_relay)) add_devices(covers) @@ -67,7 +75,7 @@ class RPiGPIOCover(CoverDevice): """Representation of a Raspberry GPIO cover.""" def __init__(self, name, relay_pin, state_pin, state_pull_mode, - relay_time): + relay_time, invert_state, invert_relay): """Initialize the cover.""" self._name = name self._state = False @@ -75,9 +83,11 @@ class RPiGPIOCover(CoverDevice): self._state_pin = state_pin self._state_pull_mode = state_pull_mode self._relay_time = relay_time + self._invert_state = invert_state + self._invert_relay = invert_relay rpi_gpio.setup_output(self._relay_pin) rpi_gpio.setup_input(self._state_pin, self._state_pull_mode) - rpi_gpio.write_output(self._relay_pin, True) + rpi_gpio.write_output(self._relay_pin, not self._invert_relay) @property def unique_id(self): @@ -96,13 +106,13 @@ class RPiGPIOCover(CoverDevice): @property def is_closed(self): """Return true if cover is closed.""" - return self._state + return self._state != self._invert_state def _trigger(self): """Trigger the cover.""" - rpi_gpio.write_output(self._relay_pin, False) + rpi_gpio.write_output(self._relay_pin, self._invert_relay) sleep(self._relay_time) - rpi_gpio.write_output(self._relay_pin, True) + rpi_gpio.write_output(self._relay_pin, not self._invert_relay) def close_cover(self): """Close the cover."""