From dc133fe9f279a855df42a90d4a3b720104f181ea Mon Sep 17 00:00:00 2001 From: "David F. Mulcahey" Date: Thu, 21 Feb 2019 08:20:58 -0500 Subject: [PATCH 1/8] Fix ZHA bugs (#21246) * fix bugs * add comment * allow entities to be marked unavailable --- .../components/zha/core/channels/general.py | 4 +++- homeassistant/components/zha/core/device.py | 10 +++++----- homeassistant/components/zha/core/gateway.py | 13 +++++++++++-- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/zha/core/channels/general.py b/homeassistant/components/zha/core/channels/general.py index a29b23d340b..621b0ccbee1 100644 --- a/homeassistant/components/zha/core/channels/general.py +++ b/homeassistant/components/zha/core/channels/general.py @@ -126,9 +126,11 @@ class LevelControlChannel(ZigbeeChannel): class BasicChannel(ZigbeeChannel): """Channel to interact with the basic cluster.""" + UNKNOWN = 0 BATTERY = 3 + POWER_SOURCES = { - 0: 'Unknown', + UNKNOWN: 'Unknown', 1: 'Mains (single phase)', 2: 'Mains (3 phase)', BATTERY: 'Battery', diff --git a/homeassistant/components/zha/core/device.py b/homeassistant/components/zha/core/device.py index 12bb397fbc3..1ee800d8559 100644 --- a/homeassistant/components/zha/core/device.py +++ b/homeassistant/components/zha/core/device.py @@ -146,11 +146,11 @@ class ZHADevice: self._available_signal, False ) - async_dispatcher_send( - self.hass, - "{}_{}".format(self._available_signal, 'entity'), - True - ) + async_dispatcher_send( + self.hass, + "{}_{}".format(self._available_signal, 'entity'), + available + ) self._available = available @property diff --git a/homeassistant/components/zha/core/gateway.py b/homeassistant/components/zha/core/gateway.py index a50bfeae1be..cb5e5bf7774 100644 --- a/homeassistant/components/zha/core/gateway.py +++ b/homeassistant/components/zha/core/gateway.py @@ -36,6 +36,7 @@ _LOGGER = logging.getLogger(__name__) SENSOR_TYPES = {} BINARY_SENSOR_TYPES = {} +SMARTTHINGS_HUMIDITY_CLUSTER = 64581 EntityReference = collections.namedtuple( 'EntityReference', 'reference_id zha_device cluster_channels device_info') @@ -174,7 +175,8 @@ class ZHAGateway: # available and we already loaded fresh state above zha_device.update_available(True) elif not zha_device.available and zha_device.power_source is not None\ - and zha_device.power_source != BasicChannel.BATTERY: + and zha_device.power_source != BasicChannel.BATTERY\ + and zha_device.power_source != BasicChannel.UNKNOWN: # the device is currently marked unavailable and it isn't a battery # powered device so we should be able to update it now _LOGGER.debug( @@ -380,7 +382,10 @@ async def _handle_single_cluster_match(hass, zha_device, cluster, device_key, """Dispatch a single cluster match to a HA component.""" component = None # sub_component = None for cluster_type, candidate_component in device_classes.items(): - if isinstance(cluster, cluster_type): + if isinstance(cluster_type, int): + if cluster.cluster_id == cluster_type: + component = candidate_component + elif isinstance(cluster, cluster_type): component = candidate_component break @@ -473,6 +478,9 @@ def establish_device_mappings(): SINGLE_INPUT_CLUSTER_DEVICE_CLASS.update({ zcl.clusters.general.OnOff: 'switch', zcl.clusters.measurement.RelativeHumidity: 'sensor', + # this works for now but if we hit conflicts we can break it out to + # a different dict that is keyed by manufacturer + SMARTTHINGS_HUMIDITY_CLUSTER: 'sensor', zcl.clusters.measurement.TemperatureMeasurement: 'sensor', zcl.clusters.measurement.PressureMeasurement: 'sensor', zcl.clusters.measurement.IlluminanceMeasurement: 'sensor', @@ -489,6 +497,7 @@ def establish_device_mappings(): SENSOR_TYPES.update({ zcl.clusters.measurement.RelativeHumidity.cluster_id: HUMIDITY, + SMARTTHINGS_HUMIDITY_CLUSTER: HUMIDITY, zcl.clusters.measurement.TemperatureMeasurement.cluster_id: TEMPERATURE, zcl.clusters.measurement.PressureMeasurement.cluster_id: PRESSURE, From b2482d820524e96f5b8d2b4fcee0716519664f41 Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Thu, 21 Feb 2019 17:26:09 +0100 Subject: [PATCH 2/8] Add missing configuration option to plex (#21264) Fixes part of: https://github.com/home-assistant/home-assistant/issues/21254 --- homeassistant/components/media_player/plex.py | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/media_player/plex.py b/homeassistant/components/media_player/plex.py index c67849edee9..35000fa35c3 100644 --- a/homeassistant/components/media_player/plex.py +++ b/homeassistant/components/media_player/plex.py @@ -47,6 +47,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_INCLUDE_NON_CLIENTS, default=False): cv.boolean, vol.Optional(CONF_USE_EPISODE_ART, default=False): cv.boolean, vol.Optional(CONF_USE_CUSTOM_ENTITY_IDS, default=False): cv.boolean, + vol.Optional(CONF_SHOW_ALL_CONTROLS, default=False): cv.boolean, vol.Optional(CONF_REMOVE_UNAVAILABLE_CLIENTS, default=True): cv.boolean, vol.Optional(CONF_CLIENT_REMOVE_INTERVAL, default=timedelta(seconds=600)): vol.All(cv.time_period, cv.positive_timedelta), From e59776377b6b3ae50bcf3ff014178a4de085c9f2 Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Thu, 21 Feb 2019 17:26:26 +0100 Subject: [PATCH 3/8] Add missing configation option (#21265) Fixes https://github.com/home-assistant/home-assistant/issues/21254 --- homeassistant/components/sensor/imap_email_content.py | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/sensor/imap_email_content.py b/homeassistant/components/sensor/imap_email_content.py index 225ad08f7d1..714a6c38781 100644 --- a/homeassistant/components/sensor/imap_email_content.py +++ b/homeassistant/components/sensor/imap_email_content.py @@ -35,6 +35,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_USERNAME): cv.string, vol.Required(CONF_PASSWORD): cv.string, vol.Required(CONF_SERVER): cv.string, + vol.Required(CONF_SENDERS): [cv.string], vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, vol.Optional(CONF_VALUE_TEMPLATE): cv.template, vol.Optional(CONF_FOLDER, default='INBOX'): cv.string, From e2a57add2c4c7c7ec32ce1f214317390ae28763c Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 21 Feb 2019 08:52:45 -0800 Subject: [PATCH 4/8] Add SamsungTV Mac validation (#21268) --- homeassistant/components/media_player/samsungtv.py | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/media_player/samsungtv.py b/homeassistant/components/media_player/samsungtv.py index db6bd317c40..e6715669da7 100644 --- a/homeassistant/components/media_player/samsungtv.py +++ b/homeassistant/components/media_player/samsungtv.py @@ -42,6 +42,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_HOST): cv.string, vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, + vol.Optional(CONF_MAC): cv.string, vol.Optional(CONF_TIMEOUT, default=DEFAULT_TIMEOUT): cv.positive_int, }) From e3d29ad26a71f11d21713cd8de10a90bae674ea3 Mon Sep 17 00:00:00 2001 From: "David F. Mulcahey" Date: Thu, 21 Feb 2019 14:39:55 -0500 Subject: [PATCH 5/8] update services.yaml (#21276) --- homeassistant/components/zha/services.yaml | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/zha/services.yaml b/homeassistant/components/zha/services.yaml index c328d69a6c3..0d7fe06fe25 100644 --- a/homeassistant/components/zha/services.yaml +++ b/homeassistant/components/zha/services.yaml @@ -29,9 +29,12 @@ set_zigbee_cluster_attribute: description: >- Set attribute value for the specified cluster on the specified entity. fields: - entity_id: - description: Entity id - example: "binary_sensor.centralite_3130_00e8fb4e_1" + ieee: + description: IEEE address for the device + example: "00:0d:6f:00:05:7d:2d:34" + endpoint_id: + description: Endpoint id for the cluster + example: 1 cluster_id: description: ZCL cluster to retrieve attributes for example: 6 @@ -52,9 +55,12 @@ issue_zigbee_cluster_command: description: >- Issue command on the specified cluster on the specified entity. fields: - entity_id: - description: Entity id - example: "binary_sensor.centralite_3130_00e8fb4e_1" + ieee: + description: IEEE address for the device + example: "00:0d:6f:00:05:7d:2d:34" + endpoint_id: + description: Endpoint id for the cluster + example: 1 cluster_id: description: ZCL cluster to retrieve attributes for example: 6 From df5b17d139e74e9439116c7cf5847cdace84e59e Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Thu, 21 Feb 2019 13:27:34 -0700 Subject: [PATCH 6/8] Fix unhandled exception in Ambient PWS config entry (#21278) --- homeassistant/components/ambient_station/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/ambient_station/__init__.py b/homeassistant/components/ambient_station/__init__.py index 4464992e5fa..16b86a0e298 100644 --- a/homeassistant/components/ambient_station/__init__.py +++ b/homeassistant/components/ambient_station/__init__.py @@ -263,7 +263,8 @@ async def async_setup_entry(hass, config_entry): Client( config_entry.data[CONF_API_KEY], config_entry.data[CONF_APP_KEY], session), - hass.data[DOMAIN][DATA_CONFIG].get(CONF_MONITORED_CONDITIONS, [])) + hass.data[DOMAIN].get(DATA_CONFIG, {}).get( + CONF_MONITORED_CONDITIONS, [])) hass.loop.create_task(ambient.ws_connect()) hass.data[DOMAIN][DATA_CLIENT][config_entry.entry_id] = ambient except WebsocketError as err: From 07e04e5b84dbff145c8029d70a32e8be14101af3 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 21 Feb 2019 16:39:17 -0800 Subject: [PATCH 7/8] Fix yeelight config validation (#21295) --- homeassistant/components/light/yeelight.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/light/yeelight.py b/homeassistant/components/light/yeelight.py index b678fcd2799..231821ffc13 100644 --- a/homeassistant/components/light/yeelight.py +++ b/homeassistant/components/light/yeelight.py @@ -77,15 +77,16 @@ DEVICE_SCHEMA = vol.Schema({ vol.Optional(CONF_MODE_MUSIC, default=False): cv.boolean, vol.Optional(CONF_SAVE_ON_CHANGE, default=False): cv.boolean, vol.Optional(CONF_MODEL): cv.string, +}) + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ + vol.Optional(CONF_DEVICES, default={}): {cv.string: DEVICE_SCHEMA}, vol.Optional(CONF_CUSTOM_EFFECTS): [{ vol.Required(CONF_NAME): cv.string, vol.Required(CONF_FLOW_PARAMS): YEELIGHT_FLOW_TRANSITION_SCHEMA }] }) -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( - {vol.Optional(CONF_DEVICES, default={}): {cv.string: DEVICE_SCHEMA}, }) - SUPPORT_YEELIGHT = (SUPPORT_BRIGHTNESS | SUPPORT_TRANSITION | SUPPORT_FLASH) From e4a21011a393524fc647a23b1971846798858bae Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 21 Feb 2019 17:06:30 -0800 Subject: [PATCH 8/8] Bumped version to 0.88.1 --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index 9dbb06e8adf..28c76366312 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -2,7 +2,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 88 -PATCH_VERSION = '0' +PATCH_VERSION = '1' __short_version__ = '{}.{}'.format(MAJOR_VERSION, MINOR_VERSION) __version__ = '{}.{}'.format(__short_version__, PATCH_VERSION) REQUIRED_PYTHON_VER = (3, 5, 3)