diff --git a/.coveragerc b/.coveragerc index e16b8d96600..b47616973f6 100644 --- a/.coveragerc +++ b/.coveragerc @@ -223,7 +223,7 @@ omit = homeassistant/components/wemo.py homeassistant/components/*/wemo.py - homeassistant/components/wink.py + homeassistant/components/wink/* homeassistant/components/*/wink.py homeassistant/components/xiaomi_aqara.py diff --git a/homeassistant/components/services.yaml b/homeassistant/components/services.yaml index 2c743f04471..1c7b3123c64 100644 --- a/homeassistant/components/services.yaml +++ b/homeassistant/components/services.yaml @@ -1,4 +1,5 @@ + foursquare: checkin: description: Check a user into a Foursquare venue @@ -542,45 +543,6 @@ input_boolean: description: Entity id of the input boolean to turn on example: 'input_boolean.notify_alerts' -wink: - pair_new_device: - description: Pair a new device to a Wink Hub. - - fields: - hub_name: - description: The name of the hub to pair a new device to. - example: 'My hub' - pairing_mode: - description: One of ["zigbee", "zwave", "zwave_exclusion", "zwave_network_rediscovery", "lutron", "bluetooth", "kidde"] - example: 'zigbee' - kidde_radio_code: - description: A string of 8 1s and 0s one for each dip switch on the kidde device left --> right = 1 --> 8 - example: '10101010' - - rename_wink_device: - description: Rename the provided device. - - fields: - entity_id: - description: The entity_id of the device to rename. - example: binary_sensor.front_door_opened - name: - description: The name to change it to. - example: back_door - - delete_wink_device: - description: Remove/unpair device from Wink. - - fields: - entity_id: - description: The entity_id of the device to delete. - - pull_newly_added_devices_from_wink: - description: Pull newly pair devices from Wink. - - refresh_state_from_wink: - description: Pull the latest states for every device. - homeassistant: check_config: description: Check the Home Assistant configuration files for errors. Errors will be displayed in the Home Assistant log. @@ -607,4 +569,4 @@ homeassistant: fields: entity_id: description: The entity_id of the device to turn off - example: light.living_room \ No newline at end of file + example: light.living_room diff --git a/homeassistant/components/switch/services.yaml b/homeassistant/components/switch/services.yaml index 27461927fe8..5fdd8142ffc 100644 --- a/homeassistant/components/switch/services.yaml +++ b/homeassistant/components/switch/services.yaml @@ -35,79 +35,3 @@ mysensors_send_ir_code: V_IR_SEND: description: IR code to send example: '0xC284' - -wink_set_chime_volume: - description: Set the volume of the chime for a Dome siren/chime. - - fields: - entity_id: - description: Name(s) of the entities to set - example: 'switch.dome_siren' - volume: - description: Volume level. One of ["low", "medium", "high"] - example: "low" - - -wink_set_siren_volume: - description: Set the volume of the siren for a Dome siren/chime. - - fields: - entity_id: - description: Name(s) of the entities to set - example: 'switch.dome_siren' - volume: - description: Volume level. One of ["low", "medium", "high"] - example: "high" - -wink_enable_chime: - description: Enable the chime of a Dome siren with the provided sound. - - fields: - entity_id: - description: Name(s) of the entities to set - example: 'switch.dome_siren' - tone: - description: The tone to use for the chime. One of ["doorbell", "fur_elise", "doorbell_extended", "alert", "william_tell", "rondo_alla_turca", "police_siren", "evacuation", "beep_beep", "beep", "inactive"] - example: "doorbell" - -wink_set_siren_tone: - description: Set the sound to use when the siren is enabled. (This doesn't enable the siren) - - fields: - entity_id: - description: Name(s) of the entities to set - example: 'switch.dome_siren' - tone: - description: The tone to use for the chime. One of ["doorbell", "fur_elise", "doorbell_extended", "alert", "william_tell", "rondo_alla_turca", "police_siren", "evacuation", "beep_beep", "beep", "inactive"] - example: "alert" - -wink_siren_set_auto_shutoff: - description: How long to sound the siren before turning off. - - fields: - entity_id: - description: Name(s) of the entities to set - example: 'switch.dome_siren' - auto_shutoff: - description: The time in seconds to sound the siren. One of [None, -1, 30, 60, 120] (None and -1 are forever. Use None for gocontrol, and -1 for Dome) - example: 60 - -wink_set_siren_strobe_enabled: - description: Enable or disable the strobe light when the siren is sounding. - - fields: - entity_id: - description: Name(s) of the entities to set - example: 'switch.dome_siren' - enabled: - description: "True or False" - -wink_set_chime_strobe_enabled: - description: Enable or disable the strobe light when the chime is sounding. - - fields: - entity_id: - description: Name(s) of the entities to set - example: 'switch.dome_siren' - enabled: - description: "True or False" diff --git a/homeassistant/components/switch/wink.py b/homeassistant/components/switch/wink.py index 6aa55b8b975..8bd4c9fa53b 100644 --- a/homeassistant/components/switch/wink.py +++ b/homeassistant/components/switch/wink.py @@ -6,109 +6,19 @@ https://home-assistant.io/components/switch.wink/ """ import asyncio import logging -from os import path - -import voluptuous as vol from homeassistant.components.wink import WinkDevice, DOMAIN from homeassistant.helpers.entity import ToggleEntity -import homeassistant.helpers.config_validation as cv -from homeassistant.const import ATTR_ENTITY_ID -from homeassistant.config import load_yaml_config_file DEPENDENCIES = ['wink'] _LOGGER = logging.getLogger(__name__) -SERVICE_SET_CHIME_VOLUME = "wink_set_chime_volume" -SERVICE_SET_SIREN_VOLUME = "wink_set_siren_volume" -SERVICE_ENABLE_CHIME = "wink_enable_chime" -SERVICE_SET_SIREN_TONE = "wink_set_siren_tone" -SERVICE_SET_SIREN_AUTO_SHUTOFF = "wink_siren_set_auto_shutoff" -SERVICE_SET_SIREN_STROBE_ENABLED = "wink_set_siren_strobe_enabled" -SERVICE_SET_CHIME_STROBE_ENABLED = "wink_set_chime_strobe_enabled" - -ATTR_VOLUME = "volume" -ATTR_TONE = "tone" -ATTR_ENABLED = "enabled" -ATTR_AUTO_SHUTOFF = "auto_shutoff" - -VOLUMES = ["low", "medium", "high"] -TONES = ["doorbell", "fur_elise", "doorbell_extended", "alert", - "william_tell", "rondo_alla_turca", "police_siren", - "evacuation", "beep_beep", "beep"] -CHIME_TONES = TONES + ["inactive"] -AUTO_SHUTOFF_TIMES = [None, -1, 30, 60, 120] - - -SET_VOLUME_SCHEMA = vol.Schema({ - vol.Optional(ATTR_ENTITY_ID): cv.entity_ids, - vol.Required(ATTR_VOLUME): vol.In(VOLUMES) -}) - -SET_SIREN_TONE_SCHEMA = vol.Schema({ - vol.Optional(ATTR_ENTITY_ID): cv.entity_ids, - vol.Required(ATTR_TONE): vol.In(TONES) -}) - -SET_CHIME_MODE_SCHEMA = vol.Schema({ - vol.Optional(ATTR_ENTITY_ID): cv.entity_ids, - vol.Required(ATTR_TONE): vol.In(CHIME_TONES) -}) - -SET_AUTO_SHUTOFF_SCHEMA = vol.Schema({ - vol.Optional(ATTR_ENTITY_ID): cv.entity_ids, - vol.Required(ATTR_AUTO_SHUTOFF): vol.In(AUTO_SHUTOFF_TIMES) -}) - -SET_STROBE_ENABLED_SCHEMA = vol.Schema({ - vol.Optional(ATTR_ENTITY_ID): cv.entity_ids, - vol.Required(ATTR_ENABLED): cv.boolean -}) - def setup_platform(hass, config, add_devices, discovery_info=None): """Set up the Wink platform.""" import pywink - def service_handle(service): - """Handler for services.""" - entity_ids = service.data.get('entity_id') - all_sirens = [] - for switch in hass.data[DOMAIN]['entities']['switch']: - if isinstance(switch, WinkSirenDevice): - all_sirens.append(switch) - sirens_to_set = [] - if entity_ids is None: - sirens_to_set = all_sirens - else: - for siren in all_sirens: - if siren.entity_id in entity_ids: - sirens_to_set.append(siren) - - for siren in sirens_to_set: - if service.service != SERVICE_SET_SIREN_AUTO_SHUTOFF: - if siren.wink.device_manufacturer() != 'dome': - _LOGGER.error("Service only valid for Dome sirens.") - return - if service.service == SERVICE_SET_CHIME_VOLUME: - siren.wink.set_chime_volume(service.data.get(ATTR_VOLUME)) - elif service.service == SERVICE_SET_SIREN_VOLUME: - siren.wink.set_siren_volume(service.data.get(ATTR_VOLUME)) - elif service.service == SERVICE_SET_SIREN_TONE: - siren.wink.set_siren_sound(service.data.get(ATTR_TONE)) - elif service.service == SERVICE_ENABLE_CHIME: - siren.wink.set_chime(service.data.get(ATTR_TONE)) - elif service.service == SERVICE_SET_SIREN_STROBE_ENABLED: - siren.wink.set_siren_strobe_enabled( - service.data.get(ATTR_ENABLED)) - elif service.service == SERVICE_SET_CHIME_STROBE_ENABLED: - siren.wink.set_chime_strobe_enabled( - service.data.get(ATTR_ENABLED)) - else: - siren.wink.set_auto_shutoff( - service.data.get(ATTR_AUTO_SHUTOFF)) - for switch in pywink.get_switches(): _id = switch.object_id() + switch.name() if _id not in hass.data[DOMAIN]['unique_ids']: @@ -117,10 +27,6 @@ def setup_platform(hass, config, add_devices, discovery_info=None): _id = switch.object_id() + switch.name() if _id not in hass.data[DOMAIN]['unique_ids']: add_devices([WinkToggleDevice(switch, hass)]) - for siren in pywink.get_sirens(): - _id = siren.object_id() + siren.name() - if _id not in hass.data[DOMAIN]['unique_ids']: - add_devices([WinkSirenDevice(siren, hass)]) for sprinkler in pywink.get_sprinklers(): _id = sprinkler.object_id() + sprinkler.name() if _id not in hass.data[DOMAIN]['unique_ids']: @@ -130,44 +36,6 @@ def setup_platform(hass, config, add_devices, discovery_info=None): if _id not in hass.data[DOMAIN]['unique_ids']: add_devices([WinkToggleDevice(switch, hass)]) - descriptions = load_yaml_config_file( - path.join(path.dirname(__file__), 'services.yaml')) - - hass.services.register(DOMAIN, SERVICE_SET_SIREN_TONE, - service_handle, - descriptions.get(SERVICE_SET_SIREN_TONE), - schema=SET_SIREN_TONE_SCHEMA) - - hass.services.register(DOMAIN, SERVICE_ENABLE_CHIME, - service_handle, - descriptions.get(SERVICE_ENABLE_CHIME), - schema=SET_CHIME_MODE_SCHEMA) - - hass.services.register(DOMAIN, SERVICE_SET_SIREN_VOLUME, - service_handle, - descriptions.get(SERVICE_SET_SIREN_VOLUME), - schema=SET_VOLUME_SCHEMA) - - hass.services.register(DOMAIN, SERVICE_SET_CHIME_VOLUME, - service_handle, - descriptions.get(SERVICE_SET_CHIME_VOLUME), - schema=SET_VOLUME_SCHEMA) - - hass.services.register(DOMAIN, SERVICE_SET_SIREN_STROBE_ENABLED, - service_handle, - descriptions.get(SERVICE_SET_SIREN_STROBE_ENABLED), - schema=SET_STROBE_ENABLED_SCHEMA) - - hass.services.register(DOMAIN, SERVICE_SET_CHIME_STROBE_ENABLED, - service_handle, - descriptions.get(SERVICE_SET_CHIME_STROBE_ENABLED), - schema=SET_STROBE_ENABLED_SCHEMA) - - hass.services.register(DOMAIN, SERVICE_SET_SIREN_AUTO_SHUTOFF, - service_handle, - descriptions.get(SERVICE_SET_SIREN_AUTO_SHUTOFF), - schema=SET_AUTO_SHUTOFF_SCHEMA) - class WinkToggleDevice(WinkDevice, ToggleEntity): """Representation of a Wink toggle device.""" @@ -201,60 +69,3 @@ class WinkToggleDevice(WinkDevice, ToggleEntity): except AttributeError: pass return attributes - - -class WinkSirenDevice(WinkDevice, ToggleEntity): - """Representation of a Wink siren device.""" - - @asyncio.coroutine - def async_added_to_hass(self): - """Callback when entity is added to hass.""" - self.hass.data[DOMAIN]['entities']['switch'].append(self) - - @property - def is_on(self): - """Return true if device is on.""" - return self.wink.state() - - def turn_on(self, **kwargs): - """Turn the device on.""" - self.wink.set_state(True) - - def turn_off(self): - """Turn the device off.""" - self.wink.set_state(False) - - @property - def device_state_attributes(self): - """Return the state attributes.""" - attributes = super(WinkSirenDevice, self).device_state_attributes - - auto_shutoff = self.wink.auto_shutoff() - if auto_shutoff is not None: - attributes["auto_shutoff"] = auto_shutoff - - siren_volume = self.wink.siren_volume() - if siren_volume is not None: - attributes["siren_volume"] = siren_volume - - chime_volume = self.wink.chime_volume() - if chime_volume is not None: - attributes["chime_volume"] = chime_volume - - strobe_enabled = self.wink.strobe_enabled() - if strobe_enabled is not None: - attributes["siren_strobe_enabled"] = strobe_enabled - - chime_strobe_enabled = self.wink.chime_strobe_enabled() - if chime_strobe_enabled is not None: - attributes["chime_strobe_enabled"] = chime_strobe_enabled - - siren_sound = self.wink.siren_sound() - if siren_sound is not None: - attributes["siren_sound"] = siren_sound - - chime_mode = self.wink.chime_mode() - if chime_mode is not None: - attributes["chime_mode"] = chime_mode - - return attributes diff --git a/homeassistant/components/wink.py b/homeassistant/components/wink/__init__.py similarity index 73% rename from homeassistant/components/wink.py rename to homeassistant/components/wink/__init__.py index 8a0e2e02874..2defe73a6bf 100644 --- a/homeassistant/components/wink.py +++ b/homeassistant/components/wink/__init__.py @@ -4,6 +4,7 @@ Support for Wink hubs. For more details about this component, please refer to the documentation at https://home-assistant.io/components/wink/ """ +import asyncio import logging import time import json @@ -20,8 +21,10 @@ from homeassistant.helpers.event import track_time_interval from homeassistant.const import ( ATTR_BATTERY_LEVEL, CONF_EMAIL, CONF_PASSWORD, EVENT_HOMEASSISTANT_START, - EVENT_HOMEASSISTANT_STOP, __version__, ATTR_ENTITY_ID) + EVENT_HOMEASSISTANT_STOP, __version__, ATTR_ENTITY_ID, + STATE_ON, STATE_OFF) from homeassistant.helpers.entity import Entity +from homeassistant.helpers.entity_component import EntityComponent import homeassistant.helpers.config_validation as cv from homeassistant.config import load_yaml_config_file @@ -66,7 +69,26 @@ SERVICE_REFRESH_STATES = 'refresh_state_from_wink' SERVICE_RENAME_DEVICE = 'rename_wink_device' SERVICE_DELETE_DEVICE = 'delete_wink_device' SERVICE_SET_PAIRING_MODE = 'pair_new_device' +SERVICE_SET_CHIME_VOLUME = "set_chime_volume" +SERVICE_SET_SIREN_VOLUME = "set_siren_volume" +SERVICE_ENABLE_CHIME = "enable_chime" +SERVICE_SET_SIREN_TONE = "set_siren_tone" +SERVICE_SET_AUTO_SHUTOFF = "siren_set_auto_shutoff" +SERVICE_SIREN_STROBE_ENABLED = "set_siren_strobe_enabled" +SERVICE_CHIME_STROBE_ENABLED = "set_chime_strobe_enabled" +SERVICE_ENABLE_SIREN = "enable_siren" +ATTR_VOLUME = "volume" +ATTR_TONE = "tone" +ATTR_ENABLED = "enabled" +ATTR_AUTO_SHUTOFF = "auto_shutoff" + +VOLUMES = ["low", "medium", "high"] +TONES = ["doorbell", "fur_elise", "doorbell_extended", "alert", + "william_tell", "rondo_alla_turca", "police_siren", + "evacuation", "beep_beep", "beep"] +CHIME_TONES = TONES + ["inactive"] +AUTO_SHUTOFF_TIMES = [None, -1, 30, 60, 120] CONFIG_SCHEMA = vol.Schema({ DOMAIN: vol.Schema({ @@ -82,7 +104,6 @@ CONFIG_SCHEMA = vol.Schema({ }) }, extra=vol.ALLOW_EXTRA) - RENAME_DEVICE_SCHEMA = vol.Schema({ vol.Required(ATTR_ENTITY_ID): cv.entity_ids, vol.Required(ATTR_NAME): cv.string @@ -98,6 +119,36 @@ SET_PAIRING_MODE_SCHEMA = vol.Schema({ vol.Optional(ATTR_KIDDE_RADIO_CODE): cv.string }, extra=vol.ALLOW_EXTRA) +SET_VOLUME_SCHEMA = vol.Schema({ + vol.Optional(ATTR_ENTITY_ID): cv.entity_ids, + vol.Required(ATTR_VOLUME): vol.In(VOLUMES) +}) + +SET_SIREN_TONE_SCHEMA = vol.Schema({ + vol.Optional(ATTR_ENTITY_ID): cv.entity_ids, + vol.Required(ATTR_TONE): vol.In(TONES) +}) + +SET_CHIME_MODE_SCHEMA = vol.Schema({ + vol.Optional(ATTR_ENTITY_ID): cv.entity_ids, + vol.Required(ATTR_TONE): vol.In(CHIME_TONES) +}) + +SET_AUTO_SHUTOFF_SCHEMA = vol.Schema({ + vol.Optional(ATTR_ENTITY_ID): cv.entity_ids, + vol.Required(ATTR_AUTO_SHUTOFF): vol.In(AUTO_SHUTOFF_TIMES) +}) + +SET_STROBE_ENABLED_SCHEMA = vol.Schema({ + vol.Optional(ATTR_ENTITY_ID): cv.entity_ids, + vol.Required(ATTR_ENABLED): cv.boolean +}) + +ENABLED_SIREN_SCHEMA = vol.Schema({ + vol.Optional(ATTR_ENTITY_ID): cv.entity_ids, + vol.Required(ATTR_ENABLED): cv.boolean +}) + WINK_COMPONENTS = [ 'binary_sensor', 'sensor', 'light', 'switch', 'lock', 'cover', 'climate', 'fan', 'alarm_control_panel', 'scene' @@ -204,7 +255,7 @@ def setup(hass, config): from pubnubsubhandler import PubNubSubscriptionHandler descriptions = load_yaml_config_file( - os.path.join(os.path.dirname(__file__), 'services.yaml')).get(DOMAIN) + os.path.join(os.path.dirname(__file__), 'services.yaml')) if hass.data.get(DOMAIN) is None: hass.data[DOMAIN] = { @@ -434,11 +485,110 @@ def setup(hass, config): descriptions.get(SERVICE_SET_PAIRING_MODE), schema=SET_PAIRING_MODE_SCHEMA) + def service_handle(service): + """Handler for services.""" + entity_ids = service.data.get('entity_id') + all_sirens = [] + for switch in hass.data[DOMAIN]['entities']['switch']: + if isinstance(switch, WinkSirenDevice): + all_sirens.append(switch) + sirens_to_set = [] + if entity_ids is None: + sirens_to_set = all_sirens + else: + for siren in all_sirens: + if siren.entity_id in entity_ids: + sirens_to_set.append(siren) + + for siren in sirens_to_set: + if (service.service != SERVICE_SET_AUTO_SHUTOFF and + service.service != SERVICE_ENABLE_SIREN and + siren.wink.device_manufacturer() != 'dome'): + _LOGGER.error("Service only valid for Dome sirens.") + return + + if service.service == SERVICE_ENABLE_SIREN: + siren.wink.set_state(service.data.get(ATTR_ENABLED)) + elif service.service == SERVICE_SET_AUTO_SHUTOFF: + siren.wink.set_auto_shutoff( + service.data.get(ATTR_AUTO_SHUTOFF)) + elif service.service == SERVICE_SET_CHIME_VOLUME: + siren.wink.set_chime_volume(service.data.get(ATTR_VOLUME)) + elif service.service == SERVICE_SET_SIREN_VOLUME: + siren.wink.set_siren_volume(service.data.get(ATTR_VOLUME)) + elif service.service == SERVICE_SET_SIREN_TONE: + siren.wink.set_siren_sound(service.data.get(ATTR_TONE)) + elif service.service == SERVICE_ENABLE_CHIME: + siren.wink.set_chime(service.data.get(ATTR_TONE)) + elif service.service == SERVICE_SIREN_STROBE_ENABLED: + siren.wink.set_siren_strobe_enabled( + service.data.get(ATTR_ENABLED)) + elif service.service == SERVICE_CHIME_STROBE_ENABLED: + siren.wink.set_chime_strobe_enabled( + service.data.get(ATTR_ENABLED)) + # Load components for the devices in Wink that we support for wink_component in WINK_COMPONENTS: hass.data[DOMAIN]['entities'][wink_component] = [] discovery.load_platform(hass, wink_component, DOMAIN, {}, config) + component = EntityComponent(_LOGGER, DOMAIN, hass) + + sirens = [] + has_dome_siren = False + for siren in pywink.get_sirens(): + if siren.device_manufacturer() == "dome": + has_dome_siren = True + _id = siren.object_id() + siren.name() + if _id not in hass.data[DOMAIN]['unique_ids']: + sirens.append(WinkSirenDevice(siren, hass)) + + if sirens: + + hass.services.register(DOMAIN, SERVICE_SET_AUTO_SHUTOFF, + service_handle, + descriptions.get(SERVICE_SET_AUTO_SHUTOFF), + schema=SET_AUTO_SHUTOFF_SCHEMA) + + hass.services.register(DOMAIN, SERVICE_ENABLE_SIREN, + service_handle, + descriptions.get(SERVICE_ENABLE_SIREN), + schema=ENABLED_SIREN_SCHEMA) + + if has_dome_siren: + + hass.services.register(DOMAIN, SERVICE_SET_SIREN_TONE, + service_handle, + descriptions.get(SERVICE_SET_SIREN_TONE), + schema=SET_SIREN_TONE_SCHEMA) + + hass.services.register(DOMAIN, SERVICE_ENABLE_CHIME, + service_handle, + descriptions.get(SERVICE_ENABLE_CHIME), + schema=SET_CHIME_MODE_SCHEMA) + + hass.services.register(DOMAIN, SERVICE_SET_SIREN_VOLUME, + service_handle, + descriptions.get(SERVICE_SET_SIREN_VOLUME), + schema=SET_VOLUME_SCHEMA) + + hass.services.register(DOMAIN, SERVICE_SET_CHIME_VOLUME, + service_handle, + descriptions.get(SERVICE_SET_CHIME_VOLUME), + schema=SET_VOLUME_SCHEMA) + + hass.services.register(DOMAIN, SERVICE_SIREN_STROBE_ENABLED, + service_handle, + descriptions.get(SERVICE_SIREN_STROBE_ENABLED), + schema=SET_STROBE_ENABLED_SCHEMA) + + hass.services.register(DOMAIN, SERVICE_CHIME_STROBE_ENABLED, + service_handle, + descriptions.get(SERVICE_CHIME_STROBE_ENABLED), + schema=SET_STROBE_ENABLED_SCHEMA) + + component.add_entities(sirens) + return True @@ -594,3 +744,59 @@ class WinkDevice(Entity): if hasattr(self.wink, 'tamper_detected'): return self.wink.tamper_detected() return None + + +class WinkSirenDevice(WinkDevice): + """Representation of a Wink siren device.""" + + @asyncio.coroutine + def async_added_to_hass(self): + """Callback when entity is added to hass.""" + self.hass.data[DOMAIN]['entities']['switch'].append(self) + + @property + def state(self): + """Return sirens state.""" + if self.wink.state(): + return STATE_ON + return STATE_OFF + + @property + def icon(self): + """Return the icon to use in the frontend, if any.""" + return "mdi:bell-ring" + + @property + def device_state_attributes(self): + """Return the state attributes.""" + attributes = super(WinkSirenDevice, self).device_state_attributes + + auto_shutoff = self.wink.auto_shutoff() + if auto_shutoff is not None: + attributes["auto_shutoff"] = auto_shutoff + + siren_volume = self.wink.siren_volume() + if siren_volume is not None: + attributes["siren_volume"] = siren_volume + + chime_volume = self.wink.chime_volume() + if chime_volume is not None: + attributes["chime_volume"] = chime_volume + + strobe_enabled = self.wink.strobe_enabled() + if strobe_enabled is not None: + attributes["siren_strobe_enabled"] = strobe_enabled + + chime_strobe_enabled = self.wink.chime_strobe_enabled() + if chime_strobe_enabled is not None: + attributes["chime_strobe_enabled"] = chime_strobe_enabled + + siren_sound = self.wink.siren_sound() + if siren_sound is not None: + attributes["siren_sound"] = siren_sound + + chime_mode = self.wink.chime_mode() + if chime_mode is not None: + attributes["chime_mode"] = chime_mode + + return attributes diff --git a/homeassistant/components/wink/services.yaml b/homeassistant/components/wink/services.yaml new file mode 100644 index 00000000000..29952af4c81 --- /dev/null +++ b/homeassistant/components/wink/services.yaml @@ -0,0 +1,122 @@ +pair_new_device: + description: Pair a new device to a Wink Hub. + + fields: + hub_name: + description: The name of the hub to pair a new device to. + example: 'My hub' + pairing_mode: + description: One of ["zigbee", "zwave", "zwave_exclusion", "zwave_network_rediscovery", "lutron", "bluetooth", "kidde"] + example: 'zigbee' + kidde_radio_code: + description: 'A string of 8 1s and 0s one for each dip switch on the kidde device left --> right = 1 --> 8' + example: '10101010' + +rename_wink_device: + description: Rename the provided device. + + fields: + entity_id: + description: The entity_id of the device to rename. + example: binary_sensor.front_door_opened + name: + description: The name to change it to. + example: back_door + +delete_wink_device: + description: Remove/unpair device from Wink. + + fields: + entity_id: + description: The entity_id of the device to delete. + +pull_newly_added_devices_from_wink: + description: Pull newly pair devices from Wink. + +refresh_state_from_wink: + description: Pull the latest states for every device. + +set_siren_volume: + description: Set the volume of the siren for a Dome siren/chime. + + fields: + entity_id: + description: Name(s) of the entities to set + example: 'switch.dome_siren' + volume: + description: Volume level. One of ["low", "medium", "high"] + example: "high" + +enable_chime: + description: Enable the chime of a Dome siren with the provided sound. + + fields: + entity_id: + description: Name(s) of the entities to set + example: 'switch.dome_siren' + tone: + description: The tone to use for the chime. One of ["doorbell", "fur_elise", "doorbell_extended", "alert", "william_tell", "rondo_alla_turca", "police_siren", "evacuation", "beep_beep", "beep", "inactive"] + example: "doorbell" + +set_siren_tone: + description: Set the sound to use when the siren is enabled. (This doesn't enable the siren) + + fields: + entity_id: + description: Name(s) of the entities to set + example: 'switch.dome_siren' + tone: + description: The tone to use for the chime. One of ["doorbell", "fur_elise", "doorbell_extended", "alert", "william_tell", "rondo_alla_turca", "police_siren", "evacuation", "beep_beep", "beep", "inactive"] + example: "alert" + +siren_set_auto_shutoff: + description: How long to sound the siren before turning off. + + fields: + entity_id: + description: Name(s) of the entities to set + example: 'switch.dome_siren' + auto_shutoff: + description: The time in seconds to sound the siren. One of [None, -1, 30, 60, 120] (None and -1 are forever. Use None for gocontrol, and -1 for Dome) + example: 60 + +set_siren_strobe_enabled: + description: Enable or disable the strobe light when the siren is sounding. + + fields: + entity_id: + description: Name(s) of the entities to set + example: 'switch.dome_siren' + enabled: + description: "True or False" + +set_chime_strobe_enabled: + description: Enable or disable the strobe light when the chime is sounding. + + fields: + entity_id: + description: Name(s) of the entities to set + example: 'switch.dome_siren' + enabled: + description: "True or False" + +enable_siren: + description: Enable/disable the siren. + + fields: + entity_id: + description: Name(s) of the entities to set + example: 'switch.dome_siren' + enabled: + description: "True or False" + +set_chime_volume: + description: Set the volume of the chime for a Dome siren/chime. + + fields: + entity_id: + description: Name(s) of the entities to set + example: 'switch.dome_siren' + volume: + description: Volume level. One of ["low", "medium", "high"] + example: "low"