From 05bab8c808d73e07f9c835002eff3e3d2136a9a1 Mon Sep 17 00:00:00 2001 From: JesseWebDotCom Date: Fri, 31 Mar 2017 22:19:04 -0400 Subject: [PATCH 001/146] Exposed more attributes, enabled play_media tv show or season episodes --- homeassistant/components/media_player/plex.py | 84 +++++++++++-------- 1 file changed, 50 insertions(+), 34 deletions(-) diff --git a/homeassistant/components/media_player/plex.py b/homeassistant/components/media_player/plex.py index f5677b271a3..d93b5489760 100644 --- a/homeassistant/components/media_player/plex.py +++ b/homeassistant/components/media_player/plex.py @@ -4,41 +4,26 @@ Support to interface with the Plex API. For more details about this platform, please refer to the documentation at https://home-assistant.io/components/media_player.plex/ """ +from datetime import timedelta import json import logging import os -from datetime import timedelta from urllib.parse import urlparse import requests -import voluptuous as vol + from homeassistant import util from homeassistant.components.media_player import ( - MEDIA_TYPE_MUSIC, - MEDIA_TYPE_TVSHOW, - MEDIA_TYPE_VIDEO, - PLATFORM_SCHEMA, - SUPPORT_NEXT_TRACK, - SUPPORT_PAUSE, - SUPPORT_PLAY, - SUPPORT_PREVIOUS_TRACK, - SUPPORT_STOP, - SUPPORT_TURN_OFF, - SUPPORT_VOLUME_MUTE, - SUPPORT_VOLUME_SET, - MediaPlayerDevice, -) + MEDIA_TYPE_MUSIC, MEDIA_TYPE_TVSHOW, MEDIA_TYPE_VIDEO, PLATFORM_SCHEMA, + SUPPORT_NEXT_TRACK, SUPPORT_PAUSE, SUPPORT_PLAY, SUPPORT_PREVIOUS_TRACK, + SUPPORT_STOP, SUPPORT_TURN_OFF, SUPPORT_VOLUME_MUTE, SUPPORT_VOLUME_SET, + MediaPlayerDevice) from homeassistant.const import ( - DEVICE_DEFAULT_NAME, - STATE_IDLE, - STATE_OFF, - STATE_PAUSED, - STATE_PLAYING, -) + DEVICE_DEFAULT_NAME, STATE_IDLE, STATE_OFF, STATE_PAUSED, STATE_PLAYING) from homeassistant.helpers import config_validation as cv from homeassistant.helpers.event import track_utc_time_change from homeassistant.loader import get_component - +import voluptuous as vol REQUIREMENTS = ['plexapi==2.0.2'] MIN_TIME_BETWEEN_SCANS = timedelta(seconds=10) @@ -789,7 +774,7 @@ class PlexClient(MediaPlayerDevice): src['library_name']).get(src['artist_name']).album( src['album_name']).get(src['track_name']) elif media_type == 'EPISODE': - media = self._get_episode( + media = self._get_tv_media( src['library_name'], src['show_name'], src['season_number'], src['episode_number']) elif media_type == 'PLAYLIST': @@ -798,18 +783,27 @@ class PlexClient(MediaPlayerDevice): media = self.device.server.library.section( src['library_name']).get(src['video_name']) - if media: - self._client_play_media(media, shuffle=src['shuffle']) + if media and media_type == 'EPISODE' and str(media.type) == 'playlist': + self._client_play_media(media=media, delete=True, + shuffle=src['shuffle']) + elif media: + self._client_play_media(media=media, shuffle=src['shuffle']) - def _get_episode(self, library_name, show_name, season_number, - episode_number): - """Find TV episode and return a Plex media object.""" + def _get_tv_media(self, library_name, show_name, season_number, + episode_number): + """Find TV media and return a Plex media object.""" target_season = None target_episode = None - seasons = self.device.server.library.section(library_name).get( - show_name).seasons() - for season in seasons: + show = self.device.server.library.section(library_name).get( + show_name) + + if not season_number: + playlist_name = (self.entity_id + ' - ' + show_name + ' Episodes') + return self.device.server.createPlaylist( + playlist_name, show.episodes()) + + for season in show.seasons(): if int(season.seasonNumber) == int(season_number): target_season = season break @@ -820,6 +814,12 @@ class PlexClient(MediaPlayerDevice): str(season_number).zfill(2), str(episode_number).zfill(2)) else: + if not episode_number: + playlist_name = (self.entity_id + ' - ' + show_name + + ' Season ' + str(season_number) + ' Episodes') + return self.device.server.createPlaylist( + playlist_name, target_season.episodes()) + for episode in target_season.episodes(): if int(episode.index) == int(episode_number): target_episode = episode @@ -833,7 +833,7 @@ class PlexClient(MediaPlayerDevice): return target_episode - def _client_play_media(self, media, **params): + def _client_play_media(self, media, delete=False, **params): """Instruct Plex client to play a piece of media.""" if not (self.device and 'playback' in self._device_protocol_capabilities): @@ -841,10 +841,12 @@ class PlexClient(MediaPlayerDevice): return import plexapi.playqueue - server_url = media.server.baseurl.split(':') playqueue = plexapi.playqueue.PlayQueue.create(self.device.server, media, **params) + self._local_client_control_fix() + + server_url = self.device.server.baseurl.split(':') self.device.sendCommand('playback/playMedia', **dict({ 'machineIdentifier': self.device.server.machineIdentifier, @@ -857,3 +859,17 @@ class PlexClient(MediaPlayerDevice): 'containerKey': '/playQueues/%s?window=100&own=1' % playqueue.playQueueID, }, **params)) + + # delete dynamic playlists used to build playqueue (ex. play tv season) + if delete: + media.delete() + + @property + def device_state_attributes(self): + """Return the scene state attributes.""" + attr = {} + attr['media_content_rating'] = self._media_content_rating + attr['session_username'] = self._session_username + attr['media_library_name'] = self._app_name + + return attr From 564a01f34423a814f1bc27ae2350bdb9f059ba2f Mon Sep 17 00:00:00 2001 From: JesseWebDotCom Date: Fri, 31 Mar 2017 22:36:37 -0400 Subject: [PATCH 002/146] mend Exposed more attributes, enabled play_media tv show or season episodes --- homeassistant/components/media_player/plex.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/homeassistant/components/media_player/plex.py b/homeassistant/components/media_player/plex.py index d93b5489760..65957c01bdf 100644 --- a/homeassistant/components/media_player/plex.py +++ b/homeassistant/components/media_player/plex.py @@ -250,6 +250,7 @@ class PlexClient(MediaPlayerDevice): self._machine_identifier = None self._make = '' self._media_content_id = None + self._media_content_rating = None self._media_content_type = None self._media_duration = None self._media_image_url = None @@ -259,6 +260,7 @@ class PlexClient(MediaPlayerDevice): self._previous_volume_level = 1 # Used in fake muting self._session = None self._session_type = None + self._session_username = None self._state = STATE_IDLE self._volume_level = 1 # since we can't retrieve remotely self._volume_muted = False # since we can't retrieve remotely From ae21fa9ce1f29aa6fc958cd7afc2399af68a7055 Mon Sep 17 00:00:00 2001 From: JesseWebDotCom Date: Fri, 31 Mar 2017 23:20:36 -0400 Subject: [PATCH 003/146] Fixed setting username and content rating data --- homeassistant/components/media_player/plex.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/homeassistant/components/media_player/plex.py b/homeassistant/components/media_player/plex.py index 65957c01bdf..b328a928538 100644 --- a/homeassistant/components/media_player/plex.py +++ b/homeassistant/components/media_player/plex.py @@ -330,6 +330,7 @@ class PlexClient(MediaPlayerDevice): self._session.viewOffset) self._media_content_id = self._convert_na_to_none( self._session.ratingKey) + self._media_content_rating = self._session.contentRating else: self._media_position = None self._media_content_id = None @@ -341,6 +342,7 @@ class PlexClient(MediaPlayerDevice): self._session.player.machineIdentifier) self._name = self._convert_na_to_none(self._session.player.title) self._player_state = self._session.player.state + self._session_username = self._session.username self._make = self._convert_na_to_none(self._session.player.device) else: self._is_player_available = False From b99dd19ad64e072d1e311633ac00fac9ada19c02 Mon Sep 17 00:00:00 2001 From: JesseWebDotCom Date: Sun, 2 Apr 2017 10:51:03 -0400 Subject: [PATCH 004/146] Fixed log errors if session username or content rating is blank --- homeassistant/components/media_player/plex.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/media_player/plex.py b/homeassistant/components/media_player/plex.py index b328a928538..5145ecf1e33 100644 --- a/homeassistant/components/media_player/plex.py +++ b/homeassistant/components/media_player/plex.py @@ -330,7 +330,8 @@ class PlexClient(MediaPlayerDevice): self._session.viewOffset) self._media_content_id = self._convert_na_to_none( self._session.ratingKey) - self._media_content_rating = self._session.contentRating + self._media_content_rating = self._convert_na_to_none( + self._session.contentRating) else: self._media_position = None self._media_content_id = None @@ -342,7 +343,8 @@ class PlexClient(MediaPlayerDevice): self._session.player.machineIdentifier) self._name = self._convert_na_to_none(self._session.player.title) self._player_state = self._session.player.state - self._session_username = self._session.username + self._session_username = self._convert_na_to_none( + self._session.username) self._make = self._convert_na_to_none(self._session.player.device) else: self._is_player_available = False From 90a834cbdabbca8bf042f06b4d2e1b23ac8a1694 Mon Sep 17 00:00:00 2001 From: JesseWebDotCom Date: Tue, 4 Apr 2017 22:33:52 -0400 Subject: [PATCH 005/146] String formatting, import order, type check fixes --- homeassistant/components/media_player/plex.py | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/media_player/plex.py b/homeassistant/components/media_player/plex.py index 5145ecf1e33..d59b53a4581 100644 --- a/homeassistant/components/media_player/plex.py +++ b/homeassistant/components/media_player/plex.py @@ -789,7 +789,10 @@ class PlexClient(MediaPlayerDevice): media = self.device.server.library.section( src['library_name']).get(src['video_name']) - if media and media_type == 'EPISODE' and str(media.type) == 'playlist': + import plexapi.playlist + if (media and media_type == 'EPISODE' and + isinstance(media, plexapi.playlist.Playlist)): + # delete episode playlist after being loaded into a play queue self._client_play_media(media=media, delete=True, shuffle=src['shuffle']) elif media: @@ -805,7 +808,8 @@ class PlexClient(MediaPlayerDevice): show_name) if not season_number: - playlist_name = (self.entity_id + ' - ' + show_name + ' Episodes') + playlist_name = "{} - {} Episodes".format( + self.entity_id, show_name) return self.device.server.createPlaylist( playlist_name, show.episodes()) @@ -821,8 +825,8 @@ class PlexClient(MediaPlayerDevice): str(episode_number).zfill(2)) else: if not episode_number: - playlist_name = (self.entity_id + ' - ' + show_name + - ' Season ' + str(season_number) + ' Episodes') + playlist_name = "{} - {} Season {} Episodes".format( + self.entity_id, show_name, str(season_number)) return self.device.server.createPlaylist( playlist_name, target_season.episodes()) @@ -850,6 +854,10 @@ class PlexClient(MediaPlayerDevice): playqueue = plexapi.playqueue.PlayQueue.create(self.device.server, media, **params) + # delete dynamic playlists used to build playqueue (ex. play tv season) + if delete: + media.delete() + self._local_client_control_fix() server_url = self.device.server.baseurl.split(':') @@ -866,10 +874,6 @@ class PlexClient(MediaPlayerDevice): '/playQueues/%s?window=100&own=1' % playqueue.playQueueID, }, **params)) - # delete dynamic playlists used to build playqueue (ex. play tv season) - if delete: - media.delete() - @property def device_state_attributes(self): """Return the scene state attributes.""" From 51dc8b78ccfbe6c0e103075e6dd214f255867a94 Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Thu, 6 Apr 2017 18:12:24 -0400 Subject: [PATCH 006/146] Update kodi for aiohttp2 (#6967) --- homeassistant/components/media_player/kodi.py | 2 +- homeassistant/components/notify/kodi.py | 2 +- requirements_all.txt | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/media_player/kodi.py b/homeassistant/components/media_player/kodi.py index 97b10d03f0e..a137a332f7e 100644 --- a/homeassistant/components/media_player/kodi.py +++ b/homeassistant/components/media_player/kodi.py @@ -27,7 +27,7 @@ from homeassistant.helpers.aiohttp_client import async_get_clientsession import homeassistant.helpers.config_validation as cv from homeassistant.helpers.deprecation import get_deprecated -REQUIREMENTS = ['jsonrpc-async==0.4', 'jsonrpc-websocket==0.3'] +REQUIREMENTS = ['jsonrpc-async==0.6', 'jsonrpc-websocket==0.5'] _LOGGER = logging.getLogger(__name__) diff --git a/homeassistant/components/notify/kodi.py b/homeassistant/components/notify/kodi.py index be0d94afd55..db72fff37d5 100644 --- a/homeassistant/components/notify/kodi.py +++ b/homeassistant/components/notify/kodi.py @@ -19,7 +19,7 @@ from homeassistant.components.notify import ( from homeassistant.helpers.aiohttp_client import async_get_clientsession import homeassistant.helpers.config_validation as cv -REQUIREMENTS = ['jsonrpc-async==0.4'] +REQUIREMENTS = ['jsonrpc-async==0.6'] _LOGGER = logging.getLogger(__name__) diff --git a/requirements_all.txt b/requirements_all.txt index 86305ed8722..121b4845372 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -337,10 +337,10 @@ insteonplm==0.7.4 # homeassistant.components.media_player.kodi # homeassistant.components.notify.kodi -jsonrpc-async==0.4 +jsonrpc-async==0.6 # homeassistant.components.media_player.kodi -jsonrpc-websocket==0.3 +jsonrpc-websocket==0.5 # homeassistant.scripts.keyring keyring>=9.3,<10.0 From 2ce8c2f80e36d51a9803251b98bca9e37e4b4d42 Mon Sep 17 00:00:00 2001 From: aufano Date: Fri, 7 Apr 2017 02:40:59 +0200 Subject: [PATCH 007/146] Fix current_temperature is rounded (#6960) * Fix current_temperature is rounded * fix Unnecessary parens after 'if' --- homeassistant/components/climate/__init__.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/homeassistant/components/climate/__init__.py b/homeassistant/components/climate/__init__.py index bd2e38433d6..2a0bd2eb5c1 100644 --- a/homeassistant/components/climate/__init__.py +++ b/homeassistant/components/climate/__init__.py @@ -692,18 +692,16 @@ class ClimateDevice(Entity): def _convert_for_display(self, temp): """Convert temperature into preferred units for display purposes.""" - if (temp is None or not isinstance(temp, Number) or - self.temperature_unit == self.unit_of_measurement): + if temp is None or not isinstance(temp, Number): return temp - - value = convert_temperature(temp, self.temperature_unit, - self.unit_of_measurement) - + if self.temperature_unit != self.unit_of_measurement: + temp = convert_temperature(temp, self.temperature_unit, + self.unit_of_measurement) # Round in the units appropriate if self.precision == PRECISION_HALVES: - return round(value * 2) / 2.0 + return round(temp * 2) / 2.0 elif self.precision == PRECISION_TENTHS: - return round(value, 1) + return round(temp, 1) else: # PRECISION_WHOLE as a fall back - return round(value) + return round(temp) From c20d48c8e0e088be8e5e2cba6924af8eaf867800 Mon Sep 17 00:00:00 2001 From: JesseWebDotCom Date: Thu, 6 Apr 2017 20:52:56 -0400 Subject: [PATCH 008/146] import order fix --- homeassistant/components/media_player/plex.py | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/media_player/plex.py b/homeassistant/components/media_player/plex.py index d59b53a4581..a8aeeeef8ca 100644 --- a/homeassistant/components/media_player/plex.py +++ b/homeassistant/components/media_player/plex.py @@ -4,26 +4,40 @@ Support to interface with the Plex API. For more details about this platform, please refer to the documentation at https://home-assistant.io/components/media_player.plex/ """ -from datetime import timedelta import json import logging import os +from datetime import timedelta from urllib.parse import urlparse import requests - +import voluptuous as vol from homeassistant import util from homeassistant.components.media_player import ( - MEDIA_TYPE_MUSIC, MEDIA_TYPE_TVSHOW, MEDIA_TYPE_VIDEO, PLATFORM_SCHEMA, - SUPPORT_NEXT_TRACK, SUPPORT_PAUSE, SUPPORT_PLAY, SUPPORT_PREVIOUS_TRACK, - SUPPORT_STOP, SUPPORT_TURN_OFF, SUPPORT_VOLUME_MUTE, SUPPORT_VOLUME_SET, - MediaPlayerDevice) + MEDIA_TYPE_MUSIC, + MEDIA_TYPE_TVSHOW, + MEDIA_TYPE_VIDEO, + PLATFORM_SCHEMA, + SUPPORT_NEXT_TRACK, + SUPPORT_PAUSE, + SUPPORT_PLAY, + SUPPORT_PREVIOUS_TRACK, + SUPPORT_STOP, + SUPPORT_TURN_OFF, + SUPPORT_VOLUME_MUTE, + SUPPORT_VOLUME_SET, + MediaPlayerDevice, +) from homeassistant.const import ( - DEVICE_DEFAULT_NAME, STATE_IDLE, STATE_OFF, STATE_PAUSED, STATE_PLAYING) + DEVICE_DEFAULT_NAME, + STATE_IDLE, + STATE_OFF, + STATE_PAUSED, + STATE_PLAYING, +) from homeassistant.helpers import config_validation as cv from homeassistant.helpers.event import track_utc_time_change from homeassistant.loader import get_component -import voluptuous as vol REQUIREMENTS = ['plexapi==2.0.2'] MIN_TIME_BETWEEN_SCANS = timedelta(seconds=10) From 74ac16035588c8324ba1ceb564b4205ca03db94b Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Fri, 7 Apr 2017 06:00:58 +0200 Subject: [PATCH 009/146] Bugfix time and task coro (#6968) * Bugfix time and task coro * fix also other create_task * fix tests * fix lint in test --- homeassistant/core.py | 22 +++++++++------------- tests/test_core.py | 44 +++++++++++++++++-------------------------- 2 files changed, 26 insertions(+), 40 deletions(-) diff --git a/homeassistant/core.py b/homeassistant/core.py index 7c4ff43bd7a..03cc3d4e9f5 100644 --- a/homeassistant/core.py +++ b/homeassistant/core.py @@ -31,7 +31,8 @@ from homeassistant.const import ( from homeassistant.exceptions import ( HomeAssistantError, InvalidEntityFormatError) from homeassistant.util.async import ( - run_coroutine_threadsafe, run_callback_threadsafe) + run_coroutine_threadsafe, run_callback_threadsafe, + fire_coroutine_threadsafe) import homeassistant.util as util import homeassistant.util.dt as dt_util import homeassistant.util.location as location @@ -131,7 +132,7 @@ class HomeAssistant(object): def start(self) -> None: """Start home assistant.""" # Register the async start - self.add_job(self.async_start()) + fire_coroutine_threadsafe(self.async_start(), self.loop) # Run forever and catch keyboard interrupt try: @@ -140,7 +141,7 @@ class HomeAssistant(object): self.loop.run_forever() return self.exit_code except KeyboardInterrupt: - self.loop.create_task(self.async_stop()) + fire_coroutine_threadsafe(self.async_stop(), self.loop) self.loop.run_forever() finally: self.loop.close() @@ -246,8 +247,7 @@ class HomeAssistant(object): def stop(self) -> None: """Stop Home Assistant and shuts down all threads.""" - self.loop.call_soon_threadsafe( - self.loop.create_task, self.async_stop()) + fire_coroutine_threadsafe(self.async_stop(), self.loop) @asyncio.coroutine def async_stop(self, exit_code=0) -> None: @@ -1091,17 +1091,13 @@ def _async_create_timer(hass): handle = hass.loop.call_later(slp_seconds, fire_time_event, nxt) - @callback - def start_timer(event): - """Create an async timer.""" - _LOGGER.info("Timer:starting") - hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, stop_timer) - fire_time_event(monotonic()) - @callback def stop_timer(event): """Stop the timer.""" if handle is not None: handle.cancel() - hass.bus.async_listen_once(EVENT_HOMEASSISTANT_START, start_timer) + hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, stop_timer) + + _LOGGER.info("Timer:starting") + fire_time_event(monotonic()) diff --git a/tests/test_core.py b/tests/test_core.py index a68373b2ecc..ea7f40aaff7 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -16,8 +16,7 @@ from homeassistant.util.unit_system import (METRIC_SYSTEM) from homeassistant.const import ( __version__, EVENT_STATE_CHANGED, ATTR_FRIENDLY_NAME, CONF_UNIT_SYSTEM, ATTR_NOW, EVENT_TIME_CHANGED, EVENT_HOMEASSISTANT_STOP, - EVENT_HOMEASSISTANT_CLOSE, EVENT_HOMEASSISTANT_START, - EVENT_SERVICE_REGISTERED, EVENT_SERVICE_REMOVED) + EVENT_HOMEASSISTANT_CLOSE, EVENT_SERVICE_REGISTERED, EVENT_SERVICE_REMOVED) from tests.common import get_test_home_assistant @@ -813,28 +812,21 @@ def test_create_timer(mock_monotonic, loop): funcs.append(func) return orig_callback(func) - with patch.object(ha, 'callback', mock_callback): - ha._async_create_timer(hass) - - assert len(funcs) == 3 - fire_time_event, start_timer, stop_timer = funcs - - assert len(hass.bus.async_listen_once.mock_calls) == 1 - event_type, callback = hass.bus.async_listen_once.mock_calls[0][1] - assert event_type == EVENT_HOMEASSISTANT_START - assert callback is start_timer - mock_monotonic.side_effect = 10.2, 10.3 - with patch('homeassistant.core.dt_util.utcnow', - return_value=sentinel.mock_date): - start_timer(None) + with patch.object(ha, 'callback', mock_callback), \ + patch('homeassistant.core.dt_util.utcnow', + return_value=sentinel.mock_date): + ha._async_create_timer(hass) - assert len(hass.bus.async_listen_once.mock_calls) == 2 + assert len(funcs) == 2 + fire_time_event, stop_timer = funcs + + assert len(hass.bus.async_listen_once.mock_calls) == 1 assert len(hass.bus.async_fire.mock_calls) == 1 assert len(hass.loop.call_later.mock_calls) == 1 - event_type, callback = hass.bus.async_listen_once.mock_calls[1][1] + event_type, callback = hass.bus.async_listen_once.mock_calls[0][1] assert event_type == EVENT_HOMEASSISTANT_STOP assert callback is stop_timer @@ -859,17 +851,15 @@ def test_timer_out_of_sync(mock_monotonic, loop): funcs.append(func) return orig_callback(func) - with patch.object(ha, 'callback', mock_callback): - ha._async_create_timer(hass) - - assert len(funcs) == 3 - fire_time_event, start_timer, stop_timer = funcs - mock_monotonic.side_effect = 10.2, 11.3, 11.3 - with patch('homeassistant.core.dt_util.utcnow', - return_value=sentinel.mock_date): - start_timer(None) + with patch.object(ha, 'callback', mock_callback), \ + patch('homeassistant.core.dt_util.utcnow', + return_value=sentinel.mock_date): + ha._async_create_timer(hass) + + assert len(funcs) == 2 + fire_time_event, stop_timer = funcs assert len(hass.loop.call_later.mock_calls) == 1 From 3e66df50c85c9b2dfd1cee7e6756d3e766de886f Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Fri, 7 Apr 2017 07:19:08 +0200 Subject: [PATCH 010/146] Initial import for HassIO (#6935) * Initial import for HassIO * Cleanup api code for views * First unittest for view * Add test for edit view * Finish unittest * fix addons test * cleanup service.yaml * Address first round with ping command * handle timeout dynamic * fix lint --- homeassistant/components/hassio.py | 272 +++++++++++++ homeassistant/components/services.yaml | 69 ++++ tests/components/test_hassio.py | 543 +++++++++++++++++++++++++ tests/test_util/aiohttp.py | 4 +- 4 files changed, 887 insertions(+), 1 deletion(-) create mode 100644 homeassistant/components/hassio.py create mode 100644 tests/components/test_hassio.py diff --git a/homeassistant/components/hassio.py b/homeassistant/components/hassio.py new file mode 100644 index 00000000000..154be0917bb --- /dev/null +++ b/homeassistant/components/hassio.py @@ -0,0 +1,272 @@ +""" +Exposes regular rest commands as services. + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/hassio/ +""" +import asyncio +import logging +import os + +import aiohttp +from aiohttp import web +from aiohttp.web_exceptions import HTTPBadGateway +import async_timeout +import voluptuous as vol + +from homeassistant.config import load_yaml_config_file +from homeassistant.components.http import HomeAssistantView +from homeassistant.helpers.aiohttp_client import async_get_clientsession +import homeassistant.helpers.config_validation as cv + +DOMAIN = 'hassio' +DEPENDENCIES = ['http'] + +_LOGGER = logging.getLogger(__name__) + +LONG_TASK_TIMEOUT = 900 +DEFAULT_TIMEOUT = 10 + +SERVICE_HOST_SHUTDOWN = 'host_shutdown' +SERVICE_HOST_REBOOT = 'host_reboot' + +SERVICE_HOST_UPDATE = 'host_update' +SERVICE_SUPERVISOR_UPDATE = 'supervisor_update' +SERVICE_HOMEASSISTANT_UPDATE = 'homeassistant_update' + +SERVICE_ADDON_INSTALL = 'addon_install' +SERVICE_ADDON_UNINSTALL = 'addon_uninstall' +SERVICE_ADDON_UPDATE = 'addon_update' +SERVICE_ADDON_START = 'addon_start' +SERVICE_ADDON_STOP = 'addon_stop' + +ATTR_ADDON = 'addon' +ATTR_VERSION = 'version' + + +SCHEMA_SERVICE_UPDATE = vol.Schema({ + vol.Optional(ATTR_VERSION): cv.string, +}) + +SCHEMA_SERVICE_ADDONS = vol.Schema({ + vol.Required(ATTR_ADDON): cv.slug, +}) + +SCHEMA_SERVICE_ADDONS_VERSION = SCHEMA_SERVICE_ADDONS.extend({ + vol.Optional(ATTR_VERSION): cv.string, +}) + + +SERVICE_MAP = { + SERVICE_HOST_SHUTDOWN: None, + SERVICE_HOST_REBOOT: None, + SERVICE_HOST_UPDATE: SCHEMA_SERVICE_UPDATE, + SERVICE_SUPERVISOR_UPDATE: SCHEMA_SERVICE_UPDATE, + SERVICE_HOMEASSISTANT_UPDATE: SCHEMA_SERVICE_UPDATE, + SERVICE_ADDON_INSTALL: SCHEMA_SERVICE_ADDONS_VERSION, + SERVICE_ADDON_UNINSTALL: SCHEMA_SERVICE_ADDONS, + SERVICE_ADDON_START: SCHEMA_SERVICE_ADDONS, + SERVICE_ADDON_STOP: SCHEMA_SERVICE_ADDONS, + SERVICE_ADDON_UPDATE: SCHEMA_SERVICE_ADDONS_VERSION, +} + + +@asyncio.coroutine +def async_setup(hass, config): + """Setup the hassio component.""" + try: + host = os.environ['HASSIO'] + except KeyError: + _LOGGER.error("No HassIO supervisor detect!") + return False + + websession = async_get_clientsession(hass) + hassio = HassIO(hass.loop, websession, host) + + api_ok = yield from hassio.is_connected() + if not api_ok: + _LOGGER.error("Not connected with HassIO!") + return False + + # register base api views + for base in ('host', 'homeassistant'): + hass.http.register_view(HassIOBaseView(hassio, base)) + for base in ('supervisor', 'network'): + hass.http.register_view(HassIOBaseEditView(hassio, base)) + + # register view for addons + hass.http.register_view(HassIOAddonsView(hassio)) + + @asyncio.coroutine + def async_service_handler(service): + """Handle HassIO service calls.""" + addon = service.data.get(ATTR_ADDON) + if ATTR_VERSION in service.data: + version = {ATTR_VERSION: service.data[ATTR_VERSION]} + else: + version = None + + # map to api call + if service.service == SERVICE_HOST_UPDATE: + yield from hassio.send_command( + "/host/update", payload=version) + elif service.service == SERVICE_HOST_REBOOT: + yield from hassio.send_command("/host/reboot") + elif service.service == SERVICE_HOST_SHUTDOWN: + yield from hassio.send_command("/host/shutdown") + elif service.service == SERVICE_SUPERVISOR_UPDATE: + yield from hassio.send_command( + "/supervisor/update", payload=version) + elif service.service == SERVICE_HOMEASSISTANT_UPDATE: + yield from hassio.send_command( + "/homeassistant/update", payload=version, + timeout=LONG_TASK_TIMEOUT) + elif service.service == SERVICE_ADDON_INSTALL: + yield from hassio.send_command( + "/addons/{}/install".format(addon), payload=version, + timeout=LONG_TASK_TIMEOUT) + elif service.service == SERVICE_ADDON_UNINSTALL: + yield from hassio.send_command( + "/addons/{}/uninstall".format(addon)) + elif service.service == SERVICE_ADDON_START: + yield from hassio.send_command("/addons/{}/start".format(addon)) + elif service.service == SERVICE_ADDON_STOP: + yield from hassio.send_command("/addons/{}/stop".format(addon)) + elif service.service == SERVICE_ADDON_UPDATE: + yield from hassio.send_command( + "/addons/{}/update".format(addon), payload=version, + timeout=LONG_TASK_TIMEOUT) + + descriptions = yield from hass.loop.run_in_executor( + None, load_yaml_config_file, os.path.join( + os.path.dirname(__file__), 'services.yaml')) + + for service, schema in SERVICE_MAP.items(): + hass.services.async_register( + DOMAIN, service, async_service_handler, + descriptions[DOMAIN][service], schema=schema) + + return True + + +class HassIO(object): + """Small API wrapper for HassIO.""" + + def __init__(self, loop, websession, ip): + """Initialze HassIO api.""" + self.loop = loop + self.websession = websession + self._ip = ip + + def is_connected(self): + """Return True if it connected to HassIO supervisor. + + Return a coroutine. + """ + return self.send_command("/supervisor/ping") + + @asyncio.coroutine + def send_command(self, cmd, payload=None, timeout=DEFAULT_TIMEOUT): + """Send request to API.""" + answer = yield from self.send_raw(cmd, payload=payload) + if answer['result'] == 'ok': + return answer['data'] if answer['data'] else True + + _LOGGER.error("%s return error %s.", cmd, answer['message']) + return False + + @asyncio.coroutine + def send_raw(self, cmd, payload=None, timeout=DEFAULT_TIMEOUT): + """Send raw request to API.""" + try: + with async_timeout.timeout(timeout, loop=self.loop): + request = yield from self.websession.get( + "http://{}{}".format(self._ip, cmd), + timeout=None, json=payload + ) + + if request.status != 200: + _LOGGER.error("%s return code %d.", cmd, request.status) + return + + return (yield from request.json()) + + except asyncio.TimeoutError: + _LOGGER.error("Timeout on api request %s.", cmd) + + except aiohttp.ClientError: + _LOGGER.error("Client error on api request %s.", cmd) + + +class HassIOBaseView(HomeAssistantView): + """HassIO view to handle base part.""" + + requires_auth = True + + def __init__(self, hassio, base): + """Initialize a hassio base view.""" + self.hassio = hassio + self._url_info = "/{}/info".format(base) + + self.url = "/api/hassio/{}".format(base) + self.name = "api:hassio:{}".format(base) + + @asyncio.coroutine + def get(self, request): + """Get base data.""" + data = yield from self.hassio.send_command(self._url_info) + if not data: + raise HTTPBadGateway() + return web.json_response(data) + + +class HassIOBaseEditView(HassIOBaseView): + """HassIO view to handle base with options support.""" + + def __init__(self, hassio, base): + """Initialize a hassio base edit view.""" + super().__init__(hassio, base) + self._url_options = "/{}/options".format(base) + + @asyncio.coroutine + def post(self, request): + """Set options on host.""" + data = yield from request.json() + + response = yield from self.hassio.send_raw( + self._url_options, payload=data) + if not response: + raise HTTPBadGateway() + return web.json_response(response) + + +class HassIOAddonsView(HomeAssistantView): + """HassIO view to handle addons part.""" + + requires_auth = True + url = "/api/hassio/addons/{addon}" + name = "api:hassio:addons" + + def __init__(self, hassio): + """Initialize a hassio addon view.""" + self.hassio = hassio + + @asyncio.coroutine + def get(self, request, addon): + """Get addon data.""" + data = yield from self.hassio.send_command( + "/addons/{}/info".format(addon)) + if not data: + raise HTTPBadGateway() + return web.json_response(data) + + @asyncio.coroutine + def post(self, request, addon): + """Set options on host.""" + data = yield from request.json() + + response = yield from self.hassio.send_raw( + "/addons/{}/options".format(addon), payload=data) + if not response: + raise HTTPBadGateway() + return web.json_response(response) diff --git a/homeassistant/components/services.yaml b/homeassistant/components/services.yaml index a28a95969fb..cf5999200d8 100644 --- a/homeassistant/components/services.yaml +++ b/homeassistant/components/services.yaml @@ -316,3 +316,72 @@ ffmpeg: logger: set_level: description: Set log level for components. + +hassio: + host_reboot: + description: Reboot host computer. + + host_shutdown: + description: Poweroff host computer. + + host_update: + description: Update host computer. + fields: + version: + description: Optional or it will be use the latest version. + example: '0.3' + + supervisor_update: + description: Update HassIO supervisor. + fields: + version: + description: Optional or it will be use the latest version. + example: '0.3' + + homeassistant_update: + description: Update HomeAssistant docker image. + fields: + version: + description: Optional or it will be use the latest version. + example: '0.40.1' + + addon_install: + description: Install a HassIO docker addon. + fields: + addon: + description: Name of addon. + example: 'smb_config' + version: + description: Optional or it will be use the latest version. + example: '0.2' + + addon_uninstall: + description: Uninstall a HassIO docker addon. + fields: + addon: + description: Name of addon. + example: 'smb_config' + + addon_update: + description: Update a HassIO docker addon. + fields: + addon: + description: Name of addon. + example: 'smb_config' + version: + description: Optional or it will be use the latest version. + example: '0.2' + + addon_start: + description: Start a HassIO docker addon. + fields: + addon: + description: Name of addon. + example: 'smb_config' + + addon_stop: + description: Stop a HassIO docker addon. + fields: + addon: + description: Name of addon. + example: 'smb_config' diff --git a/tests/components/test_hassio.py b/tests/components/test_hassio.py new file mode 100644 index 00000000000..bde419c4104 --- /dev/null +++ b/tests/components/test_hassio.py @@ -0,0 +1,543 @@ +"""The tests for the hassio component.""" +import asyncio +import os + +import aiohttp + +import homeassistant.components.hassio as ho +from homeassistant.setup import setup_component, async_setup_component + +from tests.common import ( + get_test_home_assistant, assert_setup_component) + + +class TestHassIOSetup(object): + """Test the hassio component.""" + + def setup_method(self): + """Setup things to be run when tests are started.""" + self.hass = get_test_home_assistant() + + self.config = { + ho.DOMAIN: {}, + } + + os.environ['HASSIO'] = "127.0.0.1" + + def teardown_method(self): + """Stop everything that was started.""" + self.hass.stop() + + def test_setup_component(self, aioclient_mock): + """Test setup component.""" + aioclient_mock.get("http://127.0.0.1/supervisor/ping", json={ + 'result': 'ok', 'data': {} + }) + with assert_setup_component(0, ho.DOMAIN): + setup_component(self.hass, ho.DOMAIN, self.config) + + def test_setup_component_test_service(self, aioclient_mock): + """Test setup component and check if service exits.""" + aioclient_mock.get("http://127.0.0.1/supervisor/ping", json={ + 'result': 'ok', 'data': {} + }) + with assert_setup_component(0, ho.DOMAIN): + setup_component(self.hass, ho.DOMAIN, self.config) + + assert self.hass.services.has_service( + ho.DOMAIN, ho.SERVICE_HOST_REBOOT) + assert self.hass.services.has_service( + ho.DOMAIN, ho.SERVICE_HOST_SHUTDOWN) + assert self.hass.services.has_service( + ho.DOMAIN, ho.SERVICE_HOST_UPDATE) + + assert self.hass.services.has_service( + ho.DOMAIN, ho.SERVICE_SUPERVISOR_UPDATE) + + assert self.hass.services.has_service( + ho.DOMAIN, ho.SERVICE_ADDON_INSTALL) + assert self.hass.services.has_service( + ho.DOMAIN, ho.SERVICE_ADDON_UNINSTALL) + assert self.hass.services.has_service( + ho.DOMAIN, ho.SERVICE_ADDON_UPDATE) + assert self.hass.services.has_service( + ho.DOMAIN, ho.SERVICE_ADDON_START) + assert self.hass.services.has_service( + ho.DOMAIN, ho.SERVICE_ADDON_STOP) + + +class TestHassIOComponent(object): + """Test the HassIO component.""" + + def setup_method(self): + """Setup things to be run when tests are started.""" + self.hass = get_test_home_assistant() + self.config = { + ho.DOMAIN: {}, + } + + os.environ['HASSIO'] = "127.0.0.1" + self.url = "http://127.0.0.1/{}" + + self.error_msg = { + 'result': 'error', + 'message': 'Test error', + } + self.ok_msg = { + 'result': 'ok', + 'data': {}, + } + + def teardown_method(self): + """Stop everything that was started.""" + self.hass.stop() + + def test_rest_command_timeout(self, aioclient_mock): + """Call a hassio with timeout.""" + aioclient_mock.get( + "http://127.0.0.1/supervisor/ping", json=self.ok_msg) + with assert_setup_component(0, ho.DOMAIN): + setup_component(self.hass, ho.DOMAIN, self.config) + + aioclient_mock.get( + self.url.format("host/update"), exc=asyncio.TimeoutError()) + + self.hass.services.call(ho.DOMAIN, ho.SERVICE_HOST_UPDATE, {}) + self.hass.block_till_done() + + assert len(aioclient_mock.mock_calls) == 2 + + def test_rest_command_aiohttp_error(self, aioclient_mock): + """Call a hassio with aiohttp exception.""" + aioclient_mock.get( + "http://127.0.0.1/supervisor/ping", json=self.ok_msg) + with assert_setup_component(0, ho.DOMAIN): + setup_component(self.hass, ho.DOMAIN, self.config) + + aioclient_mock.get( + self.url.format("host/update"), exc=aiohttp.ClientError()) + + self.hass.services.call(ho.DOMAIN, ho.SERVICE_HOST_UPDATE, {}) + self.hass.block_till_done() + + assert len(aioclient_mock.mock_calls) == 2 + + def test_rest_command_http_error(self, aioclient_mock): + """Call a hassio with status code 503.""" + aioclient_mock.get( + "http://127.0.0.1/supervisor/ping", json=self.ok_msg) + with assert_setup_component(0, ho.DOMAIN): + setup_component(self.hass, ho.DOMAIN, self.config) + + aioclient_mock.get( + self.url.format("host/update"), status=503) + + self.hass.services.call(ho.DOMAIN, ho.SERVICE_HOST_UPDATE, {}) + self.hass.block_till_done() + + assert len(aioclient_mock.mock_calls) == 2 + + def test_rest_command_http_error_api(self, aioclient_mock): + """Call a hassio with status code 503.""" + aioclient_mock.get( + "http://127.0.0.1/supervisor/ping", json=self.ok_msg) + with assert_setup_component(0, ho.DOMAIN): + setup_component(self.hass, ho.DOMAIN, self.config) + + aioclient_mock.get( + self.url.format("host/update"), json=self.error_msg) + + self.hass.services.call(ho.DOMAIN, ho.SERVICE_HOST_UPDATE, {}) + self.hass.block_till_done() + + assert len(aioclient_mock.mock_calls) == 2 + + def test_rest_command_http_host_reboot(self, aioclient_mock): + """Call a hassio for host reboot.""" + aioclient_mock.get( + "http://127.0.0.1/supervisor/ping", json=self.ok_msg) + with assert_setup_component(0, ho.DOMAIN): + setup_component(self.hass, ho.DOMAIN, self.config) + + aioclient_mock.get( + self.url.format("host/reboot"), json=self.ok_msg) + + self.hass.services.call(ho.DOMAIN, ho.SERVICE_HOST_REBOOT, {}) + self.hass.block_till_done() + + assert len(aioclient_mock.mock_calls) == 2 + + def test_rest_command_http_host_shutdown(self, aioclient_mock): + """Call a hassio for host shutdown.""" + aioclient_mock.get( + "http://127.0.0.1/supervisor/ping", json=self.ok_msg) + with assert_setup_component(0, ho.DOMAIN): + setup_component(self.hass, ho.DOMAIN, self.config) + + aioclient_mock.get( + self.url.format("host/shutdown"), json=self.ok_msg) + + self.hass.services.call(ho.DOMAIN, ho.SERVICE_HOST_SHUTDOWN, {}) + self.hass.block_till_done() + + assert len(aioclient_mock.mock_calls) == 2 + + def test_rest_command_http_host_update(self, aioclient_mock): + """Call a hassio for host update.""" + aioclient_mock.get( + "http://127.0.0.1/supervisor/ping", json=self.ok_msg) + with assert_setup_component(0, ho.DOMAIN): + setup_component(self.hass, ho.DOMAIN, self.config) + + aioclient_mock.get( + self.url.format("host/update"), json=self.ok_msg) + + self.hass.services.call( + ho.DOMAIN, ho.SERVICE_HOST_UPDATE, {'version': '0.4'}) + self.hass.block_till_done() + + assert len(aioclient_mock.mock_calls) == 2 + assert aioclient_mock.mock_calls[-1][2]['version'] == '0.4' + + def test_rest_command_http_supervisor_update(self, aioclient_mock): + """Call a hassio for supervisor update.""" + aioclient_mock.get( + "http://127.0.0.1/supervisor/ping", json=self.ok_msg) + with assert_setup_component(0, ho.DOMAIN): + setup_component(self.hass, ho.DOMAIN, self.config) + + aioclient_mock.get( + self.url.format("supervisor/update"), json=self.ok_msg) + + self.hass.services.call( + ho.DOMAIN, ho.SERVICE_SUPERVISOR_UPDATE, {'version': '0.4'}) + self.hass.block_till_done() + + assert len(aioclient_mock.mock_calls) == 2 + assert aioclient_mock.mock_calls[-1][2]['version'] == '0.4' + + def test_rest_command_http_homeassistant_update(self, aioclient_mock): + """Call a hassio for homeassistant update.""" + aioclient_mock.get( + "http://127.0.0.1/supervisor/ping", json=self.ok_msg) + with assert_setup_component(0, ho.DOMAIN): + setup_component(self.hass, ho.DOMAIN, self.config) + + aioclient_mock.get( + self.url.format("homeassistant/update"), json=self.ok_msg) + + self.hass.services.call( + ho.DOMAIN, ho.SERVICE_HOMEASSISTANT_UPDATE, {'version': '0.4'}) + self.hass.block_till_done() + + assert len(aioclient_mock.mock_calls) == 2 + assert aioclient_mock.mock_calls[-1][2]['version'] == '0.4' + + def test_rest_command_http_addon_install(self, aioclient_mock): + """Call a hassio for addon install.""" + aioclient_mock.get( + "http://127.0.0.1/supervisor/ping", json=self.ok_msg) + with assert_setup_component(0, ho.DOMAIN): + setup_component(self.hass, ho.DOMAIN, self.config) + + aioclient_mock.get( + self.url.format("addons/smb_config/install"), json=self.ok_msg) + + self.hass.services.call( + ho.DOMAIN, ho.SERVICE_ADDON_INSTALL, { + 'addon': 'smb_config', + 'version': '0.4' + }) + self.hass.block_till_done() + + assert len(aioclient_mock.mock_calls) == 2 + assert aioclient_mock.mock_calls[-1][2]['version'] == '0.4' + + def test_rest_command_http_addon_uninstall(self, aioclient_mock): + """Call a hassio for addon uninstall.""" + aioclient_mock.get( + "http://127.0.0.1/supervisor/ping", json=self.ok_msg) + with assert_setup_component(0, ho.DOMAIN): + setup_component(self.hass, ho.DOMAIN, self.config) + + aioclient_mock.get( + self.url.format("addons/smb_config/uninstall"), json=self.ok_msg) + + self.hass.services.call( + ho.DOMAIN, ho.SERVICE_ADDON_UNINSTALL, { + 'addon': 'smb_config' + }) + self.hass.block_till_done() + + assert len(aioclient_mock.mock_calls) == 2 + + def test_rest_command_http_addon_update(self, aioclient_mock): + """Call a hassio for addon update.""" + aioclient_mock.get( + "http://127.0.0.1/supervisor/ping", json=self.ok_msg) + with assert_setup_component(0, ho.DOMAIN): + setup_component(self.hass, ho.DOMAIN, self.config) + + aioclient_mock.get( + self.url.format("addons/smb_config/update"), json=self.ok_msg) + + self.hass.services.call( + ho.DOMAIN, ho.SERVICE_ADDON_UPDATE, { + 'addon': 'smb_config', + 'version': '0.4' + }) + self.hass.block_till_done() + + assert len(aioclient_mock.mock_calls) == 2 + assert aioclient_mock.mock_calls[-1][2]['version'] == '0.4' + + def test_rest_command_http_addon_start(self, aioclient_mock): + """Call a hassio for addon start.""" + aioclient_mock.get( + "http://127.0.0.1/supervisor/ping", json=self.ok_msg) + with assert_setup_component(0, ho.DOMAIN): + setup_component(self.hass, ho.DOMAIN, self.config) + + aioclient_mock.get( + self.url.format("addons/smb_config/start"), json=self.ok_msg) + + self.hass.services.call( + ho.DOMAIN, ho.SERVICE_ADDON_START, { + 'addon': 'smb_config', + }) + self.hass.block_till_done() + + assert len(aioclient_mock.mock_calls) == 2 + + def test_rest_command_http_addon_stop(self, aioclient_mock): + """Call a hassio for addon stop.""" + aioclient_mock.get( + "http://127.0.0.1/supervisor/ping", json=self.ok_msg) + with assert_setup_component(0, ho.DOMAIN): + setup_component(self.hass, ho.DOMAIN, self.config) + + aioclient_mock.get( + self.url.format("addons/smb_config/stop"), json=self.ok_msg) + + self.hass.services.call( + ho.DOMAIN, ho.SERVICE_ADDON_STOP, { + 'addon': 'smb_config' + }) + self.hass.block_till_done() + + assert len(aioclient_mock.mock_calls) == 2 + + +@asyncio.coroutine +def test_async_hassio_host_view(aioclient_mock, hass, test_client): + """Test that it fetches the given url.""" + os.environ['HASSIO'] = "127.0.0.1" + + aioclient_mock.get("http://127.0.0.1/supervisor/ping", json={ + 'result': 'ok', 'data': {} + }) + result = yield from async_setup_component(hass, ho.DOMAIN, {ho.DOMAIN: {}}) + assert result, 'Failed to setup hasio' + + client = yield from test_client(hass.http.app) + + aioclient_mock.get('http://127.0.0.1/host/info', json={ + 'result': 'ok', + 'data': { + 'os': 'resinos', + 'version': '0.3', + 'current': '0.4', + 'level': 16, + 'hostname': 'test', + } + }) + + resp = yield from client.get('/api/hassio/host') + data = yield from resp.json() + + assert len(aioclient_mock.mock_calls) == 2 + assert resp.status == 200 + assert data['os'] == 'resinos' + assert data['version'] == '0.3' + assert data['current'] == '0.4' + assert data['level'] == 16 + assert data['hostname'] == 'test' + + +@asyncio.coroutine +def test_async_hassio_homeassistant_view(aioclient_mock, hass, test_client): + """Test that it fetches the given url.""" + os.environ['HASSIO'] = "127.0.0.1" + + aioclient_mock.get("http://127.0.0.1/supervisor/ping", json={ + 'result': 'ok', 'data': {} + }) + result = yield from async_setup_component(hass, ho.DOMAIN, {ho.DOMAIN: {}}) + assert result, 'Failed to setup hasio' + + client = yield from test_client(hass.http.app) + + aioclient_mock.get('http://127.0.0.1/homeassistant/info', json={ + 'result': 'ok', + 'data': { + 'version': '0.41', + 'current': '0.41.1', + } + }) + + resp = yield from client.get('/api/hassio/homeassistant') + data = yield from resp.json() + + assert len(aioclient_mock.mock_calls) == 2 + assert resp.status == 200 + assert data['version'] == '0.41' + assert data['current'] == '0.41.1' + + +@asyncio.coroutine +def test_async_hassio_supervisor_view(aioclient_mock, hass, test_client): + """Test that it fetches the given url.""" + os.environ['HASSIO'] = "127.0.0.1" + + aioclient_mock.get("http://127.0.0.1/supervisor/ping", json={ + 'result': 'ok', 'data': {} + }) + result = yield from async_setup_component(hass, ho.DOMAIN, {ho.DOMAIN: {}}) + assert result, 'Failed to setup hasio' + + client = yield from test_client(hass.http.app) + + aioclient_mock.get('http://127.0.0.1/supervisor/info', json={ + 'result': 'ok', + 'data': { + 'version': '0.3', + 'current': '0.4', + 'beta': False, + } + }) + + resp = yield from client.get('/api/hassio/supervisor') + data = yield from resp.json() + + assert len(aioclient_mock.mock_calls) == 2 + assert resp.status == 200 + assert data['version'] == '0.3' + assert data['current'] == '0.4' + assert not data['beta'] + + aioclient_mock.get('http://127.0.0.1/supervisor/options', json={ + 'result': 'ok', + 'data': {}, + }) + + resp = yield from client.post('/api/hassio/supervisor', json={ + 'beta': True, + }) + data = yield from resp.json() + + assert len(aioclient_mock.mock_calls) == 3 + assert resp.status == 200 + assert aioclient_mock.mock_calls[-1][2]['beta'] + + +@asyncio.coroutine +def test_async_hassio_network_view(aioclient_mock, hass, test_client): + """Test that it fetches the given url.""" + os.environ['HASSIO'] = "127.0.0.1" + + aioclient_mock.get("http://127.0.0.1/supervisor/ping", json={ + 'result': 'ok', 'data': {} + }) + result = yield from async_setup_component(hass, ho.DOMAIN, {ho.DOMAIN: {}}) + assert result, 'Failed to setup hasio' + + client = yield from test_client(hass.http.app) + + aioclient_mock.get('http://127.0.0.1/network/info', json={ + 'result': 'ok', + 'data': { + 'mode': 'dhcp', + 'ssid': 'my_wlan', + 'password': '123456', + } + }) + + resp = yield from client.get('/api/hassio/network') + data = yield from resp.json() + + assert len(aioclient_mock.mock_calls) == 2 + assert resp.status == 200 + assert data['mode'] == 'dhcp' + assert data['ssid'] == 'my_wlan' + assert data['password'] == '123456' + + aioclient_mock.get('http://127.0.0.1/network/options', json={ + 'result': 'ok', + 'data': {}, + }) + + resp = yield from client.post('/api/hassio/network', json={ + 'mode': 'dhcp', + 'ssid': 'my_wlan2', + 'password': '654321', + }) + data = yield from resp.json() + + assert len(aioclient_mock.mock_calls) == 3 + assert resp.status == 200 + assert aioclient_mock.mock_calls[-1][2]['ssid'] == 'my_wlan2' + assert aioclient_mock.mock_calls[-1][2]['password'] == '654321' + + +@asyncio.coroutine +def test_async_hassio_addon_view(aioclient_mock, hass, test_client): + """Test that it fetches the given url.""" + os.environ['HASSIO'] = "127.0.0.1" + + aioclient_mock.get("http://127.0.0.1/supervisor/ping", json={ + 'result': 'ok', 'data': {} + }) + result = yield from async_setup_component(hass, ho.DOMAIN, {ho.DOMAIN: {}}) + assert result, 'Failed to setup hasio' + + client = yield from test_client(hass.http.app) + + aioclient_mock.get('http://127.0.0.1/addons/smb_config/info', json={ + 'result': 'ok', + 'data': { + 'name': 'SMB Config', + 'state': 'running', + 'boot': 'auto', + 'options': { + 'bla': False, + } + } + }) + + resp = yield from client.get('/api/hassio/addons/smb_config') + data = yield from resp.json() + + assert len(aioclient_mock.mock_calls) == 2 + assert resp.status == 200 + assert data['name'] == 'SMB Config' + assert data['state'] == 'running' + assert data['boot'] == 'auto' + assert not data['options']['bla'] + + aioclient_mock.get('http://127.0.0.1/addons/smb_config/options', json={ + 'result': 'ok', + 'data': {}, + }) + + resp = yield from client.post('/api/hassio/addons/smb_config', json={ + 'boot': 'manual', + 'options': { + 'bla': True, + } + }) + data = yield from resp.json() + + assert len(aioclient_mock.mock_calls) == 3 + assert resp.status == 200 + assert aioclient_mock.mock_calls[-1][2]['boot'] == 'manual' + assert aioclient_mock.mock_calls[-1][2]['options']['bla'] diff --git a/tests/test_util/aiohttp.py b/tests/test_util/aiohttp.py index 23e24cac0cd..39e926ab7e7 100644 --- a/tests/test_util/aiohttp.py +++ b/tests/test_util/aiohttp.py @@ -75,8 +75,10 @@ class AiohttpClientMocker: @asyncio.coroutine # pylint: disable=unused-variable def match_request(self, method, url, *, data=None, auth=None, params=None, - headers=None, allow_redirects=None): + headers=None, allow_redirects=None, timeout=None, + json=None): """Match a request against pre-registered requests.""" + data = data or json for response in self._mocks: if response.match_request(method, url, params): self.mock_calls.append((method, url, data)) From f96e06a2c23f3939cca3b546ca6675bf1c6ac16e Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 7 Apr 2017 08:39:35 +0300 Subject: [PATCH 011/146] Preserve customize glob order. (#6963) * Preserve customize glob order. * add tests --- homeassistant/components/zwave/__init__.py | 2 +- homeassistant/config.py | 2 +- tests/components/zwave/test_init.py | 15 +++++++++++++++ tests/test_config.py | 7 +++++++ 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/zwave/__init__.py b/homeassistant/components/zwave/__init__.py index f8903fd28cf..254b488ccbb 100755 --- a/homeassistant/components/zwave/__init__.py +++ b/homeassistant/components/zwave/__init__.py @@ -124,7 +124,7 @@ CONFIG_SCHEMA = vol.Schema({ vol.Optional(CONF_DEVICE_CONFIG, default={}): vol.Schema({cv.entity_id: DEVICE_CONFIG_SCHEMA_ENTRY}), vol.Optional(CONF_DEVICE_CONFIG_GLOB, default={}): - vol.Schema({cv.string: DEVICE_CONFIG_SCHEMA_ENTRY}), + cv.ordered_dict(DEVICE_CONFIG_SCHEMA_ENTRY, cv.string), vol.Optional(CONF_DEVICE_CONFIG_DOMAIN, default={}): vol.Schema({cv.string: DEVICE_CONFIG_SCHEMA_ENTRY}), vol.Optional(CONF_DEBUG, default=DEFAULT_DEBUG): cv.boolean, diff --git a/homeassistant/config.py b/homeassistant/config.py index 3968ea571c5..1508493a6d1 100644 --- a/homeassistant/config.py +++ b/homeassistant/config.py @@ -108,7 +108,7 @@ CUSTOMIZE_CONFIG_SCHEMA = vol.Schema({ vol.Optional(CONF_CUSTOMIZE_DOMAIN, default={}): vol.Schema({cv.string: dict}), vol.Optional(CONF_CUSTOMIZE_GLOB, default={}): - vol.Schema({cv.string: dict}), + cv.ordered_dict(OrderedDict, cv.string), }) CORE_CONFIG_SCHEMA = CUSTOMIZE_CONFIG_SCHEMA.extend({ diff --git a/tests/components/zwave/test_init.py b/tests/components/zwave/test_init.py index b982b357849..14b2a0226fe 100644 --- a/tests/components/zwave/test_init.py +++ b/tests/components/zwave/test_init.py @@ -1,7 +1,11 @@ """Tests for the Z-Wave init.""" import asyncio +import unittest +from collections import OrderedDict from homeassistant.bootstrap import async_setup_component +from homeassistant.components.zwave import ( + CONFIG_SCHEMA, CONF_DEVICE_CONFIG_GLOB) @asyncio.coroutine @@ -34,3 +38,14 @@ def test_invalid_device_config(hass, mock_openzwave): }}) assert not result + + +class TestZwave(unittest.TestCase): + """Test zwave init.""" + + def test_device_config_glob_is_ordered(self): + """Test that device_config_glob preserves order.""" + conf = CONFIG_SCHEMA( + {'zwave': {CONF_DEVICE_CONFIG_GLOB: OrderedDict()}}) + self.assertIsInstance( + conf['zwave'][CONF_DEVICE_CONFIG_GLOB], OrderedDict) diff --git a/tests/test_config.py b/tests/test_config.py index 990bd557e70..1d1208f8859 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -3,6 +3,7 @@ import os import unittest import unittest.mock as mock +from collections import OrderedDict import pytest from voluptuous import MultipleInvalid @@ -205,6 +206,12 @@ class TestConfig(unittest.TestCase): }, }) + def test_customize_glob_is_ordered(self): + """Test that customize_glob preserves order.""" + conf = config_util.CORE_CONFIG_SCHEMA( + {'customize_glob': OrderedDict()}) + self.assertIsInstance(conf['customize_glob'], OrderedDict) + def _compute_state(self, config): run_coroutine_threadsafe( config_util.async_process_ha_core_config(self.hass, config), From 9254e7e862506ee8cd896d29c95d17c7b8360a1e Mon Sep 17 00:00:00 2001 From: viswa-swami Date: Fri, 7 Apr 2017 01:40:33 -0400 Subject: [PATCH 012/146] Foscam Camera: Adding exception handling when fetching the camera image to avoid python exception errors when host is not reachable or rather any url error to camera (#6964) * Adding exception handling when fetching the camera image to avoid python errors when host is not reachable or any url errors to camera * Added exception as ConnectionError instead of plain except * Added exception as ConnectionError instead of plain except. Removed the unused error handle --- homeassistant/components/camera/foscam.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/camera/foscam.py b/homeassistant/components/camera/foscam.py index a374d19f4d1..c1f9513d2c6 100644 --- a/homeassistant/components/camera/foscam.py +++ b/homeassistant/components/camera/foscam.py @@ -66,9 +66,13 @@ class FoscamCamera(Camera): def camera_image(self): """Return a still image reponse from the camera.""" # Send the request to snap a picture and return raw jpg data - response = requests.get(self._snap_picture_url, timeout=10) - - return response.content + # Handle exception if host is not reachable or url failed + try: + response = requests.get(self._snap_picture_url, timeout=10) + except requests.exceptions.ConnectionError: + return None + else: + return response.content @property def name(self): From d952a07658408f9f5bd231a20da48b377014343a Mon Sep 17 00:00:00 2001 From: Teemu R Date: Fri, 7 Apr 2017 07:41:47 +0200 Subject: [PATCH 013/146] light.yeelight: catch i/o related exceptions from the backend lib (#6952) Fixes/mitigates problems with #5949 and #6624 --- homeassistant/components/light/yeelight.py | 50 ++++++++++++++++------ 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/homeassistant/components/light/yeelight.py b/homeassistant/components/light/yeelight.py index 65b32786ce7..9253f471431 100644 --- a/homeassistant/components/light/yeelight.py +++ b/homeassistant/components/light/yeelight.py @@ -255,7 +255,8 @@ class YeelightLight(Light): def set_flash(self, flash) -> None: """Activate flash.""" if flash: - from yeelight import RGBTransition, SleepTransition, Flow + from yeelight import (RGBTransition, SleepTransition, Flow, + BulbException) if self._bulb.last_properties["color_mode"] != 1: _LOGGER.error("Flash supported currently only in RGB mode.") return @@ -280,10 +281,14 @@ class YeelightLight(Light): duration=duration)) flow = Flow(count=count, transitions=transitions) - self._bulb.start_flow(flow) + try: + self._bulb.start_flow(flow) + except BulbException as ex: + _LOGGER.error("Unable to set flash: %s", ex) def turn_on(self, **kwargs) -> None: """Turn the bulb on.""" + import yeelight brightness = kwargs.get(ATTR_BRIGHTNESS) colortemp = kwargs.get(ATTR_COLOR_TEMP) rgb = kwargs.get(ATTR_RGB_COLOR) @@ -293,22 +298,43 @@ class YeelightLight(Light): if ATTR_TRANSITION in kwargs: # passed kwarg overrides config duration = int(kwargs.get(ATTR_TRANSITION) * 1000) # kwarg in s - self._bulb.turn_on(duration=duration) + try: + self._bulb.turn_on(duration=duration) + except yeelight.BulbException as ex: + _LOGGER.error("Unable to turn the bulb on: %s", ex) + return if self.config[CONF_MODE_MUSIC] and not self._bulb.music_mode: - self.set_music_mode(self.config[CONF_MODE_MUSIC]) + try: + self.set_music_mode(self.config[CONF_MODE_MUSIC]) + except yeelight.BulbException as ex: + _LOGGER.error("Unable to turn on music mode," + "consider disabling it: %s", ex) - # values checked for none in methods - self.set_rgb(rgb, duration) - self.set_colortemp(colortemp, duration) - self.set_brightness(brightness, duration) - self.set_flash(flash) + try: + # values checked for none in methods + self.set_rgb(rgb, duration) + self.set_colortemp(colortemp, duration) + self.set_brightness(brightness, duration) + self.set_flash(flash) + except yeelight.BulbException as ex: + _LOGGER.error("Unable to set bulb properties: %s", ex) + return # save the current state if we had a manual change. - if self.config[CONF_SAVE_ON_CHANGE]: - if brightness or colortemp or rgb: + if self.config[CONF_SAVE_ON_CHANGE] and (brightness + or colortemp + or rgb): + try: self.set_default() + except yeelight.BulbException as ex: + _LOGGER.error("Unable to set the defaults: %s", ex) + return def turn_off(self, **kwargs) -> None: """Turn off.""" - self._bulb.turn_off() + import yeelight + try: + self._bulb.turn_off() + except yeelight.BulbException as ex: + _LOGGER.error("Unable to turn the bulb off: %s", ex) From 216c2682f0afc6bd85fcca5e59ed9b11c21dca31 Mon Sep 17 00:00:00 2001 From: happyleavesaoc Date: Fri, 7 Apr 2017 01:47:03 -0400 Subject: [PATCH 014/146] Crime Reports sensor (#6966) * add crimereports * add crimereports metadata * implicit interval * remove zone support --- .coveragerc | 1 + .../components/sensor/crimereports.py | 123 ++++++++++++++++++ requirements_all.txt | 3 + 3 files changed, 127 insertions(+) create mode 100644 homeassistant/components/sensor/crimereports.py diff --git a/.coveragerc b/.coveragerc index edf66c6252b..3d32256e9fb 100644 --- a/.coveragerc +++ b/.coveragerc @@ -326,6 +326,7 @@ omit = homeassistant/components/sensor/coinmarketcap.py homeassistant/components/sensor/comed_hourly_pricing.py homeassistant/components/sensor/cpuspeed.py + homeassistant/components/sensor/crimereports.py homeassistant/components/sensor/cups.py homeassistant/components/sensor/currencylayer.py homeassistant/components/sensor/darksky.py diff --git a/homeassistant/components/sensor/crimereports.py b/homeassistant/components/sensor/crimereports.py new file mode 100644 index 00000000000..8f118fc3c32 --- /dev/null +++ b/homeassistant/components/sensor/crimereports.py @@ -0,0 +1,123 @@ +""" +Sensor for Crime Reports. + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/sensor.crimereports/ +""" +from collections import defaultdict +from datetime import timedelta +import logging + +import voluptuous as vol + +from homeassistant.components.sensor import PLATFORM_SCHEMA +from homeassistant.const import ( + CONF_INCLUDE, CONF_EXCLUDE, CONF_NAME, CONF_LATITUDE, CONF_LONGITUDE, + ATTR_ATTRIBUTION, ATTR_LATITUDE, ATTR_LONGITUDE, + LENGTH_KILOMETERS, LENGTH_METERS) +from homeassistant.helpers.entity import Entity +from homeassistant.util import slugify +from homeassistant.util.distance import convert +from homeassistant.util.dt import now +import homeassistant.helpers.config_validation as cv + +REQUIREMENTS = ['crimereports==1.0.0'] + +_LOGGER = logging.getLogger(__name__) + +SCAN_INTERVAL = timedelta(minutes=30) +DOMAIN = 'crimereports' +EVENT_INCIDENT = '{}_incident'.format(DOMAIN) +CONF_RADIUS = 'radius' + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ + vol.Required(CONF_NAME): cv.string, + vol.Required(CONF_RADIUS): vol.Coerce(float), + vol.Inclusive(CONF_LATITUDE, 'coordinates'): cv.latitude, + vol.Inclusive(CONF_LONGITUDE, 'coordinates'): cv.longitude, + vol.Optional(CONF_INCLUDE): vol.All(cv.ensure_list, [cv.string]), + vol.Optional(CONF_EXCLUDE): vol.All(cv.ensure_list, [cv.string]) +}) + + +# pylint: disable=unused-argument +def setup_platform(hass, config, add_devices, discovery_info=None): + """Setup the Crime Reports platform.""" + latitude = config.get(CONF_LATITUDE, hass.config.latitude) + longitude = config.get(CONF_LONGITUDE, hass.config.longitude) + add_devices([CrimeReportsSensor(hass, config.get(CONF_NAME), + latitude, longitude, + config.get(CONF_RADIUS), + config.get(CONF_INCLUDE), + config.get(CONF_EXCLUDE))], True) + + +class CrimeReportsSensor(Entity): + """Crime Reports Sensor.""" + + def __init__(self, hass, name, latitude, longitude, radius, + include, exclude): + """Initialize the sensor.""" + import crimereports + self._hass = hass + self._name = name + self._include = include + self._exclude = exclude + radius_kilometers = convert(radius, LENGTH_METERS, LENGTH_KILOMETERS) + self._crimereports = crimereports.CrimeReports((latitude, longitude), + radius_kilometers) + self._attributes = None + self._state = None + self._previous_incidents = set() + + @property + def name(self): + """Return the name of the sensor.""" + return self._name + + @property + def state(self): + """Return the state of the sensor.""" + return self._state + + @property + def device_state_attributes(self): + """Return the state attributes.""" + return self._attributes + + def _incident_event(self, incident): + data = { + 'type': incident.get('type'), + 'description': incident.get('friendly_description'), + 'timestamp': incident.get('timestamp'), + 'location': incident.get('location') + } + if incident.get('coordinates'): + data.update({ + ATTR_LATITUDE: incident.get('coordinates')[0], + ATTR_LONGITUDE: incident.get('coordinates')[1] + }) + self._hass.bus.fire(EVENT_INCIDENT, data) + + def update(self): + """Update device state.""" + import crimereports + incident_counts = defaultdict(int) + incidents = self._crimereports.get_incidents(now().date(), + include=self._include, + exclude=self._exclude) + fire_events = len(self._previous_incidents) > 0 + if len(incidents) < len(self._previous_incidents): + self._previous_incidents = set() + for incident in incidents: + incident_type = slugify(incident.get('type')) + incident_counts[incident_type] += 1 + if (fire_events and incident.get('id') + not in self._previous_incidents): + self._incident_event(incident) + self._previous_incidents.add(incident.get('id')) + self._attributes = { + ATTR_ATTRIBUTION: crimereports.ATTRIBUTION + } + self._attributes.update(incident_counts) + self._state = len(incidents) diff --git a/requirements_all.txt b/requirements_all.txt index 121b4845372..01539981b8f 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -108,6 +108,9 @@ colorlog>2.1,<3 # homeassistant.components.binary_sensor.concord232 concord232==0.14 +# homeassistant.components.sensor.crimereports +crimereports==1.0.0 + # homeassistant.components.sensor.metoffice # homeassistant.components.weather.metoffice datapoint==0.4.3 From 8cff98d07b2d615aeaa87712b2ca4b55ce880e96 Mon Sep 17 00:00:00 2001 From: Nate Date: Fri, 7 Apr 2017 07:59:41 +0200 Subject: [PATCH 015/146] From Dusk till Dawn (#6857) * Added dawn, dusk, noon and midnight to the Sun component * Created a helper method for the solar events --- homeassistant/components/sun.py | 163 ++++++++++++++++++++++++++++---- tests/components/test_sun.py | 44 +++++++++ 2 files changed, 189 insertions(+), 18 deletions(-) diff --git a/homeassistant/components/sun.py b/homeassistant/components/sun.py index 19f0b0fabba..f5fb0115a43 100644 --- a/homeassistant/components/sun.py +++ b/homeassistant/components/sun.py @@ -30,6 +30,10 @@ STATE_BELOW_HORIZON = 'below_horizon' STATE_ATTR_AZIMUTH = 'azimuth' STATE_ATTR_ELEVATION = 'elevation' +STATE_ATTR_NEXT_DAWN = 'next_dawn' +STATE_ATTR_NEXT_DUSK = 'next_dusk' +STATE_ATTR_NEXT_MIDNIGHT = 'next_midnight' +STATE_ATTR_NEXT_NOON = 'next_noon' STATE_ATTR_NEXT_RISING = 'next_rising' STATE_ATTR_NEXT_SETTING = 'next_setting' @@ -47,6 +51,118 @@ def is_on(hass, entity_id=None): return hass.states.is_state(entity_id, STATE_ABOVE_HORIZON) +def next_dawn(hass, entity_id=None): + """Local datetime object of the next dawn. + + Async friendly. + """ + utc_next = next_dawn_utc(hass, entity_id) + + return dt_util.as_local(utc_next) if utc_next else None + + +def next_dawn_utc(hass, entity_id=None): + """UTC datetime object of the next dawn. + + Async friendly. + """ + entity_id = entity_id or ENTITY_ID + + state = hass.states.get(ENTITY_ID) + + try: + return dt_util.parse_datetime( + state.attributes[STATE_ATTR_NEXT_DAWN]) + except (AttributeError, KeyError): + # AttributeError if state is None + # KeyError if STATE_ATTR_NEXT_DAWN does not exist + return None + + +def next_dusk(hass, entity_id=None): + """Local datetime object of the next dusk. + + Async friendly. + """ + utc_next = next_dusk_utc(hass, entity_id) + + return dt_util.as_local(utc_next) if utc_next else None + + +def next_dusk_utc(hass, entity_id=None): + """UTC datetime object of the next dusk. + + Async friendly. + """ + entity_id = entity_id or ENTITY_ID + + state = hass.states.get(ENTITY_ID) + + try: + return dt_util.parse_datetime( + state.attributes[STATE_ATTR_NEXT_DUSK]) + except (AttributeError, KeyError): + # AttributeError if state is None + # KeyError if STATE_ATTR_NEXT_DUSK does not exist + return None + + +def next_midnight(hass, entity_id=None): + """Local datetime object of the next midnight. + + Async friendly. + """ + utc_next = next_midnight_utc(hass, entity_id) + + return dt_util.as_local(utc_next) if utc_next else None + + +def next_midnight_utc(hass, entity_id=None): + """UTC datetime object of the next midnight. + + Async friendly. + """ + entity_id = entity_id or ENTITY_ID + + state = hass.states.get(ENTITY_ID) + + try: + return dt_util.parse_datetime( + state.attributes[STATE_ATTR_NEXT_MIDNIGHT]) + except (AttributeError, KeyError): + # AttributeError if state is None + # KeyError if STATE_ATTR_NEXT_MIDNIGHT does not exist + return None + + +def next_noon(hass, entity_id=None): + """Local datetime object of the next solar noon. + + Async friendly. + """ + utc_next = next_noon_utc(hass, entity_id) + + return dt_util.as_local(utc_next) if utc_next else None + + +def next_noon_utc(hass, entity_id=None): + """UTC datetime object of the next noon. + + Async friendly. + """ + entity_id = entity_id or ENTITY_ID + + state = hass.states.get(ENTITY_ID) + + try: + return dt_util.parse_datetime( + state.attributes[STATE_ATTR_NEXT_NOON]) + except (AttributeError, KeyError): + # AttributeError if state is None + # KeyError if STATE_ATTR_NEXT_NOON does not exist + return None + + def next_setting(hass, entity_id=None): """Local datetime object of the next sun setting. @@ -153,6 +269,8 @@ class Sun(Entity): self.hass = hass self.location = location self._state = self.next_rising = self.next_setting = None + self.next_dawn = self.next_dusk = None + self.next_midnight = self.next_noon = None self.solar_elevation = self.solar_azimuth = 0 track_utc_time_change(hass, self.timer_update, second=30) @@ -174,6 +292,10 @@ class Sun(Entity): def state_attributes(self): """Return the state attributes of the sun.""" return { + STATE_ATTR_NEXT_DAWN: self.next_dawn.isoformat(), + STATE_ATTR_NEXT_DUSK: self.next_dusk.isoformat(), + STATE_ATTR_NEXT_MIDNIGHT: self.next_midnight.isoformat(), + STATE_ATTR_NEXT_NOON: self.next_noon.isoformat(), STATE_ATTR_NEXT_RISING: self.next_rising.isoformat(), STATE_ATTR_NEXT_SETTING: self.next_setting.isoformat(), STATE_ATTR_ELEVATION: round(self.solar_elevation, 2), @@ -183,36 +305,41 @@ class Sun(Entity): @property def next_change(self): """Datetime when the next change to the state is.""" - return min(self.next_rising, self.next_setting) + return min(self.next_dawn, self.next_dusk, self.next_midnight, + self.next_noon, self.next_rising, self.next_setting) - def update_as_of(self, utc_point_in_time): + @staticmethod + def get_next_solar_event(callable_on_astral_location, + utc_point_in_time, mod, increment): """Calculate sun state at a point in UTC time.""" import astral - mod = -1 while True: try: - next_rising_dt = self.location.sunrise( + next_dt = callable_on_astral_location( utc_point_in_time + timedelta(days=mod), local=False) - if next_rising_dt > utc_point_in_time: + if next_dt > utc_point_in_time: break except astral.AstralError: pass - mod += 1 + mod += increment - mod = -1 - while True: - try: - next_setting_dt = (self.location.sunset( - utc_point_in_time + timedelta(days=mod), local=False)) - if next_setting_dt > utc_point_in_time: - break - except astral.AstralError: - pass - mod += 1 + return next_dt - self.next_rising = next_rising_dt - self.next_setting = next_setting_dt + def update_as_of(self, utc_point_in_time): + """Update the attributes containing solar events.""" + self.next_dawn = Sun.get_next_solar_event( + self.location.dawn, utc_point_in_time, -1, 1) + self.next_dusk = Sun.get_next_solar_event( + self.location.dusk, utc_point_in_time, -1, 1) + self.next_midnight = Sun.get_next_solar_event( + self.location.solar_midnight, utc_point_in_time, -1, 1) + self.next_noon = Sun.get_next_solar_event( + self.location.solar_noon, utc_point_in_time, -1, 1) + self.next_rising = Sun.get_next_solar_event( + self.location.sunrise, utc_point_in_time, -1, 1) + self.next_setting = Sun.get_next_solar_event( + self.location.sunset, utc_point_in_time, -1, 1) def update_sun_position(self, utc_point_in_time): """Calculate the position of the sun.""" diff --git a/tests/components/test_sun.py b/tests/components/test_sun.py index 33fc5ad40c5..659e4b1a43d 100644 --- a/tests/components/test_sun.py +++ b/tests/components/test_sun.py @@ -44,6 +44,38 @@ class TestSun(unittest.TestCase): latitude = self.hass.config.latitude longitude = self.hass.config.longitude + mod = -1 + while True: + next_dawn = (astral.dawn_utc(utc_now + + timedelta(days=mod), latitude, longitude)) + if next_dawn > utc_now: + break + mod += 1 + + mod = -1 + while True: + next_dusk = (astral.dusk_utc(utc_now + + timedelta(days=mod), latitude, longitude)) + if next_dusk > utc_now: + break + mod += 1 + + mod = -1 + while True: + next_midnight = (astral.solar_midnight_utc(utc_now + + timedelta(days=mod), longitude)) + if next_midnight > utc_now: + break + mod += 1 + + mod = -1 + while True: + next_noon = (astral.solar_noon_utc(utc_now + + timedelta(days=mod), longitude)) + if next_noon > utc_now: + break + mod += 1 + mod = -1 while True: next_rising = (astral.sunrise_utc(utc_now + @@ -60,15 +92,27 @@ class TestSun(unittest.TestCase): break mod += 1 + self.assertEqual(next_dawn, sun.next_dawn_utc(self.hass)) + self.assertEqual(next_dusk, sun.next_dusk_utc(self.hass)) + self.assertEqual(next_midnight, sun.next_midnight_utc(self.hass)) + self.assertEqual(next_noon, sun.next_noon_utc(self.hass)) self.assertEqual(next_rising, sun.next_rising_utc(self.hass)) self.assertEqual(next_setting, sun.next_setting_utc(self.hass)) # Point it at a state without the proper attributes self.hass.states.set(sun.ENTITY_ID, sun.STATE_ABOVE_HORIZON) + self.assertIsNone(sun.next_dawn(self.hass)) + self.assertIsNone(sun.next_dusk(self.hass)) + self.assertIsNone(sun.next_midnight(self.hass)) + self.assertIsNone(sun.next_noon(self.hass)) self.assertIsNone(sun.next_rising(self.hass)) self.assertIsNone(sun.next_setting(self.hass)) # Point it at a non-existing state + self.assertIsNone(sun.next_dawn(self.hass, 'non.existing')) + self.assertIsNone(sun.next_dusk(self.hass, 'non.existing')) + self.assertIsNone(sun.next_midnight(self.hass, 'non.existing')) + self.assertIsNone(sun.next_noon(self.hass, 'non.existing')) self.assertIsNone(sun.next_rising(self.hass, 'non.existing')) self.assertIsNone(sun.next_setting(self.hass, 'non.existing')) From df77529bfec0b730a69c7810a8e354cb86e1bd24 Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Fri, 7 Apr 2017 09:17:23 -0400 Subject: [PATCH 016/146] Tests for zwave services (#6937) * Initial tests for zwave services * Fix linter issues * Complete zwave service tests --- .coveragerc | 2 - homeassistant/components/zwave/__init__.py | 14 +- tests/components/climate/test_zwave.py | 5 +- tests/components/zwave/test_init.py | 371 ++++++++++++++++++++- tests/conftest.py | 10 +- tests/mock/zwave.py | 86 ++++- 6 files changed, 452 insertions(+), 36 deletions(-) diff --git a/.coveragerc b/.coveragerc index 3d32256e9fb..a8e771c9ad2 100644 --- a/.coveragerc +++ b/.coveragerc @@ -175,7 +175,6 @@ omit = homeassistant/components/climate/oem.py homeassistant/components/climate/proliphix.py homeassistant/components/climate/radiotherm.py - homeassistant/components/config/zwave.py homeassistant/components/cover/garadget.py homeassistant/components/cover/homematic.py homeassistant/components/cover/myq.py @@ -442,7 +441,6 @@ omit = homeassistant/components/weather/openweathermap.py homeassistant/components/weather/zamg.py homeassistant/components/zeroconf.py - homeassistant/components/zwave/__init__.py homeassistant/components/zwave/util.py diff --git a/homeassistant/components/zwave/__init__.py b/homeassistant/components/zwave/__init__.py index 254b488ccbb..0dba4927e20 100755 --- a/homeassistant/components/zwave/__init__.py +++ b/homeassistant/components/zwave/__init__.py @@ -185,8 +185,8 @@ def get_config_value(node, value_index, tries=5): """Return the current configuration value for a specific index.""" try: for value in node.values.values(): - # 112 == config command class - if value.command_class == 112 and value.index == value_index: + if (value.command_class == const.COMMAND_CLASS_CONFIGURATION + and value.index == value_index): return value.data except RuntimeError: # If we get an runtime error the dict has changed while @@ -384,7 +384,7 @@ def setup(hass, config): _LOGGER.info("Zwave test_network have been initialized.") NETWORK.test() - def stop_zwave(_service_or_event): + def stop_network(_service_or_event): """Stop Z-Wave network.""" _LOGGER.info("Stopping ZWave network.") NETWORK.stop() @@ -532,7 +532,7 @@ def setup(hass, config): poll_interval = NETWORK.get_poll_interval() _LOGGER.info("zwave polling interval set to %d ms", poll_interval) - hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, stop_zwave) + hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, stop_network) # Register node services for Z-Wave network hass.services.register(DOMAIN, const.SERVICE_ADD_NODE, add_node, @@ -553,7 +553,8 @@ def setup(hass, config): hass.services.register(DOMAIN, const.SERVICE_TEST_NETWORK, test_network, descriptions[const.SERVICE_TEST_NETWORK]) - hass.services.register(DOMAIN, const.SERVICE_STOP_NETWORK, stop_zwave, + hass.services.register(DOMAIN, const.SERVICE_STOP_NETWORK, + stop_network, descriptions[const.SERVICE_STOP_NETWORK]) hass.services.register(DOMAIN, const.SERVICE_START_NETWORK, start_zwave, @@ -840,4 +841,5 @@ class ZWaveDeviceEntity(ZWaveBaseEntity): def refresh_from_network(self): """Refresh all dependent values from zwave network.""" for value in self.values: - self.node.refresh_value(value.value_id) + if value is not None: + self.node.refresh_value(value.value_id) diff --git a/tests/components/climate/test_zwave.py b/tests/components/climate/test_zwave.py index 711c7f2fabb..ed9e0cf9daa 100644 --- a/tests/components/climate/test_zwave.py +++ b/tests/components/climate/test_zwave.py @@ -15,7 +15,7 @@ def device(hass, mock_openzwave): node = MockNode() values = MockEntityValues( primary=MockValue(data=1, node=node), - temperature=MockValue(data=5, node=node), + temperature=MockValue(data=5, node=node, units=None), mode=MockValue(data=b'test1', data_items=[0, 1, 2], node=node), fan_mode=MockValue(data=b'test2', data_items=[3, 4, 5], node=node), operating_state=MockValue(data=6, node=node), @@ -30,9 +30,10 @@ def device(hass, mock_openzwave): def device_zxt_120(hass, mock_openzwave): """Fixture to provide a precreated climate device.""" node = MockNode(manufacturer_id='5254', product_id='8377') + values = MockEntityValues( primary=MockValue(data=1, node=node), - temperature=MockValue(data=5, node=node), + temperature=MockValue(data=5, node=node, units=None), mode=MockValue(data=b'test1', data_items=[0, 1, 2], node=node), fan_mode=MockValue(data=b'test2', data_items=[3, 4, 5], node=node), operating_state=MockValue(data=6, node=node), diff --git a/tests/components/zwave/test_init.py b/tests/components/zwave/test_init.py index 14b2a0226fe..3fea3113337 100644 --- a/tests/components/zwave/test_init.py +++ b/tests/components/zwave/test_init.py @@ -1,11 +1,21 @@ """Tests for the Z-Wave init.""" import asyncio -import unittest from collections import OrderedDict from homeassistant.bootstrap import async_setup_component +from homeassistant.const import ATTR_ENTITY_ID, EVENT_HOMEASSISTANT_START +from homeassistant.components import zwave +from homeassistant.components.binary_sensor.zwave import get_device from homeassistant.components.zwave import ( - CONFIG_SCHEMA, CONF_DEVICE_CONFIG_GLOB) + const, CONFIG_SCHEMA, CONF_DEVICE_CONFIG_GLOB) +from homeassistant.setup import setup_component + +import pytest +import unittest +from unittest.mock import patch, MagicMock + +from tests.common import get_test_home_assistant +from tests.mock.zwave import MockNetwork, MockNode, MockValue, MockEntityValues @asyncio.coroutine @@ -49,3 +59,360 @@ class TestZwave(unittest.TestCase): {'zwave': {CONF_DEVICE_CONFIG_GLOB: OrderedDict()}}) self.assertIsInstance( conf['zwave'][CONF_DEVICE_CONFIG_GLOB], OrderedDict) + + +class TestZWaveServices(unittest.TestCase): + """Tests for zwave services.""" + + @pytest.fixture(autouse=True) + def set_mock_openzwave(self, mock_openzwave): + """Use the mock_openzwave fixture for this class.""" + self.mock_openzwave = mock_openzwave + + def setUp(self): + """Initialize values for this testcase class.""" + self.hass = get_test_home_assistant() + self.hass.start() + + # Initialize zwave + setup_component(self.hass, 'zwave', {'zwave': {}}) + self.hass.block_till_done() + zwave.NETWORK.state = MockNetwork.STATE_READY + self.hass.bus.fire(EVENT_HOMEASSISTANT_START) + self.hass.block_till_done() + + def tearDown(self): # pylint: disable=invalid-name + """Stop everything that was started.""" + self.hass.stop() + + def test_add_node(self): + """Test zwave add_node service.""" + self.hass.services.call('zwave', 'add_node', {}) + self.hass.block_till_done() + + assert zwave.NETWORK.controller.add_node.called + assert len(zwave.NETWORK.controller.add_node.mock_calls) == 1 + assert len(zwave.NETWORK.controller.add_node.mock_calls[0][1]) == 0 + + def test_add_node_secure(self): + """Test zwave add_node_secure service.""" + self.hass.services.call('zwave', 'add_node_secure', {}) + self.hass.block_till_done() + + assert zwave.NETWORK.controller.add_node.called + assert len(zwave.NETWORK.controller.add_node.mock_calls) == 1 + assert zwave.NETWORK.controller.add_node.mock_calls[0][1][0] is True + + def test_remove_node(self): + """Test zwave remove_node service.""" + self.hass.services.call('zwave', 'remove_node', {}) + self.hass.block_till_done() + + assert zwave.NETWORK.controller.remove_node.called + assert len(zwave.NETWORK.controller.remove_node.mock_calls) == 1 + + def test_cancel_command(self): + """Test zwave cancel_command service.""" + self.hass.services.call('zwave', 'cancel_command', {}) + self.hass.block_till_done() + + assert zwave.NETWORK.controller.cancel_command.called + assert len(zwave.NETWORK.controller.cancel_command.mock_calls) == 1 + + def test_heal_network(self): + """Test zwave heal_network service.""" + self.hass.services.call('zwave', 'heal_network', {}) + self.hass.block_till_done() + + assert zwave.NETWORK.heal.called + assert len(zwave.NETWORK.heal.mock_calls) == 1 + + def test_soft_reset(self): + """Test zwave soft_reset service.""" + self.hass.services.call('zwave', 'soft_reset', {}) + self.hass.block_till_done() + + assert zwave.NETWORK.controller.soft_reset.called + assert len(zwave.NETWORK.controller.soft_reset.mock_calls) == 1 + + def test_test_network(self): + """Test zwave test_network service.""" + self.hass.services.call('zwave', 'test_network', {}) + self.hass.block_till_done() + + assert zwave.NETWORK.test.called + assert len(zwave.NETWORK.test.mock_calls) == 1 + + def test_stop_network(self): + """Test zwave stop_network service.""" + self.hass.services.call('zwave', 'stop_network', {}) + self.hass.block_till_done() + + assert zwave.NETWORK.stop.called + assert len(zwave.NETWORK.stop.mock_calls) == 1 + + def test_rename_node(self): + """Test zwave rename_node service.""" + zwave.NETWORK.nodes = {11: MagicMock()} + self.hass.services.call('zwave', 'rename_node', { + const.ATTR_NODE_ID: 11, + const.ATTR_NAME: 'test_name', + }) + self.hass.block_till_done() + + assert zwave.NETWORK.nodes[11].name == 'test_name' + + def test_remove_failed_node(self): + """Test zwave remove_failed_node service.""" + self.hass.services.call('zwave', 'remove_failed_node', { + const.ATTR_NODE_ID: 12, + }) + self.hass.block_till_done() + + remove_failed_node = zwave.NETWORK.controller.remove_failed_node + assert remove_failed_node.called + assert len(remove_failed_node.mock_calls) == 1 + assert remove_failed_node.mock_calls[0][1][0] == 12 + + def test_replace_failed_node(self): + """Test zwave replace_failed_node service.""" + self.hass.services.call('zwave', 'replace_failed_node', { + const.ATTR_NODE_ID: 13, + }) + self.hass.block_till_done() + + replace_failed_node = zwave.NETWORK.controller.replace_failed_node + assert replace_failed_node.called + assert len(replace_failed_node.mock_calls) == 1 + assert replace_failed_node.mock_calls[0][1][0] == 13 + + def test_set_config_parameter(self): + """Test zwave set_config_parameter service.""" + value = MockValue( + index=12, + command_class=const.COMMAND_CLASS_CONFIGURATION, + ) + value_list = MockValue( + index=13, + command_class=const.COMMAND_CLASS_CONFIGURATION, + type=const.TYPE_LIST, + data_items=['item1', 'item2', 'item3'], + ) + node = MockNode(node_id=14) + node.get_values.return_value = {12: value, 13: value_list} + zwave.NETWORK.nodes = {14: node} + + self.hass.services.call('zwave', 'set_config_parameter', { + const.ATTR_NODE_ID: 14, + const.ATTR_CONFIG_PARAMETER: 13, + const.ATTR_CONFIG_VALUE: 1, + }) + self.hass.block_till_done() + + assert node.set_config_param.called + assert len(node.set_config_param.mock_calls) == 1 + assert node.set_config_param.mock_calls[0][1][0] == 13 + assert node.set_config_param.mock_calls[0][1][1] == 1 + assert node.set_config_param.mock_calls[0][1][2] == 2 + node.set_config_param.reset_mock() + + self.hass.services.call('zwave', 'set_config_parameter', { + const.ATTR_NODE_ID: 14, + const.ATTR_CONFIG_PARAMETER: 13, + const.ATTR_CONFIG_VALUE: 7, + }) + self.hass.block_till_done() + + assert not node.set_config_param.called + node.set_config_param.reset_mock() + + self.hass.services.call('zwave', 'set_config_parameter', { + const.ATTR_NODE_ID: 14, + const.ATTR_CONFIG_PARAMETER: 12, + const.ATTR_CONFIG_VALUE: 0x01020304, + const.ATTR_CONFIG_SIZE: 4, + }) + self.hass.block_till_done() + + assert node.set_config_param.called + assert len(node.set_config_param.mock_calls) == 1 + assert node.set_config_param.mock_calls[0][1][0] == 12 + assert node.set_config_param.mock_calls[0][1][1] == 0x01020304 + assert node.set_config_param.mock_calls[0][1][2] == 4 + node.set_config_param.reset_mock() + + def test_print_config_parameter(self): + """Test zwave print_config_parameter service.""" + value1 = MockValue( + index=12, + command_class=const.COMMAND_CLASS_CONFIGURATION, + data=1234, + ) + value2 = MockValue( + index=13, + command_class=const.COMMAND_CLASS_CONFIGURATION, + data=2345, + ) + node = MockNode(node_id=14) + node.values = {12: value1, 13: value2} + zwave.NETWORK.nodes = {14: node} + + with patch.object(zwave, '_LOGGER') as mock_logger: + self.hass.services.call('zwave', 'print_config_parameter', { + const.ATTR_NODE_ID: 14, + const.ATTR_CONFIG_PARAMETER: 13, + }) + self.hass.block_till_done() + + assert mock_logger.info.called + assert len(mock_logger.info.mock_calls) == 1 + assert mock_logger.info.mock_calls[0][1][1] == 13 + assert mock_logger.info.mock_calls[0][1][2] == 14 + assert mock_logger.info.mock_calls[0][1][3] == 2345 + + def test_print_node(self): + """Test zwave print_config_parameter service.""" + node1 = MockNode(node_id=14) + node2 = MockNode(node_id=15) + zwave.NETWORK.nodes = {14: node1, 15: node2} + + with patch.object(zwave, 'pprint') as mock_pprint: + self.hass.services.call('zwave', 'print_node', { + const.ATTR_NODE_ID: 15, + }) + self.hass.block_till_done() + + assert mock_pprint.called + assert len(mock_pprint.mock_calls) == 1 + assert mock_pprint.mock_calls[0][1][0]['node_id'] == 15 + + def test_set_wakeup(self): + """Test zwave set_wakeup service.""" + value = MockValue( + index=12, + command_class=const.COMMAND_CLASS_WAKE_UP, + ) + node = MockNode(node_id=14) + node.values = {12: value} + node.get_values.return_value = node.values + zwave.NETWORK.nodes = {14: node} + + self.hass.services.call('zwave', 'set_wakeup', { + const.ATTR_NODE_ID: 14, + const.ATTR_CONFIG_VALUE: 15, + }) + self.hass.block_till_done() + + assert value.data == 15 + + node.can_wake_up_value = False + self.hass.services.call('zwave', 'set_wakeup', { + const.ATTR_NODE_ID: 14, + const.ATTR_CONFIG_VALUE: 20, + }) + self.hass.block_till_done() + + assert value.data == 15 + + def test_add_association(self): + """Test zwave change_association service.""" + ZWaveGroup = self.mock_openzwave.group.ZWaveGroup + group = MagicMock() + ZWaveGroup.return_value = group + + value = MockValue( + index=12, + command_class=const.COMMAND_CLASS_WAKE_UP, + ) + node = MockNode(node_id=14) + node.values = {12: value} + node.get_values.return_value = node.values + zwave.NETWORK.nodes = {14: node} + + self.hass.services.call('zwave', 'change_association', { + const.ATTR_ASSOCIATION: 'add', + const.ATTR_NODE_ID: 14, + const.ATTR_TARGET_NODE_ID: 24, + const.ATTR_GROUP: 3, + const.ATTR_INSTANCE: 5, + }) + self.hass.block_till_done() + + assert ZWaveGroup.called + assert len(ZWaveGroup.mock_calls) == 2 + assert ZWaveGroup.mock_calls[0][1][0] == 3 + assert ZWaveGroup.mock_calls[0][1][2] == 14 + assert group.add_association.called + assert len(group.add_association.mock_calls) == 1 + assert group.add_association.mock_calls[0][1][0] == 24 + assert group.add_association.mock_calls[0][1][1] == 5 + + def test_remove_association(self): + """Test zwave change_association service.""" + ZWaveGroup = self.mock_openzwave.group.ZWaveGroup + group = MagicMock() + ZWaveGroup.return_value = group + + value = MockValue( + index=12, + command_class=const.COMMAND_CLASS_WAKE_UP, + ) + node = MockNode(node_id=14) + node.values = {12: value} + node.get_values.return_value = node.values + zwave.NETWORK.nodes = {14: node} + + self.hass.services.call('zwave', 'change_association', { + const.ATTR_ASSOCIATION: 'remove', + const.ATTR_NODE_ID: 14, + const.ATTR_TARGET_NODE_ID: 24, + const.ATTR_GROUP: 3, + const.ATTR_INSTANCE: 5, + }) + self.hass.block_till_done() + + assert ZWaveGroup.called + assert len(ZWaveGroup.mock_calls) == 2 + assert ZWaveGroup.mock_calls[0][1][0] == 3 + assert ZWaveGroup.mock_calls[0][1][2] == 14 + assert group.remove_association.called + assert len(group.remove_association.mock_calls) == 1 + assert group.remove_association.mock_calls[0][1][0] == 24 + assert group.remove_association.mock_calls[0][1][1] == 5 + + def test_refresh_entity(self): + """Test zwave refresh_entity service.""" + node = MockNode() + value = MockValue(data=False, node=node, + command_class=const.COMMAND_CLASS_SENSOR_BINARY) + power_value = MockValue(data=50, node=node, + command_class=const.COMMAND_CLASS_METER) + values = MockEntityValues(primary=value, power=power_value) + device = get_device(node=node, values=values, node_config={}) + device.hass = self.hass + device.entity_id = 'binary_sensor.mock_entity_id' + self.hass.add_job(device.async_added_to_hass()) + self.hass.block_till_done() + + self.hass.services.call('zwave', 'refresh_entity', { + ATTR_ENTITY_ID: 'binary_sensor.mock_entity_id', + }) + self.hass.block_till_done() + + assert node.refresh_value.called + assert len(node.refresh_value.mock_calls) == 2 + self.assertEqual(sorted([node.refresh_value.mock_calls[0][1][0], + node.refresh_value.mock_calls[1][1][0]]), + sorted([value.value_id, power_value.value_id])) + + def test_refresh_node(self): + """Test zwave refresh_node service.""" + node = MockNode(node_id=14) + zwave.NETWORK.nodes = {14: node} + self.hass.services.call('zwave', 'refresh_node', { + const.ATTR_NODE_ID: 14, + }) + self.hass.block_till_done() + + assert node.refresh_info.called + assert len(node.refresh_info.mock_calls) == 1 diff --git a/tests/conftest.py b/tests/conftest.py index 56d4c793b8e..b6c9795f127 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -12,9 +12,9 @@ from homeassistant import util, setup from homeassistant.util import location from homeassistant.components import mqtt -from .common import async_test_home_assistant, mock_coro -from .test_util.aiohttp import mock_aiohttp_client -from .mock.zwave import SIGNAL_VALUE_CHANGED, SIGNAL_NODE, SIGNAL_NOTIFICATION +from tests.common import async_test_home_assistant, mock_coro +from tests.test_util.aiohttp import mock_aiohttp_client +from tests.mock.zwave import MockNetwork if os.environ.get('UVLOOP') == '1': import uvloop @@ -100,9 +100,7 @@ def mock_openzwave(): base_mock = MagicMock() libopenzwave = base_mock.libopenzwave libopenzwave.__file__ = 'test' - base_mock.network.ZWaveNetwork.SIGNAL_VALUE_CHANGED = SIGNAL_VALUE_CHANGED - base_mock.network.ZWaveNetwork.SIGNAL_NODE = SIGNAL_NODE - base_mock.network.ZWaveNetwork.SIGNAL_NOTIFICATION = SIGNAL_NOTIFICATION + base_mock.network.ZWaveNetwork = MockNetwork with patch.dict('sys.modules', { 'libopenzwave': libopenzwave, diff --git a/tests/mock/zwave.py b/tests/mock/zwave.py index 0e20be6db4b..513c606aab2 100644 --- a/tests/mock/zwave.py +++ b/tests/mock/zwave.py @@ -3,15 +3,11 @@ from unittest.mock import MagicMock from pydispatch import dispatcher -SIGNAL_VALUE_CHANGED = 'mock_value_changed' -SIGNAL_NODE = 'mock_node' -SIGNAL_NOTIFICATION = 'mock_notification' - def value_changed(value): """Fire a value changed.""" dispatcher.send( - SIGNAL_VALUE_CHANGED, + MockNetwork.SIGNAL_VALUE_CHANGED, value=value, node=value.node, network=value.node._network @@ -21,7 +17,7 @@ def value_changed(value): def node_changed(node): """Fire a node changed.""" dispatcher.send( - SIGNAL_NODE, + MockNetwork.SIGNAL_NODE, node=node, network=node._network ) @@ -30,12 +26,70 @@ def node_changed(node): def notification(node_id, network=None): """Fire a notification.""" dispatcher.send( - SIGNAL_NOTIFICATION, + MockNetwork.SIGNAL_NOTIFICATION, args={'nodeId': node_id}, network=network ) +class MockNetwork(MagicMock): + """Mock Z-Wave network.""" + + SIGNAL_NETWORK_FAILED = 'mock_NetworkFailed' + SIGNAL_NETWORK_STARTED = 'mock_NetworkStarted' + SIGNAL_NETWORK_READY = 'mock_NetworkReady' + SIGNAL_NETWORK_STOPPED = 'mock_NetworkStopped' + SIGNAL_NETWORK_RESETTED = 'mock_DriverResetted' + SIGNAL_NETWORK_AWAKED = 'mock_DriverAwaked' + SIGNAL_DRIVER_FAILED = 'mock_DriverFailed' + SIGNAL_DRIVER_READY = 'mock_DriverReady' + SIGNAL_DRIVER_RESET = 'mock_DriverReset' + SIGNAL_DRIVER_REMOVED = 'mock_DriverRemoved' + SIGNAL_GROUP = 'mock_Group' + SIGNAL_NODE = 'mock_Node' + SIGNAL_NODE_ADDED = 'mock_NodeAdded' + SIGNAL_NODE_EVENT = 'mock_NodeEvent' + SIGNAL_NODE_NAMING = 'mock_NodeNaming' + SIGNAL_NODE_NEW = 'mock_NodeNew' + SIGNAL_NODE_PROTOCOL_INFO = 'mock_NodeProtocolInfo' + SIGNAL_NODE_READY = 'mock_NodeReady' + SIGNAL_NODE_REMOVED = 'mock_NodeRemoved' + SIGNAL_SCENE_EVENT = 'mock_SceneEvent' + SIGNAL_VALUE = 'mock_Value' + SIGNAL_VALUE_ADDED = 'mock_ValueAdded' + SIGNAL_VALUE_CHANGED = 'mock_ValueChanged' + SIGNAL_VALUE_REFRESHED = 'mock_ValueRefreshed' + SIGNAL_VALUE_REMOVED = 'mock_ValueRemoved' + SIGNAL_POLLING_ENABLED = 'mock_PollingEnabled' + SIGNAL_POLLING_DISABLED = 'mock_PollingDisabled' + SIGNAL_CREATE_BUTTON = 'mock_CreateButton' + SIGNAL_DELETE_BUTTON = 'mock_DeleteButton' + SIGNAL_BUTTON_ON = 'mock_ButtonOn' + SIGNAL_BUTTON_OFF = 'mock_ButtonOff' + SIGNAL_ESSENTIAL_NODE_QUERIES_COMPLETE = \ + 'mock_EssentialNodeQueriesComplete' + SIGNAL_NODE_QUERIES_COMPLETE = 'mock_NodeQueriesComplete' + SIGNAL_AWAKE_NODES_QUERIED = 'mock_AwakeNodesQueried' + SIGNAL_ALL_NODES_QUERIED = 'mock_AllNodesQueried' + SIGNAL_ALL_NODES_QUERIED_SOME_DEAD = 'mock_AllNodesQueriedSomeDead' + SIGNAL_MSG_COMPLETE = 'mock_MsgComplete' + SIGNAL_NOTIFICATION = 'mock_Notification' + SIGNAL_CONTROLLER_COMMAND = 'mock_ControllerCommand' + SIGNAL_CONTROLLER_WAITING = 'mock_ControllerWaiting' + + STATE_STOPPED = 0 + STATE_FAILED = 1 + STATE_RESETTED = 3 + STATE_STARTED = 5 + STATE_AWAKED = 7 + STATE_READY = 10 + + def __init__(self, *args, **kwargs): + """Initialize a Z-Wave mock network.""" + super().__init__() + self.state = MockNetwork.STATE_STOPPED + + class MockNode(MagicMock): """Mock Z-Wave node.""" @@ -47,6 +101,7 @@ class MockNode(MagicMock): product_type='678', command_classes=None, can_wake_up_value=True, + network=None, **kwargs): """Initialize a Z-Wave mock node.""" super().__init__() @@ -57,6 +112,8 @@ class MockNode(MagicMock): self.product_type = product_type self.can_wake_up_value = can_wake_up_value self._command_classes = command_classes or [] + if network is not None: + self._network = network for attr_name in kwargs: setattr(self, attr_name, kwargs[attr_name]) @@ -84,30 +141,23 @@ class MockValue(MagicMock): def __init__(self, *, label='Mock Value', - data=None, - data_items=None, node=None, instance=0, index=0, - command_class=None, - units=None, - type=None, - value_id=None): + value_id=None, + **kwargs): """Initialize a Z-Wave mock value.""" super().__init__() self.label = label - self.data = data - self.data_items = data_items self.node = node self.instance = instance self.index = index - self.command_class = command_class - self.units = units - self.type = type if value_id is None: MockValue._mock_value_id += 1 value_id = MockValue._mock_value_id self.value_id = value_id + for attr_name in kwargs: + setattr(self, attr_name, kwargs[attr_name]) def _get_child_mock(self, **kw): """Create child mocks with right MagicMock class.""" From 64174f5763927886a0417aff9709c4faf770ca63 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 7 Apr 2017 12:02:49 -0700 Subject: [PATCH 017/146] Fix control+c quitting HASS (#6974) --- homeassistant/core.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/core.py b/homeassistant/core.py index 03cc3d4e9f5..ba19f392931 100644 --- a/homeassistant/core.py +++ b/homeassistant/core.py @@ -141,7 +141,8 @@ class HomeAssistant(object): self.loop.run_forever() return self.exit_code except KeyboardInterrupt: - fire_coroutine_threadsafe(self.async_stop(), self.loop) + self.loop.call_soon_threadsafe( + self.loop.create_task, self.async_stop()) self.loop.run_forever() finally: self.loop.close() From ad8ee1383ce4da4ac57cf1a2de868101dc828166 Mon Sep 17 00:00:00 2001 From: John Mihalic Date: Fri, 7 Apr 2017 22:17:10 -0400 Subject: [PATCH 018/146] Update Emby for aiohttp v2 (#6981) --- homeassistant/components/media_player/emby.py | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/media_player/emby.py b/homeassistant/components/media_player/emby.py index 3dc0131531f..3ed6d42e76a 100644 --- a/homeassistant/components/media_player/emby.py +++ b/homeassistant/components/media_player/emby.py @@ -21,7 +21,7 @@ from homeassistant.core import callback import homeassistant.helpers.config_validation as cv import homeassistant.util.dt as dt_util -REQUIREMENTS = ['pyemby==1.1'] +REQUIREMENTS = ['pyemby==1.2'] _LOGGER = logging.getLogger(__name__) diff --git a/requirements_all.txt b/requirements_all.txt index 01539981b8f..61a14c72ae4 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -512,7 +512,7 @@ pydroid-ipcam==0.8 pyebox==0.1.0 # homeassistant.components.media_player.emby -pyemby==1.1 +pyemby==1.2 # homeassistant.components.envisalink pyenvisalink==2.0 From 55077b996505638f94d44a3d0d01eb2af4a0016e Mon Sep 17 00:00:00 2001 From: Teemu R Date: Sat, 8 Apr 2017 04:19:11 +0200 Subject: [PATCH 019/146] switch.tplink: upgrade to the newest upstream release which adds support for plugs using the newer communication protocol (#6979) From 475ac52180f2da8e64b1742dd316803d354b8b48 Mon Sep 17 00:00:00 2001 From: Teemu R Date: Sat, 8 Apr 2017 15:33:25 +0200 Subject: [PATCH 020/146] switch.tplink: bump pyhs100 version requirement (#6986) --- homeassistant/components/switch/tplink.py | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/switch/tplink.py b/homeassistant/components/switch/tplink.py index b4c1df3db73..cc00a3691ee 100644 --- a/homeassistant/components/switch/tplink.py +++ b/homeassistant/components/switch/tplink.py @@ -14,7 +14,7 @@ from homeassistant.components.switch import (SwitchDevice, PLATFORM_SCHEMA) from homeassistant.const import (CONF_HOST, CONF_NAME) import homeassistant.helpers.config_validation as cv -REQUIREMENTS = ['pyHS100==0.2.4.1'] +REQUIREMENTS = ['pyHS100==0.2.4.2'] _LOGGER = logging.getLogger(__name__) diff --git a/requirements_all.txt b/requirements_all.txt index 61a14c72ae4..43c0240452c 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -469,7 +469,7 @@ py-cpuinfo==3.0.0 pyCEC==0.4.13 # homeassistant.components.switch.tplink -pyHS100==0.2.4.1 +pyHS100==0.2.4.2 # homeassistant.components.rfxtrx pyRFXtrx==0.17.0 From 31da54d530ec9bf79f23a0aded4f70aecb920456 Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Sat, 8 Apr 2017 09:34:59 -0400 Subject: [PATCH 021/146] Add tests for ZWaveDeviceEntityValues helper (#6978) * Add tests for ZWaveDeviceEntityValues helper * Add remaining coverage --- homeassistant/components/zwave/__init__.py | 2 +- tests/components/zwave/test_init.py | 308 +++++++++++++++++++++ 2 files changed, 309 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/zwave/__init__.py b/homeassistant/components/zwave/__init__.py index 0dba4927e20..daeca63f52b 100755 --- a/homeassistant/components/zwave/__init__.py +++ b/homeassistant/components/zwave/__init__.py @@ -733,7 +733,7 @@ class ZWaveDeviceEntityValues(): device = platform.get_device( node=self._node, values=self, node_config=node_config, hass=self._hass) - if not device: + if device is None: # No entity will be created for this value self._workaround_ignore = True return diff --git a/tests/components/zwave/test_init.py b/tests/components/zwave/test_init.py index 3fea3113337..fe104b1e33a 100644 --- a/tests/components/zwave/test_init.py +++ b/tests/components/zwave/test_init.py @@ -50,6 +50,314 @@ def test_invalid_device_config(hass, mock_openzwave): assert not result +class TestZWaveDeviceEntityValues(unittest.TestCase): + """Tests for the ZWaveDeviceEntityValues helper.""" + + @pytest.fixture(autouse=True) + def set_mock_openzwave(self, mock_openzwave): + """Use the mock_openzwave fixture for this class.""" + self.mock_openzwave = mock_openzwave + + def setUp(self): + """Initialize values for this testcase class.""" + self.hass = get_test_home_assistant() + self.hass.start() + + setup_component(self.hass, 'zwave', {'zwave': {}}) + self.hass.block_till_done() + + self.node = MockNode() + self.mock_schema = { + const.DISC_COMPONENT: 'mock_component', + const.DISC_VALUES: { + const.DISC_PRIMARY: { + const.DISC_COMMAND_CLASS: ['mock_primary_class'], + }, + 'secondary': { + const.DISC_COMMAND_CLASS: ['mock_secondary_class'], + }, + 'optional': { + const.DISC_COMMAND_CLASS: ['mock_optional_class'], + const.DISC_OPTIONAL: True, + }}} + self.primary = MockValue( + command_class='mock_primary_class', node=self.node) + self.secondary = MockValue( + command_class='mock_secondary_class', node=self.node) + self.duplicate_secondary = MockValue( + command_class='mock_secondary_class', node=self.node) + self.optional = MockValue( + command_class='mock_optional_class', node=self.node) + self.no_match_value = MockValue( + command_class='mock_bad_class', node=self.node) + + self.entity_id = '{}.{}'.format('mock_component', + zwave.object_id(self.primary)) + self.zwave_config = {} + self.device_config = {self.entity_id: {}} + + def tearDown(self): # pylint: disable=invalid-name + """Stop everything that was started.""" + self.hass.stop() + + @patch.object(zwave, 'get_platform') + @patch.object(zwave, 'discovery') + def test_entity_discovery(self, discovery, get_platform): + """Test the creation of a new entity.""" + values = zwave.ZWaveDeviceEntityValues( + hass=self.hass, + schema=self.mock_schema, + primary_value=self.primary, + zwave_config=self.zwave_config, + device_config=self.device_config, + ) + + assert values.primary is self.primary + assert len(list(values)) == 3 + self.assertEqual(sorted(list(values), + key=lambda a: id(a)), + sorted([self.primary, None, None], + key=lambda a: id(a))) + assert not discovery.async_load_platform.called + + values.check_value(self.secondary) + self.hass.block_till_done() + + assert values.secondary is self.secondary + assert len(list(values)) == 3 + self.assertEqual(sorted(list(values), + key=lambda a: id(a)), + sorted([self.primary, self.secondary, None], + key=lambda a: id(a))) + + assert discovery.async_load_platform.called + # Second call is to async yield from + assert len(discovery.async_load_platform.mock_calls) == 2 + args = discovery.async_load_platform.mock_calls[0][1] + assert args[0] == self.hass + assert args[1] == 'mock_component' + assert args[2] == 'zwave' + assert args[3] == {const.DISCOVERY_DEVICE: id(values)} + assert args[4] == self.zwave_config + + discovery.async_load_platform.reset_mock() + values.check_value(self.optional) + values.check_value(self.duplicate_secondary) + values.check_value(self.no_match_value) + self.hass.block_till_done() + + assert values.optional is self.optional + assert len(list(values)) == 3 + self.assertEqual(sorted(list(values), + key=lambda a: id(a)), + sorted([self.primary, self.secondary, self.optional], + key=lambda a: id(a))) + assert not discovery.async_load_platform.called + + assert values._entity.value_added.called + assert len(values._entity.value_added.mock_calls) == 1 + assert values._entity.value_changed.called + assert len(values._entity.value_changed.mock_calls) == 1 + + @patch.object(zwave, 'get_platform') + @patch.object(zwave, 'discovery') + def test_entity_existing_values(self, discovery, get_platform): + """Test the loading of already discovered values.""" + self.node.values = { + self.primary.value_id: self.primary, + self.secondary.value_id: self.secondary, + self.optional.value_id: self.optional, + self.no_match_value.value_id: self.no_match_value, + } + + values = zwave.ZWaveDeviceEntityValues( + hass=self.hass, + schema=self.mock_schema, + primary_value=self.primary, + zwave_config=self.zwave_config, + device_config=self.device_config, + ) + self.hass.block_till_done() + + assert values.primary is self.primary + assert values.secondary is self.secondary + assert values.optional is self.optional + assert len(list(values)) == 3 + self.assertEqual(sorted(list(values), + key=lambda a: id(a)), + sorted([self.primary, self.secondary, self.optional], + key=lambda a: id(a))) + + assert discovery.async_load_platform.called + # Second call is to async yield from + assert len(discovery.async_load_platform.mock_calls) == 2 + args = discovery.async_load_platform.mock_calls[0][1] + assert args[0] == self.hass + assert args[1] == 'mock_component' + assert args[2] == 'zwave' + assert args[3] == {const.DISCOVERY_DEVICE: id(values)} + assert args[4] == self.zwave_config + assert not self.primary.enable_poll.called + assert self.primary.disable_poll.called + + @patch.object(zwave, 'get_platform') + @patch.object(zwave, 'discovery') + def test_node_schema_mismatch(self, discovery, get_platform): + """Test node schema mismatch.""" + self.node.generic = 'no_match' + self.node.values = { + self.primary.value_id: self.primary, + self.secondary.value_id: self.secondary, + } + self.mock_schema[const.DISC_GENERIC_DEVICE_CLASS] = ['generic_match'] + values = zwave.ZWaveDeviceEntityValues( + hass=self.hass, + schema=self.mock_schema, + primary_value=self.primary, + zwave_config=self.zwave_config, + device_config=self.device_config, + ) + values._check_entity_ready() + self.hass.block_till_done() + + assert not discovery.async_load_platform.called + + @patch.object(zwave, 'get_platform') + @patch.object(zwave, 'discovery') + def test_entity_workaround_component(self, discovery, get_platform): + """Test ignore workaround.""" + self.node.manufacturer_id = '010f' + self.node.product_type = '0b00' + self.primary.command_class = const.COMMAND_CLASS_SENSOR_ALARM + self.entity_id = '{}.{}'.format('binary_sensor', + zwave.object_id(self.primary)) + self.device_config = {self.entity_id: {}} + + self.mock_schema = { + const.DISC_COMPONENT: 'mock_component', + const.DISC_VALUES: { + const.DISC_PRIMARY: { + const.DISC_COMMAND_CLASS: [ + const.COMMAND_CLASS_SWITCH_BINARY], + }}} + + values = zwave.ZWaveDeviceEntityValues( + hass=self.hass, + schema=self.mock_schema, + primary_value=self.primary, + zwave_config=self.zwave_config, + device_config=self.device_config, + ) + values._check_entity_ready() + self.hass.block_till_done() + + assert discovery.async_load_platform.called + # Second call is to async yield from + assert len(discovery.async_load_platform.mock_calls) == 2 + args = discovery.async_load_platform.mock_calls[0][1] + assert args[1] == 'binary_sensor' + + @patch.object(zwave, 'get_platform') + @patch.object(zwave, 'discovery') + def test_entity_workaround_ignore(self, discovery, get_platform): + """Test ignore workaround.""" + self.node.manufacturer_id = '010f' + self.node.product_type = '0301' + self.primary.command_class = const.COMMAND_CLASS_SWITCH_BINARY + + self.mock_schema = { + const.DISC_COMPONENT: 'mock_component', + const.DISC_VALUES: { + const.DISC_PRIMARY: { + const.DISC_COMMAND_CLASS: [ + const.COMMAND_CLASS_SWITCH_BINARY], + }}} + + values = zwave.ZWaveDeviceEntityValues( + hass=self.hass, + schema=self.mock_schema, + primary_value=self.primary, + zwave_config=self.zwave_config, + device_config=self.device_config, + ) + values._check_entity_ready() + self.hass.block_till_done() + + assert not discovery.async_load_platform.called + + @patch.object(zwave, 'get_platform') + @patch.object(zwave, 'discovery') + def test_entity_config_ignore(self, discovery, get_platform): + """Test ignore config.""" + self.node.values = { + self.primary.value_id: self.primary, + self.secondary.value_id: self.secondary, + } + self.device_config = {self.entity_id: { + zwave.CONF_IGNORED: True + }} + values = zwave.ZWaveDeviceEntityValues( + hass=self.hass, + schema=self.mock_schema, + primary_value=self.primary, + zwave_config=self.zwave_config, + device_config=self.device_config, + ) + values._check_entity_ready() + self.hass.block_till_done() + + assert not discovery.async_load_platform.called + + @patch.object(zwave, 'get_platform') + @patch.object(zwave, 'discovery') + def test_entity_platform_ignore(self, discovery, get_platform): + """Test platform ignore device.""" + self.node.values = { + self.primary.value_id: self.primary, + self.secondary.value_id: self.secondary, + } + platform = MagicMock() + get_platform.return_value = platform + platform.get_device.return_value = None + zwave.ZWaveDeviceEntityValues( + hass=self.hass, + schema=self.mock_schema, + primary_value=self.primary, + zwave_config=self.zwave_config, + device_config=self.device_config, + ) + self.hass.block_till_done() + + assert not discovery.async_load_platform.called + + @patch.object(zwave, 'get_platform') + @patch.object(zwave, 'discovery') + def test_config_polling_intensity(self, discovery, get_platform): + """Test polling intensity.""" + self.node.values = { + self.primary.value_id: self.primary, + self.secondary.value_id: self.secondary, + } + self.device_config = {self.entity_id: { + zwave.CONF_POLLING_INTENSITY: 123, + }} + values = zwave.ZWaveDeviceEntityValues( + hass=self.hass, + schema=self.mock_schema, + primary_value=self.primary, + zwave_config=self.zwave_config, + device_config=self.device_config, + ) + values._check_entity_ready() + self.hass.block_till_done() + + assert discovery.async_load_platform.called + assert self.primary.enable_poll.called + assert len(self.primary.enable_poll.mock_calls) == 1 + assert self.primary.enable_poll.mock_calls[0][1][0] == 123 + assert not self.primary.disable_poll.called + + class TestZwave(unittest.TestCase): """Test zwave init.""" From c5d89499fa5801dd89812b9f5b71a1e31680f87c Mon Sep 17 00:00:00 2001 From: Marcelo Moreira de Mello Date: Sat, 8 Apr 2017 17:52:10 -0400 Subject: [PATCH 022/146] Bump Amcrest module to 1.1.8 (#6990) Fixed traceback when calculating SD card percent storage self._state = self._camera.percent(sd_used[0], sd_total[0]) AttributeError: 'Http' object has no attribute 'percent' --- homeassistant/components/camera/amcrest.py | 2 +- homeassistant/components/sensor/amcrest.py | 4 ++-- requirements_all.txt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/camera/amcrest.py b/homeassistant/components/camera/amcrest.py index 294a63bcff9..a50cdc859a7 100644 --- a/homeassistant/components/camera/amcrest.py +++ b/homeassistant/components/camera/amcrest.py @@ -18,7 +18,7 @@ from homeassistant.helpers import config_validation as cv from homeassistant.helpers.aiohttp_client import ( async_get_clientsession, async_aiohttp_proxy_web) -REQUIREMENTS = ['amcrest==1.1.5'] +REQUIREMENTS = ['amcrest==1.1.8'] _LOGGER = logging.getLogger(__name__) diff --git a/homeassistant/components/sensor/amcrest.py b/homeassistant/components/sensor/amcrest.py index 5a349d28b7c..2d05372220b 100644 --- a/homeassistant/components/sensor/amcrest.py +++ b/homeassistant/components/sensor/amcrest.py @@ -19,7 +19,7 @@ import homeassistant.loader as loader from requests.exceptions import HTTPError, ConnectTimeout -REQUIREMENTS = ['amcrest==1.1.5'] +REQUIREMENTS = ['amcrest==1.1.8'] _LOGGER = logging.getLogger(__name__) @@ -146,4 +146,4 @@ class AmcrestSensor(Entity): sd_total = self._camera.storage_total self._attrs['Total'] = '{0} {1}'.format(*sd_total) self._attrs['Used'] = '{0} {1}'.format(*sd_used) - self._state = self._camera.percent(sd_used[0], sd_total[0]) + self._state = self._camera.storage_used_percent diff --git a/requirements_all.txt b/requirements_all.txt index 43c0240452c..7e800d62548 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -48,7 +48,7 @@ aiolifx==0.4.2 # homeassistant.components.camera.amcrest # homeassistant.components.sensor.amcrest -amcrest==1.1.5 +amcrest==1.1.8 # homeassistant.components.media_player.anthemav anthemav==1.1.8 From 2277778d8d269982a72bd18e64e7454a95a30476 Mon Sep 17 00:00:00 2001 From: happyleavesaoc Date: Sat, 8 Apr 2017 17:53:16 -0400 Subject: [PATCH 023/146] update gstreamer (#6987) --- .../components/media_player/gstreamer.py | 39 +++++++------------ requirements_all.txt | 2 +- 2 files changed, 14 insertions(+), 27 deletions(-) diff --git a/homeassistant/components/media_player/gstreamer.py b/homeassistant/components/media_player/gstreamer.py index b74af4a4ddb..f9c20c4d4ea 100644 --- a/homeassistant/components/media_player/gstreamer.py +++ b/homeassistant/components/media_player/gstreamer.py @@ -9,9 +9,9 @@ import logging import voluptuous as vol from homeassistant.components.media_player import ( - MEDIA_TYPE_MUSIC, SUPPORT_VOLUME_MUTE, SUPPORT_VOLUME_SET, - SUPPORT_PAUSE, SUPPORT_SEEK, SUPPORT_STOP, SUPPORT_PLAY_MEDIA, - SUPPORT_PLAY, SUPPORT_NEXT_TRACK, PLATFORM_SCHEMA, MediaPlayerDevice) + MEDIA_TYPE_MUSIC, SUPPORT_VOLUME_SET, SUPPORT_PAUSE, + SUPPORT_PLAY_MEDIA, SUPPORT_PLAY, SUPPORT_NEXT_TRACK, + PLATFORM_SCHEMA, MediaPlayerDevice) from homeassistant.const import ( STATE_IDLE, CONF_NAME, EVENT_HOMEASSISTANT_STOP) import homeassistant.helpers.config_validation as cv @@ -20,14 +20,13 @@ import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) -REQUIREMENTS = ['gstreamer-player==1.0.0'] +REQUIREMENTS = ['gstreamer-player==1.1.0'] DOMAIN = 'gstreamer' CONF_PIPELINE = 'pipeline' -SUPPORT_GSTREAMER = SUPPORT_VOLUME_SET | SUPPORT_VOLUME_MUTE | \ - SUPPORT_PLAY | SUPPORT_PAUSE | SUPPORT_SEEK | SUPPORT_STOP | \ - SUPPORT_PLAY_MEDIA | SUPPORT_SEEK | SUPPORT_NEXT_TRACK +SUPPORT_GSTREAMER = SUPPORT_VOLUME_SET | SUPPORT_PLAY | SUPPORT_PAUSE |\ + SUPPORT_PLAY_MEDIA | SUPPORT_NEXT_TRACK PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_NAME): cv.string, @@ -61,7 +60,6 @@ class GstreamerDevice(MediaPlayerDevice): self._state = STATE_IDLE self._volume = None self._duration = None - self._position = None self._uri = None self._title = None self._artist = None @@ -72,16 +70,11 @@ class GstreamerDevice(MediaPlayerDevice): self._state = self._player.state self._volume = self._player.volume self._duration = self._player.duration - self._position = self._player.position self._uri = self._player.uri self._title = self._player.title self._album = self._player.album self._artist = self._player.artist - def mute_volume(self, mute): - """Send the mute command.""" - self._player.mute() - def set_volume_level(self, volume): """Set the volume level.""" self._player.volume = volume @@ -93,9 +86,13 @@ class GstreamerDevice(MediaPlayerDevice): return self._player.queue(media_id) - def media_seek(self, position): - """Seek.""" - self._player.position = position + def media_play(self): + """Play.""" + self._player.play() + + def media_pause(self): + """Pause.""" + self._player.pause() def media_next_track(self): """Next track.""" @@ -121,11 +118,6 @@ class GstreamerDevice(MediaPlayerDevice): """Return the volume level.""" return self._volume - @property - def is_volume_muted(self): - """Volume muted.""" - return self._volume == 0 - @property def supported_features(self): """Flag media player features that are supported.""" @@ -141,11 +133,6 @@ class GstreamerDevice(MediaPlayerDevice): """Duration of current playing media in seconds.""" return self._duration - @property - def media_position(self): - """Position of current playing media in seconds.""" - return self._position - @property def media_title(self): """Media title.""" diff --git a/requirements_all.txt b/requirements_all.txt index 7e800d62548..8b4ed11ac88 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -212,7 +212,7 @@ googlemaps==2.4.6 gps3==0.33.3 # homeassistant.components.media_player.gstreamer -gstreamer-player==1.0.0 +gstreamer-player==1.1.0 # homeassistant.components.ffmpeg ha-ffmpeg==1.5 From 5d3fe83e623ccedc69997d7efbb059750cf038e8 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 8 Apr 2017 14:53:32 -0700 Subject: [PATCH 024/146] Warn if start takes a long time. (#6975) * Warn if start takes a long time. * ps - cleanup * Tweak message * Add tests * Tweak messagE --- homeassistant/core.py | 16 +++++++++++++++- tests/test_core.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/homeassistant/core.py b/homeassistant/core.py index ba19f392931..899bed064ed 100644 --- a/homeassistant/core.py +++ b/homeassistant/core.py @@ -18,6 +18,7 @@ from time import monotonic from types import MappingProxyType from typing import Optional, Any, Callable, List # NOQA +from async_timeout import timeout import voluptuous as vol from voluptuous.humanize import humanize_error @@ -49,6 +50,8 @@ ENTITY_ID_PATTERN = re.compile(r"^(\w+)\.(\w+)$") # Size of a executor pool EXECUTOR_POOL_SIZE = 10 +# How long to wait till things that run on startup have to finish. +TIMEOUT_EVENT_START = 15 _LOGGER = logging.getLogger(__name__) @@ -159,7 +162,18 @@ class HomeAssistant(object): # pylint: disable=protected-access self.loop._thread_ident = threading.get_ident() self.bus.async_fire(EVENT_HOMEASSISTANT_START) - yield from self.async_stop_track_tasks() + + try: + with timeout(TIMEOUT_EVENT_START, loop=self.loop): + yield from self.async_stop_track_tasks() + except asyncio.TimeoutError: + _LOGGER.warning( + 'Something is blocking Home Assistant from wrapping up the ' + 'start up phase. We\'re going to continue anyway. Please ' + 'report the following info at http://bit.ly/2ogP58T : %s', + ', '.join(self.config.components)) + self._track_task = False + self.state = CoreState.running _async_create_timer(self) diff --git a/tests/test_core.py b/tests/test_core.py index ea7f40aaff7..b2fca047292 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -5,6 +5,7 @@ import unittest from unittest.mock import patch, MagicMock, sentinel from datetime import datetime, timedelta +import logging import pytz import pytest @@ -867,3 +868,45 @@ def test_timer_out_of_sync(mock_monotonic, loop): assert slp_seconds == 1 assert callback is fire_time_event assert abs(nxt - 12.3) < 0.001 + + +@asyncio.coroutine +def test_hass_start_starts_the_timer(loop): + """Test when hass starts, it starts the timer.""" + hass = ha.HomeAssistant(loop=loop) + + try: + with patch('homeassistant.core._async_create_timer') as mock_timer: + yield from hass.async_start() + + assert hass.state == ha.CoreState.running + assert not hass._track_task + assert len(mock_timer.mock_calls) == 1 + assert mock_timer.mock_calls[0][1][0] is hass + + finally: + yield from hass.async_stop() + assert hass.state == ha.CoreState.not_running + + +@asyncio.coroutine +def test_start_taking_too_long(loop, caplog): + """Test when async_start takes too long.""" + hass = ha.HomeAssistant(loop=loop) + caplog.set_level(logging.WARNING) + + try: + with patch('homeassistant.core.timeout', + side_effect=asyncio.TimeoutError), \ + patch('homeassistant.core._async_create_timer') as mock_timer: + yield from hass.async_start() + + assert not hass._track_task + assert hass.state == ha.CoreState.running + assert len(mock_timer.mock_calls) == 1 + assert mock_timer.mock_calls[0][1][0] is hass + assert 'Something is blocking Home Assistant' in caplog.text + + finally: + yield from hass.async_stop() + assert hass.state == ha.CoreState.not_running From eb0a9869d853941b415bc38bbc2631dffadd2bd7 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 8 Apr 2017 18:29:28 -0700 Subject: [PATCH 025/146] Upgrade to aiohttp 2.0.6 (#6992) --- homeassistant/package_constraints.txt | 2 +- requirements_all.txt | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/package_constraints.txt b/homeassistant/package_constraints.txt index a8e8df3d250..2f9b45377ad 100644 --- a/homeassistant/package_constraints.txt +++ b/homeassistant/package_constraints.txt @@ -5,5 +5,5 @@ pip>=7.1.0 jinja2>=2.9.5 voluptuous==0.9.3 typing>=3,<4 -aiohttp==2.0.5 +aiohttp==2.0.6 async_timeout==1.2.0 diff --git a/requirements_all.txt b/requirements_all.txt index 8b4ed11ac88..42048eb8920 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -6,7 +6,7 @@ pip>=7.1.0 jinja2>=2.9.5 voluptuous==0.9.3 typing>=3,<4 -aiohttp==2.0.5 +aiohttp==2.0.6 async_timeout==1.2.0 # homeassistant.components.nuimo_controller diff --git a/setup.py b/setup.py index cdc4c43e7a2..ef6eb0f79a7 100755 --- a/setup.py +++ b/setup.py @@ -22,7 +22,7 @@ REQUIRES = [ 'jinja2>=2.9.5', 'voluptuous==0.9.3', 'typing>=3,<4', - 'aiohttp==2.0.5', + 'aiohttp==2.0.6', 'async_timeout==1.2.0', ] From ba8488d8f1d2f24791958bf5940e16d8f136ec68 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 9 Apr 2017 01:05:34 -0700 Subject: [PATCH 026/146] Make discovery not block start (#6991) * Make discovery not block start * Fix tests --- homeassistant/components/discovery.py | 10 +++- tests/components/test_discovery.py | 79 +++++++++------------------ 2 files changed, 35 insertions(+), 54 deletions(-) diff --git a/homeassistant/components/discovery.py b/homeassistant/components/discovery.py index 26036342452..891e34ee8a9 100644 --- a/homeassistant/components/discovery.py +++ b/homeassistant/components/discovery.py @@ -13,6 +13,7 @@ import logging import voluptuous as vol +from homeassistant.core import callback from homeassistant.const import EVENT_HOMEASSISTANT_START import homeassistant.helpers.config_validation as cv from homeassistant.helpers.event import async_track_point_in_utc_time @@ -105,7 +106,7 @@ def async_setup(hass, config): hass, component, platform, info, config) @asyncio.coroutine - def scan_devices(_): + def scan_devices(now): """Scan for devices.""" results = yield from hass.loop.run_in_executor( None, _discover, netdisco) @@ -116,7 +117,12 @@ def async_setup(hass, config): async_track_point_in_utc_time(hass, scan_devices, dt_util.utcnow() + SCAN_INTERVAL) - hass.bus.async_listen_once(EVENT_HOMEASSISTANT_START, scan_devices) + @callback + def schedule_first(event): + """Schedule the first discovery when Home Assistant starts up.""" + async_track_point_in_utc_time(hass, scan_devices, dt_util.utcnow()) + + hass.bus.async_listen_once(EVENT_HOMEASSISTANT_START, schedule_first) return True diff --git a/tests/components/test_discovery.py b/tests/components/test_discovery.py index abffc3b17cd..6b03ffa34e7 100644 --- a/tests/components/test_discovery.py +++ b/tests/components/test_discovery.py @@ -5,9 +5,9 @@ from unittest.mock import patch from homeassistant.bootstrap import async_setup_component from homeassistant.components import discovery -from homeassistant.const import EVENT_HOMEASSISTANT_START +from homeassistant.util.dt import utcnow -from tests.common import mock_coro +from tests.common import mock_coro, fire_time_changed # One might consider to "mock" services, but it's easy enough to just use # what is already available. @@ -34,24 +34,34 @@ IGNORE_CONFIG = { @asyncio.coroutine -def test_unknown_service(hass): - """Test that unknown service is ignored.""" - result = yield from async_setup_component(hass, 'discovery', { - 'discovery': {}, - }) +def mock_discovery(hass, discoveries, config=BASE_CONFIG): + """Helper to mock discoveries.""" + result = yield from async_setup_component(hass, 'discovery', config) assert result - def discover(netdisco): - """Fake discovery.""" - return [('this_service_will_never_be_supported', {'info': 'some'})] + yield from hass.async_start() - with patch.object(discovery, '_discover', discover), \ + with patch.object(discovery, '_discover', discoveries), \ patch('homeassistant.components.discovery.async_discover', return_value=mock_coro()) as mock_discover, \ patch('homeassistant.components.discovery.async_load_platform', return_value=mock_coro()) as mock_platform: - hass.bus.async_fire(EVENT_HOMEASSISTANT_START) + fire_time_changed(hass, utcnow()) + # Work around an issue where our loop.call_soon not get caught yield from hass.async_block_till_done() + yield from hass.async_block_till_done() + + return mock_discover, mock_platform + + +@asyncio.coroutine +def test_unknown_service(hass): + """Test that unknown service is ignored.""" + def discover(netdisco): + """Fake discovery.""" + return [('this_service_will_never_be_supported', {'info': 'some'})] + + mock_discover, mock_platform = yield from mock_discovery(hass, discover) assert not mock_discover.called assert not mock_platform.called @@ -60,20 +70,11 @@ def test_unknown_service(hass): @asyncio.coroutine def test_load_platform(hass): """Test load a platform.""" - result = yield from async_setup_component(hass, 'discovery', BASE_CONFIG) - assert result - def discover(netdisco): """Fake discovery.""" return [(SERVICE, SERVICE_INFO)] - with patch.object(discovery, '_discover', discover), \ - patch('homeassistant.components.discovery.async_discover', - return_value=mock_coro()) as mock_discover, \ - patch('homeassistant.components.discovery.async_load_platform', - return_value=mock_coro()) as mock_platform: - hass.bus.async_fire(EVENT_HOMEASSISTANT_START) - yield from hass.async_block_till_done() + mock_discover, mock_platform = yield from mock_discovery(hass, discover) assert not mock_discover.called assert mock_platform.called @@ -84,20 +85,11 @@ def test_load_platform(hass): @asyncio.coroutine def test_load_component(hass): """Test load a component.""" - result = yield from async_setup_component(hass, 'discovery', BASE_CONFIG) - assert result - def discover(netdisco): """Fake discovery.""" return [(SERVICE_NO_PLATFORM, SERVICE_INFO)] - with patch.object(discovery, '_discover', discover), \ - patch('homeassistant.components.discovery.async_discover', - return_value=mock_coro()) as mock_discover, \ - patch('homeassistant.components.discovery.async_load_platform', - return_value=mock_coro()) as mock_platform: - hass.bus.async_fire(EVENT_HOMEASSISTANT_START) - yield from hass.async_block_till_done() + mock_discover, mock_platform = yield from mock_discovery(hass, discover) assert mock_discover.called assert not mock_platform.called @@ -109,20 +101,12 @@ def test_load_component(hass): @asyncio.coroutine def test_ignore_service(hass): """Test ignore service.""" - result = yield from async_setup_component(hass, 'discovery', IGNORE_CONFIG) - assert result - def discover(netdisco): """Fake discovery.""" return [(SERVICE_NO_PLATFORM, SERVICE_INFO)] - with patch.object(discovery, '_discover', discover), \ - patch('homeassistant.components.discovery.async_discover', - return_value=mock_coro()) as mock_discover, \ - patch('homeassistant.components.discovery.async_load_platform', - return_value=mock_coro()) as mock_platform: - hass.bus.async_fire(EVENT_HOMEASSISTANT_START) - yield from hass.async_block_till_done() + mock_discover, mock_platform = yield from mock_discovery(hass, discover, + IGNORE_CONFIG) assert not mock_discover.called assert not mock_platform.called @@ -131,21 +115,12 @@ def test_ignore_service(hass): @asyncio.coroutine def test_discover_duplicates(hass): """Test load a component.""" - result = yield from async_setup_component(hass, 'discovery', BASE_CONFIG) - assert result - def discover(netdisco): """Fake discovery.""" return [(SERVICE_NO_PLATFORM, SERVICE_INFO), (SERVICE_NO_PLATFORM, SERVICE_INFO)] - with patch.object(discovery, '_discover', discover), \ - patch('homeassistant.components.discovery.async_discover', - return_value=mock_coro()) as mock_discover, \ - patch('homeassistant.components.discovery.async_load_platform', - return_value=mock_coro()) as mock_platform: - hass.bus.async_fire(EVENT_HOMEASSISTANT_START) - yield from hass.async_block_till_done() + mock_discover, mock_platform = yield from mock_discovery(hass, discover) assert mock_discover.called assert mock_discover.call_count == 1 From c42293eb10a9eee6ee402db6ea6b5b0b438f1506 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 9 Apr 2017 01:36:01 -0700 Subject: [PATCH 027/146] Downgrade aiohttp to 205 (#6994) --- homeassistant/package_constraints.txt | 2 +- requirements_all.txt | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/package_constraints.txt b/homeassistant/package_constraints.txt index 2f9b45377ad..a8e8df3d250 100644 --- a/homeassistant/package_constraints.txt +++ b/homeassistant/package_constraints.txt @@ -5,5 +5,5 @@ pip>=7.1.0 jinja2>=2.9.5 voluptuous==0.9.3 typing>=3,<4 -aiohttp==2.0.6 +aiohttp==2.0.5 async_timeout==1.2.0 diff --git a/requirements_all.txt b/requirements_all.txt index 42048eb8920..8b4ed11ac88 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -6,7 +6,7 @@ pip>=7.1.0 jinja2>=2.9.5 voluptuous==0.9.3 typing>=3,<4 -aiohttp==2.0.6 +aiohttp==2.0.5 async_timeout==1.2.0 # homeassistant.components.nuimo_controller diff --git a/setup.py b/setup.py index ef6eb0f79a7..cdc4c43e7a2 100755 --- a/setup.py +++ b/setup.py @@ -22,7 +22,7 @@ REQUIRES = [ 'jinja2>=2.9.5', 'voluptuous==0.9.3', 'typing>=3,<4', - 'aiohttp==2.0.6', + 'aiohttp==2.0.5', 'async_timeout==1.2.0', ] From ecfe0770ed5ec94e70a360eea38b1f357233fef1 Mon Sep 17 00:00:00 2001 From: Greg Dowling Date: Sun, 9 Apr 2017 22:48:18 +0100 Subject: [PATCH 028/146] Bump pywemo version. (#7004) --- homeassistant/components/wemo.py | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/wemo.py b/homeassistant/components/wemo.py index dfcc0c96c0b..88008874628 100644 --- a/homeassistant/components/wemo.py +++ b/homeassistant/components/wemo.py @@ -14,7 +14,7 @@ from homeassistant.helpers import config_validation as cv from homeassistant.const import EVENT_HOMEASSISTANT_STOP -REQUIREMENTS = ['pywemo==0.4.16'] +REQUIREMENTS = ['pywemo==0.4.17'] DOMAIN = 'wemo' diff --git a/requirements_all.txt b/requirements_all.txt index 8b4ed11ac88..3941a201c40 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -660,7 +660,7 @@ pyvera==0.2.25 pywebpush==0.6.1 # homeassistant.components.wemo -pywemo==0.4.16 +pywemo==0.4.17 # homeassistant.components.zabbix pyzabbix==0.7.4 From d5e3cd51a558b2dc80a00990504fa15e20750b39 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 9 Apr 2017 23:19:22 -0700 Subject: [PATCH 029/146] Fix Synology camera content type (#7010) --- homeassistant/components/camera/synology.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/camera/synology.py b/homeassistant/components/camera/synology.py index e986d81887b..dd6061dcacf 100644 --- a/homeassistant/components/camera/synology.py +++ b/homeassistant/components/camera/synology.py @@ -81,7 +81,9 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None): params=query_payload ) - query_resp = yield from query_req.json() + # Skip content type check because Synology doesn't return JSON with + # right content type + query_resp = yield from query_req.json(content_type=None) auth_path = query_resp['data'][AUTH_API]['path'] camera_api = query_resp['data'][CAMERA_API]['path'] camera_path = query_resp['data'][CAMERA_API]['path'] From 90e73fda3c26e1b7f1aa44c6c74146da28577038 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 10 Apr 2017 01:18:37 -0700 Subject: [PATCH 030/146] Fix two more instances of JSON parsing synology (#7014) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add an optional extended description… --- homeassistant/components/camera/synology.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/camera/synology.py b/homeassistant/components/camera/synology.py index dd6061dcacf..378d75ac26d 100644 --- a/homeassistant/components/camera/synology.py +++ b/homeassistant/components/camera/synology.py @@ -129,7 +129,7 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None): _LOGGER.exception("Error on %s", syno_camera_url) return False - camera_resp = yield from camera_req.json() + camera_resp = yield from camera_req.json(content_type=None) cameras = camera_resp['data']['cameras'] # add cameras @@ -174,7 +174,7 @@ def get_session_id(hass, websession, username, password, login_url, timeout): login_url, params=auth_payload ) - auth_resp = yield from auth_req.json() + auth_resp = yield from auth_req.json(content_type=None) return auth_resp['data']['sid'] except (asyncio.TimeoutError, aiohttp.ClientError): From 6cd3758b58fb8f90cbbb9dfbcca108e29f4c9e34 Mon Sep 17 00:00:00 2001 From: Xorso Date: Mon, 10 Apr 2017 08:13:07 -0600 Subject: [PATCH 031/146] Bump pyalarmdotcom to support new version of aiohttp (#7021) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add an optional extended description… --- homeassistant/components/alarm_control_panel/alarmdotcom.py | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/alarm_control_panel/alarmdotcom.py b/homeassistant/components/alarm_control_panel/alarmdotcom.py index 22cbdefd403..6e99ba67257 100644 --- a/homeassistant/components/alarm_control_panel/alarmdotcom.py +++ b/homeassistant/components/alarm_control_panel/alarmdotcom.py @@ -17,7 +17,7 @@ from homeassistant.const import ( import homeassistant.helpers.config_validation as cv from homeassistant.helpers.aiohttp_client import async_get_clientsession -REQUIREMENTS = ['pyalarmdotcom==0.2.9'] +REQUIREMENTS = ['pyalarmdotcom==0.3.0'] _LOGGER = logging.getLogger(__name__) diff --git a/requirements_all.txt b/requirements_all.txt index 3941a201c40..82296816dac 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -475,7 +475,7 @@ pyHS100==0.2.4.2 pyRFXtrx==0.17.0 # homeassistant.components.alarm_control_panel.alarmdotcom -pyalarmdotcom==0.2.9 +pyalarmdotcom==0.3.0 # homeassistant.components.notify.xmpp pyasn1-modules==0.0.8 From ab247b0f4d6a85a3fa070d88b4f810e78fcf91d6 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 10 Apr 2017 16:13:43 +0200 Subject: [PATCH 032/146] Fix US states check (fixes #7015) (#7017) --- homeassistant/components/binary_sensor/workday.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/binary_sensor/workday.py b/homeassistant/components/binary_sensor/workday.py index c2590925df7..c25ea81922b 100644 --- a/homeassistant/components/binary_sensor/workday.py +++ b/homeassistant/components/binary_sensor/workday.py @@ -66,8 +66,9 @@ def setup_platform(hass, config, add_devices, discovery_info=None): obj_holidays = getattr(holidays, country)(years=year) if province: - if province not in obj_holidays.PROVINCES: - _LOGGER.error('There is no province/state %s in country %s', + if province not in obj_holidays.PROVINCES and \ + province not in obj_holidays.STATES: + _LOGGER.error("There is no province/state %s in country %s", province, country) return False else: From d081e5ab3a4116c83ed8cfd42b21a5a4e3fbf6d9 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 10 Apr 2017 09:04:19 -0700 Subject: [PATCH 033/146] Remove deprecated remote classes (#7011) * Remove deprecated remote classes * Lint * Fix tests * Lint --- homeassistant/components/api.py | 78 +--------- homeassistant/const.py | 1 - homeassistant/remote.py | 250 +------------------------------- tests/components/test_api.py | 75 ---------- tests/test_remote.py | 121 +--------------- 5 files changed, 9 insertions(+), 516 deletions(-) diff --git a/homeassistant/components/api.py b/homeassistant/components/api.py index b22bd851190..8beb737ae89 100644 --- a/homeassistant/components/api.py +++ b/homeassistant/components/api.py @@ -17,9 +17,9 @@ from homeassistant.bootstrap import ERROR_LOG_FILENAME from homeassistant.const import ( EVENT_HOMEASSISTANT_STOP, EVENT_TIME_CHANGED, HTTP_BAD_REQUEST, HTTP_CREATED, HTTP_NOT_FOUND, - HTTP_UNPROCESSABLE_ENTITY, MATCH_ALL, URL_API, URL_API_COMPONENTS, + MATCH_ALL, URL_API, URL_API_COMPONENTS, URL_API_CONFIG, URL_API_DISCOVERY_INFO, URL_API_ERROR_LOG, - URL_API_EVENT_FORWARD, URL_API_EVENTS, URL_API_SERVICES, + URL_API_EVENTS, URL_API_SERVICES, URL_API_STATES, URL_API_STATES_ENTITY, URL_API_STREAM, URL_API_TEMPLATE, __version__) from homeassistant.exceptions import TemplateError @@ -48,7 +48,6 @@ def setup(hass, config): hass.http.register_view(APIEventView) hass.http.register_view(APIServicesView) hass.http.register_view(APIDomainServicesView) - hass.http.register_view(APIEventForwardingView) hass.http.register_view(APIComponentsView) hass.http.register_view(APITemplateView) @@ -319,79 +318,6 @@ class APIDomainServicesView(HomeAssistantView): return self.json(changed_states) -class APIEventForwardingView(HomeAssistantView): - """View to handle EventForwarding requests.""" - - url = URL_API_EVENT_FORWARD - name = "api:event-forward" - event_forwarder = None - - @asyncio.coroutine - def post(self, request): - """Setup an event forwarder.""" - _LOGGER.warning('Event forwarding is deprecated. ' - 'Will be removed by 0.43') - hass = request.app['hass'] - try: - data = yield from request.json() - except ValueError: - return self.json_message("No data received.", HTTP_BAD_REQUEST) - - try: - host = data['host'] - api_password = data['api_password'] - except KeyError: - return self.json_message("No host or api_password received.", - HTTP_BAD_REQUEST) - - try: - port = int(data['port']) if 'port' in data else None - except ValueError: - return self.json_message("Invalid value received for port.", - HTTP_UNPROCESSABLE_ENTITY) - - api = rem.API(host, api_password, port) - - valid = yield from hass.loop.run_in_executor( - None, api.validate_api) - if not valid: - return self.json_message("Unable to validate API.", - HTTP_UNPROCESSABLE_ENTITY) - - if self.event_forwarder is None: - self.event_forwarder = rem.EventForwarder(hass) - - self.event_forwarder.async_connect(api) - - return self.json_message("Event forwarding setup.") - - @asyncio.coroutine - def delete(self, request): - """Remove event forwarder.""" - try: - data = yield from request.json() - except ValueError: - return self.json_message("No data received.", HTTP_BAD_REQUEST) - - try: - host = data['host'] - except KeyError: - return self.json_message("No host received.", HTTP_BAD_REQUEST) - - try: - port = int(data['port']) if 'port' in data else None - except ValueError: - return self.json_message("Invalid value received for port.", - HTTP_UNPROCESSABLE_ENTITY) - - if self.event_forwarder is not None: - api = rem.API(host, None, port) - - self.event_forwarder.async_disconnect(api) - - return self.json_message("Event forwarding cancelled.") - - class APIComponentsView(HomeAssistantView): """View to handle Components requests.""" diff --git a/homeassistant/const.py b/homeassistant/const.py index bb882ca4ea9..b73f64bfa72 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -361,7 +361,6 @@ URL_API_EVENTS = '/api/events' URL_API_EVENTS_EVENT = '/api/events/{}' URL_API_SERVICES = '/api/services' URL_API_SERVICES_SERVICE = '/api/services/{}/{}' -URL_API_EVENT_FORWARD = '/api/event_forwarding' URL_API_COMPONENTS = '/api/components' URL_API_ERROR_LOG = '/api/error_log' URL_API_LOG_OUT = '/api/log_out' diff --git a/homeassistant/remote.py b/homeassistant/remote.py index 1107eda8742..c0e3d9d6459 100644 --- a/homeassistant/remote.py +++ b/homeassistant/remote.py @@ -7,23 +7,19 @@ HomeAssistantError will be raised. For more details about the Python API, please refer to the documentation at https://home-assistant.io/developers/python_api/ """ -import asyncio -from concurrent.futures import ThreadPoolExecutor from datetime import datetime import enum import json import logging -import time -import threading import urllib.parse from typing import Optional import requests -from homeassistant import setup, core as ha +from homeassistant import core as ha from homeassistant.const import ( - HTTP_HEADER_HA_AUTH, SERVER_PORT, URL_API, URL_API_EVENT_FORWARD, + HTTP_HEADER_HA_AUTH, SERVER_PORT, URL_API, URL_API_EVENTS, URL_API_EVENTS_EVENT, URL_API_SERVICES, URL_API_CONFIG, URL_API_SERVICES_SERVICE, URL_API_STATES, URL_API_STATES_ENTITY, HTTP_HEADER_CONTENT_TYPE, CONTENT_TYPE_JSON) @@ -116,195 +112,6 @@ class API(object): self.base_url, 'yes' if self.api_password is not None else 'no') -class HomeAssistant(ha.HomeAssistant): - """Home Assistant that forwards work.""" - - # pylint: disable=super-init-not-called - def __init__(self, remote_api, local_api=None, loop=None): - """Initalize the forward instance.""" - _LOGGER.warning('Remote instances of Home Assistant are deprecated. ' - 'Will be removed by 0.43') - if not remote_api.validate_api(): - raise HomeAssistantError( - "Remote API at {}:{} not valid: {}".format( - remote_api.host, remote_api.port, remote_api.status)) - - self.remote_api = remote_api - - self.loop = loop or asyncio.get_event_loop() - self.executor = ThreadPoolExecutor(max_workers=5) - self.loop.set_default_executor(self.executor) - self.loop.set_exception_handler(ha.async_loop_exception_handler) - self._pending_tasks = [] - self._pending_sheduler = None - - self.bus = EventBus(remote_api, self) - self.services = ha.ServiceRegistry(self) - self.states = StateMachine(self.bus, self.loop, self.remote_api) - self.config = ha.Config() - # This is a dictionary that any component can store any data on. - self.data = {} - self.state = ha.CoreState.not_running - self.exit_code = None - self.config.api = local_api - - def start(self): - """Start the instance.""" - # Ensure a local API exists to connect with remote - if 'api' not in self.config.components: - if not setup.setup_component(self, 'api'): - raise HomeAssistantError( - 'Unable to setup local API to receive events') - - self.state = ha.CoreState.starting - # pylint: disable=protected-access - ha._async_create_timer(self) - - self.bus.fire(ha.EVENT_HOMEASSISTANT_START, - origin=ha.EventOrigin.remote) - - # Ensure local HTTP is started - self.block_till_done() - self.state = ha.CoreState.running - time.sleep(0.05) - - # Setup that events from remote_api get forwarded to local_api - # Do this after we are running, otherwise HTTP is not started - # or requests are blocked - if not connect_remote_events(self.remote_api, self.config.api): - raise HomeAssistantError(( - 'Could not setup event forwarding from api {} to ' - 'local api {}').format(self.remote_api, self.config.api)) - - def stop(self): - """Stop Home Assistant and shuts down all threads.""" - _LOGGER.info("Stopping") - self.state = ha.CoreState.stopping - - self.bus.fire(ha.EVENT_HOMEASSISTANT_STOP, - origin=ha.EventOrigin.remote) - - # Disconnect master event forwarding - disconnect_remote_events(self.remote_api, self.config.api) - self.state = ha.CoreState.not_running - - -class EventBus(ha.EventBus): - """EventBus implementation that forwards fire_event to remote API.""" - - def __init__(self, api, hass): - """Initalize the eventbus.""" - super().__init__(hass) - self._api = api - - def fire(self, event_type, event_data=None, origin=ha.EventOrigin.local): - """Forward local events to remote target. - - Handles remote event as usual. - """ - # All local events that are not TIME_CHANGED are forwarded to API - if origin == ha.EventOrigin.local and \ - event_type != ha.EVENT_TIME_CHANGED: - - fire_event(self._api, event_type, event_data) - - else: - super().fire(event_type, event_data, origin) - - -class EventForwarder(object): - """Listens for events and forwards to specified APIs.""" - - def __init__(self, hass, restrict_origin=None): - """Initalize the event forwarder.""" - _LOGGER.warning('API forwarding is deprecated. ' - 'Will be removed by 0.43') - - self.hass = hass - self.restrict_origin = restrict_origin - - # We use a tuple (host, port) as key to ensure - # that we do not forward to the same host twice - self._targets = {} - - self._lock = threading.Lock() - self._async_unsub_listener = None - - @ha.callback - def async_connect(self, api): - """Attach to a Home Assistant instance and forward events. - - Will overwrite old target if one exists with same host/port. - """ - if self._async_unsub_listener is None: - self._async_unsub_listener = self.hass.bus.async_listen( - ha.MATCH_ALL, self._event_listener) - - key = (api.host, api.port) - - self._targets[key] = api - - @ha.callback - def async_disconnect(self, api): - """Remove target from being forwarded to.""" - key = (api.host, api.port) - - did_remove = self._targets.pop(key, None) is None - - if len(self._targets) == 0: - # Remove event listener if no forwarding targets present - self._async_unsub_listener() - self._async_unsub_listener = None - - return did_remove - - def _event_listener(self, event): - """Listen and forward all events.""" - with self._lock: - # We don't forward time events or, if enabled, non-local events - if event.event_type == ha.EVENT_TIME_CHANGED or \ - (self.restrict_origin and event.origin != self.restrict_origin): - return - - for api in self._targets.values(): - fire_event(api, event.event_type, event.data) - - -class StateMachine(ha.StateMachine): - """Fire set events to an API. Uses state_change events to track states.""" - - def __init__(self, bus, loop, api): - """Initalize the statemachine.""" - super().__init__(bus, loop) - self._api = api - self.mirror() - - bus.listen(ha.EVENT_STATE_CHANGED, self._state_changed_listener) - - def remove(self, entity_id): - """Remove the state of an entity. - - Returns boolean to indicate if an entity was removed. - """ - return remove_state(self._api, entity_id) - - def set(self, entity_id, new_state, attributes=None, force_update=False): - """Call set_state on remote API.""" - set_state(self._api, entity_id, new_state, attributes, force_update) - - def mirror(self): - """Discard current data and mirrors the remote state machine.""" - self._states = {state.entity_id: state for state - in get_states(self._api)} - - def _state_changed_listener(self, event): - """Listen for state changed events and applies them.""" - if event.data['new_state'] is None: - self._states.pop(event.data['entity_id'], None) - else: - self._states[event.data['entity_id']] = event.data['new_state'] - - class JSONEncoder(json.JSONEncoder): """JSONEncoder that supports Home Assistant objects.""" @@ -352,59 +159,6 @@ def validate_api(api): return APIStatus.CANNOT_CONNECT -def connect_remote_events(from_api, to_api): - """Setup from_api to forward all events to to_api.""" - _LOGGER.warning('Event forwarding is deprecated. ' - 'Will be removed by 0.43') - data = { - 'host': to_api.host, - 'api_password': to_api.api_password, - 'port': to_api.port - } - - try: - req = from_api(METHOD_POST, URL_API_EVENT_FORWARD, data) - - if req.status_code == 200: - return True - else: - _LOGGER.error( - "Error setting up event forwarding: %s - %s", - req.status_code, req.text) - - return False - - except HomeAssistantError: - _LOGGER.exception("Error setting up event forwarding") - return False - - -def disconnect_remote_events(from_api, to_api): - """Disconnect forwarding events from from_api to to_api.""" - _LOGGER.warning('Event forwarding is deprecated. ' - 'Will be removed by 0.43') - data = { - 'host': to_api.host, - 'port': to_api.port - } - - try: - req = from_api(METHOD_DELETE, URL_API_EVENT_FORWARD, data) - - if req.status_code == 200: - return True - else: - _LOGGER.error( - "Error removing event forwarding: %s - %s", - req.status_code, req.text) - - return False - - except HomeAssistantError: - _LOGGER.exception("Error removing an event forwarder") - return False - - def get_event_listeners(api): """List of events that is being listened for.""" try: diff --git a/tests/components/test_api.py b/tests/components/test_api.py index e2d93c9cce7..8d6041b49c1 100644 --- a/tests/components/test_api.py +++ b/tests/components/test_api.py @@ -337,81 +337,6 @@ class TestAPI(unittest.TestCase): self.assertEqual(400, req.status_code) - def test_api_event_forward(self): - """Test setting up event forwarding.""" - req = requests.post( - _url(const.URL_API_EVENT_FORWARD), - headers=HA_HEADERS) - self.assertEqual(400, req.status_code) - - req = requests.post( - _url(const.URL_API_EVENT_FORWARD), - data=json.dumps({'host': '127.0.0.1'}), - headers=HA_HEADERS) - self.assertEqual(400, req.status_code) - - req = requests.post( - _url(const.URL_API_EVENT_FORWARD), - data=json.dumps({'api_password': 'bla-di-bla'}), - headers=HA_HEADERS) - self.assertEqual(400, req.status_code) - - req = requests.post( - _url(const.URL_API_EVENT_FORWARD), - data=json.dumps({ - 'api_password': 'bla-di-bla', - 'host': '127.0.0.1', - 'port': 'abcd' - }), - headers=HA_HEADERS) - self.assertEqual(422, req.status_code) - - req = requests.post( - _url(const.URL_API_EVENT_FORWARD), - data=json.dumps({ - 'api_password': 'bla-di-bla', - 'host': '127.0.0.1', - 'port': get_test_instance_port() - }), - headers=HA_HEADERS) - self.assertEqual(422, req.status_code) - - # Setup a real one - req = requests.post( - _url(const.URL_API_EVENT_FORWARD), - data=json.dumps({ - 'api_password': API_PASSWORD, - 'host': '127.0.0.1', - 'port': SERVER_PORT - }), - headers=HA_HEADERS) - self.assertEqual(200, req.status_code) - - # Delete it again.. - req = requests.delete( - _url(const.URL_API_EVENT_FORWARD), - data=json.dumps({}), - headers=HA_HEADERS) - self.assertEqual(400, req.status_code) - - req = requests.delete( - _url(const.URL_API_EVENT_FORWARD), - data=json.dumps({ - 'host': '127.0.0.1', - 'port': 'abcd' - }), - headers=HA_HEADERS) - self.assertEqual(422, req.status_code) - - req = requests.delete( - _url(const.URL_API_EVENT_FORWARD), - data=json.dumps({ - 'host': '127.0.0.1', - 'port': SERVER_PORT - }), - headers=HA_HEADERS) - self.assertEqual(200, req.status_code) - def test_stream(self): """Test the stream.""" listen_count = self._listen_count() diff --git a/tests/test_remote.py b/tests/test_remote.py index eec7b4cf98d..41011794914 100644 --- a/tests/test_remote.py +++ b/tests/test_remote.py @@ -1,9 +1,6 @@ """Test Home Assistant remote methods and classes.""" # pylint: disable=protected-access -import asyncio -import threading import unittest -from unittest.mock import patch from homeassistant import remote, setup, core as ha import homeassistant.components.http as http @@ -11,18 +8,17 @@ from homeassistant.const import HTTP_HEADER_HA_AUTH, EVENT_STATE_CHANGED import homeassistant.util.dt as dt_util from tests.common import ( - get_test_instance_port, get_test_home_assistant, get_test_config_dir) + get_test_instance_port, get_test_home_assistant) API_PASSWORD = 'test1234' MASTER_PORT = get_test_instance_port() -SLAVE_PORT = get_test_instance_port() BROKEN_PORT = get_test_instance_port() HTTP_BASE_URL = 'http://127.0.0.1:{}'.format(MASTER_PORT) HA_HEADERS = {HTTP_HEADER_HA_AUTH: API_PASSWORD} broken_api = remote.API('127.0.0.1', "bladybla", port=get_test_instance_port()) -hass, slave, master_api = None, None, None +hass, master_api = None, None def _url(path=''): @@ -32,8 +28,8 @@ def _url(path=''): # pylint: disable=invalid-name def setUpModule(): - """Initalization of a Home Assistant server and Slave instance.""" - global hass, slave, master_api + """Initalization of a Home Assistant server instance.""" + global hass, master_api hass = get_test_home_assistant() @@ -51,30 +47,10 @@ def setUpModule(): master_api = remote.API('127.0.0.1', API_PASSWORD, MASTER_PORT) - # Start slave - loop = asyncio.new_event_loop() - - # FIXME: should not be a daemon - threading.Thread(name='SlaveThread', daemon=True, - target=loop.run_forever).start() - - slave = remote.HomeAssistant(master_api, loop=loop) - slave.async_track_tasks() - slave.config.config_dir = get_test_config_dir() - slave.config.skip_pip = True - setup.setup_component( - slave, http.DOMAIN, - {http.DOMAIN: {http.CONF_API_PASSWORD: API_PASSWORD, - http.CONF_SERVER_PORT: SLAVE_PORT}}) - - with patch.object(ha, '_async_create_timer', return_value=None): - slave.start() - # pylint: disable=invalid-name def tearDownModule(): - """Stop the Home Assistant server and slave.""" - slave.stop() + """Stop the Home Assistant server.""" hass.stop() @@ -83,7 +59,6 @@ class TestRemoteMethods(unittest.TestCase): def tearDown(self): """Stop everything that was started.""" - slave.block_till_done() hass.block_till_done() def test_validate_api(self): @@ -228,89 +203,3 @@ class TestRemoteMethods(unittest.TestCase): now = dt_util.utcnow() self.assertEqual(now.isoformat(), ha_json_enc.default(now)) - - -class TestRemoteClasses(unittest.TestCase): - """Test the homeassistant.remote module.""" - - def tearDown(self): - """Stop everything that was started.""" - slave.block_till_done() - hass.block_till_done() - - def test_home_assistant_init(self): - """Test HomeAssistant init.""" - # Wrong password - self.assertRaises( - ha.HomeAssistantError, remote.HomeAssistant, - remote.API('127.0.0.1', API_PASSWORD + 'A', 8124)) - - # Wrong port - self.assertRaises( - ha.HomeAssistantError, remote.HomeAssistant, - remote.API('127.0.0.1', API_PASSWORD, BROKEN_PORT)) - - def test_statemachine_init(self): - """Test if remote.StateMachine copies all states on init.""" - self.assertEqual(sorted(hass.states.all()), - sorted(slave.states.all())) - - def test_statemachine_set(self): - """Test if setting the state on a slave is recorded.""" - slave.states.set("remote.test", "remote.statemachine test") - - # Wait till slave tells master - slave.block_till_done() - # Wait till master gives updated state - hass.block_till_done() - - self.assertEqual("remote.statemachine test", - slave.states.get("remote.test").state) - - def test_statemachine_remove_from_master(self): - """Remove statemachine from master.""" - hass.states.set("remote.master_remove", "remove me!") - hass.block_till_done() - slave.block_till_done() - - self.assertIn('remote.master_remove', slave.states.entity_ids()) - - hass.states.remove("remote.master_remove") - hass.block_till_done() - slave.block_till_done() - - self.assertNotIn('remote.master_remove', slave.states.entity_ids()) - - def test_statemachine_remove_from_slave(self): - """Remove statemachine from slave.""" - hass.states.set("remote.slave_remove", "remove me!") - hass.block_till_done() - - self.assertIn('remote.slave_remove', slave.states.entity_ids()) - - self.assertTrue(slave.states.remove("remote.slave_remove")) - slave.block_till_done() - hass.block_till_done() - - self.assertNotIn('remote.slave_remove', slave.states.entity_ids()) - - def test_eventbus_fire(self): - """Test if events fired from the eventbus get fired.""" - hass_call = [] - slave_call = [] - - hass.bus.listen("test.event_no_data", lambda _: hass_call.append(1)) - slave.bus.listen("test.event_no_data", lambda _: slave_call.append(1)) - slave.bus.fire("test.event_no_data") - - # Wait till slave tells master - slave.block_till_done() - # Wait till master gives updated event - hass.block_till_done() - - self.assertEqual(1, len(hass_call)) - self.assertEqual(1, len(slave_call)) - - def test_get_config(self): - """Test the return of the configuration.""" - self.assertEqual(hass.config.as_dict(), remote.get_config(master_api)) From 89e8e1a4c7ea00bc21fb391a7d63d13aa9fc1d4c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 10 Apr 2017 18:43:40 +0200 Subject: [PATCH 034/146] Replace 'vendor_id' with 'arch' (fixes #7003) (#7023) --- homeassistant/components/sensor/cpuspeed.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/sensor/cpuspeed.py b/homeassistant/components/sensor/cpuspeed.py index a86d28a1a06..eeb52b8e35b 100644 --- a/homeassistant/components/sensor/cpuspeed.py +++ b/homeassistant/components/sensor/cpuspeed.py @@ -19,7 +19,7 @@ _LOGGER = logging.getLogger(__name__) ATTR_BRAND = 'Brand' ATTR_HZ = 'GHz Advertised' -ATTR_VENDOR = 'Vendor ID' +ATTR_ARCH = 'arch' DEFAULT_NAME = 'CPU speed' ICON = 'mdi:pulse' @@ -67,7 +67,7 @@ class CpuSpeedSensor(Entity): """Return the state attributes.""" if self.info is not None: return { - ATTR_VENDOR: self.info['vendor_id'], + ATTR_ARCH: self.info['arch'], ATTR_BRAND: self.info['brand'], ATTR_HZ: round(self.info['hz_advertised_raw'][0]/10**9, 2) } From 05eb73a0e337af00be80b9191ee64ec101573fb7 Mon Sep 17 00:00:00 2001 From: micw Date: Mon, 10 Apr 2017 21:51:46 +0200 Subject: [PATCH 035/146] more tests for slugify (#7027) --- tests/util/test_init.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/util/test_init.py b/tests/util/test_init.py index d6d583342d7..3ccb72920d4 100644 --- a/tests/util/test_init.py +++ b/tests/util/test_init.py @@ -31,6 +31,12 @@ class TestUtil(unittest.TestCase): self.assertEqual("test_more", util.slugify("Test More")) self.assertEqual("test_more", util.slugify("Test_(More)")) self.assertEqual("test_more", util.slugify("Tèst_MörĂŞ")) + self.assertEqual("b827eb000000", util.slugify("B8:27:EB:00:00:00")) + self.assertEqual("testcom", util.slugify("test.com")) + self.assertEqual("greg_phone__exp_wayp1", + util.slugify("greg_phone - exp_wayp1")) + self.assertEqual("we_are_we_are_a_test_calendar", + util.slugify("We are, we are, a... Test Calendar")) def test_repr_helper(self): """Test repr_helper.""" From ee988dc8846e8ba498d3193382e76d77d6c853eb Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Mon, 10 Apr 2017 16:11:39 -0400 Subject: [PATCH 036/146] Additional ZWave coverage (#7024) * Additional ZWave coverage * setup_platform tests --- homeassistant/components/zwave/__init__.py | 16 ++-- tests/components/zwave/test_init.py | 100 ++++++++++++++++++++- 2 files changed, 105 insertions(+), 11 deletions(-) diff --git a/homeassistant/components/zwave/__init__.py b/homeassistant/components/zwave/__init__.py index daeca63f52b..38827bc5533 100755 --- a/homeassistant/components/zwave/__init__.py +++ b/homeassistant/components/zwave/__init__.py @@ -13,6 +13,7 @@ from pprint import pprint import voluptuous as vol +from homeassistant.core import CoreState from homeassistant.loader import get_platform from homeassistant.helpers import discovery from homeassistant.helpers.entity_component import EntityComponent @@ -201,14 +202,15 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None): """Generic Z-Wave platform setup.""" if discovery_info is None or NETWORK is None: return False + device = hass.data[DATA_ZWAVE_DICT].pop( - discovery_info[const.DISCOVERY_DEVICE]) - if device: - async_add_devices([device]) - return True - else: + discovery_info[const.DISCOVERY_DEVICE], None) + if device is None: return False + async_add_devices([device]) + return True + # pylint: disable=R0914 def setup(hass, config): @@ -258,7 +260,7 @@ def setup(hass, config): NETWORK = ZWaveNetwork(options, autostart=False) hass.data[DATA_ZWAVE_DICT] = {} - if use_debug: + if use_debug: # pragma: no cover def log_all(signal, value=None): """Log all the signals.""" print("") @@ -388,7 +390,7 @@ def setup(hass, config): """Stop Z-Wave network.""" _LOGGER.info("Stopping ZWave network.") NETWORK.stop() - if hass.state == 'RUNNING': + if hass.state == CoreState.running: hass.bus.fire(const.EVENT_NETWORK_STOP) def rename_node(service): diff --git a/tests/components/zwave/test_init.py b/tests/components/zwave/test_init.py index fe104b1e33a..2e80e5b5331 100644 --- a/tests/components/zwave/test_init.py +++ b/tests/components/zwave/test_init.py @@ -18,6 +18,13 @@ from tests.common import get_test_home_assistant from tests.mock.zwave import MockNetwork, MockNode, MockValue, MockEntityValues +@asyncio.coroutine +def test_missing_openzwave(hass): + """Test that missing openzwave lib stops setup.""" + result = yield from async_setup_component(hass, 'zwave', {'zwave': {}}) + assert not result + + @asyncio.coroutine def test_valid_device_config(hass, mock_openzwave): """Test valid device config.""" @@ -50,6 +57,87 @@ def test_invalid_device_config(hass, mock_openzwave): assert not result +def test_config_access_error(): + """Test threading error accessing config values.""" + node = MagicMock() + + def side_effect(): + raise RuntimeError + + node.values.values.side_effect = side_effect + result = zwave.get_config_value(node, 1) + assert result is None + + +@asyncio.coroutine +@patch.object(zwave, 'NETWORK') +def test_setup_platform(mock_network, hass, mock_openzwave): + """Test invalid device config.""" + mock_device = MagicMock() + hass.data[zwave.DATA_ZWAVE_DICT] = {456: mock_device} + async_add_devices = MagicMock() + + result = yield from zwave.async_setup_platform( + hass, None, async_add_devices, None) + assert not result + assert not async_add_devices.called + + result = yield from zwave.async_setup_platform( + hass, None, async_add_devices, {const.DISCOVERY_DEVICE: 123}) + assert not result + assert not async_add_devices.called + + result = yield from zwave.async_setup_platform( + hass, None, async_add_devices, {const.DISCOVERY_DEVICE: 456}) + assert result + assert async_add_devices.called + assert len(async_add_devices.mock_calls) == 1 + assert async_add_devices.mock_calls[0][1][0] == [mock_device] + + +@asyncio.coroutine +def test_zwave_ready_wait(hass, mock_openzwave): + """Test that zwave continues after waiting for network ready.""" + # Initialize zwave + yield from async_setup_component(hass, 'zwave', {'zwave': {}}) + yield from hass.async_block_till_done() + + with patch.object(zwave.time, 'sleep') as mock_sleep: + with patch.object(zwave, '_LOGGER') as mock_logger: + zwave.NETWORK.state = MockNetwork.STATE_STARTED + hass.bus.async_fire(EVENT_HOMEASSISTANT_START) + yield from hass.async_block_till_done() + + assert mock_sleep.called + assert len(mock_sleep.mock_calls) == const.NETWORK_READY_WAIT_SECS + assert mock_logger.warning.called + assert len(mock_logger.warning.mock_calls) == 1 + assert mock_logger.warning.mock_calls[0][1][1] == \ + const.NETWORK_READY_WAIT_SECS + + +@asyncio.coroutine +def test_device_entity(hass, mock_openzwave): + """Test device entity base class.""" + node = MockNode(node_id='10', name='Mock Node') + value = MockValue(data=False, node=node, instance=2, object_id='11', + label='Sensor', + command_class=const.COMMAND_CLASS_SENSOR_BINARY) + power_value = MockValue(data=50.123456, node=node, precision=3, + command_class=const.COMMAND_CLASS_METER) + values = MockEntityValues(primary=value, power=power_value) + device = zwave.ZWaveDeviceEntity(values, 'zwave') + device.hass = hass + device.value_added() + device.update_properties() + yield from hass.async_block_till_done() + + assert not device.should_poll + assert device.unique_id == "ZWAVE-10-11" + assert device.name == 'Mock Node Sensor' + assert device.device_state_attributes[zwave.ATTR_POWER] == 50.123 + + class TestZWaveDeviceEntityValues(unittest.TestCase): """Tests for the ZWaveDeviceEntityValues helper.""" @@ -453,11 +541,15 @@ class TestZWaveServices(unittest.TestCase): def test_stop_network(self): """Test zwave stop_network service.""" - self.hass.services.call('zwave', 'stop_network', {}) - self.hass.block_till_done() + with patch.object(self.hass.bus, 'fire') as mock_fire: + self.hass.services.call('zwave', 'stop_network', {}) + self.hass.block_till_done() - assert zwave.NETWORK.stop.called - assert len(zwave.NETWORK.stop.mock_calls) == 1 + assert zwave.NETWORK.stop.called + assert len(zwave.NETWORK.stop.mock_calls) == 1 + assert mock_fire.called + assert len(mock_fire.mock_calls) == 2 + assert mock_fire.mock_calls[0][1][0] == const.EVENT_NETWORK_STOP def test_rename_node(self): """Test zwave rename_node service.""" From 32da1634212caab59b86478404aea68d4322f020 Mon Sep 17 00:00:00 2001 From: happyleavesaoc Date: Tue, 11 Apr 2017 02:09:39 -0400 Subject: [PATCH 037/146] bump ups version (#7033) --- homeassistant/components/sensor/ups.py | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/sensor/ups.py b/homeassistant/components/sensor/ups.py index 4d4e0601ca5..415ff1f8745 100644 --- a/homeassistant/components/sensor/ups.py +++ b/homeassistant/components/sensor/ups.py @@ -19,7 +19,7 @@ from homeassistant.util import Throttle from homeassistant.util.dt import now, parse_date import homeassistant.helpers.config_validation as cv -REQUIREMENTS = ['upsmychoice==1.0.1'] +REQUIREMENTS = ['upsmychoice==1.0.2'] _LOGGER = logging.getLogger(__name__) diff --git a/requirements_all.txt b/requirements_all.txt index 82296816dac..ca1e1fd4812 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -762,7 +762,7 @@ twilio==5.7.0 uber_rides==0.2.7 # homeassistant.components.sensor.ups -upsmychoice==1.0.1 +upsmychoice==1.0.2 # homeassistant.components.camera.uvc uvcclient==0.10.0 From aa91351ff0dc86961a6680950d181507b34270bd Mon Sep 17 00:00:00 2001 From: happyleavesaoc Date: Tue, 11 Apr 2017 02:10:07 -0400 Subject: [PATCH 038/146] update usps version (#7035) --- homeassistant/components/sensor/usps.py | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/sensor/usps.py b/homeassistant/components/sensor/usps.py index 5c2bb84daa1..c0fc3d9cfe4 100644 --- a/homeassistant/components/sensor/usps.py +++ b/homeassistant/components/sensor/usps.py @@ -19,7 +19,7 @@ from homeassistant.util import Throttle from homeassistant.util.dt import now, parse_datetime import homeassistant.helpers.config_validation as cv -REQUIREMENTS = ['myusps==1.0.3'] +REQUIREMENTS = ['myusps==1.0.5'] _LOGGER = logging.getLogger(__name__) diff --git a/requirements_all.txt b/requirements_all.txt index ca1e1fd4812..b537812a20f 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -389,7 +389,7 @@ miflora==0.1.16 mutagen==1.36.2 # homeassistant.components.sensor.usps -myusps==1.0.3 +myusps==1.0.5 # homeassistant.components.discovery netdisco==0.9.2 From aa3ccf16cac25568f1a4ef6e738d125231e727da Mon Sep 17 00:00:00 2001 From: happyleavesaoc Date: Tue, 11 Apr 2017 02:10:31 -0400 Subject: [PATCH 039/146] update fedex (#7034) --- homeassistant/components/sensor/fedex.py | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/sensor/fedex.py b/homeassistant/components/sensor/fedex.py index 9cbeb753b2b..2e1b8e6a6a0 100644 --- a/homeassistant/components/sensor/fedex.py +++ b/homeassistant/components/sensor/fedex.py @@ -19,7 +19,7 @@ from homeassistant.util import Throttle from homeassistant.util.dt import now, parse_date import homeassistant.helpers.config_validation as cv -REQUIREMENTS = ['fedexdeliverymanager==1.0.1'] +REQUIREMENTS = ['fedexdeliverymanager==1.0.2'] _LOGGER = logging.getLogger(__name__) diff --git a/requirements_all.txt b/requirements_all.txt index b537812a20f..30a2e07a4f5 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -162,7 +162,7 @@ evohomeclient==0.2.5 fastdotcom==0.0.1 # homeassistant.components.sensor.fedex -fedexdeliverymanager==1.0.1 +fedexdeliverymanager==1.0.2 # homeassistant.components.feedreader feedparser==5.2.1 From 197db6bded5e9b24de80912595127a922b225140 Mon Sep 17 00:00:00 2001 From: pezinek Date: Tue, 11 Apr 2017 10:27:45 +0200 Subject: [PATCH 040/146] Google TTS can't read percent sign (#6971) (#7030) --- homeassistant/components/tts/google.py | 2 +- tests/components/tts/test_google.py | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/tts/google.py b/homeassistant/components/tts/google.py index d433aef8c47..e88022a8ba9 100644 --- a/homeassistant/components/tts/google.py +++ b/homeassistant/components/tts/google.py @@ -87,7 +87,7 @@ class GoogleProvider(Provider): url_param = { 'ie': 'UTF-8', 'tl': language, - 'q': yarl.quote(part), + 'q': yarl.quote(part, strict=False), 'tk': part_token, 'total': len(message_parts), 'idx': idx, diff --git a/tests/components/tts/test_google.py b/tests/components/tts/test_google.py index 4cbec95dc2b..9f7cc9e9d50 100644 --- a/tests/components/tts/test_google.py +++ b/tests/components/tts/test_google.py @@ -23,10 +23,11 @@ class TestTTSGooglePlatform(object): self.url = "http://translate.google.com/translate_tts" self.url_param = { 'tl': 'en', - 'q': 'I%20person%20is%20on%20front%20of%20your%20door.', + 'q': + '90%25%20of%20I%20person%20is%20on%20front%20of%20your%20door.', 'tk': 5, 'client': 'tw-ob', - 'textlen': 34, + 'textlen': 41, 'total': 1, 'idx': 0, 'ie': 'UTF-8', @@ -70,7 +71,7 @@ class TestTTSGooglePlatform(object): setup_component(self.hass, tts.DOMAIN, config) self.hass.services.call(tts.DOMAIN, 'google_say', { - tts.ATTR_MESSAGE: "I person is on front of your door.", + tts.ATTR_MESSAGE: "90% of I person is on front of your door.", }) self.hass.block_till_done() @@ -99,7 +100,7 @@ class TestTTSGooglePlatform(object): setup_component(self.hass, tts.DOMAIN, config) self.hass.services.call(tts.DOMAIN, 'google_say', { - tts.ATTR_MESSAGE: "I person is on front of your door.", + tts.ATTR_MESSAGE: "90% of I person is on front of your door.", }) self.hass.block_till_done() @@ -126,7 +127,7 @@ class TestTTSGooglePlatform(object): setup_component(self.hass, tts.DOMAIN, config) self.hass.services.call(tts.DOMAIN, 'google_say', { - tts.ATTR_MESSAGE: "I person is on front of your door.", + tts.ATTR_MESSAGE: "90% of I person is on front of your door.", tts.ATTR_LANGUAGE: "de" }) self.hass.block_till_done() @@ -153,7 +154,7 @@ class TestTTSGooglePlatform(object): setup_component(self.hass, tts.DOMAIN, config) self.hass.services.call(tts.DOMAIN, 'google_say', { - tts.ATTR_MESSAGE: "I person is on front of your door.", + tts.ATTR_MESSAGE: "90% of I person is on front of your door.", }) self.hass.block_till_done() @@ -179,7 +180,7 @@ class TestTTSGooglePlatform(object): setup_component(self.hass, tts.DOMAIN, config) self.hass.services.call(tts.DOMAIN, 'google_say', { - tts.ATTR_MESSAGE: "I person is on front of your door.", + tts.ATTR_MESSAGE: "90% of I person is on front of your door.", }) self.hass.block_till_done() From f76a4b28064811b657246e1abbb972aeed69eb1d Mon Sep 17 00:00:00 2001 From: micw Date: Tue, 11 Apr 2017 13:52:12 +0200 Subject: [PATCH 041/146] Feature/min max improvements (#6786) * Fix #6783, remove a test that makes no sense anymore * Fix #6784 * Fix typo in docstring * Fix handling of known->unknown state, extended test, fix lint errors * Better handling of mismatch in unit of measurement. Set state to "unkown" and unit of measurement to "ERR" if unit of measurement differs between aggregatet states. Add entity_id to logged warning. * Make icon configurable * Fix typo * Fix lint * Fix lint * Fix lint * Add option to set entity_id on min_max sensor * Fix lint logging-not-lazy * Revert "Add option to set entity_id on min_max sensor" This reverts commit 4685f266477dfaba92cf8a256ecfe62c929c877b. * Revert "Make icon configurable" This reverts commit fe45aec82d9a07e730bebb4d47dc9618fb695fe6. * Fixes --- homeassistant/components/sensor/min_max.py | 71 +++++++++++++++++----- tests/components/sensor/test_min_max.py | 36 +++++++---- 2 files changed, 79 insertions(+), 28 deletions(-) diff --git a/homeassistant/components/sensor/min_max.py b/homeassistant/components/sensor/min_max.py index d612ca5cf26..33ffc769991 100644 --- a/homeassistant/components/sensor/min_max.py +++ b/homeassistant/components/sensor/min_max.py @@ -34,8 +34,6 @@ ATTR_TO_PROPERTY = [ CONF_ENTITY_IDS = 'entity_ids' CONF_ROUND_DIGITS = 'round_digits' -DEFAULT_NAME = 'Min/Max/Avg Sensor' - ICON = 'mdi:calculator' SENSOR_TYPES = { @@ -47,7 +45,7 @@ SENSOR_TYPES = { PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_TYPE, default=SENSOR_TYPES[ATTR_MAX_VALUE]): vol.All(cv.string, vol.In(SENSOR_TYPES.values())), - vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, + vol.Optional(CONF_NAME): cv.string, vol.Required(CONF_ENTITY_IDS): cv.entity_ids, vol.Optional(CONF_ROUND_DIGITS, default=2): vol.Coerce(int), }) @@ -67,6 +65,39 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None): return True +def calc_min(sensor_values): + """Calculate min value, honoring unknown states.""" + val = STATE_UNKNOWN + for sval in sensor_values: + if sval != STATE_UNKNOWN: + if val == STATE_UNKNOWN or val > sval: + val = sval + return val + + +def calc_max(sensor_values): + """Calculate max value, honoring unknown states.""" + val = STATE_UNKNOWN + for sval in sensor_values: + if sval != STATE_UNKNOWN: + if val == STATE_UNKNOWN or val < sval: + val = sval + return val + + +def calc_mean(sensor_values, round_digits): + """Calculate mean value, honoring unknown states.""" + val = 0 + count = 0 + for sval in sensor_values: + if sval != STATE_UNKNOWN: + val += sval + count += 1 + if count == 0: + return STATE_UNKNOWN + return round(val/count, round_digits) + + class MinMaxSensor(Entity): """Representation of a min/max sensor.""" @@ -76,10 +107,15 @@ class MinMaxSensor(Entity): self._entity_ids = entity_ids self._sensor_type = sensor_type self._round_digits = round_digits - self._name = '{} {}'.format( - name, next(v for k, v in SENSOR_TYPES.items() - if self._sensor_type == v)) + + if name: + self._name = name + else: + self._name = '{} sensor'.format( + next(v for k, v in SENSOR_TYPES.items() + if self._sensor_type == v)).capitalize() self._unit_of_measurement = None + self._unit_of_measurement_mismatch = False self.min_value = self.max_value = self.mean = STATE_UNKNOWN self.count_sensors = len(self._entity_ids) self.states = {} @@ -89,6 +125,8 @@ class MinMaxSensor(Entity): def async_min_max_sensor_state_listener(entity, old_state, new_state): """Called when the sensor changes state.""" if new_state.state is None or new_state.state in STATE_UNKNOWN: + self.states[entity] = STATE_UNKNOWN + hass.async_add_job(self.async_update_ha_state, True) return if self._unit_of_measurement is None: @@ -97,8 +135,11 @@ class MinMaxSensor(Entity): if self._unit_of_measurement != new_state.attributes.get( ATTR_UNIT_OF_MEASUREMENT): - _LOGGER.warning("Units of measurement do not match") - return + _LOGGER.warning( + "Units of measurement do not match for entity %s", + self.entity_id) + self._unit_of_measurement_mismatch = True + try: self.states[entity] = float(new_state.state) except ValueError: @@ -118,12 +159,16 @@ class MinMaxSensor(Entity): @property def state(self): """Return the state of the sensor.""" + if self._unit_of_measurement_mismatch: + return STATE_UNKNOWN return getattr(self, next( k for k, v in SENSOR_TYPES.items() if self._sensor_type == v)) @property def unit_of_measurement(self): """Return the unit the value is expressed in.""" + if self._unit_of_measurement_mismatch: + return "ERR" return self._unit_of_measurement @property @@ -150,10 +195,6 @@ class MinMaxSensor(Entity): """Get the latest data and updates the states.""" sensor_values = [self.states[k] for k in self._entity_ids if k in self.states] - if len(sensor_values) == self.count_sensors: - self.min_value = min(sensor_values) - self.max_value = max(sensor_values) - self.mean = round(sum(sensor_values) / self.count_sensors, - self._round_digits) - else: - self.min_value = self.max_value = self.mean = STATE_UNKNOWN + self.min_value = calc_min(sensor_values) + self.max_value = calc_max(sensor_values) + self.mean = calc_mean(sensor_values, self._round_digits) diff --git a/tests/components/sensor/test_min_max.py b/tests/components/sensor/test_min_max.py index b610775b39b..a6d6a5adc68 100644 --- a/tests/components/sensor/test_min_max.py +++ b/tests/components/sensor/test_min_max.py @@ -30,7 +30,7 @@ class TestMinMaxSensor(unittest.TestCase): config = { 'sensor': { 'platform': 'min_max', - 'name': 'test', + 'name': 'test_min', 'type': 'min', 'entity_ids': [ 'sensor.test_1', @@ -59,7 +59,7 @@ class TestMinMaxSensor(unittest.TestCase): config = { 'sensor': { 'platform': 'min_max', - 'name': 'test', + 'name': 'test_max', 'type': 'max', 'entity_ids': [ 'sensor.test_1', @@ -88,7 +88,7 @@ class TestMinMaxSensor(unittest.TestCase): config = { 'sensor': { 'platform': 'min_max', - 'name': 'test', + 'name': 'test_mean', 'type': 'mean', 'entity_ids': [ 'sensor.test_1', @@ -117,7 +117,7 @@ class TestMinMaxSensor(unittest.TestCase): config = { 'sensor': { 'platform': 'min_max', - 'name': 'test', + 'name': 'test_mean', 'type': 'mean', 'round_digits': 1, 'entity_ids': [ @@ -147,7 +147,7 @@ class TestMinMaxSensor(unittest.TestCase): config = { 'sensor': { 'platform': 'min_max', - 'name': 'test', + 'name': 'test_mean', 'type': 'mean', 'round_digits': 4, 'entity_ids': [ @@ -177,7 +177,7 @@ class TestMinMaxSensor(unittest.TestCase): config = { 'sensor': { 'platform': 'min_max', - 'name': 'test', + 'name': 'test_max', 'type': 'max', 'entity_ids': [ 'sensor.test_1', @@ -191,7 +191,7 @@ class TestMinMaxSensor(unittest.TestCase): entity_ids = config['sensor']['entity_ids'] - self.hass.states.set(entity_ids[0], self.values[0]) + self.hass.states.set(entity_ids[0], STATE_UNKNOWN) self.hass.block_till_done() state = self.hass.states.get('sensor.test_max') @@ -201,14 +201,20 @@ class TestMinMaxSensor(unittest.TestCase): self.hass.block_till_done() state = self.hass.states.get('sensor.test_max') - self.assertEqual(STATE_UNKNOWN, state.state) + self.assertNotEqual(STATE_UNKNOWN, state.state) - self.hass.states.set(entity_ids[2], self.values[2]) + self.hass.states.set(entity_ids[2], STATE_UNKNOWN) self.hass.block_till_done() state = self.hass.states.get('sensor.test_max') self.assertNotEqual(STATE_UNKNOWN, state.state) + self.hass.states.set(entity_ids[1], STATE_UNKNOWN) + self.hass.block_till_done() + + state = self.hass.states.get('sensor.test_max') + self.assertEqual(STATE_UNKNOWN, state.state) + def test_different_unit_of_measurement(self): """Test for different unit of measurement.""" config = { @@ -232,21 +238,25 @@ class TestMinMaxSensor(unittest.TestCase): {ATTR_UNIT_OF_MEASUREMENT: TEMP_CELSIUS}) self.hass.block_till_done() - state = self.hass.states.get('sensor.test_mean') + state = self.hass.states.get('sensor.test') - self.assertEqual(STATE_UNKNOWN, state.state) + self.assertEqual(str(float(self.values[0])), state.state) self.assertEqual('°C', state.attributes.get('unit_of_measurement')) self.hass.states.set(entity_ids[1], self.values[1], {ATTR_UNIT_OF_MEASUREMENT: TEMP_FAHRENHEIT}) self.hass.block_till_done() + state = self.hass.states.get('sensor.test') + self.assertEqual(STATE_UNKNOWN, state.state) - self.assertEqual('°C', state.attributes.get('unit_of_measurement')) + self.assertEqual('ERR', state.attributes.get('unit_of_measurement')) self.hass.states.set(entity_ids[2], self.values[2], {ATTR_UNIT_OF_MEASUREMENT: '%'}) self.hass.block_till_done() + state = self.hass.states.get('sensor.test') + self.assertEqual(STATE_UNKNOWN, state.state) - self.assertEqual('°C', state.attributes.get('unit_of_measurement')) + self.assertEqual('ERR', state.attributes.get('unit_of_measurement')) From 2748bc4165a516bcc14abd2fb670d466a4be84af Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 11 Apr 2017 13:52:34 +0200 Subject: [PATCH 042/146] Upgrade psutil to 5.2.2 (#7037) --- homeassistant/components/sensor/systemmonitor.py | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/sensor/systemmonitor.py b/homeassistant/components/sensor/systemmonitor.py index 4b402d32792..fee12c31acf 100755 --- a/homeassistant/components/sensor/systemmonitor.py +++ b/homeassistant/components/sensor/systemmonitor.py @@ -16,7 +16,7 @@ from homeassistant.helpers.entity import Entity import homeassistant.helpers.config_validation as cv import homeassistant.util.dt as dt_util -REQUIREMENTS = ['psutil==5.2.1'] +REQUIREMENTS = ['psutil==5.2.2'] _LOGGER = logging.getLogger(__name__) diff --git a/requirements_all.txt b/requirements_all.txt index 30a2e07a4f5..1fa528b7122 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -448,7 +448,7 @@ pmsensor==0.4 proliphix==0.4.1 # homeassistant.components.sensor.systemmonitor -psutil==5.2.1 +psutil==5.2.2 # homeassistant.components.wink pubnubsub-handler==1.0.2 From 2cfdb44df6c208bbce0ce998a13e8c533e8ecd11 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 11 Apr 2017 13:52:47 +0200 Subject: [PATCH 043/146] Upgrade sendgrid to 4.0.0 (#7038) --- homeassistant/components/notify/sendgrid.py | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/notify/sendgrid.py b/homeassistant/components/notify/sendgrid.py index f2ef64a9ea0..4db12a5b8d8 100644 --- a/homeassistant/components/notify/sendgrid.py +++ b/homeassistant/components/notify/sendgrid.py @@ -13,7 +13,7 @@ from homeassistant.components.notify import ( from homeassistant.const import (CONF_API_KEY, CONF_SENDER, CONF_RECIPIENT) import homeassistant.helpers.config_validation as cv -REQUIREMENTS = ['sendgrid==3.6.5'] +REQUIREMENTS = ['sendgrid==4.0.0'] _LOGGER = logging.getLogger(__name__) diff --git a/requirements_all.txt b/requirements_all.txt index 1fa528b7122..0fcba62c153 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -693,7 +693,7 @@ schiene==0.18 scsgate==0.1.0 # homeassistant.components.notify.sendgrid -sendgrid==3.6.5 +sendgrid==4.0.0 # homeassistant.components.sensor.sensehat sense-hat==2.2.0 From 07bb64815d3a1d20fe344bd8b909738ef12a4d7d Mon Sep 17 00:00:00 2001 From: David Straub Date: Tue, 11 Apr 2017 13:55:42 +0200 Subject: [PATCH 044/146] Missing line name restriction added (fixes #7039) (#7040) --- homeassistant/components/sensor/mvglive.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/homeassistant/components/sensor/mvglive.py b/homeassistant/components/sensor/mvglive.py index 7043da53222..b8bab2a6b5d 100644 --- a/homeassistant/components/sensor/mvglive.py +++ b/homeassistant/components/sensor/mvglive.py @@ -143,6 +143,9 @@ class MVGLiveData(object): # find the first departure meeting the criteria if not _departure['destination'].startswith(self._destination): continue + elif (self._line is not None + and _departure['linename'] != self._line): + continue elif _departure['time'] < self._offset: continue # now select the relevant data From f099aee69a90b4c275a4750a20cff120ced2ba77 Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Tue, 11 Apr 2017 17:58:51 +0200 Subject: [PATCH 045/146] Plug file leak on LIFX unregister (#7031) * Plug file leak on LIFX unregister The aiolifx 0.4.4 release closes its socket when the unregister callback is called. This plugs a file descriptor leak but also means that we must be careful to not use the device after it goes unavailable. Also, when a light reappears, it has a new device that must be used. * Do not test self.available in service calls The core will learn to handle that. --- homeassistant/components/light/lifx.py | 3 ++- requirements_all.txt | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/light/lifx.py b/homeassistant/components/light/lifx.py index 76a2a9e907d..da09601c1bb 100644 --- a/homeassistant/components/light/lifx.py +++ b/homeassistant/components/light/lifx.py @@ -26,7 +26,7 @@ import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) -REQUIREMENTS = ['aiolifx==0.4.2'] +REQUIREMENTS = ['aiolifx==0.4.4'] UDP_BROADCAST_PORT = 56700 @@ -84,6 +84,7 @@ class LIFXManager(object): entity = self.entities[device.mac_addr] _LOGGER.debug("%s register AGAIN", entity.ipaddr) entity.available = True + entity.device = device self.hass.async_add_job(entity.async_update_ha_state()) else: _LOGGER.debug("%s register NEW", device.ip_addr) diff --git a/requirements_all.txt b/requirements_all.txt index 0fcba62c153..017df5e87dd 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -44,7 +44,7 @@ aiodns==1.1.1 aiohttp_cors==0.5.2 # homeassistant.components.light.lifx -aiolifx==0.4.2 +aiolifx==0.4.4 # homeassistant.components.camera.amcrest # homeassistant.components.sensor.amcrest From d7ca9e7a66ddda3e075819bd34e4318d1b35524c Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 11 Apr 2017 17:59:46 +0200 Subject: [PATCH 046/146] Make core to look avilable state of device on servicecall (#7045) --- homeassistant/helpers/entity_component.py | 8 +++--- tests/helpers/test_entity_component.py | 31 +++++++++++++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/homeassistant/helpers/entity_component.py b/homeassistant/helpers/entity_component.py index 5330eafed19..9e059528619 100644 --- a/homeassistant/helpers/entity_component.py +++ b/homeassistant/helpers/entity_component.py @@ -95,7 +95,7 @@ class EntityComponent(object): ).result() def async_extract_from_service(self, service, expand_group=True): - """Extract all known entities from a service call. + """Extract all known and available entities from a service call. Will return all entities if no entities specified in call. Will return an empty list if entities specified but unknown. @@ -103,11 +103,13 @@ class EntityComponent(object): This method must be run in the event loop. """ if ATTR_ENTITY_ID not in service.data: - return list(self.entities.values()) + return [entity for entity in self.entities.values() + if entity.available] return [self.entities[entity_id] for entity_id in extract_entity_ids(self.hass, service, expand_group) - if entity_id in self.entities] + if entity_id in self.entities and + self.entities[entity_id].available] @asyncio.coroutine def _async_setup_platform(self, platform_type, platform_config, diff --git a/tests/helpers/test_entity_component.py b/tests/helpers/test_entity_component.py index 38dc01b4387..a76b3a15068 100644 --- a/tests/helpers/test_entity_component.py +++ b/tests/helpers/test_entity_component.py @@ -50,6 +50,11 @@ class EntityTest(Entity): """Return the unique ID of the entity.""" return self._handle('unique_id') + @property + def available(self): + """Return True if entity is available.""" + return self._handle('available') + def _handle(self, attr): """Helper for the attributes.""" if attr in self._values: @@ -474,3 +479,29 @@ def test_platform_warn_slow_setup(hass): assert logger_method == _LOGGER.warning assert mock_call().cancel.called + + +@asyncio.coroutine +def test_extract_from_service_available_device(hass): + """Test the extraction of entity from service and device is available.""" + component = EntityComponent(_LOGGER, DOMAIN, hass) + yield from component.async_add_entities([ + EntityTest(name='test_1'), + EntityTest(name='test_2', available=False), + EntityTest(name='test_3'), + EntityTest(name='test_4', available=False), + ]) + + call_1 = ha.ServiceCall('test', 'service') + + assert ['test_domain.test_1', 'test_domain.test_3'] == \ + sorted(ent.entity_id for ent in + component.async_extract_from_service(call_1)) + + call_2 = ha.ServiceCall('test', 'service', data={ + 'entity_id': ['test_domain.test_3', 'test_domain.test_4'], + }) + + assert ['test_domain.test_3'] == \ + sorted(ent.entity_id for ent in + component.async_extract_from_service(call_2)) From cc459e25cc268d9c64a8f1f9648c9378f7a1feb7 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 11 Apr 2017 18:05:27 +0200 Subject: [PATCH 047/146] Remove configuration sample (#7048) --- .../components/device_tracker/ping.py | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/homeassistant/components/device_tracker/ping.py b/homeassistant/components/device_tracker/ping.py index 04537dd6e4d..7c217b7aabb 100644 --- a/homeassistant/components/device_tracker/ping.py +++ b/homeassistant/components/device_tracker/ping.py @@ -1,15 +1,8 @@ """ -Tracks devices by sending a ICMP ping. +Tracks devices by sending a ICMP echo request (ping). For more details about this platform, please refer to the documentation at https://home-assistant.io/components/device_tracker.ping/ - -device_tracker: - - platform: ping - count: 2 - hosts: - host_one: pc.local - host_two: 192.168.2.25 """ import logging import subprocess @@ -18,14 +11,12 @@ from datetime import timedelta import voluptuous as vol +import homeassistant.helpers.config_validation as cv from homeassistant.components.device_tracker import ( PLATFORM_SCHEMA, DEFAULT_SCAN_INTERVAL, SOURCE_TYPE_ROUTER) from homeassistant.helpers.event import track_point_in_utc_time from homeassistant import util from homeassistant import const -import homeassistant.helpers.config_validation as cv - -DEPENDENCIES = [] _LOGGER = logging.getLogger(__name__) @@ -37,7 +28,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ }) -class Host: +class Host(object): """Host object with ping detection.""" def __init__(self, ip_address, dev_id, hass, config): @@ -53,7 +44,7 @@ class Host: self.ip_address] def ping(self): - """Send ICMP ping and return True if success.""" + """Send an ICMP echo request and return True if success.""" pinger = subprocess.Popen(self._ping_cmd, stdout=subprocess.PIPE) try: pinger.communicate() @@ -70,7 +61,7 @@ class Host: return True failed += 1 - _LOGGER.debug("ping KO on ip=%s failed=%d", self.ip_address, failed) + _LOGGER.debug("No response from %s failed=%d", self.ip_address, failed) def setup_scanner(hass, config, see, discovery_info=None): From b52cabf2c0242585b55e6dff86fda93ff120f951 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 11 Apr 2017 18:09:31 +0200 Subject: [PATCH 048/146] Bugfix wait on start event (#7013) * Bugfix wait on start event * Paulus sugestion * Change handling with stop_track_task * Add new unittests * Update test_core.py --- homeassistant/core.py | 12 +++++------- tests/common.py | 3 +-- tests/test_core.py | 17 ++++++++++++++++- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/homeassistant/core.py b/homeassistant/core.py index 899bed064ed..320e857ac9e 100644 --- a/homeassistant/core.py +++ b/homeassistant/core.py @@ -164,15 +164,16 @@ class HomeAssistant(object): self.bus.async_fire(EVENT_HOMEASSISTANT_START) try: + # only block for EVENT_HOMEASSISTANT_START listener + self.async_stop_track_tasks() with timeout(TIMEOUT_EVENT_START, loop=self.loop): - yield from self.async_stop_track_tasks() + yield from self.async_block_till_done() except asyncio.TimeoutError: _LOGGER.warning( 'Something is blocking Home Assistant from wrapping up the ' 'start up phase. We\'re going to continue anyway. Please ' 'report the following info at http://bit.ly/2ogP58T : %s', ', '.join(self.config.components)) - self._track_task = False self.state = CoreState.running _async_create_timer(self) @@ -218,10 +219,9 @@ class HomeAssistant(object): """Track tasks so you can wait for all tasks to be done.""" self._track_task = True - @asyncio.coroutine + @callback def async_stop_track_tasks(self): - """Track tasks so you can wait for all tasks to be done.""" - yield from self.async_block_till_done() + """Stop track tasks so you can't wait for all tasks to be done.""" self._track_task = False @callback @@ -246,8 +246,6 @@ class HomeAssistant(object): @asyncio.coroutine def async_block_till_done(self): """Block till all pending work is done.""" - assert self._track_task, 'Not tracking tasks' - # To flush out any call_soon_threadsafe yield from asyncio.sleep(0, loop=self.loop) diff --git a/tests/common.py b/tests/common.py index 9dc077dc3f7..03a4de235d7 100644 --- a/tests/common.py +++ b/tests/common.py @@ -122,8 +122,7 @@ def async_test_home_assistant(loop): # 1. We only mock time during tests # 2. We want block_till_done that is called inside stop_track_tasks with patch('homeassistant.core._async_create_timer'), \ - patch.object(hass, 'async_stop_track_tasks', - hass.async_block_till_done): + patch.object(hass, 'async_stop_track_tasks'): yield from orig_start() hass.async_start = mock_async_start diff --git a/tests/test_core.py b/tests/test_core.py index b2fca047292..89ae6c5f651 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -901,7 +901,6 @@ def test_start_taking_too_long(loop, caplog): patch('homeassistant.core._async_create_timer') as mock_timer: yield from hass.async_start() - assert not hass._track_task assert hass.state == ha.CoreState.running assert len(mock_timer.mock_calls) == 1 assert mock_timer.mock_calls[0][1][0] is hass @@ -910,3 +909,19 @@ def test_start_taking_too_long(loop, caplog): finally: yield from hass.async_stop() assert hass.state == ha.CoreState.not_running + + +@asyncio.coroutine +def test_track_task_functions(loop): + """Test function to start/stop track task and initial state.""" + hass = ha.HomeAssistant(loop=loop) + try: + assert hass._track_task + + hass.async_stop_track_tasks() + assert not hass._track_task + + hass.async_track_tasks() + assert hass._track_task + finally: + yield from hass.async_stop() From 11125864c6a4cbf0c8324091341e898625b802b7 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 11 Apr 2017 18:23:41 +0200 Subject: [PATCH 049/146] Bugfix slider (#7047) * Bugfix slider * Update input_slider.py * Update input_slider.py --- homeassistant/components/input_slider.py | 4 ++-- tests/components/test_input_slider.py | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/input_slider.py b/homeassistant/components/input_slider.py index d10120e673b..c4976bb43e8 100644 --- a/homeassistant/components/input_slider.py +++ b/homeassistant/components/input_slider.py @@ -174,8 +174,8 @@ class InputSlider(Entity): state = yield from async_get_last_state(self.hass, self.entity_id) value = state and float(state.state) - # Check against False because value can be 0 - if value is not False and self._minimum < value < self._maximum: + # Check against None because value can be 0 + if value is not None and self._minimum <= value <= self._maximum: self._current_value = value else: self._current_value = self._minimum diff --git a/tests/components/test_input_slider.py b/tests/components/test_input_slider.py index 7097e87e646..f550091e31f 100644 --- a/tests/components/test_input_slider.py +++ b/tests/components/test_input_slider.py @@ -133,3 +133,21 @@ def test_initial_state_overrules_restore_state(hass): state = hass.states.get('input_slider.b2') assert state assert float(state.state) == 60 + + +@asyncio.coroutine +def test_no_initial_state_and_no_restore_state(hass): + """Ensure that entity is create without initial and restore feature.""" + hass.state = CoreState.starting + + yield from async_setup_component(hass, DOMAIN, { + DOMAIN: { + 'b1': { + 'min': 0, + 'max': 100, + }, + }}) + + state = hass.states.get('input_slider.b1') + assert state + assert float(state.state) == 0 From ed012014bc567cc4e10e25676d78915d1590b369 Mon Sep 17 00:00:00 2001 From: johanpalmqvist Date: Tue, 11 Apr 2017 22:52:44 +0200 Subject: [PATCH 050/146] Add MaryTTS platform (#6988) * Add MaryTTS platform * Fix lint error * Doc link, config and formatting fixes * Remove stuff not needed with aiohttp2 * Get rid of unnecessary else statement --- homeassistant/components/tts/marytts.py | 117 +++++++++++++++++++++++ tests/components/tts/test_marytts.py | 121 ++++++++++++++++++++++++ 2 files changed, 238 insertions(+) create mode 100644 homeassistant/components/tts/marytts.py create mode 100644 tests/components/tts/test_marytts.py diff --git a/homeassistant/components/tts/marytts.py b/homeassistant/components/tts/marytts.py new file mode 100644 index 00000000000..ffb6950d79b --- /dev/null +++ b/homeassistant/components/tts/marytts.py @@ -0,0 +1,117 @@ +""" +Support for the MaryTTS service. + +For more details about this component, please refer to the documentation at +https://home-assistant.io/components/tts.marytts/ +""" +import asyncio +import logging +import re + +import aiohttp +import async_timeout +import voluptuous as vol + +from homeassistant.const import CONF_HOST, CONF_PORT +from homeassistant.components.tts import Provider, PLATFORM_SCHEMA, CONF_LANG +from homeassistant.helpers.aiohttp_client import async_get_clientsession +import homeassistant.helpers.config_validation as cv + +_LOGGER = logging.getLogger(__name__) + +SUPPORT_LANGUAGES = [ + 'de', 'en-GB', 'en-US', 'fr', 'it', 'lb', 'ru', 'sv', 'te', 'tr' +] + +SUPPORT_VOICES = [ + 'cmu-slt-hsmm' +] + +SUPPORT_CODEC = [ + 'aiff', 'au', 'wav' +] + +CONF_VOICE = 'voice' +CONF_CODEC = 'codec' + +DEFAULT_HOST = 'localhost' +DEFAULT_PORT = 59125 +DEFAULT_LANG = 'en-US' +DEFAULT_VOICE = 'cmu-slt-hsmm' +DEFAULT_CODEC = 'wav' + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ + vol.Optional(CONF_HOST, default=DEFAULT_HOST): cv.string, + vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, + vol.Optional(CONF_LANG, default=DEFAULT_LANG): vol.In(SUPPORT_LANGUAGES), + vol.Optional(CONF_VOICE, default=DEFAULT_VOICE): vol.In(SUPPORT_VOICES), + vol.Optional(CONF_CODEC, default=DEFAULT_CODEC): vol.In(SUPPORT_CODEC) +}) + + +@asyncio.coroutine +def async_get_engine(hass, config): + """Setup MaryTTS speech component.""" + return MaryTTSProvider(hass, config) + + +class MaryTTSProvider(Provider): + """MaryTTS speech api provider.""" + + def __init__(self, hass, conf): + """Init MaryTTS TTS service.""" + self.hass = hass + self._host = conf.get(CONF_HOST) + self._port = conf.get(CONF_PORT) + self._codec = conf.get(CONF_CODEC) + self._voice = conf.get(CONF_VOICE) + self._language = conf.get(CONF_LANG) + self.name = 'MaryTTS' + + @property + def default_language(self): + """Default language.""" + return self._language + + @property + def supported_languages(self): + """List of supported languages.""" + return SUPPORT_LANGUAGES + + @asyncio.coroutine + def async_get_tts_audio(self, message, language, options=None): + """Load TTS from MaryTTS.""" + websession = async_get_clientsession(self.hass) + + actual_language = re.sub('-', '_', language) + + try: + with async_timeout.timeout(10, loop=self.hass.loop): + url = 'http://{}:{}/process?'.format(self._host, self._port) + + audio = self._codec.upper() + if audio == 'WAV': + audio = 'WAVE' + + url_param = { + 'INPUT_TEXT': message, + 'INPUT_TYPE': 'TEXT', + 'AUDIO': audio, + 'VOICE': self._voice, + 'OUTPUT_TYPE': 'AUDIO', + 'LOCALE': actual_language + } + + request = yield from websession.get(url, params=url_param) + + if request.status != 200: + _LOGGER.error("Error %d on load url %s.", + request.status, request.url) + return (None, None) + data = yield from request.read() + + except (asyncio.TimeoutError, aiohttp.ClientError): + _LOGGER.error("Timeout for MaryTTS API.") + return (None, None) + + return (self._codec, data) diff --git a/tests/components/tts/test_marytts.py b/tests/components/tts/test_marytts.py new file mode 100644 index 00000000000..29e1a635462 --- /dev/null +++ b/tests/components/tts/test_marytts.py @@ -0,0 +1,121 @@ +"""The tests for the MaryTTS speech platform.""" +import asyncio +import os +import shutil + +import homeassistant.components.tts as tts +from homeassistant.setup import setup_component +from homeassistant.components.media_player import ( + SERVICE_PLAY_MEDIA, DOMAIN as DOMAIN_MP) + +from tests.common import ( + get_test_home_assistant, assert_setup_component, mock_service) + + +class TestTTSMaryTTSPlatform(object): + """Test the speech component.""" + + def setup_method(self): + """Setup things to be run when tests are started.""" + self.hass = get_test_home_assistant() + + self.url = "http://localhost:59125/process?" + self.url_param = { + 'INPUT_TEXT': 'HomeAssistant', + 'INPUT_TYPE': 'TEXT', + 'AUDIO': 'WAVE', + 'VOICE': 'cmu-slt-hsmm', + 'OUTPUT_TYPE': 'AUDIO', + 'LOCALE': 'en_US' + } + + def teardown_method(self): + """Stop everything that was started.""" + default_tts = self.hass.config.path(tts.DEFAULT_CACHE_DIR) + if os.path.isdir(default_tts): + shutil.rmtree(default_tts) + + self.hass.stop() + + def test_setup_component(self): + """Test setup component.""" + config = { + tts.DOMAIN: { + 'platform': 'marytts' + } + } + + with assert_setup_component(1, tts.DOMAIN): + setup_component(self.hass, tts.DOMAIN, config) + + def test_service_say(self, aioclient_mock): + """Test service call say.""" + calls = mock_service(self.hass, DOMAIN_MP, SERVICE_PLAY_MEDIA) + + aioclient_mock.get( + self.url, params=self.url_param, status=200, content=b'test') + + config = { + tts.DOMAIN: { + 'platform': 'marytts', + } + } + + with assert_setup_component(1, tts.DOMAIN): + setup_component(self.hass, tts.DOMAIN, config) + + self.hass.services.call(tts.DOMAIN, 'marytts_say', { + tts.ATTR_MESSAGE: "HomeAssistant", + }) + self.hass.block_till_done() + + assert len(aioclient_mock.mock_calls) == 1 + assert len(calls) == 1 + + def test_service_say_timeout(self, aioclient_mock): + """Test service call say.""" + calls = mock_service(self.hass, DOMAIN_MP, SERVICE_PLAY_MEDIA) + + aioclient_mock.get( + self.url, params=self.url_param, status=200, + exc=asyncio.TimeoutError()) + + config = { + tts.DOMAIN: { + 'platform': 'marytts', + } + } + + with assert_setup_component(1, tts.DOMAIN): + setup_component(self.hass, tts.DOMAIN, config) + + self.hass.services.call(tts.DOMAIN, 'marytts_say', { + tts.ATTR_MESSAGE: "HomeAssistant", + }) + self.hass.block_till_done() + + assert len(calls) == 0 + assert len(aioclient_mock.mock_calls) == 1 + + def test_service_say_http_error(self, aioclient_mock): + """Test service call say.""" + calls = mock_service(self.hass, DOMAIN_MP, SERVICE_PLAY_MEDIA) + + aioclient_mock.get( + self.url, params=self.url_param, status=403, content=b'test') + + config = { + tts.DOMAIN: { + 'platform': 'marytts', + } + } + + with assert_setup_component(1, tts.DOMAIN): + setup_component(self.hass, tts.DOMAIN, config) + + self.hass.services.call(tts.DOMAIN, 'marytts_say', { + tts.ATTR_MESSAGE: "HomeAssistant", + }) + self.hass.block_till_done() + + assert len(calls) == 0 From 4e388666b27d21a186294a902290219d46f1abf8 Mon Sep 17 00:00:00 2001 From: Martin Hjelmare Date: Wed, 12 Apr 2017 04:17:09 +0200 Subject: [PATCH 051/146] Fix mysensors callback (#7057) * Fix mysensors callback * All messages was not triggering proper updates. Fix by checking all child value types each update. * Upgrade mysensors dep * Fix pickle persistence when upgrading. --- .../components/device_tracker/mysensors.py | 54 +++++++++--------- homeassistant/components/mysensors.py | 56 +++++++++---------- requirements_all.txt | 2 +- 3 files changed, 56 insertions(+), 56 deletions(-) diff --git a/homeassistant/components/device_tracker/mysensors.py b/homeassistant/components/device_tracker/mysensors.py index e1a16a017e4..04801f834df 100644 --- a/homeassistant/components/device_tracker/mysensors.py +++ b/homeassistant/components/device_tracker/mysensors.py @@ -20,37 +20,39 @@ def setup_scanner(hass, config, see, discovery_info=None): """Callback for mysensors platform.""" node = gateway.sensors[msg.node_id] if node.sketch_name is None: - _LOGGER.info('No sketch_name: node %s', msg.node_id) + _LOGGER.debug('No sketch_name: node %s', msg.node_id) return pres = gateway.const.Presentation set_req = gateway.const.SetReq - for child in node.children.values(): - position = child.values.get(set_req.V_POSITION) - if child.type != pres.S_GPS or position is None: - continue - try: - latitude, longitude, _ = position.split(',') - except ValueError: - _LOGGER.error('Payload for V_POSITION %s is not of format ' - 'latitude,longitude,altitude', position) - continue - name = '{} {} {}'.format( - node.sketch_name, msg.node_id, child.id) - attr = { - mysensors.ATTR_CHILD_ID: child.id, - mysensors.ATTR_DESCRIPTION: child.description, - mysensors.ATTR_DEVICE: gateway.device, - mysensors.ATTR_NODE_ID: msg.node_id, - } - see( - dev_id=slugify(name), - host_name=name, - gps=(latitude, longitude), - battery=node.battery_level, - attributes=attr - ) + child = node.children.get(msg.child_id) + if child is None: + return + position = child.values.get(set_req.V_POSITION) + if child.type != pres.S_GPS or position is None: + return + try: + latitude, longitude, _ = position.split(',') + except ValueError: + _LOGGER.error('Payload for V_POSITION %s is not of format ' + 'latitude,longitude,altitude', position) + return + name = '{} {} {}'.format( + node.sketch_name, msg.node_id, child.id) + attr = { + mysensors.ATTR_CHILD_ID: child.id, + mysensors.ATTR_DESCRIPTION: child.description, + mysensors.ATTR_DEVICE: gateway.device, + mysensors.ATTR_NODE_ID: msg.node_id, + } + see( + dev_id=slugify(name), + host_name=name, + gps=(latitude, longitude), + battery=node.battery_level, + attributes=attr + ) gateways = hass.data.get(mysensors.MYSENSORS_GATEWAYS) diff --git a/homeassistant/components/mysensors.py b/homeassistant/components/mysensors.py index afe5fc11762..dbf66c2288b 100644 --- a/homeassistant/components/mysensors.py +++ b/homeassistant/components/mysensors.py @@ -46,7 +46,7 @@ MYSENSORS_GATEWAYS = 'mysensors_gateways' MQTT_COMPONENT = 'mqtt' REQUIREMENTS = [ 'https://github.com/theolind/pymysensors/archive/' - 'ff3476b70edc9c995b939cddb9d51f8d2d018581.zip#pymysensors==0.9.0'] + 'c6990eaaa741444a638608e6e00488195e2ca74c.zip#pymysensors==0.9.1'] def is_socket_address(value): @@ -206,12 +206,9 @@ def setup(hass, config): for node_id in gateway.sensors: node = gateway.sensors[node_id] for child_id in node.children: - child = node.children[child_id] - for value_type in child.values: - msg = mysensors.Message().modify( - node_id=node_id, child_id=child_id, type=1, - sub_type=value_type) - gateway.event_callback(msg) + msg = mysensors.Message().modify( + node_id=node_id, child_id=child_id) + gateway.event_callback(msg) gateway.start() hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, lambda event: gateway.stop()) @@ -274,32 +271,33 @@ def pf_callback_factory(map_sv_types, devices, entity_class, add_devices=None): _LOGGER.debug('No sketch_name: node %s', msg.node_id) return child = gateway.sensors[msg.node_id].children.get(msg.child_id) - if child is None or child.values.get(msg.sub_type) is None: + if child is None: return - key = msg.node_id, child.id, msg.sub_type - if child.type not in map_sv_types or \ - msg.sub_type not in map_sv_types[child.type]: - return - if key in devices: + for value_type in child.values: + key = msg.node_id, child.id, value_type + if child.type not in map_sv_types or \ + value_type not in map_sv_types[child.type]: + continue + if key in devices: + if add_devices: + devices[key].schedule_update_ha_state(True) + else: + devices[key].update() + continue + name = '{} {} {}'.format( + gateway.sensors[msg.node_id].sketch_name, msg.node_id, + child.id) + if isinstance(entity_class, dict): + device_class = entity_class[child.type] + else: + device_class = entity_class + devices[key] = device_class( + gateway, msg.node_id, child.id, name, value_type) if add_devices: - devices[key].schedule_update_ha_state(True) + _LOGGER.info('Adding new devices: %s', [devices[key]]) + add_devices([devices[key]], True) else: devices[key].update() - return - name = '{} {} {}'.format( - gateway.sensors[msg.node_id].sketch_name, msg.node_id, - child.id) - if isinstance(entity_class, dict): - device_class = entity_class[child.type] - else: - device_class = entity_class - devices[key] = device_class( - gateway, msg.node_id, child.id, name, msg.sub_type) - if add_devices: - _LOGGER.info('Adding new devices: %s', [devices[key]]) - add_devices([devices[key]], True) - else: - devices[key].update() return mysensors_callback diff --git a/requirements_all.txt b/requirements_all.txt index 017df5e87dd..13d3939a87f 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -314,7 +314,7 @@ https://github.com/tfriedel/python-lightify/archive/d6eadcf311e6e21746182d1480e9 https://github.com/thecynic/pylutron/archive/v0.1.0.zip#pylutron==0.1.0 # homeassistant.components.mysensors -https://github.com/theolind/pymysensors/archive/ff3476b70edc9c995b939cddb9d51f8d2d018581.zip#pymysensors==0.9.0 +https://github.com/theolind/pymysensors/archive/c6990eaaa741444a638608e6e00488195e2ca74c.zip#pymysensors==0.9.1 # homeassistant.components.sensor.modem_callerid https://github.com/vroomfonde1/basicmodem/archive/0.7.zip#basicmodem==0.7 From 4d9e681fc1820b5e7daa56ff81313a2fe26bf91a Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 11 Apr 2017 19:50:43 -0700 Subject: [PATCH 052/146] Constrain chardet to 2.3 (#7063) --- homeassistant/package_constraints.txt | 1 + requirements_all.txt | 1 + setup.py | 1 + 3 files changed, 3 insertions(+) diff --git a/homeassistant/package_constraints.txt b/homeassistant/package_constraints.txt index a8e8df3d250..b21a938a1a1 100644 --- a/homeassistant/package_constraints.txt +++ b/homeassistant/package_constraints.txt @@ -7,3 +7,4 @@ voluptuous==0.9.3 typing>=3,<4 aiohttp==2.0.5 async_timeout==1.2.0 +chardet==2.3 diff --git a/requirements_all.txt b/requirements_all.txt index 13d3939a87f..147f4462efa 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -8,6 +8,7 @@ voluptuous==0.9.3 typing>=3,<4 aiohttp==2.0.5 async_timeout==1.2.0 +chardet==2.3 # homeassistant.components.nuimo_controller --only-binary=all http://github.com/getSenic/nuimo-linux-python/archive/29fc42987f74d8090d0e2382e8f248ff5990b8c9.zip#nuimo==1.0.0 diff --git a/setup.py b/setup.py index cdc4c43e7a2..b9ef099a1ad 100755 --- a/setup.py +++ b/setup.py @@ -24,6 +24,7 @@ REQUIRES = [ 'typing>=3,<4', 'aiohttp==2.0.5', 'async_timeout==1.2.0', + 'chardet==2.3' ] setup( From 3c35d5ea5801f2a7d806449c681bbedc11c8c3e1 Mon Sep 17 00:00:00 2001 From: micw Date: Wed, 12 Apr 2017 04:51:07 +0200 Subject: [PATCH 053/146] Fix/slugify with german umlaut ss (#7029) * more tests for slugify * Fix german umlauts in slugify * Update __init__.py --- homeassistant/util/__init__.py | 11 +++++++++-- tests/util/test_init.py | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/homeassistant/util/__init__.py b/homeassistant/util/__init__.py index 6d77f67161d..1186892b512 100644 --- a/homeassistant/util/__init__.py +++ b/homeassistant/util/__init__.py @@ -22,6 +22,9 @@ U = TypeVar('U') RE_SANITIZE_FILENAME = re.compile(r'(~|\.\.|/|\\)') RE_SANITIZE_PATH = re.compile(r'(~|\.(\.)+)') RE_SLUGIFY = re.compile(r'[^a-z0-9_]+') +TBL_SLUGIFY = { + ord('Ăź'): 'ss' +} def sanitize_filename(filename: str) -> str: @@ -36,9 +39,13 @@ def sanitize_path(path: str) -> str: def slugify(text: str) -> str: """Slugify a given text.""" - text = normalize('NFKD', text).lower().replace(" ", "_") + text = normalize('NFKD', text) + text = text.lower() + text = text.replace(" ", "_") + text = text.translate(TBL_SLUGIFY) + text = RE_SLUGIFY.sub("", text) - return RE_SLUGIFY.sub("", text) + return text def repr_helper(inp: Any) -> str: diff --git a/tests/util/test_init.py b/tests/util/test_init.py index 3ccb72920d4..ba8415d597f 100644 --- a/tests/util/test_init.py +++ b/tests/util/test_init.py @@ -37,6 +37,7 @@ class TestUtil(unittest.TestCase): util.slugify("greg_phone - exp_wayp1")) self.assertEqual("we_are_we_are_a_test_calendar", util.slugify("We are, we are, a... Test Calendar")) + self.assertEqual("test_aouss_aou", util.slugify("Tèst_äöüß_ÄÖÜ")) def test_repr_helper(self): """Test repr_helper.""" From 72a01b8a9063e4ad6a91aa6e5924f019f7c8780f Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 11 Apr 2017 19:58:54 -0700 Subject: [PATCH 054/146] Speed up aiohttp (#7064) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 8c7ab8a9039..cd219b24084 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,7 +21,7 @@ RUN virtualization/Docker/setup_docker_prereqs # Install hass component dependencies COPY requirements_all.txt requirements_all.txt RUN pip3 install --no-cache-dir -r requirements_all.txt && \ - pip3 install --no-cache-dir mysqlclient psycopg2 uvloop + pip3 install --no-cache-dir mysqlclient psycopg2 uvloop cchardet # Copy source COPY . . From edf500e66b9122837c2e46f4615a89aa058e10ec Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 11 Apr 2017 20:10:02 -0700 Subject: [PATCH 055/146] Upgrade netdisco to 1.0.0rc2 (#7008) * Upgrade netdisco to 1.0.0rc2 * fix tests --- homeassistant/components/discovery.py | 3 +- homeassistant/components/light/flux_led.py | 14 ---------- homeassistant/components/light/hue.py | 7 ++--- .../components/media_player/apple_tv.py | 2 +- homeassistant/components/media_player/cast.py | 10 ++++--- .../components/media_player/denonavr.py | 4 +-- .../components/media_player/directv.py | 13 +++++---- .../media_player/frontier_silicon.py | 3 +- .../components/media_player/openhome.py | 28 ++++++++++--------- .../media_player/panasonic_viera.py | 7 ++--- homeassistant/components/media_player/plex.py | 2 +- homeassistant/components/media_player/roku.py | 10 ++++--- .../components/media_player/samsungtv.py | 4 ++- .../components/media_player/sonos.py | 2 +- .../components/media_player/yamaha.py | 8 +++--- homeassistant/components/wemo.py | 3 +- requirements_all.txt | 2 +- tests/components/media_player/test_cast.py | 6 ++-- tests/components/media_player/test_sonos.py | 28 ++++++++++++++----- 19 files changed, 82 insertions(+), 74 deletions(-) diff --git a/homeassistant/components/discovery.py b/homeassistant/components/discovery.py index 891e34ee8a9..08190ed1002 100644 --- a/homeassistant/components/discovery.py +++ b/homeassistant/components/discovery.py @@ -20,7 +20,7 @@ from homeassistant.helpers.event import async_track_point_in_utc_time from homeassistant.helpers.discovery import async_load_platform, async_discover import homeassistant.util.dt as dt_util -REQUIREMENTS = ['netdisco==0.9.2'] +REQUIREMENTS = ['netdisco==1.0.0rc2'] DOMAIN = 'discovery' @@ -45,7 +45,6 @@ SERVICE_HANDLERS = { 'denonavr': ('media_player', 'denonavr'), 'samsung_tv': ('media_player', 'samsungtv'), 'yeelight': ('light', 'yeelight'), - 'flux_led': ('light', 'flux_led'), 'apple_tv': ('media_player', 'apple_tv'), 'frontier_silicon': ('media_player', 'frontier_silicon'), 'openhome': ('media_player', 'openhome'), diff --git a/homeassistant/components/light/flux_led.py b/homeassistant/components/light/flux_led.py index 22bfd5eb6f9..f599d788994 100644 --- a/homeassistant/components/light/flux_led.py +++ b/homeassistant/components/light/flux_led.py @@ -108,20 +108,6 @@ def setup_platform(hass, config, add_devices, discovery_info=None): lights.append(light) light_ips.append(ipaddr) - if discovery_info: - device = {} - # discovery_info: ip address,device id,device type - device['ipaddr'] = discovery_info[0] - device['name'] = discovery_info[1] - # As we don't know protocol and mode set to none to autodetect. - device[CONF_PROTOCOL] = None - device[ATTR_MODE] = None - - light = FluxLight(device) - if light.is_valid: - lights.append(light) - light_ips.append(device['ipaddr']) - if not config.get(CONF_AUTOMATIC_ADD, False): add_devices(lights) return diff --git a/homeassistant/components/light/hue.py b/homeassistant/components/light/hue.py index 31ec88f3c97..22e2541b271 100644 --- a/homeassistant/components/light/hue.py +++ b/homeassistant/components/light/hue.py @@ -10,7 +10,6 @@ import os import random import socket from datetime import timedelta -from urllib.parse import urlparse import voluptuous as vol @@ -115,11 +114,11 @@ def setup_platform(hass, config, add_devices, discovery_info=None): allow_hue_groups = config.get(CONF_ALLOW_HUE_GROUPS) if discovery_info is not None: - host = urlparse(discovery_info[1]).hostname - - if "HASS Bridge" in discovery_info[0]: + if "HASS Bridge" in discovery_info.get('name', ''): _LOGGER.info('Emulated hue found, will not add') return False + + host = discovery_info.get('host') else: host = config.get(CONF_HOST, None) diff --git a/homeassistant/components/media_player/apple_tv.py b/homeassistant/components/media_player/apple_tv.py index 7a865cd2d8a..4059d81a671 100644 --- a/homeassistant/components/media_player/apple_tv.py +++ b/homeassistant/components/media_player/apple_tv.py @@ -51,7 +51,7 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None): if discovery_info is not None: name = discovery_info['name'] host = discovery_info['host'] - login_id = discovery_info['hsgid'] + login_id = discovery_info['properties']['hsgid'] start_off = False else: name = config.get(CONF_NAME) diff --git a/homeassistant/components/media_player/cast.py b/homeassistant/components/media_player/cast.py index c2aa8a0bcca..148cdee1d48 100644 --- a/homeassistant/components/media_player/cast.py +++ b/homeassistant/components/media_player/cast.py @@ -51,11 +51,13 @@ def setup_platform(hass, config, add_devices, discovery_info=None): hosts = [] - if discovery_info and discovery_info in KNOWN_HOSTS: - return + if discovery_info: + host = (discovery_info.get('host'), discovery_info.get('port')) - elif discovery_info: - hosts = [discovery_info] + if host in KNOWN_HOSTS: + return + + hosts = [host] elif CONF_HOST in config: hosts = [(config.get(CONF_HOST), DEFAULT_PORT)] diff --git a/homeassistant/components/media_player/denonavr.py b/homeassistant/components/media_player/denonavr.py index eba2d031158..5e91a5418e2 100644 --- a/homeassistant/components/media_player/denonavr.py +++ b/homeassistant/components/media_player/denonavr.py @@ -64,8 +64,8 @@ def setup_platform(hass, config, add_devices, discovery_info=None): _LOGGER.info("Denon receiver at host %s initialized", host) # 2. option: discovery using netdisco if discovery_info is not None: - host = discovery_info[0] - name = discovery_info[1] + host = discovery_info.get('host') + name = discovery_info.get('name') # Check if host not in cache, append it and save for later starting if host not in cache: cache.add(host) diff --git a/homeassistant/components/media_player/directv.py b/homeassistant/components/media_player/directv.py index 035fe6d9cd6..ef3333d4da3 100644 --- a/homeassistant/components/media_player/directv.py +++ b/homeassistant/components/media_player/directv.py @@ -37,14 +37,15 @@ def setup_platform(hass, config, add_devices, discovery_info=None): """Setup the DirecTV platform.""" hosts = [] - if discovery_info and discovery_info in KNOWN_HOSTS: - return + if discovery_info: + host = discovery_info.get('host') + + if host in KNOWN_HOSTS: + return - if discovery_info is not None: hosts.append([ - 'DirecTV_' + discovery_info[1], - discovery_info[0], - DEFAULT_PORT + 'DirecTV_' + discovery_info.get('serial', ''), + host, DEFAULT_PORT ]) elif CONF_HOST in config: diff --git a/homeassistant/components/media_player/frontier_silicon.py b/homeassistant/components/media_player/frontier_silicon.py index 8bd36b4535c..f46d0657604 100644 --- a/homeassistant/components/media_player/frontier_silicon.py +++ b/homeassistant/components/media_player/frontier_silicon.py @@ -47,7 +47,8 @@ def setup_platform(hass, config, add_devices, discovery_info=None): if discovery_info is not None: add_devices( - [FSAPIDevice(discovery_info, DEFAULT_PASSWORD)], + [FSAPIDevice(discovery_info['ssdp_description'], + DEFAULT_PASSWORD)], update_before_add=True) return True diff --git a/homeassistant/components/media_player/openhome.py b/homeassistant/components/media_player/openhome.py index af58b4cb654..c70822381a4 100644 --- a/homeassistant/components/media_player/openhome.py +++ b/homeassistant/components/media_player/openhome.py @@ -31,21 +31,23 @@ def setup_platform(hass, config, add_devices, discovery_info=None): """Setup Openhome Platform.""" from openhomedevice.Device import Device - if discovery_info: - _LOGGER.info('Openhome device found, (%s)', discovery_info[0]) - device = Device(discovery_info[1]) - - # if device has already been discovered - if device.Uuid() in [x.unique_id for x in DEVICES]: - return True - - device = OpenhomeDevice(hass, device) - - add_devices([device], True) - DEVICES.append(device) - + if not discovery_info: return True + name = discovery_info.get('name') + description = discovery_info.get('ssdp_description') + _LOGGER.info('Openhome device found, (%s)', name) + device = Device(description) + + # if device has already been discovered + if device.Uuid() in [x.unique_id for x in DEVICES]: + return True + + device = OpenhomeDevice(hass, device) + + add_devices([device], True) + DEVICES.append(device) + return True diff --git a/homeassistant/components/media_player/panasonic_viera.py b/homeassistant/components/media_player/panasonic_viera.py index 30672069558..a5f9979d2d4 100644 --- a/homeassistant/components/media_player/panasonic_viera.py +++ b/homeassistant/components/media_player/panasonic_viera.py @@ -51,11 +51,8 @@ def setup_platform(hass, config, add_devices, discovery_info=None): if discovery_info: _LOGGER.debug('%s', discovery_info) - vals = discovery_info.split(':') - if len(vals) > 1: - port = vals[1] - - host = vals[0] + host = discovery_info.get('host') + port = discovery_info.get('port') remote = RemoteControl(host, port) add_devices([PanasonicVieraTVDevice(mac, name, remote)]) return True diff --git a/homeassistant/components/media_player/plex.py b/homeassistant/components/media_player/plex.py index 66d4f02c526..1b7eca36910 100644 --- a/homeassistant/components/media_player/plex.py +++ b/homeassistant/components/media_player/plex.py @@ -102,7 +102,7 @@ def setup_platform(hass, config, add_devices_callback, discovery_info=None): # Via discovery elif discovery_info is not None: # Parse discovery data - host = urlparse(discovery_info[1]).netloc + host = discovery_info.get('host') _LOGGER.info('Discovered PLEX server: %s', host) if host in _CONFIGURING: diff --git a/homeassistant/components/media_player/roku.py b/homeassistant/components/media_player/roku.py index a33f331b737..59e6a19bff8 100644 --- a/homeassistant/components/media_player/roku.py +++ b/homeassistant/components/media_player/roku.py @@ -42,11 +42,13 @@ def setup_platform(hass, config, add_devices, discovery_info=None): """Setup the Roku platform.""" hosts = [] - if discovery_info and discovery_info in KNOWN_HOSTS: - return + if discovery_info: + host = discovery_info[0] - if discovery_info is not None: - _LOGGER.debug('Discovered Roku: %s', discovery_info[0]) + if host in KNOWN_HOSTS: + return + + _LOGGER.debug('Discovered Roku: %s', host) hosts.append(discovery_info[0]) elif CONF_HOST in config: diff --git a/homeassistant/components/media_player/samsungtv.py b/homeassistant/components/media_player/samsungtv.py index b71e37fda19..c99ad49577c 100644 --- a/homeassistant/components/media_player/samsungtv.py +++ b/homeassistant/components/media_player/samsungtv.py @@ -58,7 +58,9 @@ def setup_platform(hass, config, add_devices, discovery_info=None): mac = config.get(CONF_MAC) timeout = config.get(CONF_TIMEOUT) elif discovery_info is not None: - tv_name, model, host = discovery_info + tv_name = discovery_info.get('name') + model = discovery_info.get('model_name') + host = discovery_info.get('host') name = "{} ({})".format(tv_name, model) port = DEFAULT_PORT timeout = DEFAULT_TIMEOUT diff --git a/homeassistant/components/media_player/sonos.py b/homeassistant/components/media_player/sonos.py index 0fc402caf6c..cd837948b46 100644 --- a/homeassistant/components/media_player/sonos.py +++ b/homeassistant/components/media_player/sonos.py @@ -103,7 +103,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): soco.config.EVENT_ADVERTISE_IP = advertise_addr if discovery_info: - player = soco.SoCo(discovery_info) + player = soco.SoCo(discovery_info.get('host')) # if device allready exists by config if player.uid in [x.unique_id for x in hass.data[DATA_SONOS]]: diff --git a/homeassistant/components/media_player/yamaha.py b/homeassistant/components/media_player/yamaha.py index 928d15b5950..243b96220c9 100644 --- a/homeassistant/components/media_player/yamaha.py +++ b/homeassistant/components/media_player/yamaha.py @@ -59,10 +59,10 @@ def setup_platform(hass, config, add_devices, discovery_info=None): zone_ignore = config.get(CONF_ZONE_IGNORE) if discovery_info is not None: - name = discovery_info[0] - model = discovery_info[1] - ctrl_url = discovery_info[2] - desc_url = discovery_info[3] + name = discovery_info.get('name') + model = discovery_info.get('model_name') + ctrl_url = discovery_info.get('control_url') + desc_url = discovery_info.get('description_url') if ctrl_url in hass.data[KNOWN]: _LOGGER.info("%s already manually configured", ctrl_url) return diff --git a/homeassistant/components/wemo.py b/homeassistant/components/wemo.py index 88008874628..20c9f6eeca2 100644 --- a/homeassistant/components/wemo.py +++ b/homeassistant/components/wemo.py @@ -62,7 +62,8 @@ def setup(hass, config): def discovery_dispatch(service, discovery_info): """Dispatcher for WeMo discovery events.""" # name, model, location, mac - _, model_name, _, _, serial = discovery_info + model_name = discovery_info.get('model_name') + serial = discovery_info.get('serial') # Only register a device once if serial in KNOWN_DEVICES: diff --git a/requirements_all.txt b/requirements_all.txt index 147f4462efa..49c13c1adc5 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -393,7 +393,7 @@ mutagen==1.36.2 myusps==1.0.5 # homeassistant.components.discovery -netdisco==0.9.2 +netdisco==1.0.0rc2 # homeassistant.components.sensor.neurio_energy neurio==0.3.1 diff --git a/tests/components/media_player/test_cast.py b/tests/components/media_player/test_cast.py index 582f5f8eb1c..c29d41cc590 100644 --- a/tests/components/media_player/test_cast.py +++ b/tests/components/media_player/test_cast.py @@ -37,6 +37,8 @@ class TestCastMediaPlayer(unittest.TestCase): assert not mock_device.called # Test chromecasts as if they were automatically discovered - cast.setup_platform(None, {}, lambda _: _, ('some_host', - cast.DEFAULT_PORT)) + cast.setup_platform(None, {}, lambda _: _, { + 'host': 'some_host', + 'port': cast.DEFAULT_PORT, + }) assert not mock_device.called diff --git a/tests/components/media_player/test_sonos.py b/tests/components/media_player/test_sonos.py index c157b8651a4..0a111ef3b36 100644 --- a/tests/components/media_player/test_sonos.py +++ b/tests/components/media_player/test_sonos.py @@ -143,7 +143,9 @@ class TestSonosMediaPlayer(unittest.TestCase): @mock.patch('socket.create_connection', side_effect=socket.error()) def test_ensure_setup_discovery(self, *args): """Test a single device using the autodiscovery provided by HASS.""" - sonos.setup_platform(self.hass, {}, fake_add_device, '192.0.2.1') + sonos.setup_platform(self.hass, {}, fake_add_device, { + 'host': '192.0.2.1' + }) self.assertEqual(len(self.hass.data[sonos.DATA_SONOS]), 1) self.assertEqual(self.hass.data[sonos.DATA_SONOS][0].name, 'Kitchen') @@ -250,7 +252,9 @@ class TestSonosMediaPlayer(unittest.TestCase): @mock.patch.object(SoCoMock, 'join') def test_sonos_group_players(self, join_mock, *args): """Ensuring soco methods called for sonos_group_players service.""" - sonos.setup_platform(self.hass, {}, fake_add_device, '192.0.2.1') + sonos.setup_platform(self.hass, {}, fake_add_device, { + 'host': '192.0.2.1' + }) device = self.hass.data[sonos.DATA_SONOS][-1] device.hass = self.hass @@ -268,7 +272,9 @@ class TestSonosMediaPlayer(unittest.TestCase): @mock.patch.object(SoCoMock, 'unjoin') def test_sonos_unjoin(self, unjoinMock, *args): """Ensuring soco methods called for sonos_unjoin service.""" - sonos.setup_platform(self.hass, {}, fake_add_device, '192.0.2.1') + sonos.setup_platform(self.hass, {}, fake_add_device, { + 'host': '192.0.2.1' + }) device = self.hass.data[sonos.DATA_SONOS][-1] device.hass = self.hass @@ -282,7 +288,9 @@ class TestSonosMediaPlayer(unittest.TestCase): @mock.patch.object(SoCoMock, 'set_sleep_timer') def test_sonos_set_sleep_timer(self, set_sleep_timerMock, *args): """Ensuring soco methods called for sonos_set_sleep_timer service.""" - sonos.setup_platform(self.hass, {}, fake_add_device, '192.0.2.1') + sonos.setup_platform(self.hass, {}, fake_add_device, { + 'host': '192.0.2.1' + }) device = self.hass.data[sonos.DATA_SONOS][-1] device.hass = self.hass @@ -294,7 +302,9 @@ class TestSonosMediaPlayer(unittest.TestCase): @mock.patch.object(SoCoMock, 'set_sleep_timer') def test_sonos_clear_sleep_timer(self, set_sleep_timerMock, *args): """Ensuring soco methods called for sonos_clear_sleep_timer service.""" - sonos.setup_platform(self.hass, {}, mock.MagicMock(), '192.0.2.1') + sonos.setup_platform(self.hass, {}, mock.MagicMock(), { + 'host': '192.0.2.1' + }) device = self.hass.data[sonos.DATA_SONOS][-1] device.hass = self.hass @@ -306,7 +316,9 @@ class TestSonosMediaPlayer(unittest.TestCase): @mock.patch.object(soco.snapshot.Snapshot, 'snapshot') def test_sonos_snapshot(self, snapshotMock, *args): """Ensuring soco methods called for sonos_snapshot service.""" - sonos.setup_platform(self.hass, {}, fake_add_device, '192.0.2.1') + sonos.setup_platform(self.hass, {}, fake_add_device, { + 'host': '192.0.2.1' + }) device = self.hass.data[sonos.DATA_SONOS][-1] device.hass = self.hass @@ -322,7 +334,9 @@ class TestSonosMediaPlayer(unittest.TestCase): """Ensuring soco methods called for sonos_restor service.""" from soco.snapshot import Snapshot - sonos.setup_platform(self.hass, {}, fake_add_device, '192.0.2.1') + sonos.setup_platform(self.hass, {}, fake_add_device, { + 'host': '192.0.2.1' + }) device = self.hass.data[sonos.DATA_SONOS][-1] device.hass = self.hass From 7cb8f49d62fc47f0edabf9b7d1d484cb07a38341 Mon Sep 17 00:00:00 2001 From: sander76 Date: Wed, 12 Apr 2017 06:10:56 +0200 Subject: [PATCH 056/146] Telegram bot component (incl. webhook and polling platform) (#6913) * first commit. * removed pointless string statement * manually removed # homeassistant.components.telegram_webhooks from requirements_all.txt * deleted obsolete file. * coveragerc abc --- .coveragerc | 2 +- .../components/telegram_bot/__init__.py | 131 ++++++++++++++++ .../components/telegram_bot/polling.py | 121 +++++++++++++++ .../components/telegram_bot/webhooks.py | 97 ++++++++++++ homeassistant/components/telegram_webhooks.py | 143 ------------------ requirements_all.txt | 3 +- 6 files changed, 352 insertions(+), 145 deletions(-) create mode 100644 homeassistant/components/telegram_bot/__init__.py create mode 100644 homeassistant/components/telegram_bot/polling.py create mode 100644 homeassistant/components/telegram_bot/webhooks.py delete mode 100644 homeassistant/components/telegram_webhooks.py diff --git a/.coveragerc b/.coveragerc index a8e771c9ad2..578276cac43 100644 --- a/.coveragerc +++ b/.coveragerc @@ -431,7 +431,7 @@ omit = homeassistant/components/switch/tplink.py homeassistant/components/switch/transmission.py homeassistant/components/switch/wake_on_lan.py - homeassistant/components/telegram_webhooks.py + homeassistant/components/telegram_bot/* homeassistant/components/thingspeak.py homeassistant/components/tts/amazon_polly.py homeassistant/components/tts/picotts.py diff --git a/homeassistant/components/telegram_bot/__init__.py b/homeassistant/components/telegram_bot/__init__.py new file mode 100644 index 00000000000..92a87153d99 --- /dev/null +++ b/homeassistant/components/telegram_bot/__init__.py @@ -0,0 +1,131 @@ +""" +Component to receive telegram messages. + +Either by polling or webhook. +""" + +import asyncio +import logging +import voluptuous as vol +import homeassistant.helpers.config_validation as cv +from homeassistant.const import CONF_PLATFORM, CONF_API_KEY +from homeassistant.exceptions import HomeAssistantError +from homeassistant.helpers import discovery, config_per_platform +from homeassistant.setup import async_prepare_setup_platform + +DOMAIN = 'telegram_bot' + +_LOGGER = logging.getLogger(__name__) + +EVENT_TELEGRAM_COMMAND = 'telegram_command' +EVENT_TELEGRAM_TEXT = 'telegram_text' + +ATTR_COMMAND = 'command' +ATTR_USER_ID = 'user_id' +ATTR_ARGS = 'args' +ATTR_FROM_FIRST = 'from_first' +ATTR_FROM_LAST = 'from_last' +ATTR_TEXT = 'text' + +CONF_ALLOWED_CHAT_IDS = 'allowed_chat_ids' + +PLATFORM_SCHEMA = vol.Schema({ + vol.Required(CONF_PLATFORM): cv.string, + vol.Required(CONF_API_KEY): cv.string, + vol.Required(CONF_ALLOWED_CHAT_IDS): vol.All(cv.ensure_list, + [cv.positive_int]) +}, extra=vol.ALLOW_EXTRA) + + +@asyncio.coroutine +def async_setup(hass, config): + """Setup the telegram bot component.""" + @asyncio.coroutine + def async_setup_platform(p_type, p_config=None, discovery_info=None): + """Setup a telegram bot platform.""" + platform = yield from async_prepare_setup_platform( + hass, config, DOMAIN, p_type) + + if platform is None: + _LOGGER.error("Unknown notification service specified") + return + + _LOGGER.info("Setting up1 %s.%s", DOMAIN, p_type) + + try: + if hasattr(platform, 'async_setup_platform'): + notify_service = yield from \ + platform.async_setup_platform(hass, p_config, + discovery_info) + elif hasattr(platform, 'setup_platform'): + notify_service = yield from hass.loop.run_in_executor( + None, platform.setup_platform, hass, p_config, + discovery_info) + else: + raise HomeAssistantError("Invalid telegram bot platform.") + + if notify_service is None: + _LOGGER.error( + "Failed to initialize telegram bot %s", p_type) + return + + except Exception: # pylint: disable=broad-except + _LOGGER.exception('Error setting up platform %s', p_type) + return + + return True + + setup_tasks = [async_setup_platform(p_type, p_config) for p_type, p_config + in config_per_platform(config, DOMAIN)] + + if setup_tasks: + yield from asyncio.wait(setup_tasks, loop=hass.loop) + + @asyncio.coroutine + def async_platform_discovered(platform, info): + """Callback to load a platform.""" + yield from async_setup_platform(platform, discovery_info=info) + + discovery.async_listen_platform(hass, DOMAIN, async_platform_discovered) + + return True + + +class BaseTelegramBotEntity: + """The base class for the telegram bot.""" + + def __init__(self, hass, allowed_chat_ids): + """Initialize the bot base class.""" + self.allowed_chat_ids = allowed_chat_ids + self.hass = hass + + def process_message(self, data): + """Check for basic message rules and fire an event if message is ok.""" + data = data.get('message') + + if (not data + or 'from' not in data + or 'text' not in data + or data['from'].get('id') not in self.allowed_chat_ids): + # Message is not correct. + _LOGGER.error("Incoming message does not have required data.") + return False + + event = EVENT_TELEGRAM_COMMAND + event_data = { + ATTR_USER_ID: data['from']['id'], + ATTR_FROM_FIRST: data['from']['first_name'], + ATTR_FROM_LAST: data['from']['last_name']} + + if data['text'][0] == '/': + pieces = data['text'].split(' ') + event_data[ATTR_COMMAND] = pieces[0] + event_data[ATTR_ARGS] = pieces[1:] + + else: + event_data[ATTR_TEXT] = data['text'] + event = EVENT_TELEGRAM_TEXT + + self.hass.bus.async_fire(event, event_data) + + return True diff --git a/homeassistant/components/telegram_bot/polling.py b/homeassistant/components/telegram_bot/polling.py new file mode 100644 index 00000000000..3e0dfa89375 --- /dev/null +++ b/homeassistant/components/telegram_bot/polling.py @@ -0,0 +1,121 @@ +"""Telegram bot polling implementation.""" + +import asyncio +from asyncio.futures import CancelledError +import logging + +import async_timeout +from aiohttp.client_exceptions import ClientError + +from homeassistant.components.telegram_bot import CONF_ALLOWED_CHAT_IDS, \ + BaseTelegramBotEntity, PLATFORM_SCHEMA +from homeassistant.const import EVENT_HOMEASSISTANT_START, \ + EVENT_HOMEASSISTANT_STOP, CONF_API_KEY +from homeassistant.core import callback +from homeassistant.helpers.aiohttp_client import async_get_clientsession + +_LOGGER = logging.getLogger(__name__) + +REQUIREMENTS = ['python-telegram-bot==5.3.0'] + +PLATFORM_SCHEMA = PLATFORM_SCHEMA + + +@asyncio.coroutine +def async_setup_platform(hass, config, async_add_devices, discovery_info=None): + """Setup the polling platform.""" + import telegram + bot = telegram.Bot(config[CONF_API_KEY]) + pol = TelegramPoll(bot, hass, config[CONF_ALLOWED_CHAT_IDS]) + + @callback + def _start_bot(_event): + """Start the bot.""" + pol.start_polling() + + @callback + def _stop_bot(_event): + """Stop the bot.""" + pol.stop_polling() + + hass.bus.async_listen_once( + EVENT_HOMEASSISTANT_START, + _start_bot + ) + hass.bus.async_listen_once( + EVENT_HOMEASSISTANT_STOP, + _stop_bot + ) + + return True + + +class TelegramPoll(BaseTelegramBotEntity): + """asyncio telegram incoming message handler.""" + + def __init__(self, bot, hass, allowed_chat_ids): + """Initialize the polling instance.""" + BaseTelegramBotEntity.__init__(self, hass, allowed_chat_ids) + self.update_id = 0 + self.websession = async_get_clientsession(hass) + self.update_url = '{0}/getUpdates'.format(bot.base_url) + self.polling_task = None # The actuall polling task. + self.timeout = 15 # async post timeout + # polling timeout should always be less than async post timeout. + self.post_data = {'timeout': self.timeout - 5} + + def start_polling(self): + """Start the polling task.""" + self.polling_task = self.hass.async_add_job(self.check_incoming()) + + def stop_polling(self): + """Stop the polling task.""" + self.polling_task.cancel() + + @asyncio.coroutine + def get_updates(self, offset): + """Bypass the default long polling method to enable asyncio.""" + resp = None + _json = [] # The actual value to be returned. + + if offset: + self.post_data['offset'] = offset + try: + with async_timeout.timeout(self.timeout, loop=self.hass.loop): + resp = yield from self.websession.post( + self.update_url, data=self.post_data, + headers={'connection': 'keep-alive'} + ) + if resp.status != 200: + _LOGGER.error("Error %s on %s", resp.status, self.update_url) + _json = yield from resp.json() + except ValueError: + _LOGGER.error("Error parsing Json message") + except (asyncio.TimeoutError, ClientError): + _LOGGER.error("Client connection error") + finally: + if resp is not None: + yield from resp.release() + + return _json + + @asyncio.coroutine + def handle(self): + """" Receiving and processing incoming messages.""" + _updates = yield from self.get_updates(self.update_id) + for update in _updates['result']: + self.update_id = update['update_id'] + 1 + self.process_message(update) + + @asyncio.coroutine + def check_incoming(self): + """"Loop which continuously checks for incoming telegram messages.""" + try: + while True: + # Each handle call sends a long polling post request + # to the telegram server. If no incoming message it will return + # an empty list. Calling self.handle() without any delay or + # timeout will for this reason not really stress the processor. + yield from self.handle() + except CancelledError: + _LOGGER.debug("Stopping telegram polling bot") diff --git a/homeassistant/components/telegram_bot/webhooks.py b/homeassistant/components/telegram_bot/webhooks.py new file mode 100644 index 00000000000..3ffc03780bd --- /dev/null +++ b/homeassistant/components/telegram_bot/webhooks.py @@ -0,0 +1,97 @@ +""" +Allows utilizing telegram webhooks. + +See https://core.telegram.org/bots/webhooks for details + about webhooks. + +""" +import asyncio +import logging +from ipaddress import ip_network + +import voluptuous as vol + + +from homeassistant.const import ( + HTTP_BAD_REQUEST, HTTP_UNAUTHORIZED) +import homeassistant.helpers.config_validation as cv +from homeassistant.components.http import HomeAssistantView +from homeassistant.components.telegram_bot import CONF_ALLOWED_CHAT_IDS, \ + BaseTelegramBotEntity, PLATFORM_SCHEMA +from homeassistant.const import CONF_API_KEY +from homeassistant.components.http.util import get_real_ip + +DEPENDENCIES = ['http'] +REQUIREMENTS = ['python-telegram-bot==5.3.0'] + +_LOGGER = logging.getLogger(__name__) + +TELEGRAM_HANDLER_URL = '/api/telegram_webhooks' + +CONF_TRUSTED_NETWORKS = 'trusted_networks' +DEFAULT_TRUSTED_NETWORKS = [ + ip_network('149.154.167.197/32'), + ip_network('149.154.167.198/31'), + ip_network('149.154.167.200/29'), + ip_network('149.154.167.208/28'), + ip_network('149.154.167.224/29'), + ip_network('149.154.167.232/31') +] + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ + vol.Optional(CONF_TRUSTED_NETWORKS, default=DEFAULT_TRUSTED_NETWORKS): + vol.All(cv.ensure_list, [ip_network]) +}) + + +def setup_platform(hass, config, async_add_devices, discovery_info=None): + """Setup the polling platform.""" + import telegram + bot = telegram.Bot(config[CONF_API_KEY]) + + current_status = bot.getWebhookInfo() + handler_url = "{0}{1}".format(hass.config.api.base_url, + TELEGRAM_HANDLER_URL) + if current_status and current_status['url'] != handler_url: + if bot.setWebhook(handler_url): + _LOGGER.info("set new telegram webhook %s", handler_url) + + hass.http.register_view( + BotPushReceiver( + hass, + config[CONF_ALLOWED_CHAT_IDS], + config[CONF_TRUSTED_NETWORKS])) + + else: + _LOGGER.error("set telegram webhook failed %s", handler_url) + + +class BotPushReceiver(HomeAssistantView, BaseTelegramBotEntity): + """Handle pushes from telegram.""" + + requires_auth = False + url = TELEGRAM_HANDLER_URL + name = "telegram_webhooks" + + def __init__(self, hass, allowed_chat_ids, trusted_networks): + """Initialize the class.""" + BaseTelegramBotEntity.__init__(self, hass, allowed_chat_ids) + self.trusted_networks = trusted_networks + + @asyncio.coroutine + def post(self, request): + """Accept the POST from telegram.""" + real_ip = get_real_ip(request) + if not any(real_ip in net for net in self.trusted_networks): + _LOGGER.warning("Access denied from %s", real_ip) + return self.json_message('Access denied', HTTP_UNAUTHORIZED) + + try: + data = yield from request.json() + except ValueError: + return self.json_message('Invalid JSON', HTTP_BAD_REQUEST) + + if not self.process_message(data): + return self.json_message('Invalid message', HTTP_BAD_REQUEST) + else: + return self.json({}) diff --git a/homeassistant/components/telegram_webhooks.py b/homeassistant/components/telegram_webhooks.py deleted file mode 100644 index f952145f822..00000000000 --- a/homeassistant/components/telegram_webhooks.py +++ /dev/null @@ -1,143 +0,0 @@ -""" -Allows utilizing telegram webhooks. - -See https://core.telegram.org/bots/webhooks for details - about webhooks. - -""" -import asyncio -import logging -from ipaddress import ip_network - -import voluptuous as vol - -from homeassistant.const import ( - HTTP_BAD_REQUEST, HTTP_UNAUTHORIZED) -import homeassistant.helpers.config_validation as cv -from homeassistant.components.http import HomeAssistantView -from homeassistant.const import CONF_API_KEY -from homeassistant.components.http.util import get_real_ip - -DOMAIN = 'telegram_webhooks' -DEPENDENCIES = ['http'] -REQUIREMENTS = ['python-telegram-bot==5.3.0'] - -_LOGGER = logging.getLogger(__name__) - -EVENT_TELEGRAM_COMMAND = 'telegram_command' -EVENT_TELEGRAM_TEXT = 'telegram_text' - -TELEGRAM_HANDLER_URL = '/api/telegram_webhooks' - -CONF_USER_ID = 'user_id' -CONF_TRUSTED_NETWORKS = 'trusted_networks' -DEFAULT_TRUSTED_NETWORKS = [ - ip_network('149.154.167.197/32'), - ip_network('149.154.167.198/31'), - ip_network('149.154.167.200/29'), - ip_network('149.154.167.208/28'), - ip_network('149.154.167.224/29'), - ip_network('149.154.167.232/31') -] - -ATTR_COMMAND = 'command' -ATTR_TEXT = 'text' -ATTR_USER_ID = 'user_id' -ATTR_ARGS = 'args' - -CONFIG_SCHEMA = vol.Schema({ - DOMAIN: vol.Schema({ - vol.Optional(CONF_API_KEY): cv.string, - vol.Optional(CONF_TRUSTED_NETWORKS, default=DEFAULT_TRUSTED_NETWORKS): - vol.All(cv.ensure_list, [ip_network]), - vol.Required(CONF_USER_ID): {cv.string: cv.positive_int}, - }), -}, extra=vol.ALLOW_EXTRA) - - -def setup(hass, config): - """Setup the telegram_webhooks component. - - register webhook if API_KEY is specified - register /api/telegram_webhooks as web service for telegram bot - """ - import telegram - - conf = config[DOMAIN] - - if CONF_API_KEY in conf: - bot = telegram.Bot(conf[CONF_API_KEY]) - current_status = bot.getWebhookInfo() - _LOGGER.debug("telegram webhook status: %s", current_status) - handler_url = "{0}{1}".format(hass.config.api.base_url, - TELEGRAM_HANDLER_URL) - if current_status and current_status['url'] != handler_url: - if bot.setWebhook(handler_url): - _LOGGER.info("set new telegram webhook %s", handler_url) - else: - _LOGGER.error("set telegram webhook failed %s", handler_url) - - hass.http.register_view(BotPushReceiver(conf[CONF_USER_ID], - conf[CONF_TRUSTED_NETWORKS])) - return True - - -class BotPushReceiver(HomeAssistantView): - """Handle pushes from telegram.""" - - requires_auth = False - url = TELEGRAM_HANDLER_URL - name = "telegram_webhooks" - - def __init__(self, user_id_array, trusted_networks): - """Initialize users allowed to send messages to bot.""" - self.trusted_networks = trusted_networks - self.users = {user_id: dev_id for dev_id, user_id in - user_id_array.items()} - _LOGGER.debug("users allowed: %s", self.users) - - @asyncio.coroutine - def post(self, request): - """Accept the POST from telegram.""" - real_ip = get_real_ip(request) - if not any(real_ip in net for net in self.trusted_networks): - _LOGGER.warning("Access denied from %s", real_ip) - return self.json_message('Access denied', HTTP_UNAUTHORIZED) - - try: - data = yield from request.json() - except ValueError: - _LOGGER.error("Received telegram data: %s", data) - return self.json_message('Invalid JSON', HTTP_BAD_REQUEST) - - # check for basic message rules - data = data.get('message') - if not data or 'from' not in data or 'text' not in data: - return self.json({}) - - if data['from'].get('id') not in self.users: - _LOGGER.warning("User not allowed") - return self.json_message('Invalid user', HTTP_BAD_REQUEST) - - _LOGGER.debug("Received telegram data: %s", data) - if not data['text']: - _LOGGER.warning('no text') - return self.json({}) - - if data['text'][:1] == '/': - # telegram command "/blabla arg1 arg2 ..." - pieces = data['text'].split(' ') - - request.app['hass'].bus.async_fire(EVENT_TELEGRAM_COMMAND, { - ATTR_COMMAND: pieces[0], - ATTR_ARGS: " ".join(pieces[1:]), - ATTR_USER_ID: data['from']['id'], - }) - - # telegram text "bla bla" - request.app['hass'].bus.async_fire(EVENT_TELEGRAM_TEXT, { - ATTR_TEXT: data['text'], - ATTR_USER_ID: data['from']['id'], - }) - - return self.json({}) diff --git a/requirements_all.txt b/requirements_all.txt index 49c13c1adc5..c1f8f1eec2b 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -632,8 +632,9 @@ python-pushover==0.2 # homeassistant.components.sensor.synologydsm python-synology==0.1.0 -# homeassistant.components.telegram_webhooks # homeassistant.components.notify.telegram +# homeassistant.components.telegram_bot.polling +# homeassistant.components.telegram_bot.webhooks python-telegram-bot==5.3.0 # homeassistant.components.sensor.twitch From f06cff35ff6647c962c2c1103b3d95fdda341856 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 12 Apr 2017 09:48:21 +0200 Subject: [PATCH 057/146] Upgrade paho-mqtt to 1.2.2 (#7066) --- homeassistant/components/mqtt/__init__.py | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/mqtt/__init__.py b/homeassistant/components/mqtt/__init__.py index e53209e3b4c..0e8c666d147 100644 --- a/homeassistant/components/mqtt/__init__.py +++ b/homeassistant/components/mqtt/__init__.py @@ -28,7 +28,7 @@ from homeassistant.const import ( CONF_PASSWORD, CONF_PORT, CONF_PROTOCOL, CONF_PAYLOAD) from homeassistant.components.mqtt.server import HBMQTT_CONFIG_SCHEMA -REQUIREMENTS = ['paho-mqtt==1.2.1'] +REQUIREMENTS = ['paho-mqtt==1.2.2'] _LOGGER = logging.getLogger(__name__) diff --git a/requirements_all.txt b/requirements_all.txt index c1f8f1eec2b..a37ecb1f775 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -414,7 +414,7 @@ openhomedevice==0.2.1 orvibo==1.1.1 # homeassistant.components.mqtt -paho-mqtt==1.2.1 +paho-mqtt==1.2.2 # homeassistant.components.media_player.panasonic_viera panasonic_viera==0.2 From e026717239f1e7653fed6029c3dc7d967ef2c855 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Wed, 12 Apr 2017 09:51:19 +0200 Subject: [PATCH 058/146] Fix handling with register callbacks on added_to_hass (#7067) --- homeassistant/components/lutron_caseta.py | 6 ++++-- homeassistant/components/media_player/sonos.py | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/lutron_caseta.py b/homeassistant/components/lutron_caseta.py index 416c9f7fd00..5519240bc49 100644 --- a/homeassistant/components/lutron_caseta.py +++ b/homeassistant/components/lutron_caseta.py @@ -77,8 +77,10 @@ class LutronCasetaDevice(Entity): @asyncio.coroutine def async_added_to_hass(self): """Register callbacks.""" - self._smartbridge.add_subscriber(self._device_id, - self._update_callback) + self.hass.async_add_job( + self._smartbridge.add_subscriber, self._device_id, + self._update_callback + ) def _update_callback(self): self.schedule_update_ha_state() diff --git a/homeassistant/components/media_player/sonos.py b/homeassistant/components/media_player/sonos.py index cd837948b46..00cc52ab3a1 100644 --- a/homeassistant/components/media_player/sonos.py +++ b/homeassistant/components/media_player/sonos.py @@ -292,7 +292,7 @@ class SonosDevice(MediaPlayerDevice): @asyncio.coroutine def async_added_to_hass(self): """Subscribe sonos events.""" - self.hass.loop.run_in_executor(None, self._subscribe_to_player_events) + self.hass.async_add_job(self._subscribe_to_player_events) @property def should_poll(self): From 9d20a176421609f6088dfe50dc2098edabb71ac5 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Wed, 12 Apr 2017 09:52:01 +0200 Subject: [PATCH 059/146] Lutron. Bugfix callback registration. (#7042) * Lutron. Bugfix callback registration. * Change handling to event --- homeassistant/components/light/lutron.py | 9 +++------ homeassistant/components/lutron.py | 16 ++++++++++------ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/homeassistant/components/light/lutron.py b/homeassistant/components/light/lutron.py index 36742950b9c..5322fd79489 100644 --- a/homeassistant/components/light/lutron.py +++ b/homeassistant/components/light/lutron.py @@ -14,12 +14,9 @@ _LOGGER = logging.getLogger(__name__) # pylint: disable=unused-argument def setup_platform(hass, config, add_devices, discovery_info=None): """Setup Lutron lights.""" - area_devs = {} devs = [] for (area_name, device) in hass.data[LUTRON_DEVICES]['light']: - dev = LutronLight(hass, area_name, device, - hass.data[LUTRON_CONTROLLER]) - area_devs.setdefault(area_name, []).append(dev) + dev = LutronLight(area_name, device, hass.data[LUTRON_CONTROLLER]) devs.append(dev) add_devices(devs, True) @@ -39,10 +36,10 @@ def to_hass_level(level): class LutronLight(LutronDevice, Light): """Representation of a Lutron Light, including dimmable.""" - def __init__(self, hass, area_name, lutron_device, controller): + def __init__(self, area_name, lutron_device, controller): """Initialize the light.""" self._prev_brightness = None - LutronDevice.__init__(self, hass, area_name, lutron_device, controller) + LutronDevice.__init__(self, area_name, lutron_device, controller) @property def supported_features(self): diff --git a/homeassistant/components/lutron.py b/homeassistant/components/lutron.py index a428ea10cfa..d5e889027d1 100644 --- a/homeassistant/components/lutron.py +++ b/homeassistant/components/lutron.py @@ -4,6 +4,7 @@ Component for interacting with a Lutron RadioRA 2 system. For more details about this component, please refer to the documentation at https://home-assistant.io/components/lutron/ """ +import asyncio import logging from homeassistant.helpers import discovery @@ -50,16 +51,19 @@ def setup(hass, base_config): class LutronDevice(Entity): """Representation of a Lutron device entity.""" - def __init__(self, hass, area_name, lutron_device, controller): + def __init__(self, area_name, lutron_device, controller): """Initialize the device.""" self._lutron_device = lutron_device self._controller = controller self._area_name = area_name - self.hass = hass - self.object_id = '{} {}'.format(area_name, lutron_device.name) - - self._controller.subscribe(self._lutron_device, self._update_callback) + @asyncio.coroutine + def async_add_to_hass(self): + """Register callbacks.""" + self.hass.async_add_job( + self._controller.subscribe, self._lutron_device, + self._update_callback + ) def _update_callback(self, _device): """Callback invoked by pylutron when the device state changes.""" @@ -68,7 +72,7 @@ class LutronDevice(Entity): @property def name(self): """Return the name of the device.""" - return self._lutron_device.name + return "{} {}".format(self._area_name, self._lutron_device.name) @property def should_poll(self): From f68542ba0d487c3ccf1f1c9447c8c0a995a43565 Mon Sep 17 00:00:00 2001 From: hawk259 Date: Wed, 12 Apr 2017 05:35:35 -0400 Subject: [PATCH 060/146] Adding AlarmDecoder platform (#6900) * Added AlarmDecoder platform * remove try/catch for generic execption * Changes for @pvizeli, thanks for the review! Removed _ prefix from normal function variables Removed _hass as it will be set via .hass for us Broke out the three config (socket, serial, usb) and use vol.Any Added support for USB I think, don't have device, but should work Removed components dictionary, was form old group all code that didn't work * Fix hass string handling --- .coveragerc | 3 + .../alarm_control_panel/alarmdecoder.py | 119 ++++++++++++ homeassistant/components/alarmdecoder.py | 171 ++++++++++++++++++ .../components/binary_sensor/alarmdecoder.py | 123 +++++++++++++ .../components/sensor/alarmdecoder.py | 75 ++++++++ requirements_all.txt | 3 + 6 files changed, 494 insertions(+) create mode 100644 homeassistant/components/alarm_control_panel/alarmdecoder.py create mode 100644 homeassistant/components/alarmdecoder.py create mode 100644 homeassistant/components/binary_sensor/alarmdecoder.py create mode 100644 homeassistant/components/sensor/alarmdecoder.py diff --git a/.coveragerc b/.coveragerc index 578276cac43..b2f6a21c84b 100644 --- a/.coveragerc +++ b/.coveragerc @@ -8,6 +8,9 @@ omit = homeassistant/helpers/signal.py # omit pieces of code that rely on external devices being present + homeassistant/components/alarmdecoder.py + homeassistant/components/*/alarmdecoder.py + homeassistant/components/apcupsd.py homeassistant/components/*/apcupsd.py diff --git a/homeassistant/components/alarm_control_panel/alarmdecoder.py b/homeassistant/components/alarm_control_panel/alarmdecoder.py new file mode 100644 index 00000000000..f176a87827b --- /dev/null +++ b/homeassistant/components/alarm_control_panel/alarmdecoder.py @@ -0,0 +1,119 @@ +""" +Support for AlarmDecoder-based alarm control panels (Honeywell/DSC). + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/alarm_control_panel.alarmdecoder/ +""" +import asyncio +import logging + +from homeassistant.core import callback +from homeassistant.helpers.dispatcher import async_dispatcher_connect +import homeassistant.components.alarm_control_panel as alarm + +from homeassistant.components.alarmdecoder import (DATA_AD, + SIGNAL_PANEL_MESSAGE) + +from homeassistant.const import ( + STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME, STATE_ALARM_DISARMED, + STATE_UNKNOWN, STATE_ALARM_TRIGGERED) + +_LOGGER = logging.getLogger(__name__) + +DEPENDENCIES = ['alarmdecoder'] + + +@asyncio.coroutine +def async_setup_platform(hass, config, async_add_devices, discovery_info=None): + """Perform the setup for AlarmDecoder alarm panels.""" + _LOGGER.debug("AlarmDecoderAlarmPanel: setup") + + device = AlarmDecoderAlarmPanel("Alarm Panel", hass) + + async_add_devices([device]) + + return True + + +class AlarmDecoderAlarmPanel(alarm.AlarmControlPanel): + """Representation of an AlarmDecoder-based alarm panel.""" + + def __init__(self, name, hass): + """Initialize the alarm panel.""" + self._display = "" + self._name = name + self._state = STATE_UNKNOWN + + _LOGGER.debug("AlarmDecoderAlarm: Setting up panel") + + @asyncio.coroutine + def async_added_to_hass(self): + """Register callbacks.""" + async_dispatcher_connect( + self.hass, SIGNAL_PANEL_MESSAGE, self._message_callback) + + @callback + def _message_callback(self, message): + if message.alarm_sounding or message.fire_alarm: + if self._state != STATE_ALARM_TRIGGERED: + self._state = STATE_ALARM_TRIGGERED + self.hass.async_add_job(self.async_update_ha_state()) + elif message.armed_away: + if self._state != STATE_ALARM_ARMED_AWAY: + self._state = STATE_ALARM_ARMED_AWAY + self.hass.async_add_job(self.async_update_ha_state()) + elif message.armed_home: + if self._state != STATE_ALARM_ARMED_HOME: + self._state = STATE_ALARM_ARMED_HOME + self.hass.async_add_job(self.async_update_ha_state()) + else: + if self._state != STATE_ALARM_DISARMED: + self._state = STATE_ALARM_DISARMED + self.hass.async_add_job(self.async_update_ha_state()) + + @property + def name(self): + """Return the name of the device.""" + return self._name + + @property + def should_poll(self): + """No polling needed.""" + return False + + @property + def code_format(self): + """Regex for code format or None if no code is required.""" + return '^\\d{4,6}$' + + @property + def state(self): + """Return the state of the device.""" + return self._state + + @asyncio.coroutine + def async_alarm_disarm(self, code=None): + """Send disarm command.""" + _LOGGER.debug("AlarmDecoderAlarm::alarm_disarm: %s", code) + if code: + _LOGGER.debug("AlarmDecoderAlarm::alarm_disarm: sending %s1", + str(code)) + self.hass.data[DATA_AD].send("{!s}1".format(code)) + + @asyncio.coroutine + def async_alarm_arm_away(self, code=None): + """Send arm away command.""" + _LOGGER.debug("AlarmDecoderAlarm::alarm_arm_away: %s", code) + if code: + _LOGGER.debug("AlarmDecoderAlarm::alarm_arm_away: sending %s2", + str(code)) + self.hass.data[DATA_AD].send("{!s}2".format(code)) + + @asyncio.coroutine + def async_alarm_arm_home(self, code=None): + """Send arm home command.""" + _LOGGER.debug("AlarmDecoderAlarm::alarm_arm_home: %s", code) + if code: + _LOGGER.debug("AlarmDecoderAlarm::alarm_arm_home: sending %s3", + str(code)) + self.hass.data[DATA_AD].send("{!s}3".format(code)) diff --git a/homeassistant/components/alarmdecoder.py b/homeassistant/components/alarmdecoder.py new file mode 100644 index 00000000000..ec99f2381e5 --- /dev/null +++ b/homeassistant/components/alarmdecoder.py @@ -0,0 +1,171 @@ +""" +Support for AlarmDecoder devices. + +For more details about this component, please refer to the documentation at +https://home-assistant.io/components/alarmdecoder/ +""" +import asyncio +import logging + +import voluptuous as vol +import homeassistant.helpers.config_validation as cv + +from homeassistant.core import callback +from homeassistant.const import EVENT_HOMEASSISTANT_STOP + +from homeassistant.helpers.discovery import async_load_platform +from homeassistant.helpers.dispatcher import async_dispatcher_send + +REQUIREMENTS = ['alarmdecoder==0.12.1.0'] + +_LOGGER = logging.getLogger(__name__) + +DOMAIN = 'alarmdecoder' + +DATA_AD = 'alarmdecoder' + + +CONF_DEVICE = 'device' +CONF_DEVICE_TYPE = 'type' +CONF_DEVICE_HOST = 'host' +CONF_DEVICE_PORT = 'port' +CONF_DEVICE_PATH = 'path' +CONF_DEVICE_BAUD = 'baudrate' + +CONF_ZONES = 'zones' +CONF_ZONE_NAME = 'name' +CONF_ZONE_TYPE = 'type' + +CONF_PANEL_DISPLAY = 'panel_display' + +DEFAULT_DEVICE_TYPE = 'socket' +DEFAULT_DEVICE_HOST = 'localhost' +DEFAULT_DEVICE_PORT = 10000 +DEFAULT_DEVICE_PATH = '/dev/ttyUSB0' +DEFAULT_DEVICE_BAUD = 115200 + +DEFAULT_PANEL_DISPLAY = False + +DEFAULT_ZONE_TYPE = 'opening' + +SIGNAL_PANEL_MESSAGE = 'alarmdecoder.panel_message' +SIGNAL_PANEL_ARM_AWAY = 'alarmdecoder.panel_arm_away' +SIGNAL_PANEL_ARM_HOME = 'alarmdecoder.panel_arm_home' +SIGNAL_PANEL_DISARM = 'alarmdecoder.panel_disarm' + +SIGNAL_ZONE_FAULT = 'alarmdecoder.zone_fault' +SIGNAL_ZONE_RESTORE = 'alarmdecoder.zone_restore' + +DEVICE_SOCKET_SCHEMA = vol.Schema({ + vol.Required(CONF_DEVICE_TYPE): 'socket', + vol.Optional(CONF_DEVICE_HOST, default=DEFAULT_DEVICE_HOST): cv.string, + vol.Optional(CONF_DEVICE_PORT, default=DEFAULT_DEVICE_PORT): cv.port}) + +DEVICE_SERIAL_SCHEMA = vol.Schema({ + vol.Required(CONF_DEVICE_TYPE): 'serial', + vol.Optional(CONF_DEVICE_PATH, default=DEFAULT_DEVICE_PATH): cv.string, + vol.Optional(CONF_DEVICE_BAUD, default=DEFAULT_DEVICE_BAUD): cv.string}) + +DEVICE_USB_SCHEMA = vol.Schema({ + vol.Required(CONF_DEVICE_TYPE): 'usb'}) + +ZONE_SCHEMA = vol.Schema({ + vol.Required(CONF_ZONE_NAME): cv.string, + vol.Optional(CONF_ZONE_TYPE, default=DEFAULT_ZONE_TYPE): cv.string}) + +CONFIG_SCHEMA = vol.Schema({ + DOMAIN: vol.Schema({ + vol.Required(CONF_DEVICE): vol.Any(DEVICE_SOCKET_SCHEMA, + DEVICE_SERIAL_SCHEMA, + DEVICE_USB_SCHEMA), + vol.Optional(CONF_PANEL_DISPLAY, + default=DEFAULT_PANEL_DISPLAY): cv.boolean, + vol.Optional(CONF_ZONES): {vol.Coerce(int): ZONE_SCHEMA}, + }), +}, extra=vol.ALLOW_EXTRA) + + +@asyncio.coroutine +def async_setup(hass, config): + """Common setup for AlarmDecoder devices.""" + from alarmdecoder import AlarmDecoder + from alarmdecoder.devices import (SocketDevice, SerialDevice, USBDevice) + + conf = config.get(DOMAIN) + + device = conf.get(CONF_DEVICE) + display = conf.get(CONF_PANEL_DISPLAY) + zones = conf.get(CONF_ZONES) + + device_type = device.get(CONF_DEVICE_TYPE) + host = DEFAULT_DEVICE_HOST + port = DEFAULT_DEVICE_PORT + path = DEFAULT_DEVICE_PATH + baud = DEFAULT_DEVICE_BAUD + + sync_connect = asyncio.Future(loop=hass.loop) + + def handle_open(device): + """Callback for a successful connection.""" + _LOGGER.info("Established a connection with the alarmdecoder.") + hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, stop_alarmdecoder) + sync_connect.set_result(True) + + @callback + def stop_alarmdecoder(event): + """Callback to handle shutdown alarmdecoder.""" + _LOGGER.debug("Shutting down alarmdecoder.") + controller.close() + + @callback + def handle_message(sender, message): + """Callback to handle message from alarmdecoder.""" + async_dispatcher_send(hass, SIGNAL_PANEL_MESSAGE, message) + + def zone_fault_callback(sender, zone): + """Callback to handle zone fault from alarmdecoder.""" + async_dispatcher_send(hass, SIGNAL_ZONE_FAULT, zone) + + def zone_restore_callback(sender, zone): + """Callback to handle zone restore from alarmdecoder.""" + async_dispatcher_send(hass, SIGNAL_ZONE_RESTORE, zone) + + controller = False + if device_type == 'socket': + host = device.get(CONF_DEVICE_HOST) + port = device.get(CONF_DEVICE_PORT) + controller = AlarmDecoder(SocketDevice(interface=(host, port))) + elif device_type == 'serial': + path = device.get(CONF_DEVICE_PATH) + baud = device.get(CONF_DEVICE_BAUD) + controller = AlarmDecoder(SerialDevice(interface=path)) + elif device_type == 'usb': + AlarmDecoder(USBDevice.find()) + return False + + controller.on_open += handle_open + controller.on_message += handle_message + controller.on_zone_fault += zone_fault_callback + controller.on_zone_restore += zone_restore_callback + + hass.data[DATA_AD] = controller + + controller.open(baud) + + result = yield from sync_connect + + if not result: + return False + + hass.async_add_job(async_load_platform(hass, 'alarm_control_panel', DOMAIN, + conf, config)) + + if zones: + hass.async_add_job(async_load_platform( + hass, 'binary_sensor', DOMAIN, {CONF_ZONES: zones}, config)) + + if display: + hass.async_add_job(async_load_platform(hass, 'sensor', DOMAIN, + conf, config)) + + return True diff --git a/homeassistant/components/binary_sensor/alarmdecoder.py b/homeassistant/components/binary_sensor/alarmdecoder.py new file mode 100644 index 00000000000..e6292128710 --- /dev/null +++ b/homeassistant/components/binary_sensor/alarmdecoder.py @@ -0,0 +1,123 @@ +""" +Support for AlarmDecoder zone states- represented as binary sensors. + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/binary_sensor.alarmdecoder/ +""" +import asyncio +import logging + +from homeassistant.core import callback +from homeassistant.helpers.dispatcher import async_dispatcher_connect +from homeassistant.components.binary_sensor import BinarySensorDevice + +from homeassistant.const import (STATE_ON, STATE_OFF, STATE_OPEN, STATE_CLOSED) +from homeassistant.components.alarmdecoder import (ZONE_SCHEMA, + CONF_ZONES, + CONF_ZONE_NAME, + CONF_ZONE_TYPE, + SIGNAL_ZONE_FAULT, + SIGNAL_ZONE_RESTORE) + + +DEPENDENCIES = ['alarmdecoder'] + +_LOGGER = logging.getLogger(__name__) + + +@asyncio.coroutine +def async_setup_platform(hass, config, async_add_devices, discovery_info=None): + """Setup AlarmDecoder binary sensor devices.""" + configured_zones = discovery_info[CONF_ZONES] + + devices = [] + + for zone_num in configured_zones: + device_config_data = ZONE_SCHEMA(configured_zones[zone_num]) + zone_type = device_config_data[CONF_ZONE_TYPE] + zone_name = device_config_data[CONF_ZONE_NAME] + device = AlarmDecoderBinarySensor(hass, + zone_num, + zone_name, + zone_type) + devices.append(device) + + async_add_devices(devices) + + return True + + +class AlarmDecoderBinarySensor(BinarySensorDevice): + """Representation of an AlarmDecoder binary sensor.""" + + def __init__(self, hass, zone_number, zone_name, zone_type): + """Initialize the binary_sensor.""" + self._zone_number = zone_number + self._zone_type = zone_type + self._state = 0 + self._name = zone_name + self._type = zone_type + + _LOGGER.debug('AlarmDecoderBinarySensor: Setup up zone: ' + zone_name) + + @asyncio.coroutine + def async_added_to_hass(self): + """Register callbacks.""" + async_dispatcher_connect( + self.hass, SIGNAL_ZONE_FAULT, self._fault_callback) + + async_dispatcher_connect( + self.hass, SIGNAL_ZONE_RESTORE, self._restore_callback) + + @property + def state(self): + """Return the state of the binary sensor.""" + if self._type == 'opening': + return STATE_OPEN if self.is_on else STATE_CLOSED + + return STATE_ON if self.is_on else STATE_OFF + + @property + def name(self): + """Return the name of the entity.""" + return self._name + + @property + def icon(self): + """Icon for device by its type.""" + if "window" in self._name.lower(): + return "mdi:window-open" if self.is_on else "mdi:window-closed" + + if self._type == 'smoke': + return "mdi:fire" + + return None + + @property + def should_poll(self): + """No polling needed.""" + return False + + @property + def is_on(self): + """Return true if sensor is on.""" + return self._state == 1 + + @property + def device_class(self): + """Return the class of this sensor, from DEVICE_CLASSES.""" + return self._zone_type + + @callback + def _fault_callback(self, zone): + """Update the zone's state, if needed.""" + if zone is None or int(zone) == self._zone_number: + self._state = 1 + self.hass.async_add_job(self.async_update_ha_state()) + + @callback + def _restore_callback(self, zone): + """Update the zone's state, if needed.""" + if zone is None or int(zone) == self._zone_number: + self._state = 0 + self.hass.async_add_job(self.async_update_ha_state()) diff --git a/homeassistant/components/sensor/alarmdecoder.py b/homeassistant/components/sensor/alarmdecoder.py new file mode 100644 index 00000000000..88246cc0bc2 --- /dev/null +++ b/homeassistant/components/sensor/alarmdecoder.py @@ -0,0 +1,75 @@ +""" +Support for AlarmDecoder Sensors (Shows Panel Display). + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/sensor.alarmdecoder/ +""" +import asyncio +import logging + +from homeassistant.core import callback +from homeassistant.helpers.dispatcher import async_dispatcher_connect +from homeassistant.helpers.entity import Entity + +from homeassistant.components.alarmdecoder import (SIGNAL_PANEL_MESSAGE) + +from homeassistant.const import (STATE_UNKNOWN) + +DEPENDENCIES = ['alarmdecoder'] + +_LOGGER = logging.getLogger(__name__) + + +@asyncio.coroutine +def async_setup_platform(hass, config, async_add_devices, discovery_info=None): + """Perform the setup for AlarmDecoder sensor devices.""" + _LOGGER.debug("AlarmDecoderSensor: async_setup_platform") + + device = AlarmDecoderSensor(hass) + + async_add_devices([device]) + + +class AlarmDecoderSensor(Entity): + """Representation of an AlarmDecoder keypad.""" + + def __init__(self, hass): + """Initialize the alarm panel.""" + self._display = "" + self._state = STATE_UNKNOWN + self._icon = 'mdi:alarm-check' + self._name = 'Alarm Panel Display' + + _LOGGER.debug("AlarmDecoderSensor: Setting up panel") + + @asyncio.coroutine + def async_added_to_hass(self): + """Register callbacks.""" + async_dispatcher_connect( + self.hass, SIGNAL_PANEL_MESSAGE, self._message_callback) + + @callback + def _message_callback(self, message): + if self._display != message.text: + self._display = message.text + self.hass.async_add_job(self.async_update_ha_state()) + + @property + def icon(self): + """Return the icon if any.""" + return self._icon + + @property + def state(self): + """Return the overall state.""" + return self._display + + @property + def name(self): + """Return the name of the device.""" + return self._name + + @property + def should_poll(self): + """No polling needed.""" + return False diff --git a/requirements_all.txt b/requirements_all.txt index a37ecb1f775..cbecf913943 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -47,6 +47,9 @@ aiohttp_cors==0.5.2 # homeassistant.components.light.lifx aiolifx==0.4.4 +# homeassistant.components.alarmdecoder +alarmdecoder==0.12.1.0 + # homeassistant.components.camera.amcrest # homeassistant.components.sensor.amcrest amcrest==1.1.8 From d63028e44af753dd0df2e16273b0aa5e253fc859 Mon Sep 17 00:00:00 2001 From: John Arild Berentsen Date: Wed, 12 Apr 2017 19:09:29 +0200 Subject: [PATCH 061/146] Add communication data attributes to Zwave node_entity (#6813) * Add quality attribute to node * Move quality to node_entity * adjustments * Line lenght * flake8 * Cleanup and add each entry from getNodeStatistics as attribute * resolve conflict * Move NETWORK to hass.data * Test Done * Cleanup from review * Resolve conflicts * Review changes * Long lines.... * blank line * import-error-disable * Update tests Part1... Again * Hound * Argh! * Argh! * YABBADABBADOOOOOOO! * Enhance tests * hound * Resolve * resolve tests... --- homeassistant/components/cover/zwave.py | 13 +-- homeassistant/components/lock/zwave.py | 7 +- homeassistant/components/zwave/__init__.py | 61 ++++++------ homeassistant/components/zwave/node_entity.py | 17 +++- tests/components/cover/test_zwave.py | 52 ++++++---- tests/components/lock/test_zwave.py | 94 +++++++++---------- tests/components/zwave/test_init.py | 75 ++++++++------- tests/components/zwave/test_node_entity.py | 69 +++++++++++++- 8 files changed, 240 insertions(+), 148 deletions(-) diff --git a/homeassistant/components/cover/zwave.py b/homeassistant/components/cover/zwave.py index 3f26da183b5..f860e52de95 100644 --- a/homeassistant/components/cover/zwave.py +++ b/homeassistant/components/cover/zwave.py @@ -20,13 +20,13 @@ _LOGGER = logging.getLogger(__name__) SUPPORT_GARAGE = SUPPORT_OPEN | SUPPORT_CLOSE -def get_device(values, node_config, **kwargs): +def get_device(hass, values, node_config, **kwargs): """Create zwave entity device.""" invert_buttons = node_config.get(zwave.CONF_INVERT_OPENCLOSE_BUTTONS) if (values.primary.command_class == zwave.const.COMMAND_CLASS_SWITCH_MULTILEVEL and values.primary.index == 0): - return ZwaveRollershutter(values, invert_buttons) + return ZwaveRollershutter(hass, values, invert_buttons) elif (values.primary.command_class in [ zwave.const.COMMAND_CLASS_SWITCH_BINARY, zwave.const.COMMAND_CLASS_BARRIER_OPERATOR]): @@ -37,10 +37,11 @@ def get_device(values, node_config, **kwargs): class ZwaveRollershutter(zwave.ZWaveDeviceEntity, CoverDevice): """Representation of an Zwave roller shutter.""" - def __init__(self, values, invert_buttons): + def __init__(self, hass, values, invert_buttons): """Initialize the zwave rollershutter.""" ZWaveDeviceEntity.__init__(self, values, DOMAIN) # pylint: disable=no-member + self._network = hass.data[zwave.ZWAVE_NETWORK] self._open_id = None self._close_id = None self._current_position = None @@ -90,11 +91,11 @@ class ZwaveRollershutter(zwave.ZWaveDeviceEntity, CoverDevice): def open_cover(self, **kwargs): """Move the roller shutter up.""" - zwave.NETWORK.manager.pressButton(self._open_id) + self._network.manager.pressButton(self._open_id) def close_cover(self, **kwargs): """Move the roller shutter down.""" - zwave.NETWORK.manager.pressButton(self._close_id) + self._network.manager.pressButton(self._close_id) def set_cover_position(self, position, **kwargs): """Move the roller shutter to a specific position.""" @@ -102,7 +103,7 @@ class ZwaveRollershutter(zwave.ZWaveDeviceEntity, CoverDevice): def stop_cover(self, **kwargs): """Stop the roller shutter.""" - zwave.NETWORK.manager.releaseButton(self._open_id) + self._network.manager.releaseButton(self._open_id) class ZwaveGarageDoor(zwave.ZWaveDeviceEntity, CoverDevice): diff --git a/homeassistant/components/lock/zwave.py b/homeassistant/components/lock/zwave.py index 676775aace5..9a3e2e34fcc 100644 --- a/homeassistant/components/lock/zwave.py +++ b/homeassistant/components/lock/zwave.py @@ -128,11 +128,12 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None): descriptions = load_yaml_config_file( path.join(path.dirname(__file__), 'services.yaml')) + network = hass.data[zwave.ZWAVE_NETWORK] def set_usercode(service): """Set the usercode to index X on the lock.""" node_id = service.data.get(zwave.const.ATTR_NODE_ID) - lock_node = zwave.NETWORK.nodes[node_id] + lock_node = network.nodes[node_id] code_slot = service.data.get(ATTR_CODE_SLOT) usercode = service.data.get(ATTR_USERCODE) @@ -151,7 +152,7 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None): def get_usercode(service): """Get a usercode at index X on the lock.""" node_id = service.data.get(zwave.const.ATTR_NODE_ID) - lock_node = zwave.NETWORK.nodes[node_id] + lock_node = network.nodes[node_id] code_slot = service.data.get(ATTR_CODE_SLOT) for value in lock_node.get_values( @@ -164,7 +165,7 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None): def clear_usercode(service): """Set usercode to slot X on the lock.""" node_id = service.data.get(zwave.const.ATTR_NODE_ID) - lock_node = zwave.NETWORK.nodes[node_id] + lock_node = network.nodes[node_id] code_slot = service.data.get(ATTR_CODE_SLOT) data = '' diff --git a/homeassistant/components/zwave/__init__.py b/homeassistant/components/zwave/__init__.py index 38827bc5533..eb755dbf1b8 100755 --- a/homeassistant/components/zwave/__init__.py +++ b/homeassistant/components/zwave/__init__.py @@ -65,8 +65,7 @@ DEFAULT_CONF_REFRESH_VALUE = False DEFAULT_CONF_REFRESH_DELAY = 5 DATA_ZWAVE_DICT = 'zwave_devices' - -NETWORK = None +ZWAVE_NETWORK = 'zwave_network' RENAME_NODE_SCHEMA = vol.Schema({ vol.Required(const.ATTR_NODE_ID): vol.Coerce(int), @@ -200,7 +199,7 @@ def get_config_value(node, value_index, tries=5): @asyncio.coroutine def async_setup_platform(hass, config, async_add_devices, discovery_info=None): """Generic Z-Wave platform setup.""" - if discovery_info is None or NETWORK is None: + if discovery_info is None or ZWAVE_NETWORK not in hass.data: return False device = hass.data[DATA_ZWAVE_DICT].pop( @@ -218,9 +217,6 @@ def setup(hass, config): Will automatically load components to support devices found on the network. """ - # pylint: disable=global-statement, import-error - global NETWORK - descriptions = conf_util.load_yaml_config_file( os.path.join(os.path.dirname(__file__), 'services.yaml')) @@ -232,6 +228,7 @@ def setup(hass, config): "https://home-assistant.io/components/zwave/") return False from pydispatch import dispatcher + # pylint: disable=import-error from openzwave.option import ZWaveOption from openzwave.network import ZWaveNetwork from openzwave.group import ZWaveGroup @@ -257,7 +254,7 @@ def setup(hass, config): options.set_console_output(use_debug) options.lock() - NETWORK = ZWaveNetwork(options, autostart=False) + network = hass.data[ZWAVE_NETWORK] = ZWaveNetwork(options, autostart=False) hass.data[DATA_ZWAVE_DICT] = {} if use_debug: # pragma: no cover @@ -301,7 +298,7 @@ def setup(hass, config): def node_added(node): """Called when a node is added on the network.""" - entity = ZWaveNodeEntity(node) + entity = ZWaveNodeEntity(node, network) node_config = device_config.get(entity.entity_id) if node_config.get(CONF_IGNORED): _LOGGER.info( @@ -354,49 +351,49 @@ def setup(hass, config): def add_node(service): """Switch into inclusion mode.""" _LOGGER.info("Zwave add_node have been initialized.") - NETWORK.controller.add_node() + network.controller.add_node() def add_node_secure(service): """Switch into secure inclusion mode.""" _LOGGER.info("Zwave add_node_secure have been initialized.") - NETWORK.controller.add_node(True) + network.controller.add_node(True) def remove_node(service): """Switch into exclusion mode.""" _LOGGER.info("Zwave remove_node have been initialized.") - NETWORK.controller.remove_node() + network.controller.remove_node() def cancel_command(service): """Cancel a running controller command.""" _LOGGER.info("Cancel running ZWave command.") - NETWORK.controller.cancel_command() + network.controller.cancel_command() def heal_network(service): """Heal the network.""" _LOGGER.info("ZWave heal running.") - NETWORK.heal() + network.heal() def soft_reset(service): """Soft reset the controller.""" _LOGGER.info("Zwave soft_reset have been initialized.") - NETWORK.controller.soft_reset() + network.controller.soft_reset() def test_network(service): """Test the network by sending commands to all the nodes.""" _LOGGER.info("Zwave test_network have been initialized.") - NETWORK.test() + network.test() def stop_network(_service_or_event): """Stop Z-Wave network.""" _LOGGER.info("Stopping ZWave network.") - NETWORK.stop() + network.stop() if hass.state == CoreState.running: hass.bus.fire(const.EVENT_NETWORK_STOP) def rename_node(service): """Rename a node.""" node_id = service.data.get(const.ATTR_NODE_ID) - node = NETWORK.nodes[node_id] + node = hass.data[ZWAVE_NETWORK].nodes[node_id] name = service.data.get(const.ATTR_NAME) node.name = name _LOGGER.info( @@ -406,18 +403,18 @@ def setup(hass, config): """Remove failed node.""" node_id = service.data.get(const.ATTR_NODE_ID) _LOGGER.info('Trying to remove zwave node %d', node_id) - NETWORK.controller.remove_failed_node(node_id) + network.controller.remove_failed_node(node_id) def replace_failed_node(service): """Replace failed node.""" node_id = service.data.get(const.ATTR_NODE_ID) _LOGGER.info('Trying to replace zwave node %d', node_id) - NETWORK.controller.replace_failed_node(node_id) + network.controller.replace_failed_node(node_id) def set_config_parameter(service): """Set a config parameter to a node.""" node_id = service.data.get(const.ATTR_NODE_ID) - node = NETWORK.nodes[node_id] + node = network.nodes[node_id] param = service.data.get(const.ATTR_CONFIG_PARAMETER) selection = service.data.get(const.ATTR_CONFIG_VALUE) size = service.data.get(const.ATTR_CONFIG_SIZE, 2) @@ -446,7 +443,7 @@ def setup(hass, config): def print_config_parameter(service): """Print a config parameter from a node.""" node_id = service.data.get(const.ATTR_NODE_ID) - node = NETWORK.nodes[node_id] + node = network.nodes[node_id] param = service.data.get(const.ATTR_CONFIG_PARAMETER) _LOGGER.info("Config parameter %s on Node %s : %s", param, node_id, get_config_value(node, param)) @@ -454,13 +451,13 @@ def setup(hass, config): def print_node(service): """Print all information about z-wave node.""" node_id = service.data.get(const.ATTR_NODE_ID) - node = NETWORK.nodes[node_id] + node = network.nodes[node_id] nice_print_node(node) def set_wakeup(service): """Set wake-up interval of a node.""" node_id = service.data.get(const.ATTR_NODE_ID) - node = NETWORK.nodes[node_id] + node = network.nodes[node_id] value = service.data.get(const.ATTR_CONFIG_VALUE) if node.can_wake_up(): for value_id in node.get_values( @@ -478,7 +475,7 @@ def setup(hass, config): group = service.data.get(const.ATTR_GROUP) instance = service.data.get(const.ATTR_INSTANCE) - node = ZWaveGroup(group, NETWORK, node_id) + node = ZWaveGroup(group, network, node_id) if association_type == 'add': node.add_association(target_node_id, instance) _LOGGER.info("Adding association for node:%s in group:%s " @@ -500,13 +497,13 @@ def setup(hass, config): def refresh_node(service): """Refresh all node info.""" node_id = service.data.get(const.ATTR_NODE_ID) - node = NETWORK.nodes[node_id] + node = network.nodes[node_id] node.refresh_info() def start_zwave(_service_or_event): """Startup Z-Wave network.""" _LOGGER.info("Starting ZWave network.") - NETWORK.start() + network.start() hass.bus.fire(const.EVENT_NETWORK_START) # Need to be in STATE_AWAKED before talking to nodes. @@ -514,8 +511,9 @@ def setup(hass, config): # to be ready. for i in range(const.NETWORK_READY_WAIT_SECS): _LOGGER.debug( - "network state: %d %s", NETWORK.state, NETWORK.state_str) - if NETWORK.state >= NETWORK.STATE_AWAKED: + "network state: %d %s", hass.data[ZWAVE_NETWORK].state, + network.state_str) + if network.state >= network.STATE_AWAKED: _LOGGER.info("zwave ready after %d seconds", i) break time.sleep(1) @@ -524,14 +522,15 @@ def setup(hass, config): "zwave not ready after %d seconds, continuing anyway", const.NETWORK_READY_WAIT_SECS) _LOGGER.info( - "final network state: %d %s", NETWORK.state, NETWORK.state_str) + "final network state: %d %s", network.state, + network.state_str) polling_interval = convert( config[DOMAIN].get(CONF_POLLING_INTERVAL), int) if polling_interval is not None: - NETWORK.set_poll_interval(polling_interval, False) + network.set_poll_interval(polling_interval, False) - poll_interval = NETWORK.get_poll_interval() + poll_interval = network.get_poll_interval() _LOGGER.info("zwave polling interval set to %d ms", poll_interval) hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, stop_network) diff --git a/homeassistant/components/zwave/node_entity.py b/homeassistant/components/zwave/node_entity.py index 0ec699b8ee6..d0c75dd0b73 100644 --- a/homeassistant/components/zwave/node_entity.py +++ b/homeassistant/components/zwave/node_entity.py @@ -22,6 +22,10 @@ _REQUIRED_ATTRIBUTES = [ ATTR_QUERY_STAGE, ATTR_AWAKE, ATTR_READY, ATTR_FAILED, 'is_info_received', 'max_baud_rate', 'is_zwave_plus'] _OPTIONAL_ATTRIBUTES = ['capabilities', 'neighbors', 'location'] +_COMM_ATTRIBUTES = [ + 'sentCnt', 'sentFailed', 'retries', 'receivedCnt', 'receivedDups', + 'receivedUnsolicited', 'sentTS', 'receivedTS', 'lastRequestRTT', + 'averageRequestRTT', 'lastResponseRTT', 'averageResponseRTT'] ATTRIBUTES = _REQUIRED_ATTRIBUTES + _OPTIONAL_ATTRIBUTES @@ -65,12 +69,13 @@ def sub_status(status, stage): class ZWaveNodeEntity(ZWaveBaseEntity): """Representation of a Z-Wave node.""" - def __init__(self, node): + def __init__(self, node, network): """Initialize node.""" # pylint: disable=import-error super().__init__() from openzwave.network import ZWaveNetwork from pydispatch import dispatcher + self._network = network self.node = node self.node_id = self.node.node_id self._name = node_name(self.node) @@ -95,13 +100,22 @@ class ZWaveNodeEntity(ZWaveBaseEntity): return self.node_changed() + def get_node_statistics(self): + """Retrieve statistics from the node.""" + return self._network.manager.getNodeStatistics(self._network.home_id, + self.node_id) + def node_changed(self): """Update node properties.""" self._attributes = {} + stats = self.get_node_statistics() + for attr in ATTRIBUTES: value = getattr(self.node, attr) if attr in _REQUIRED_ATTRIBUTES or value: self._attributes[attr] = value + for attr in _COMM_ATTRIBUTES: + self._attributes[attr] = stats[attr] if self.node.can_wake_up(): for value in self.node.get_values(COMMAND_CLASS_WAKE_UP).values(): @@ -152,4 +166,5 @@ class ZWaveNodeEntity(ZWaveBaseEntity): attrs[ATTR_BATTERY_LEVEL] = self.battery_level if self.wakeup_interval is not None: attrs[ATTR_WAKEUP] = self.wakeup_interval + return attrs diff --git a/tests/components/cover/test_zwave.py b/tests/components/cover/test_zwave.py index 425331ff35c..aebc04c2d4c 100644 --- a/tests/components/cover/test_zwave.py +++ b/tests/components/cover/test_zwave.py @@ -1,5 +1,5 @@ """Test Z-Wave cover devices.""" -from unittest.mock import patch +from unittest.mock import MagicMock from homeassistant.components.cover import zwave, SUPPORT_OPEN, SUPPORT_CLOSE from homeassistant.components.zwave import const @@ -8,58 +8,66 @@ from tests.mock.zwave import ( MockNode, MockValue, MockEntityValues, value_changed) -def test_get_device_detects_none(mock_openzwave): +def test_get_device_detects_none(hass, mock_openzwave): """Test device returns none.""" node = MockNode() value = MockValue(data=0, node=node) values = MockEntityValues(primary=value, node=node) - device = zwave.get_device(node=node, values=values, node_config={}) + device = zwave.get_device(hass=hass, node=node, values=values, + node_config={}) assert device is None -def test_get_device_detects_rollershutter(mock_openzwave): +def test_get_device_detects_rollershutter(hass, mock_openzwave): """Test device returns rollershutter.""" + hass.data[zwave.zwave.ZWAVE_NETWORK] = MagicMock() node = MockNode() value = MockValue(data=0, node=node, command_class=const.COMMAND_CLASS_SWITCH_MULTILEVEL) values = MockEntityValues(primary=value, open=None, close=None, node=node) - device = zwave.get_device(node=node, values=values, node_config={}) + device = zwave.get_device(hass=hass, node=node, values=values, + node_config={}) assert isinstance(device, zwave.ZwaveRollershutter) -def test_get_device_detects_garagedoor(mock_openzwave): +def test_get_device_detects_garagedoor(hass, mock_openzwave): """Test device returns garage door.""" node = MockNode() value = MockValue(data=0, node=node, command_class=const.COMMAND_CLASS_BARRIER_OPERATOR) values = MockEntityValues(primary=value, node=node) - device = zwave.get_device(node=node, values=values, node_config={}) + device = zwave.get_device(hass=hass, node=node, values=values, + node_config={}) assert isinstance(device, zwave.ZwaveGarageDoor) assert device.device_class == "garage" assert device.supported_features == SUPPORT_OPEN | SUPPORT_CLOSE -def test_roller_no_position_workaround(mock_openzwave): +def test_roller_no_position_workaround(hass, mock_openzwave): """Test position changed.""" + hass.data[zwave.zwave.ZWAVE_NETWORK] = MagicMock() node = MockNode(manufacturer_id='0047', product_type='5a52') value = MockValue(data=45, node=node, command_class=const.COMMAND_CLASS_SWITCH_MULTILEVEL) values = MockEntityValues(primary=value, open=None, close=None, node=node) - device = zwave.get_device(node=node, values=values, node_config={}) + device = zwave.get_device(hass=hass, node=node, values=values, + node_config={}) assert device.current_cover_position is None -def test_roller_value_changed(mock_openzwave): +def test_roller_value_changed(hass, mock_openzwave): """Test position changed.""" + hass.data[zwave.zwave.ZWAVE_NETWORK] = MagicMock() node = MockNode() value = MockValue(data=None, node=node, command_class=const.COMMAND_CLASS_SWITCH_MULTILEVEL) values = MockEntityValues(primary=value, open=None, close=None, node=node) - device = zwave.get_device(node=node, values=values, node_config={}) + device = zwave.get_device(hass=hass, node=node, values=values, + node_config={}) assert device.current_cover_position is None assert device.is_closed is None @@ -83,9 +91,9 @@ def test_roller_value_changed(mock_openzwave): assert not device.is_closed -@patch('homeassistant.components.zwave.NETWORK') -def test_roller_commands(mock_network, mock_openzwave): +def test_roller_commands(hass, mock_openzwave): """Test position changed.""" + mock_network = hass.data[zwave.zwave.ZWAVE_NETWORK] = MagicMock() node = MockNode() value = MockValue(data=50, node=node, command_class=const.COMMAND_CLASS_SWITCH_MULTILEVEL) @@ -93,7 +101,8 @@ def test_roller_commands(mock_network, mock_openzwave): close_value = MockValue(data=False, node=node) values = MockEntityValues(primary=value, open=open_value, close=close_value, node=node) - device = zwave.get_device(node=node, values=values, node_config={}) + device = zwave.get_device(hass=hass, node=node, values=values, + node_config={}) device.set_cover_position(25) assert node.set_dimmer.called @@ -117,9 +126,9 @@ def test_roller_commands(mock_network, mock_openzwave): assert value_id == open_value.value_id -@patch('homeassistant.components.zwave.NETWORK') -def test_roller_reverse_open_close(mock_network, mock_openzwave): +def test_roller_reverse_open_close(hass, mock_openzwave): """Test position changed.""" + mock_network = hass.data[zwave.zwave.ZWAVE_NETWORK] = MagicMock() node = MockNode() value = MockValue(data=50, node=node, command_class=const.COMMAND_CLASS_SWITCH_MULTILEVEL) @@ -128,6 +137,7 @@ def test_roller_reverse_open_close(mock_network, mock_openzwave): values = MockEntityValues(primary=value, open=open_value, close=close_value, node=node) device = zwave.get_device( + hass=hass, node=node, values=values, node_config={zwave.zwave.CONF_INVERT_OPENCLOSE_BUTTONS: True}) @@ -148,13 +158,14 @@ def test_roller_reverse_open_close(mock_network, mock_openzwave): assert value_id == close_value.value_id -def test_garage_value_changed(mock_openzwave): +def test_garage_value_changed(hass, mock_openzwave): """Test position changed.""" node = MockNode() value = MockValue(data=False, node=node, command_class=const.COMMAND_CLASS_BARRIER_OPERATOR) values = MockEntityValues(primary=value, node=node) - device = zwave.get_device(node=node, values=values, node_config={}) + device = zwave.get_device(hass=hass, node=node, values=values, + node_config={}) assert device.is_closed @@ -164,13 +175,14 @@ def test_garage_value_changed(mock_openzwave): assert not device.is_closed -def test_garage_commands(mock_openzwave): +def test_garage_commands(hass, mock_openzwave): """Test position changed.""" node = MockNode() value = MockValue(data=False, node=node, command_class=const.COMMAND_CLASS_BARRIER_OPERATOR) values = MockEntityValues(primary=value, node=node) - device = zwave.get_device(node=node, values=values, node_config={}) + device = zwave.get_device(hass=hass, node=node, values=values, + node_config={}) assert value.data is False device.open_cover() diff --git a/tests/components/lock/test_zwave.py b/tests/components/lock/test_zwave.py index 33cc2e61483..9fb634f49e2 100644 --- a/tests/components/lock/test_zwave.py +++ b/tests/components/lock/test_zwave.py @@ -7,7 +7,7 @@ from homeassistant.components.lock import zwave from homeassistant.components.zwave import const from tests.mock.zwave import ( - MockNode, MockValue, MockEntityValues, value_changed) + MockNode, MockValue, MockEntityValues, value_changed) def test_get_device_detects_lock(mock_openzwave): @@ -171,6 +171,7 @@ def test_lock_alarm_level(mock_openzwave): @asyncio.coroutine def test_lock_set_usercode_service(hass, mock_openzwave): """Test the zwave lock set_usercode service.""" + mock_network = hass.data[zwave.zwave.ZWAVE_NETWORK] = MagicMock() node = MockNode(node_id=12) value0 = MockValue(data=None, node=node, index=0) value1 = MockValue(data=None, node=node, index=1) @@ -182,31 +183,29 @@ def test_lock_set_usercode_service(hass, mock_openzwave): value1.value_id: value1, } - with patch.object(zwave.zwave, 'NETWORK') as mock_network: - mock_network.nodes = { - node.node_id: node - } - yield from hass.services.async_call( - zwave.DOMAIN, zwave.SERVICE_SET_USERCODE, { - const.ATTR_NODE_ID: node.node_id, - zwave.ATTR_USERCODE: '1234', - zwave.ATTR_CODE_SLOT: 1, - }) - yield from hass.async_block_till_done() + mock_network.nodes = { + node.node_id: node + } + yield from hass.services.async_call( + zwave.DOMAIN, zwave.SERVICE_SET_USERCODE, { + const.ATTR_NODE_ID: node.node_id, + zwave.ATTR_USERCODE: '1234', + zwave.ATTR_CODE_SLOT: 1, + }) + yield from hass.async_block_till_done() assert value1.data == '1234' - with patch.object(zwave.zwave, 'NETWORK') as mock_network: - mock_network.nodes = { - node.node_id: node - } - yield from hass.services.async_call( - zwave.DOMAIN, zwave.SERVICE_SET_USERCODE, { - const.ATTR_NODE_ID: node.node_id, - zwave.ATTR_USERCODE: '12345', - zwave.ATTR_CODE_SLOT: 1, - }) - yield from hass.async_block_till_done() + mock_network.nodes = { + node.node_id: node + } + yield from hass.services.async_call( + zwave.DOMAIN, zwave.SERVICE_SET_USERCODE, { + const.ATTR_NODE_ID: node.node_id, + zwave.ATTR_USERCODE: '12345', + zwave.ATTR_CODE_SLOT: 1, + }) + yield from hass.async_block_till_done() assert value1.data == '1234' @@ -214,6 +213,7 @@ def test_lock_set_usercode_service(hass, mock_openzwave): @asyncio.coroutine def test_lock_get_usercode_service(hass, mock_openzwave): """Test the zwave lock get_usercode service.""" + mock_network = hass.data[zwave.zwave.ZWAVE_NETWORK] = MagicMock() node = MockNode(node_id=12) value0 = MockValue(data=None, node=node, index=0) value1 = MockValue(data='1234', node=node, index=1) @@ -225,27 +225,24 @@ def test_lock_get_usercode_service(hass, mock_openzwave): value1.value_id: value1, } - with patch.object(zwave.zwave, 'NETWORK') as mock_network: - with patch.object(zwave, '_LOGGER') as mock_logger: - mock_network.nodes = { - node.node_id: node - } - yield from hass.services.async_call( - zwave.DOMAIN, zwave.SERVICE_GET_USERCODE, { - const.ATTR_NODE_ID: node.node_id, - zwave.ATTR_CODE_SLOT: 1, - }) - yield from hass.async_block_till_done() - - # This service only seems to write to the log - assert mock_logger.info.called - assert len(mock_logger.info.mock_calls) == 1 - assert mock_logger.info.mock_calls[0][1][2] == '1234' + with patch.object(zwave, '_LOGGER') as mock_logger: + mock_network.nodes = {node.node_id: node} + yield from hass.services.async_call( + zwave.DOMAIN, zwave.SERVICE_GET_USERCODE, { + const.ATTR_NODE_ID: node.node_id, + zwave.ATTR_CODE_SLOT: 1, + }) + yield from hass.async_block_till_done() + # This service only seems to write to the log + assert mock_logger.info.called + assert len(mock_logger.info.mock_calls) == 1 + assert mock_logger.info.mock_calls[0][1][2] == '1234' @asyncio.coroutine def test_lock_clear_usercode_service(hass, mock_openzwave): """Test the zwave lock clear_usercode service.""" + mock_network = hass.data[zwave.zwave.ZWAVE_NETWORK] = MagicMock() node = MockNode(node_id=12) value0 = MockValue(data=None, node=node, index=0) value1 = MockValue(data='123', node=node, index=1) @@ -257,15 +254,14 @@ def test_lock_clear_usercode_service(hass, mock_openzwave): value1.value_id: value1, } - with patch.object(zwave.zwave, 'NETWORK') as mock_network: - mock_network.nodes = { - node.node_id: node - } - yield from hass.services.async_call( - zwave.DOMAIN, zwave.SERVICE_CLEAR_USERCODE, { - const.ATTR_NODE_ID: node.node_id, - zwave.ATTR_CODE_SLOT: 1 - }) - yield from hass.async_block_till_done() + mock_network.nodes = { + node.node_id: node + } + yield from hass.services.async_call( + zwave.DOMAIN, zwave.SERVICE_CLEAR_USERCODE, { + const.ATTR_NODE_ID: node.node_id, + zwave.ATTR_CODE_SLOT: 1 + }) + yield from hass.async_block_till_done() assert value1.data == '\0\0\0' diff --git a/tests/components/zwave/test_init.py b/tests/components/zwave/test_init.py index 2e80e5b5331..91902f9c4a8 100644 --- a/tests/components/zwave/test_init.py +++ b/tests/components/zwave/test_init.py @@ -7,7 +7,7 @@ from homeassistant.const import ATTR_ENTITY_ID, EVENT_HOMEASSISTANT_START from homeassistant.components import zwave from homeassistant.components.binary_sensor.zwave import get_device from homeassistant.components.zwave import ( - const, CONFIG_SCHEMA, CONF_DEVICE_CONFIG_GLOB) + const, CONFIG_SCHEMA, CONF_DEVICE_CONFIG_GLOB, ZWAVE_NETWORK) from homeassistant.setup import setup_component import pytest @@ -70,10 +70,10 @@ def test_config_access_error(): @asyncio.coroutine -@patch.object(zwave, 'NETWORK') -def test_setup_platform(mock_network, hass, mock_openzwave): +def test_setup_platform(hass, mock_openzwave): """Test invalid device config.""" mock_device = MagicMock() + hass.data[ZWAVE_NETWORK] = MagicMock() hass.data[zwave.DATA_ZWAVE_DICT] = {456: mock_device} async_add_devices = MagicMock() @@ -104,7 +104,7 @@ def test_zwave_ready_wait(hass, mock_openzwave): with patch.object(zwave.time, 'sleep') as mock_sleep: with patch.object(zwave, '_LOGGER') as mock_logger: - zwave.NETWORK.state = MockNetwork.STATE_STARTED + hass.data[ZWAVE_NETWORK].state = MockNetwork.STATE_STARTED hass.bus.async_fire(EVENT_HOMEASSISTANT_START) yield from hass.async_block_till_done() @@ -473,12 +473,15 @@ class TestZWaveServices(unittest.TestCase): # Initialize zwave setup_component(self.hass, 'zwave', {'zwave': {}}) self.hass.block_till_done() - zwave.NETWORK.state = MockNetwork.STATE_READY + self.zwave_network = self.hass.data[ZWAVE_NETWORK] + self.zwave_network.state = MockNetwork.STATE_READY self.hass.bus.fire(EVENT_HOMEASSISTANT_START) self.hass.block_till_done() def tearDown(self): # pylint: disable=invalid-name """Stop everything that was started.""" + self.hass.services.call('zwave', 'stop_network', {}) + self.hass.block_till_done() self.hass.stop() def test_add_node(self): @@ -486,58 +489,62 @@ class TestZWaveServices(unittest.TestCase): self.hass.services.call('zwave', 'add_node', {}) self.hass.block_till_done() - assert zwave.NETWORK.controller.add_node.called - assert len(zwave.NETWORK.controller.add_node.mock_calls) == 1 - assert len(zwave.NETWORK.controller.add_node.mock_calls[0][1]) == 0 + assert self.zwave_network.controller.add_node.called + assert len(self.zwave_network.controller + .add_node.mock_calls) == 1 + assert len(self.zwave_network.controller + .add_node.mock_calls[0][1]) == 0 def test_add_node_secure(self): """Test zwave add_node_secure service.""" self.hass.services.call('zwave', 'add_node_secure', {}) self.hass.block_till_done() - assert zwave.NETWORK.controller.add_node.called - assert len(zwave.NETWORK.controller.add_node.mock_calls) == 1 - assert zwave.NETWORK.controller.add_node.mock_calls[0][1][0] is True + assert self.zwave_network.controller.add_node.called + assert len(self.zwave_network.controller.add_node.mock_calls) == 1 + assert (self.zwave_network.controller + .add_node.mock_calls[0][1][0] is True) def test_remove_node(self): """Test zwave remove_node service.""" self.hass.services.call('zwave', 'remove_node', {}) self.hass.block_till_done() - assert zwave.NETWORK.controller.remove_node.called - assert len(zwave.NETWORK.controller.remove_node.mock_calls) == 1 + assert self.zwave_network.controller.remove_node.called + assert len(self.zwave_network.controller.remove_node.mock_calls) == 1 def test_cancel_command(self): """Test zwave cancel_command service.""" self.hass.services.call('zwave', 'cancel_command', {}) self.hass.block_till_done() - assert zwave.NETWORK.controller.cancel_command.called - assert len(zwave.NETWORK.controller.cancel_command.mock_calls) == 1 + assert self.zwave_network.controller.cancel_command.called + assert len(self.zwave_network.controller + .cancel_command.mock_calls) == 1 def test_heal_network(self): """Test zwave heal_network service.""" self.hass.services.call('zwave', 'heal_network', {}) self.hass.block_till_done() - assert zwave.NETWORK.heal.called - assert len(zwave.NETWORK.heal.mock_calls) == 1 + assert self.zwave_network.heal.called + assert len(self.zwave_network.heal.mock_calls) == 1 def test_soft_reset(self): """Test zwave soft_reset service.""" self.hass.services.call('zwave', 'soft_reset', {}) self.hass.block_till_done() - assert zwave.NETWORK.controller.soft_reset.called - assert len(zwave.NETWORK.controller.soft_reset.mock_calls) == 1 + assert self.zwave_network.controller.soft_reset.called + assert len(self.zwave_network.controller.soft_reset.mock_calls) == 1 def test_test_network(self): """Test zwave test_network service.""" self.hass.services.call('zwave', 'test_network', {}) self.hass.block_till_done() - assert zwave.NETWORK.test.called - assert len(zwave.NETWORK.test.mock_calls) == 1 + assert self.zwave_network.test.called + assert len(self.zwave_network.test.mock_calls) == 1 def test_stop_network(self): """Test zwave stop_network service.""" @@ -545,22 +552,22 @@ class TestZWaveServices(unittest.TestCase): self.hass.services.call('zwave', 'stop_network', {}) self.hass.block_till_done() - assert zwave.NETWORK.stop.called - assert len(zwave.NETWORK.stop.mock_calls) == 1 + assert self.zwave_network.stop.called + assert len(self.zwave_network.stop.mock_calls) == 1 assert mock_fire.called assert len(mock_fire.mock_calls) == 2 assert mock_fire.mock_calls[0][1][0] == const.EVENT_NETWORK_STOP def test_rename_node(self): """Test zwave rename_node service.""" - zwave.NETWORK.nodes = {11: MagicMock()} + self.zwave_network.nodes = {11: MagicMock()} self.hass.services.call('zwave', 'rename_node', { const.ATTR_NODE_ID: 11, const.ATTR_NAME: 'test_name', }) self.hass.block_till_done() - assert zwave.NETWORK.nodes[11].name == 'test_name' + assert self.zwave_network.nodes[11].name == 'test_name' def test_remove_failed_node(self): """Test zwave remove_failed_node service.""" @@ -569,7 +576,7 @@ class TestZWaveServices(unittest.TestCase): }) self.hass.block_till_done() - remove_failed_node = zwave.NETWORK.controller.remove_failed_node + remove_failed_node = self.zwave_network.controller.remove_failed_node assert remove_failed_node.called assert len(remove_failed_node.mock_calls) == 1 assert remove_failed_node.mock_calls[0][1][0] == 12 @@ -581,7 +588,7 @@ class TestZWaveServices(unittest.TestCase): }) self.hass.block_till_done() - replace_failed_node = zwave.NETWORK.controller.replace_failed_node + replace_failed_node = self.zwave_network.controller.replace_failed_node assert replace_failed_node.called assert len(replace_failed_node.mock_calls) == 1 assert replace_failed_node.mock_calls[0][1][0] == 13 @@ -600,7 +607,7 @@ class TestZWaveServices(unittest.TestCase): ) node = MockNode(node_id=14) node.get_values.return_value = {12: value, 13: value_list} - zwave.NETWORK.nodes = {14: node} + self.zwave_network.nodes = {14: node} self.hass.services.call('zwave', 'set_config_parameter', { const.ATTR_NODE_ID: 14, @@ -655,7 +662,7 @@ class TestZWaveServices(unittest.TestCase): ) node = MockNode(node_id=14) node.values = {12: value1, 13: value2} - zwave.NETWORK.nodes = {14: node} + self.zwave_network.nodes = {14: node} with patch.object(zwave, '_LOGGER') as mock_logger: self.hass.services.call('zwave', 'print_config_parameter', { @@ -674,7 +681,7 @@ class TestZWaveServices(unittest.TestCase): """Test zwave print_config_parameter service.""" node1 = MockNode(node_id=14) node2 = MockNode(node_id=15) - zwave.NETWORK.nodes = {14: node1, 15: node2} + self.zwave_network.nodes = {14: node1, 15: node2} with patch.object(zwave, 'pprint') as mock_pprint: self.hass.services.call('zwave', 'print_node', { @@ -695,7 +702,7 @@ class TestZWaveServices(unittest.TestCase): node = MockNode(node_id=14) node.values = {12: value} node.get_values.return_value = node.values - zwave.NETWORK.nodes = {14: node} + self.zwave_network.nodes = {14: node} self.hass.services.call('zwave', 'set_wakeup', { const.ATTR_NODE_ID: 14, @@ -727,7 +734,7 @@ class TestZWaveServices(unittest.TestCase): node = MockNode(node_id=14) node.values = {12: value} node.get_values.return_value = node.values - zwave.NETWORK.nodes = {14: node} + self.zwave_network.nodes = {14: node} self.hass.services.call('zwave', 'change_association', { const.ATTR_ASSOCIATION: 'add', @@ -760,7 +767,7 @@ class TestZWaveServices(unittest.TestCase): node = MockNode(node_id=14) node.values = {12: value} node.get_values.return_value = node.values - zwave.NETWORK.nodes = {14: node} + self.zwave_network.nodes = {14: node} self.hass.services.call('zwave', 'change_association', { const.ATTR_ASSOCIATION: 'remove', @@ -808,7 +815,7 @@ class TestZWaveServices(unittest.TestCase): def test_refresh_node(self): """Test zwave refresh_node service.""" node = MockNode(node_id=14) - zwave.NETWORK.nodes = {14: node} + self.zwave_network.nodes = {14: node} self.hass.services.call('zwave', 'refresh_node', { const.ATTR_NODE_ID: 14, }) diff --git a/tests/components/zwave/test_node_entity.py b/tests/components/zwave/test_node_entity.py index c171155404f..223f8f8c419 100644 --- a/tests/components/zwave/test_node_entity.py +++ b/tests/components/zwave/test_node_entity.py @@ -1,7 +1,7 @@ """Test Z-Wave node entity.""" import asyncio import unittest -from unittest.mock import patch +from unittest.mock import patch, MagicMock import tests.mock.zwave as mock_zwave import pytest from homeassistant.components.zwave import node_entity @@ -36,11 +36,13 @@ class TestZWaveNodeEntity(unittest.TestCase): def setUp(self): """Initialize values for this testcase class.""" + self.zwave_network = MagicMock() self.node = mock_zwave.MockNode( query_stage='Dynamic', is_awake=True, is_ready=False, is_failed=False, is_info_received=True, max_baud_rate=40000, is_zwave_plus=False, capabilities=[], neighbors=[], location=None) - self.entity = node_entity.ZWaveNodeEntity(self.node) + self.entity = node_entity.ZWaveNodeEntity(self.node, + self.zwave_network) def test_network_node_changed_from_value(self): """Test for network_node_changed.""" @@ -76,14 +78,61 @@ class TestZWaveNodeEntity(unittest.TestCase): def test_node_changed(self): """Test node_changed function.""" + self.maxDiff = None self.assertEqual({'node_id': self.node.node_id}, self.entity.device_state_attributes) self.node.get_values.return_value = { 1: mock_zwave.MockValue(data=1800) } + self.zwave_network.manager.getNodeStatistics.return_value = { + "receivedCnt": 4, "ccData": [{"receivedCnt": 0, + "commandClassId": 134, + "sentCnt": 0}, + {"receivedCnt": 1, + "commandClassId": 133, + "sentCnt": 1}, + {"receivedCnt": 1, + "commandClassId": 115, + "sentCnt": 1}, + {"receivedCnt": 0, + "commandClassId": 114, + "sentCnt": 0}, + {"receivedCnt": 0, + "commandClassId": 112, + "sentCnt": 0}, + {"receivedCnt": 1, + "commandClassId": 32, + "sentCnt": 1}, + {"receivedCnt": 0, + "commandClassId": 0, + "sentCnt": 0}], + "receivedUnsolicited": 0, + "sentTS": "2017-03-27 15:38:15:620 ", "averageRequestRTT": 2462, + "lastResponseRTT": 3679, "retries": 0, "sentFailed": 1, + "sentCnt": 7, "quality": 0, "lastRequestRTT": 1591, + "lastReceivedMessage": [0, 4, 0, 15, 3, 32, 3, 0, 221, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0], "receivedDups": 1, + "averageResponseRTT": 2443, + "receivedTS": "2017-03-27 15:38:19:298 "} self.entity.node_changed() - self.assertEqual( {'node_id': self.node.node_id, 'query_stage': 'Dynamic', @@ -94,7 +143,19 @@ class TestZWaveNodeEntity(unittest.TestCase): 'max_baud_rate': 40000, 'is_zwave_plus': False, 'battery_level': 42, - 'wake_up_interval': 1800}, + 'wake_up_interval': 1800, + 'averageRequestRTT': 2462, + 'averageResponseRTT': 2443, + 'lastRequestRTT': 1591, + 'lastResponseRTT': 3679, + 'receivedCnt': 4, + 'receivedDups': 1, + 'receivedTS': '2017-03-27 15:38:19:298 ', + 'receivedUnsolicited': 0, + 'retries': 0, + 'sentCnt': 7, + 'sentFailed': 1, + 'sentTS': '2017-03-27 15:38:15:620 '}, self.entity.device_state_attributes) self.node.can_wake_up_value = False From 5e18c997f7df6742cf4ac2f84b306e1099ac8858 Mon Sep 17 00:00:00 2001 From: Andrey Date: Wed, 12 Apr 2017 21:12:37 +0300 Subject: [PATCH 062/146] Add product_name attribute to zwave nodes. (#7071) --- homeassistant/components/zwave/node_entity.py | 4 ++++ tests/components/zwave/test_node_entity.py | 9 +++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/zwave/node_entity.py b/homeassistant/components/zwave/node_entity.py index d0c75dd0b73..01c9e39ac5e 100644 --- a/homeassistant/components/zwave/node_entity.py +++ b/homeassistant/components/zwave/node_entity.py @@ -15,6 +15,7 @@ ATTR_QUERY_STAGE = 'query_stage' ATTR_AWAKE = 'is_awake' ATTR_READY = 'is_ready' ATTR_FAILED = 'is_failed' +ATTR_PRODUCT_NAME = 'product_name' STAGE_COMPLETE = 'Complete' @@ -79,6 +80,8 @@ class ZWaveNodeEntity(ZWaveBaseEntity): self.node = node self.node_id = self.node.node_id self._name = node_name(self.node) + self._product_name = '{} {}'.format( + node.manufacturer_name, node.product_name) self.entity_id = "{}.{}_{}".format( DOMAIN, slugify(self._name), self.node_id) self._attributes = {} @@ -160,6 +163,7 @@ class ZWaveNodeEntity(ZWaveBaseEntity): """Return the device specific state attributes.""" attrs = { ATTR_NODE_ID: self.node_id, + ATTR_PRODUCT_NAME: self._product_name, } attrs.update(self._attributes) if self.battery_level is not None: diff --git a/tests/components/zwave/test_node_entity.py b/tests/components/zwave/test_node_entity.py index 223f8f8c419..0d57a973c31 100644 --- a/tests/components/zwave/test_node_entity.py +++ b/tests/components/zwave/test_node_entity.py @@ -41,6 +41,8 @@ class TestZWaveNodeEntity(unittest.TestCase): query_stage='Dynamic', is_awake=True, is_ready=False, is_failed=False, is_info_received=True, max_baud_rate=40000, is_zwave_plus=False, capabilities=[], neighbors=[], location=None) + self.node.manufacturer_name = 'Test Manufacturer' + self.node.product_name = 'Test Product' self.entity = node_entity.ZWaveNodeEntity(self.node, self.zwave_network) @@ -79,8 +81,10 @@ class TestZWaveNodeEntity(unittest.TestCase): def test_node_changed(self): """Test node_changed function.""" self.maxDiff = None - self.assertEqual({'node_id': self.node.node_id}, - self.entity.device_state_attributes) + self.assertEqual( + {'node_id': self.node.node_id, + 'product_name': 'Test Manufacturer Test Product'}, + self.entity.device_state_attributes) self.node.get_values.return_value = { 1: mock_zwave.MockValue(data=1800) @@ -135,6 +139,7 @@ class TestZWaveNodeEntity(unittest.TestCase): self.entity.node_changed() self.assertEqual( {'node_id': self.node.node_id, + 'product_name': 'Test Manufacturer Test Product', 'query_stage': 'Dynamic', 'is_awake': True, 'is_ready': False, From 34cb02177d09f270528577b23a10ee47a93a184c Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Wed, 12 Apr 2017 18:22:23 -0700 Subject: [PATCH 063/146] Bump braviarc version to 0.3.7 (#7078) --- homeassistant/components/media_player/braviatv.py | 4 ++-- requirements_all.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/media_player/braviatv.py b/homeassistant/components/media_player/braviatv.py index d6e7261ec4f..fbfc207c59a 100644 --- a/homeassistant/components/media_player/braviatv.py +++ b/homeassistant/components/media_player/braviatv.py @@ -21,8 +21,8 @@ from homeassistant.const import (CONF_HOST, CONF_NAME, STATE_OFF, STATE_ON) import homeassistant.helpers.config_validation as cv REQUIREMENTS = [ - 'https://github.com/aparraga/braviarc/archive/0.3.6.zip' - '#braviarc==0.3.6'] + 'https://github.com/aparraga/braviarc/archive/0.3.7.zip' + '#braviarc==0.3.7'] BRAVIA_CONFIG_FILE = 'bravia.conf' diff --git a/requirements_all.txt b/requirements_all.txt index cbecf913943..6a5d5d6343a 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -251,7 +251,7 @@ https://github.com/TheRealLink/pylgtv/archive/v0.1.4.zip#pylgtv==0.1.4 https://github.com/TheRealLink/pythinkingcleaner/archive/v0.0.2.zip#pythinkingcleaner==0.0.2 # homeassistant.components.media_player.braviatv -https://github.com/aparraga/braviarc/archive/0.3.6.zip#braviarc==0.3.6 +https://github.com/aparraga/braviarc/archive/0.3.7.zip#braviarc==0.3.7 # homeassistant.components.cover.myq https://github.com/arraylabs/pymyq/archive/v0.0.8.zip#pymyq==0.0.8 From 9a9342ec3f0d69e24ec5b6d9fc8c21787de2a34f Mon Sep 17 00:00:00 2001 From: Thibault Cohen Date: Thu, 13 Apr 2017 01:42:48 -0400 Subject: [PATCH 064/146] Fix account balance in fido sensor (#7077) --- homeassistant/components/sensor/fido.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/sensor/fido.py b/homeassistant/components/sensor/fido.py index 70876cca1c2..5deb00db67b 100644 --- a/homeassistant/components/sensor/fido.py +++ b/homeassistant/components/sensor/fido.py @@ -153,7 +153,7 @@ class FidoSensor(Entity): def update(self): """Get the latest data from Fido and update the state.""" self.fido_data.update() - if self._name == 'balance': + if self.type == 'balance': if self.fido_data.data.get(self.type) is not None: self._state = round(self.fido_data.data[self.type], 2) else: From fa65783f393068cd44da283fc5c6a76bf8a996b3 Mon Sep 17 00:00:00 2001 From: Gianluca Barbaro Date: Thu, 13 Apr 2017 16:38:09 +0200 Subject: [PATCH 065/146] MQTT: Managing binary payloads (#6976) * Managing binary payloads Hello, background: I wrote a HA camera component that gets the image from a binary payload. I'm testing it with Zanzito (https://play.google.com/store/apps/details?id=it.barbaro.zanzito) and it works apparently well: it gets the image and correctly displays it in the front-end. But I had to make the changes I'm proposing here: the message was being blocked because the utf-8 decoding failed. As far as I know, the utf-8 encoding is required for the topic, not for the payload. What I did here was try the utf-8 decoding, but even if unsuccessful, it dispatches the message anyway. Is there anything else I'm missing? thanks Gianluca * Update __init__.py * Update __init__.py * Update __init__.py * git test - ignore * Should work * minor fixes * updated mqtt/services.yaml * added two tests, modified threaded subscribe * removing polymer * requested changes * requested changes - minor fix * security wrap around payload_file_path * services.yaml updated * removed file publishing * minor fix --- homeassistant/components/mqtt/__init__.py | 57 ++++++++++++--------- tests/common.py | 5 +- tests/components/mqtt/test_init.py | 60 ++++++++++------------- 3 files changed, 64 insertions(+), 58 deletions(-) diff --git a/homeassistant/components/mqtt/__init__.py b/homeassistant/components/mqtt/__init__.py index 0e8c666d147..2b6774939da 100644 --- a/homeassistant/components/mqtt/__init__.py +++ b/homeassistant/components/mqtt/__init__.py @@ -201,7 +201,8 @@ def publish_template(hass, topic, payload_template, qos=None, retain=None): @asyncio.coroutine -def async_subscribe(hass, topic, msg_callback, qos=DEFAULT_QOS): +def async_subscribe(hass, topic, msg_callback, qos=DEFAULT_QOS, + encoding='utf-8'): """Subscribe to an MQTT topic.""" @callback def async_mqtt_topic_subscriber(dp_topic, dp_payload, dp_qos): @@ -209,7 +210,21 @@ def async_subscribe(hass, topic, msg_callback, qos=DEFAULT_QOS): if not _match_topic(topic, dp_topic): return - hass.async_run_job(msg_callback, dp_topic, dp_payload, dp_qos) + if encoding is not None: + try: + payload = dp_payload.decode(encoding) + _LOGGER.debug("Received message on %s: %s", + dp_topic, payload) + except (AttributeError, UnicodeDecodeError): + _LOGGER.error("Illegal payload encoding %s from " + "MQTT topic: %s, Payload: %s", + encoding, dp_topic, dp_payload) + return + else: + _LOGGER.debug("Received binary message on %s", dp_topic) + payload = dp_payload + + hass.async_run_job(msg_callback, dp_topic, payload, dp_qos) async_remove = async_dispatcher_connect( hass, SIGNAL_MQTT_MESSAGE_RECEIVED, async_mqtt_topic_subscriber) @@ -218,10 +233,12 @@ def async_subscribe(hass, topic, msg_callback, qos=DEFAULT_QOS): return async_remove -def subscribe(hass, topic, msg_callback, qos=DEFAULT_QOS): +def subscribe(hass, topic, msg_callback, qos=DEFAULT_QOS, + encoding='utf-8'): """Subscribe to an MQTT topic.""" async_remove = run_coroutine_threadsafe( - async_subscribe(hass, topic, msg_callback, qos), + async_subscribe(hass, topic, msg_callback, + qos, encoding), hass.loop ).result() @@ -372,16 +389,16 @@ def async_setup(hass, config): payload_template = call.data.get(ATTR_PAYLOAD_TEMPLATE) qos = call.data[ATTR_QOS] retain = call.data[ATTR_RETAIN] - try: - if payload_template is not None: + if payload_template is not None: + try: payload = \ template.Template(payload_template, hass).async_render() - except template.jinja2.TemplateError as exc: - _LOGGER.error( - "Unable to publish to '%s': rendering payload template of " - "'%s' failed because %s", - msg_topic, payload_template, exc) - return + except template.jinja2.TemplateError as exc: + _LOGGER.error( + "Unable to publish to '%s': rendering payload template of " + "'%s' failed because %s", + msg_topic, payload_template, exc) + return yield from hass.data[DATA_MQTT].async_publish( msg_topic, payload, qos, retain) @@ -564,18 +581,10 @@ class MQTT(object): def _mqtt_on_message(self, _mqttc, _userdata, msg): """Message received callback.""" - try: - payload = msg.payload.decode('utf-8') - except (AttributeError, UnicodeDecodeError): - _LOGGER.error("Illegal utf-8 unicode payload from " - "MQTT topic: %s, Payload: %s", msg.topic, - msg.payload) - else: - _LOGGER.info("Received message on %s: %s", msg.topic, payload) - dispatcher_send( - self.hass, SIGNAL_MQTT_MESSAGE_RECEIVED, msg.topic, payload, - msg.qos - ) + dispatcher_send( + self.hass, SIGNAL_MQTT_MESSAGE_RECEIVED, msg.topic, msg.payload, + msg.qos + ) def _mqtt_on_unsubscribe(self, _mqttc, _userdata, mid, granted_qos): """Unsubscribe successful callback.""" diff --git a/tests/common.py b/tests/common.py index 03a4de235d7..a6627344879 100644 --- a/tests/common.py +++ b/tests/common.py @@ -170,8 +170,11 @@ def mock_service(hass, domain, service): @ha.callback def async_fire_mqtt_message(hass, topic, payload, qos=0): """Fire the MQTT message.""" + if isinstance(payload, str): + payload = payload.encode('utf-8') async_dispatcher_send( - hass, mqtt.SIGNAL_MQTT_MESSAGE_RECEIVED, topic, payload, qos) + hass, mqtt.SIGNAL_MQTT_MESSAGE_RECEIVED, topic, + payload, qos) def fire_mqtt_message(hass, topic, payload, qos=0): diff --git a/tests/components/mqtt/test_init.py b/tests/components/mqtt/test_init.py index f387c7c0bd7..0017674e82f 100644 --- a/tests/components/mqtt/test_init.py +++ b/tests/components/mqtt/test_init.py @@ -209,6 +209,31 @@ class TestMQTT(unittest.TestCase): self.hass.block_till_done() self.assertEqual(0, len(self.calls)) + def test_subscribe_binary_topic(self): + """Test the subscription to a binary topic.""" + mqtt.subscribe(self.hass, 'test-topic', self.record_calls, + 0, None) + + fire_mqtt_message(self.hass, 'test-topic', 0x9a) + + self.hass.block_till_done() + self.assertEqual(1, len(self.calls)) + self.assertEqual('test-topic', self.calls[0][0]) + self.assertEqual(0x9a, self.calls[0][1]) + + def test_receiving_non_utf8_message_gets_logged(self): + """Test receiving a non utf8 encoded message.""" + mqtt.subscribe(self.hass, 'test-topic', self.record_calls) + + with self.assertLogs(level='ERROR') as test_handle: + fire_mqtt_message(self.hass, 'test-topic', 0x9a) + self.hass.block_till_done() + self.assertIn( + "ERROR:homeassistant.components.mqtt:Illegal payload " + "encoding utf-8 from MQTT " + "topic: test-topic, Payload: 154", + test_handle.output[0]) + class TestMQTTCallbacks(unittest.TestCase): """Test the MQTT callbacks.""" @@ -255,7 +280,8 @@ class TestMQTTCallbacks(unittest.TestCase): self.assertEqual(1, len(calls)) last_event = calls[0] - self.assertEqual('Hello World!', last_event['payload']) + self.assertEqual(bytearray('Hello World!', 'utf-8'), + last_event['payload']) self.assertEqual(message.topic, last_event['topic']) self.assertEqual(message.qos, last_event['qos']) @@ -298,38 +324,6 @@ class TestMQTTCallbacks(unittest.TestCase): self.assertRaises(vol.Invalid, mqtt.valid_publish_topic, 'bad+topic') self.assertRaises(vol.Invalid, mqtt.valid_subscribe_topic, 'bad\0one') - def test_receiving_non_utf8_message_gets_logged(self): - """Test receiving a non utf8 encoded message.""" - calls = [] - - @callback - def record(topic, payload, qos): - """Helper to record calls.""" - data = { - 'topic': topic, - 'payload': payload, - 'qos': qos, - } - calls.append(data) - - async_dispatcher_connect( - self.hass, mqtt.SIGNAL_MQTT_MESSAGE_RECEIVED, record) - - payload = 0x9a - topic = 'test_topic' - MQTTMessage = namedtuple('MQTTMessage', ['topic', 'qos', 'payload']) - message = MQTTMessage(topic, 1, payload) - with self.assertLogs(level='ERROR') as test_handle: - self.hass.data['mqtt']._mqtt_on_message( - None, - {'hass': self.hass}, - message) - self.hass.block_till_done() - self.assertIn( - "ERROR:homeassistant.components.mqtt:Illegal utf-8 unicode " - "payload from MQTT topic: %s, Payload: " % topic, - test_handle.output[0]) - @asyncio.coroutine def test_setup_embedded_starts_with_no_config(hass): From 01c7616147a3f72c2405470c118fff696511e5f9 Mon Sep 17 00:00:00 2001 From: Colin O'Dell Date: Thu, 13 Apr 2017 10:39:36 -0400 Subject: [PATCH 066/146] Bump qnapstats library version to 0.2.4 (#7085) --- homeassistant/components/sensor/qnap.py | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/sensor/qnap.py b/homeassistant/components/sensor/qnap.py index b37cb432461..e57c59e41d6 100644 --- a/homeassistant/components/sensor/qnap.py +++ b/homeassistant/components/sensor/qnap.py @@ -18,7 +18,7 @@ import homeassistant.helpers.config_validation as cv import voluptuous as vol -REQUIREMENTS = ['qnapstats==0.2.3'] +REQUIREMENTS = ['qnapstats==0.2.4'] _LOGGER = logging.getLogger(__name__) diff --git a/requirements_all.txt b/requirements_all.txt index 6a5d5d6343a..0fd90e12d34 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -671,7 +671,7 @@ pywemo==0.4.17 pyzabbix==0.7.4 # homeassistant.components.sensor.qnap -qnapstats==0.2.3 +qnapstats==0.2.4 # homeassistant.components.climate.radiotherm radiotherm==1.2 From 38ad5714cd373ebbcfdbedabbac0707feb6c1453 Mon Sep 17 00:00:00 2001 From: John Arild Berentsen Date: Thu, 13 Apr 2017 16:41:25 +0200 Subject: [PATCH 067/146] Add support fo map data from Neato (#6939) * Responsiveness * Delay was not needed as commands does not return until done. * Add support for cleaning maps and cleaning data * Hound * Docstring * Update requirements * Review changes * External lib now returns the raw data. * debug * Sensor did not refresh * Error handling * Issue warning on connection error * Update requirements * Review changes --- homeassistant/components/camera/neato.py | 65 ++++++++++++++++++ homeassistant/components/neato.py | 14 +++- homeassistant/components/sensor/neato.py | 86 +++++++++++++++++++++--- homeassistant/components/switch/neato.py | 19 +++--- requirements_all.txt | 2 +- 5 files changed, 164 insertions(+), 22 deletions(-) create mode 100644 homeassistant/components/camera/neato.py diff --git a/homeassistant/components/camera/neato.py b/homeassistant/components/camera/neato.py new file mode 100644 index 00000000000..d6eafc36859 --- /dev/null +++ b/homeassistant/components/camera/neato.py @@ -0,0 +1,65 @@ +""" +Camera that loads a picture from a local file. + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/camera.neato/ +""" +import logging + +from datetime import timedelta +from homeassistant.components.camera import Camera +from homeassistant.components.neato import ( + NEATO_MAP_DATA, NEATO_ROBOTS, NEATO_LOGIN) +from homeassistant.util import Throttle + +_LOGGER = logging.getLogger(__name__) + +DEPENDENCIES = ['neato'] + + +def setup_platform(hass, config, add_devices, discovery_info=None): + """Setup the Camera.""" + dev = [] + for robot in hass.data[NEATO_ROBOTS]: + if 'maps' in robot.traits: + dev.append(NeatoCleaningMap(hass, robot)) + _LOGGER.debug('Adding robots for cleaning maps %s', dev) + add_devices(dev, True) + + +class NeatoCleaningMap(Camera): + """Neato cleaning map for last clean.""" + + def __init__(self, hass, robot): + """Initialize Neato cleaning map.""" + super().__init__() + self.robot = robot + self._robot_name = self.robot.name + ' Cleaning Map' + self._robot_serial = self.robot.serial + self.neato = hass.data[NEATO_LOGIN] + self._image_url = None + self._image = None + + def camera_image(self): + """Return image response.""" + self.update() + return self._image + + @Throttle(timedelta(seconds=10)) + def update(self): + """Check the contents of the map list.""" + self.neato.update_robots() + image_url = None + map_data = self.hass.data[NEATO_MAP_DATA] + image_url = map_data[self._robot_serial]['maps'][0]['url'] + if image_url == self._image_url: + _LOGGER.debug('The map image_url is the same as old') + return + image = self.neato.download_map(image_url) + self._image = image.read() + self._image_url = image_url + + @property + def name(self): + """Return the name of this camera.""" + return self._robot_name diff --git a/homeassistant/components/neato.py b/homeassistant/components/neato.py index e0b36721f74..7bc4724e18c 100644 --- a/homeassistant/components/neato.py +++ b/homeassistant/components/neato.py @@ -17,12 +17,13 @@ import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) -REQUIREMENTS = ['https://github.com/jabesq/pybotvac/archive/v0.0.1.zip' - '#pybotvac==0.0.1'] +REQUIREMENTS = ['https://github.com/jabesq/pybotvac/archive/v0.0.3.zip' + '#pybotvac==0.0.3'] DOMAIN = 'neato' NEATO_ROBOTS = 'neato_robots' NEATO_LOGIN = 'neato_login' +NEATO_MAP_DATA = 'neato_map_data' CONFIG_SCHEMA = vol.Schema({ DOMAIN: vol.Schema({ @@ -89,7 +90,7 @@ def setup(hass, config): _LOGGER.debug('Failed to login to Neato API') return False hub.update_robots() - for component in ('sensor', 'switch'): + for component in ('camera', 'sensor', 'switch'): discovery.load_platform(hass, component, DOMAIN, {}, config) return True @@ -108,6 +109,7 @@ class NeatoHub(object): domain_config[CONF_USERNAME], domain_config[CONF_PASSWORD]) self._hass.data[NEATO_ROBOTS] = self.my_neato.robots + self._hass.data[NEATO_MAP_DATA] = self.my_neato.maps def login(self): """Login to My Neato.""" @@ -126,3 +128,9 @@ class NeatoHub(object): _LOGGER.debug('Running HUB.update_robots %s', self._hass.data[NEATO_ROBOTS]) self._hass.data[NEATO_ROBOTS] = self.my_neato.robots + self._hass.data[NEATO_MAP_DATA] = self.my_neato.maps + + def download_map(self, url): + """Download a new map image.""" + map_image_data = self.my_neato.get_map_image(url) + return map_image_data diff --git a/homeassistant/components/sensor/neato.py b/homeassistant/components/sensor/neato.py index ca5cff1d24a..7c33e481069 100644 --- a/homeassistant/components/sensor/neato.py +++ b/homeassistant/components/sensor/neato.py @@ -8,9 +8,12 @@ import logging import requests from homeassistant.helpers.entity import Entity from homeassistant.components.neato import ( - NEATO_ROBOTS, NEATO_LOGIN, ACTION, ERRORS, MODE, ALERTS) + NEATO_ROBOTS, NEATO_LOGIN, NEATO_MAP_DATA, ACTION, ERRORS, MODE, ALERTS) _LOGGER = logging.getLogger(__name__) + +DEPENDENCIES = ['neato'] + SENSOR_TYPE_STATUS = 'status' SENSOR_TYPE_BATTERY = 'battery' @@ -19,12 +22,17 @@ SENSOR_TYPES = { SENSOR_TYPE_BATTERY: ['Battery'] } +ATTR_CLEAN_START = 'clean_start' +ATTR_CLEAN_STOP = 'clean_stop' +ATTR_CLEAN_AREA = 'clean_area' +ATTR_CLEAN_BATTERY_START = 'battery_level_at_clean_start' +ATTR_CLEAN_BATTERY_END = 'battery_level_at_clean_end' +ATTR_CLEAN_SUSP_COUNT = 'clean_suspension_count' +ATTR_CLEAN_SUSP_TIME = 'clean_suspension_time' + def setup_platform(hass, config, add_devices, discovery_info=None): """Setup the Neato sensor platform.""" - if not hass.data['neato_robots']: - return False - dev = [] for robot in hass.data[NEATO_ROBOTS]: for type_name in SENSOR_TYPES: @@ -42,22 +50,37 @@ class NeatoConnectedSensor(Entity): self.robot = robot self.neato = hass.data[NEATO_LOGIN] self._robot_name = self.robot.name + ' ' + SENSOR_TYPES[self.type][0] - self._state = self.robot.state - self._battery_state = None self._status_state = None + try: + self._state = self.robot.state + except (requests.exceptions.ConnectionError, + requests.exceptions.HTTPError) as ex: + self._state = None + _LOGGER.warning('Neato connection error: %s', ex) + self._mapdata = hass.data[NEATO_MAP_DATA] + self.clean_time_start = None + self.clean_time_stop = None + self.clean_area = None + self.clean_battery_start = None + self.clean_battery_end = None + self.clean_suspension_charge_count = None + self.clean_suspension_time = None + self._battery_state = None def update(self): """Update the properties of sensor.""" _LOGGER.debug('Update of sensor') self.neato.update_robots() - if not self._state: - return + self._mapdata = self.hass.data[NEATO_MAP_DATA] try: self._state = self.robot.state - except requests.exceptions.HTTPError as ex: + except (requests.exceptions.ConnectionError, + requests.exceptions.HTTPError) as ex: self._state = None self._status_state = 'Offline' - _LOGGER.debug('Neato connection issue: %s', ex) + _LOGGER.warning('Neato connection error: %s', ex) + return + if not self._state: return _LOGGER.debug('self._state=%s', self._state) if self.type == SENSOR_TYPE_STATUS: @@ -82,6 +105,27 @@ class NeatoConnectedSensor(Entity): self._status_state = ERRORS.get(self._state['error']) if self.type == SENSOR_TYPE_BATTERY: self._battery_state = self._state['details']['charge'] + if self._mapdata is None: + return + self.clean_time_start = ( + (self._mapdata[self.robot.serial]['maps'][0]['start_at'] + .strip('Z')) + .replace('T', ' ')) + self.clean_time_stop = ( + (self._mapdata[self.robot.serial]['maps'][0]['end_at'].strip('Z')) + .replace('T', ' ')) + self.clean_area = ( + self._mapdata[self.robot.serial]['maps'][0]['cleaned_area']) + self.clean_suspension_charge_count = ( + self._mapdata[self.robot.serial]['maps'][0] + ['suspended_cleaning_charging_count']) + self.clean_suspension_time = ( + self._mapdata[self.robot.serial]['maps'][0] + ['time_in_suspended_cleaning']) + self.clean_battery_start = ( + self._mapdata[self.robot.serial]['maps'][0]['run_charge_at_start']) + self.clean_battery_end = ( + self._mapdata[self.robot.serial]['maps'][0]['run_charge_at_end']) @property def unit_of_measurement(self): @@ -109,3 +153,25 @@ class NeatoConnectedSensor(Entity): def name(self): """Return the name of the sensor.""" return self._robot_name + + @property + def device_state_attributes(self): + """Return the device specific attributes.""" + data = {} + if self.type is SENSOR_TYPE_STATUS: + if self.clean_time_start: + data[ATTR_CLEAN_START] = self.clean_time_start + if self.clean_time_stop: + data[ATTR_CLEAN_STOP] = self.clean_time_stop + if self.clean_area: + data[ATTR_CLEAN_AREA] = self.clean_area + if self.clean_suspension_charge_count: + data[ATTR_CLEAN_SUSP_COUNT] = ( + self.clean_suspension_charge_count) + if self.clean_suspension_time: + data[ATTR_CLEAN_SUSP_TIME] = self.clean_suspension_time + if self.clean_battery_start: + data[ATTR_CLEAN_BATTERY_START] = self.clean_battery_start + if self.clean_battery_end: + data[ATTR_CLEAN_BATTERY_END] = self.clean_battery_end + return data diff --git a/homeassistant/components/switch/neato.py b/homeassistant/components/switch/neato.py index 6cd5c5088dc..b6cf6549cae 100644 --- a/homeassistant/components/switch/neato.py +++ b/homeassistant/components/switch/neato.py @@ -12,6 +12,8 @@ from homeassistant.components.neato import NEATO_ROBOTS, NEATO_LOGIN _LOGGER = logging.getLogger(__name__) +DEPENDENCIES = ['neato'] + SWITCH_TYPE_CLEAN = 'clean' SWITCH_TYPE_SCHEDULE = 'scedule' @@ -23,9 +25,6 @@ SWITCH_TYPES = { def setup_platform(hass, config, add_devices, discovery_info=None): """Setup the Neato switches.""" - if not hass.data[NEATO_ROBOTS]: - return False - dev = [] for robot in hass.data[NEATO_ROBOTS]: for type_name in SWITCH_TYPES: @@ -43,7 +42,12 @@ class NeatoConnectedSwitch(ToggleEntity): self.robot = robot self.neato = hass.data[NEATO_LOGIN] self._robot_name = self.robot.name + ' ' + SWITCH_TYPES[self.type][0] - self._state = self.robot.state + try: + self._state = self.robot.state + except (requests.exceptions.ConnectionError, + requests.exceptions.HTTPError) as ex: + _LOGGER.warning('Neato connection error: %s', ex) + self._state = None self._schedule_state = None self._clean_state = None @@ -51,14 +55,13 @@ class NeatoConnectedSwitch(ToggleEntity): """Update the states of Neato switches.""" _LOGGER.debug('Running switch update') self.neato.update_robots() - if not self._state: - return try: self._state = self.robot.state - except requests.exceptions.HTTPError: + except (requests.exceptions.ConnectionError, + requests.exceptions.HTTPError) as ex: + _LOGGER.warning('Neato connection error: %s', ex) self._state = None return - self._state = self.robot.state _LOGGER.debug('self._state=%s', self._state) if self.type == SWITCH_TYPE_CLEAN: if (self.robot.state['action'] == 1 or diff --git a/requirements_all.txt b/requirements_all.txt index 0fd90e12d34..defefb66aee 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -269,7 +269,7 @@ https://github.com/gurumitts/pylutron-caseta/archive/v0.2.5.zip#pylutron-caseta= https://github.com/jabesq/netatmo-api-python/archive/v0.9.1.zip#lnetatmo==0.9.1 # homeassistant.components.neato -https://github.com/jabesq/pybotvac/archive/v0.0.1.zip#pybotvac==0.0.1 +https://github.com/jabesq/pybotvac/archive/v0.0.3.zip#pybotvac==0.0.3 # homeassistant.components.sensor.sabnzbd https://github.com/jamespcole/home-assistant-nzb-clients/archive/616cad59154092599278661af17e2a9f2cf5e2a9.zip#python-sabnzbd==0.1 From c267326891b18ac67d35ef1e3117efba726a9c3a Mon Sep 17 00:00:00 2001 From: Patrik Date: Thu, 13 Apr 2017 19:04:42 +0200 Subject: [PATCH 068/146] Added initial support for IKEA Tradfri Gateway (#7074) * Added initial support for IKEA Tradfri Gateway * Pinned requirement * Fixed lint-errors * Added file to .coveragerc * Trying to fix commit * Fixed requirements_all again * Minor reorder of code * Minor reorder of code * Made the changes suggested by @balloob * Made the changes suggested by @balloob and removed debug * Update tradfri.py --- .coveragerc | 1 + homeassistant/components/light/tradfri.py | 100 ++++++++++++++++++++++ requirements_all.txt | 3 + 3 files changed, 104 insertions(+) create mode 100644 homeassistant/components/light/tradfri.py diff --git a/.coveragerc b/.coveragerc index b2f6a21c84b..2d40ca8b7b3 100644 --- a/.coveragerc +++ b/.coveragerc @@ -232,6 +232,7 @@ omit = homeassistant/components/light/limitlessled.py homeassistant/components/light/osramlightify.py homeassistant/components/light/tikteck.py + homeassistant/components/light/tradfri.py homeassistant/components/light/x10.py homeassistant/components/light/yeelight.py homeassistant/components/light/yeelightsunflower.py diff --git a/homeassistant/components/light/tradfri.py b/homeassistant/components/light/tradfri.py new file mode 100644 index 00000000000..1b2e42b5b99 --- /dev/null +++ b/homeassistant/components/light/tradfri.py @@ -0,0 +1,100 @@ +"""Support for the IKEA Tradfri platform.""" + +import logging + + +import voluptuous as vol + +# Import the device class from the component that you want to support +from homeassistant.components.light import ATTR_BRIGHTNESS, \ + SUPPORT_BRIGHTNESS, Light, PLATFORM_SCHEMA +from homeassistant.const import CONF_HOST, CONF_API_KEY +import homeassistant.helpers.config_validation as cv + + +SUPPORTED_FEATURES = (SUPPORT_BRIGHTNESS) + +# Home Assistant depends on 3rd party packages for API specific code. +REQUIREMENTS = ['pytradfri==0.4'] + +_LOGGER = logging.getLogger(__name__) + +# Validation of the user's configuration +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ + vol.Required(CONF_HOST): cv.string, + vol.Optional(CONF_API_KEY): cv.string, +}) + + +def setup_platform(hass, config, add_devices, discovery_info=None): + """Setup the IKEA Tradfri Light platform.""" + import pytradfri + + # Assign configuration variables. + # The configuration check takes care they are present. + host = config.get(CONF_HOST) + securitycode = config.get(CONF_API_KEY) + + api = pytradfri.coap_cli.api_factory(host, securitycode) + + gateway = pytradfri.gateway.Gateway(api) + devices = gateway.get_devices() + lights = [dev for dev in devices if dev.has_light_control] + + _LOGGER.debug("IKEA Tradfri Hub | init | Initialization Process Complete") + + add_devices(IKEATradfri(light) for light in lights) + _LOGGER.debug("IKEA Tradfri Hub | get_lights | All Lights Loaded") + + +class IKEATradfri(Light): + """The platform class required by hass.""" + + def __init__(self, light): + """Initialize a Light.""" + self._light = light + + # Caching of LightControl and light object + self._light_control = light.light_control + self._light_data = light.light_control.lights[0] + self._name = light.name + self._brightness = None + + @property + def supported_features(self): + """Flag supported features.""" + return SUPPORTED_FEATURES + + @property + def name(self): + """Return the display name of this light.""" + return self._name + + @property + def is_on(self): + """Return true if light is on.""" + return self._light_data.state + + @property + def brightness(self): + """Brightness of the light (an integer in the range 1-255).""" + return self._light_data.dimmer + + def turn_off(self, **kwargs): + """Instruct the light to turn off.""" + return self._light_control.set_state(False) + + def turn_on(self, **kwargs): + """Instruct the light to turn on.""" + if ATTR_BRIGHTNESS in kwargs: + self._light.light_control.set_dimmer(kwargs.get(ATTR_BRIGHTNESS)) + else: + self._light.light_control.set_state(True) + + def update(self): + """Fetch new state data for this light. + + This is the only method that should fetch new data for Home Assistant. + """ + self._light.update() + self._brightness = self._light_data.dimmer diff --git a/requirements_all.txt b/requirements_all.txt index defefb66aee..2820d9ad6c5 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -652,6 +652,9 @@ python-wink==1.2.3 # homeassistant.components.device_tracker.trackr pytrackr==0.0.5 +# homeassistant.components.light.tradfri +pytradfri==0.4 + # homeassistant.components.device_tracker.unifi pyunifi==2.0 From b6ee2332f467f8bd01e562b5fb35070da6e2e8ca Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 13 Apr 2017 23:45:27 +0300 Subject: [PATCH 069/146] Better thread safety in zwave node_entity (#7087) * Better thread safety * Update node_entity.py --- homeassistant/components/zwave/node_entity.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/zwave/node_entity.py b/homeassistant/components/zwave/node_entity.py index 01c9e39ac5e..5448da3c59c 100644 --- a/homeassistant/components/zwave/node_entity.py +++ b/homeassistant/components/zwave/node_entity.py @@ -110,15 +110,15 @@ class ZWaveNodeEntity(ZWaveBaseEntity): def node_changed(self): """Update node properties.""" - self._attributes = {} + attributes = {} stats = self.get_node_statistics() - for attr in ATTRIBUTES: value = getattr(self.node, attr) if attr in _REQUIRED_ATTRIBUTES or value: - self._attributes[attr] = value + attributes[attr] = value + for attr in _COMM_ATTRIBUTES: - self._attributes[attr] = stats[attr] + attributes[attr] = stats[attr] if self.node.can_wake_up(): for value in self.node.get_values(COMMAND_CLASS_WAKE_UP).values(): @@ -128,6 +128,7 @@ class ZWaveNodeEntity(ZWaveBaseEntity): self.wakeup_interval = None self.battery_level = self.node.get_battery_level() + self._attributes = attributes self.maybe_schedule_update() From e5756ba41df64c4f46103abbc9f34c48b50fd54a Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Thu, 13 Apr 2017 22:48:59 -0700 Subject: [PATCH 070/146] Break product name up into manufacturer name and product name --- homeassistant/components/zwave/node_entity.py | 6 ++++-- tests/components/zwave/test_node_entity.py | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/zwave/node_entity.py b/homeassistant/components/zwave/node_entity.py index 5448da3c59c..e43ee735ac7 100644 --- a/homeassistant/components/zwave/node_entity.py +++ b/homeassistant/components/zwave/node_entity.py @@ -16,6 +16,7 @@ ATTR_AWAKE = 'is_awake' ATTR_READY = 'is_ready' ATTR_FAILED = 'is_failed' ATTR_PRODUCT_NAME = 'product_name' +ATTR_MANUFACTURER_NAME = 'manufacturer_name' STAGE_COMPLETE = 'Complete' @@ -80,8 +81,8 @@ class ZWaveNodeEntity(ZWaveBaseEntity): self.node = node self.node_id = self.node.node_id self._name = node_name(self.node) - self._product_name = '{} {}'.format( - node.manufacturer_name, node.product_name) + self._product_name = node.product_name + self._manufacturer_name = node.manufacturer_name self.entity_id = "{}.{}_{}".format( DOMAIN, slugify(self._name), self.node_id) self._attributes = {} @@ -164,6 +165,7 @@ class ZWaveNodeEntity(ZWaveBaseEntity): """Return the device specific state attributes.""" attrs = { ATTR_NODE_ID: self.node_id, + ATTR_MANUFACTURER_NAME: self._manufacturer_name, ATTR_PRODUCT_NAME: self._product_name, } attrs.update(self._attributes) diff --git a/tests/components/zwave/test_node_entity.py b/tests/components/zwave/test_node_entity.py index 0d57a973c31..871520d1e6d 100644 --- a/tests/components/zwave/test_node_entity.py +++ b/tests/components/zwave/test_node_entity.py @@ -83,7 +83,8 @@ class TestZWaveNodeEntity(unittest.TestCase): self.maxDiff = None self.assertEqual( {'node_id': self.node.node_id, - 'product_name': 'Test Manufacturer Test Product'}, + 'manufacturer_name': 'Test Manufacturer', + 'product_name': 'Test Product'}, self.entity.device_state_attributes) self.node.get_values.return_value = { @@ -139,7 +140,8 @@ class TestZWaveNodeEntity(unittest.TestCase): self.entity.node_changed() self.assertEqual( {'node_id': self.node.node_id, - 'product_name': 'Test Manufacturer Test Product', + 'manufacturer_name': 'Test Manufacturer', + 'product_name': 'Test Product', 'query_stage': 'Dynamic', 'is_awake': True, 'is_ready': False, From 46352f6de9c8d5d0288892216b52010c03d390c2 Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Fri, 14 Apr 2017 13:08:28 -0400 Subject: [PATCH 071/146] Uber version bump (#7100) --- homeassistant/components/sensor/uber.py | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/sensor/uber.py b/homeassistant/components/sensor/uber.py index 08617e824ec..87902562152 100644 --- a/homeassistant/components/sensor/uber.py +++ b/homeassistant/components/sensor/uber.py @@ -14,7 +14,7 @@ from homeassistant.helpers.entity import Entity from homeassistant.util import Throttle import homeassistant.helpers.config_validation as cv -REQUIREMENTS = ['uber_rides==0.2.7'] +REQUIREMENTS = ['uber_rides==0.4.1'] _LOGGER = logging.getLogger(__name__) diff --git a/requirements_all.txt b/requirements_all.txt index 2820d9ad6c5..ffc8267775a 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -767,7 +767,7 @@ transmissionrpc==0.11 twilio==5.7.0 # homeassistant.components.sensor.uber -uber_rides==0.2.7 +uber_rides==0.4.1 # homeassistant.components.sensor.ups upsmychoice==1.0.2 From 0ca80cc27e2e6112f944ead9b9ececf1a6d85dbc Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Fri, 14 Apr 2017 13:09:21 -0400 Subject: [PATCH 072/146] No product ids configured should fetch all ids (#7091) --- homeassistant/components/sensor/uber.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/sensor/uber.py b/homeassistant/components/sensor/uber.py index 87902562152..2830b8c98e9 100644 --- a/homeassistant/components/sensor/uber.py +++ b/homeassistant/components/sensor/uber.py @@ -35,7 +35,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_START_LONGITUDE): cv.longitude, vol.Optional(CONF_END_LATITUDE): cv.latitude, vol.Optional(CONF_END_LONGITUDE): cv.longitude, - vol.Optional(CONF_PRODUCT_IDS, default=[]): + vol.Optional(CONF_PRODUCT_IDS): vol.All(cv.ensure_list, [cv.string]), }) From 60f7a1947f6b0b63d635d227263da2e0edc61ecc Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Fri, 14 Apr 2017 14:31:10 -0700 Subject: [PATCH 073/146] Allow extra keys in zone config --- homeassistant/components/zone.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/zone.py b/homeassistant/components/zone.py index 80f3827a135..235fe11934a 100644 --- a/homeassistant/components/zone.py +++ b/homeassistant/components/zone.py @@ -47,7 +47,7 @@ PLATFORM_SCHEMA = vol.Schema({ vol.Optional(CONF_RADIUS, default=DEFAULT_RADIUS): vol.Coerce(float), vol.Optional(CONF_PASSIVE, default=DEFAULT_PASSIVE): cv.boolean, vol.Optional(CONF_ICON): cv.icon, -}) +}, extra=vol.ALLOW_EXTRA) def active_zone(hass, latitude, longitude, radius=0): From 5ffda53805d57a3b4553de7981879347cdc4db6f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 15 Apr 2017 00:18:39 +0200 Subject: [PATCH 074/146] Upgrade aiohttp to 2.0.7 (#7106) --- homeassistant/package_constraints.txt | 2 +- requirements_all.txt | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/package_constraints.txt b/homeassistant/package_constraints.txt index b21a938a1a1..5314f2aa218 100644 --- a/homeassistant/package_constraints.txt +++ b/homeassistant/package_constraints.txt @@ -5,6 +5,6 @@ pip>=7.1.0 jinja2>=2.9.5 voluptuous==0.9.3 typing>=3,<4 -aiohttp==2.0.5 +aiohttp==2.0.7 async_timeout==1.2.0 chardet==2.3 diff --git a/requirements_all.txt b/requirements_all.txt index ffc8267775a..af8cb7b585a 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -6,7 +6,7 @@ pip>=7.1.0 jinja2>=2.9.5 voluptuous==0.9.3 typing>=3,<4 -aiohttp==2.0.5 +aiohttp==2.0.7 async_timeout==1.2.0 chardet==2.3 diff --git a/setup.py b/setup.py index b9ef099a1ad..c7a4eaa821c 100755 --- a/setup.py +++ b/setup.py @@ -22,7 +22,7 @@ REQUIRES = [ 'jinja2>=2.9.5', 'voluptuous==0.9.3', 'typing>=3,<4', - 'aiohttp==2.0.5', + 'aiohttp==2.0.7', 'async_timeout==1.2.0', 'chardet==2.3' ] From cce372ff6642ad451f803308cd9a02a6abcfcade Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 15 Apr 2017 00:26:04 +0200 Subject: [PATCH 075/146] Update file header, add const for defaults, and update log messages (#7110) --- .../components/binary_sensor/flic.py | 70 ++++++++++--------- 1 file changed, 38 insertions(+), 32 deletions(-) diff --git a/homeassistant/components/binary_sensor/flic.py b/homeassistant/components/binary_sensor/flic.py index eedcfb6060e..2079d6a1ce8 100644 --- a/homeassistant/components/binary_sensor/flic.py +++ b/homeassistant/components/binary_sensor/flic.py @@ -1,4 +1,9 @@ -"""Contains functionality to use flic buttons as a binary sensor.""" +""" +Support to use flic buttons as a binary sensor. + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/binary_sensor.flic/ +""" import logging import threading @@ -11,39 +16,40 @@ from homeassistant.const import ( from homeassistant.components.binary_sensor import ( BinarySensorDevice, PLATFORM_SCHEMA) - REQUIREMENTS = ['https://github.com/soldag/pyflic/archive/0.4.zip#pyflic==0.4'] _LOGGER = logging.getLogger(__name__) DEFAULT_TIMEOUT = 3 -CLICK_TYPE_SINGLE = "single" -CLICK_TYPE_DOUBLE = "double" -CLICK_TYPE_HOLD = "hold" +CLICK_TYPE_SINGLE = 'single' +CLICK_TYPE_DOUBLE = 'double' +CLICK_TYPE_HOLD = 'hold' CLICK_TYPES = [CLICK_TYPE_SINGLE, CLICK_TYPE_DOUBLE, CLICK_TYPE_HOLD] -CONF_IGNORED_CLICK_TYPES = "ignored_click_types" +CONF_IGNORED_CLICK_TYPES = 'ignored_click_types' -EVENT_NAME = "flic_click" -EVENT_DATA_NAME = "button_name" -EVENT_DATA_ADDRESS = "button_address" -EVENT_DATA_TYPE = "click_type" -EVENT_DATA_QUEUED_TIME = "queued_time" +DEFAULT_HOST = 'localhost' +DEFAULT_PORT = 5551 + +EVENT_NAME = 'flic_click' +EVENT_DATA_NAME = 'button_name' +EVENT_DATA_ADDRESS = 'button_address' +EVENT_DATA_TYPE = 'click_type' +EVENT_DATA_QUEUED_TIME = 'queued_time' -# Validation of the user's configuration PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Optional(CONF_HOST, default='localhost'): cv.string, - vol.Optional(CONF_PORT, default=5551): cv.port, + vol.Optional(CONF_HOST, default=DEFAULT_HOST): cv.string, + vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, vol.Optional(CONF_DISCOVERY, default=True): cv.boolean, vol.Optional(CONF_TIMEOUT, default=DEFAULT_TIMEOUT): cv.positive_int, - vol.Optional(CONF_IGNORED_CLICK_TYPES): vol.All(cv.ensure_list, - [vol.In(CLICK_TYPES)]) + vol.Optional(CONF_IGNORED_CLICK_TYPES): + vol.All(cv.ensure_list, [vol.In(CLICK_TYPES)]) }) def setup_platform(hass, config, add_entities, discovery_info=None): - """Setup the flic platform.""" + """Set up the flic platform.""" import pyflic # Initialize flic client responsible for @@ -55,11 +61,11 @@ def setup_platform(hass, config, add_entities, discovery_info=None): try: client = pyflic.FlicClient(host, port) except ConnectionRefusedError: - _LOGGER.error("Failed to connect to flic server.") + _LOGGER.error("Failed to connect to flic server") return def new_button_callback(address): - """Setup newly verified button as device in home assistant.""" + """Set up newly verified button as device in Home Assistant.""" setup_button(hass, config, add_entities, client, address) client.on_new_verified_button = new_button_callback @@ -74,7 +80,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): def get_info_callback(items): """Add entities for already verified buttons.""" - addresses = items["bd_addr_of_verified_buttons"] or [] + addresses = items['bd_addr_of_verified_buttons'] or [] for address in addresses: setup_button(hass, config, add_entities, client, address) @@ -83,7 +89,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): def start_scanning(config, add_entities, client): - """Start a new flic client for scanning & connceting to new buttons.""" + """Start a new flic client for scanning and connecting to new buttons.""" import pyflic scan_wizard = pyflic.ScanWizard() @@ -91,10 +97,10 @@ def start_scanning(config, add_entities, client): def scan_completed_callback(scan_wizard, result, address, name): """Restart scan wizard to constantly check for new buttons.""" if result == pyflic.ScanWizardResult.WizardSuccess: - _LOGGER.info("Found new button (%s)", address) + _LOGGER.info("Found new button %s", address) elif result != pyflic.ScanWizardResult.WizardFailedTimeout: - _LOGGER.warning("Failed to connect to button (%s). Reason: %s", - address, result) + _LOGGER.warning( + "Failed to connect to button %s. Reason: %s", address, result) # Restart scan wizard start_scanning(config, add_entities, client) @@ -108,7 +114,7 @@ def setup_button(hass, config, add_entities, client, address): timeout = config.get(CONF_TIMEOUT) ignored_click_types = config.get(CONF_IGNORED_CLICK_TYPES) button = FlicButton(hass, client, address, timeout, ignored_click_types) - _LOGGER.info("Connected to button (%s)", address) + _LOGGER.info("Connected to button %s", address) add_entities([button]) @@ -161,7 +167,7 @@ class FlicButton(BinarySensorDevice): @property def name(self): """Return the name of the device.""" - return "flic_%s" % self.address.replace(":", "") + return 'flic_{}'.format(self.address.replace(':', '')) @property def address(self): @@ -181,21 +187,21 @@ class FlicButton(BinarySensorDevice): @property def device_state_attributes(self): """Return device specific state attributes.""" - return {"address": self.address} + return {'address': self.address} def _queued_event_check(self, click_type, time_diff): """Generate a log message and returns true if timeout exceeded.""" time_string = "{:d} {}".format( - time_diff, "second" if time_diff == 1 else "seconds") + time_diff, 'second' if time_diff == 1 else 'seconds') if time_diff > self._timeout: _LOGGER.warning( - "Queued %s dropped for %s. Time in queue was %s.", + "Queued %s dropped for %s. Time in queue was %s", click_type, self.address, time_string) return True else: _LOGGER.info( - "Queued %s allowed for %s. Time in queue was %s.", + "Queued %s allowed for %s. Time in queue was %s", click_type, self.address, time_string) return False @@ -227,8 +233,8 @@ class FlicButton(BinarySensorDevice): EVENT_DATA_TYPE: hass_click_type }) - def _connection_status_changed(self, channel, - connection_status, disconnect_reason): + def _connection_status_changed( + self, channel, connection_status, disconnect_reason): """Remove device, if button disconnects.""" import pyflic From b0ffc55cfac5829bbe5f42fbd1bd3f638798d9a4 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 15 Apr 2017 00:28:04 +0200 Subject: [PATCH 076/146] Upgrade speedtest-cli to 1.0.4 (#7105) --- homeassistant/components/sensor/speedtest.py | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/sensor/speedtest.py b/homeassistant/components/sensor/speedtest.py index 76dbbe4ed39..5035e2464b3 100644 --- a/homeassistant/components/sensor/speedtest.py +++ b/homeassistant/components/sensor/speedtest.py @@ -20,7 +20,7 @@ from homeassistant.helpers.entity import Entity from homeassistant.helpers.event import track_time_change from homeassistant.helpers.restore_state import async_get_last_state -REQUIREMENTS = ['speedtest-cli==1.0.3'] +REQUIREMENTS = ['speedtest-cli==1.0.4'] _LOGGER = logging.getLogger(__name__) _SPEEDTEST_REGEX = re.compile(r'Ping:\s(\d+\.\d+)\sms[\r\n]+' diff --git a/requirements_all.txt b/requirements_all.txt index af8cb7b585a..cdceebcd5fe 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -728,7 +728,7 @@ snapcast==1.2.2 somecomfort==0.4.1 # homeassistant.components.sensor.speedtest -speedtest-cli==1.0.3 +speedtest-cli==1.0.4 # homeassistant.components.recorder # homeassistant.scripts.db_migrator From c43a3efabd43b7131bab54c181ecb18e700e3ff8 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 15 Apr 2017 00:32:04 +0200 Subject: [PATCH 077/146] Remove globally disabled pylint issue and update docstrings (#7111) --- homeassistant/components/device_tracker/locative.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/device_tracker/locative.py b/homeassistant/components/device_tracker/locative.py index 255440a18e1..668ee6dd8a0 100644 --- a/homeassistant/components/device_tracker/locative.py +++ b/homeassistant/components/device_tracker/locative.py @@ -22,20 +22,20 @@ URL = '/api/locative' def setup_scanner(hass, config, see, discovery_info=None): - """Setup an endpoint for the Locative application.""" + """Set up an endpoint for the Locative application.""" hass.http.register_view(LocativeView(see)) return True class LocativeView(HomeAssistantView): - """View to handle locative requests.""" + """View to handle Locative requests.""" url = URL name = 'api:locative' def __init__(self, see): - """Initialize Locative url endpoints.""" + """Initialize Locative URL endpoints.""" self.see = see @asyncio.coroutine @@ -52,7 +52,6 @@ class LocativeView(HomeAssistantView): return res @asyncio.coroutine - # pylint: disable=too-many-return-statements def _handle(self, hass, data): """Handle locative request.""" if 'latitude' not in data or 'longitude' not in data: From 35de3a1dc490408cedd28e3654d3bb17472fadbf Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Sat, 15 Apr 2017 21:11:36 -0400 Subject: [PATCH 078/146] Use third-party lib aioautomatic for automatic (#7126) --- .../components/device_tracker/automatic.py | 167 +++++----- requirements_all.txt | 3 + .../device_tracker/test_automatic.py | 297 +++++------------- 3 files changed, 146 insertions(+), 321 deletions(-) diff --git a/homeassistant/components/device_tracker/automatic.py b/homeassistant/components/device_tracker/automatic.py index 3b4612edf6c..53d49fd38d9 100644 --- a/homeassistant/components/device_tracker/automatic.py +++ b/homeassistant/components/device_tracker/automatic.py @@ -4,19 +4,20 @@ Support for the Automatic platform. For more details about this platform, please refer to the documentation at https://home-assistant.io/components/device_tracker.automatic/ """ +import asyncio from datetime import timedelta import logging -import re -import requests import voluptuous as vol from homeassistant.components.device_tracker import ( PLATFORM_SCHEMA, ATTR_ATTRIBUTES) from homeassistant.const import CONF_USERNAME, CONF_PASSWORD +from homeassistant.helpers.aiohttp_client import async_get_clientsession import homeassistant.helpers.config_validation as cv -from homeassistant.helpers.event import track_utc_time_change -from homeassistant.util import datetime as dt_util +from homeassistant.helpers.event import async_track_time_interval + +REQUIREMENTS = ['aioautomatic==0.1.1'] _LOGGER = logging.getLogger(__name__) @@ -24,129 +25,101 @@ CONF_CLIENT_ID = 'client_id' CONF_SECRET = 'secret' CONF_DEVICES = 'devices' -SCOPE = 'scope:location scope:vehicle:profile scope:user:profile scope:trip' - -ATTR_ACCESS_TOKEN = 'access_token' -ATTR_EXPIRES_IN = 'expires_in' -ATTR_RESULTS = 'results' -ATTR_VEHICLE = 'vehicle' -ATTR_ENDED_AT = 'ended_at' -ATTR_END_LOCATION = 'end_location' - -URL_AUTHORIZE = 'https://accounts.automatic.com/oauth/access_token/' -URL_VEHICLES = 'https://api.automatic.com/vehicle/' -URL_TRIPS = 'https://api.automatic.com/trip/' - -_VEHICLE_ID_REGEX = re.compile( - (URL_VEHICLES + '(.*)?[/]$').replace('/', r'\/')) +DEFAULT_TIMEOUT = 5 PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_CLIENT_ID): cv.string, vol.Required(CONF_SECRET): cv.string, vol.Required(CONF_USERNAME): cv.string, vol.Required(CONF_PASSWORD): cv.string, - vol.Optional(CONF_DEVICES): vol.All(cv.ensure_list, [cv.string]) + vol.Optional(CONF_DEVICES, default=None): vol.All( + cv.ensure_list, [cv.string]) }) -def setup_scanner(hass, config: dict, see, discovery_info=None): +@asyncio.coroutine +def async_setup_scanner(hass, config, async_see, discovery_info=None): """Validate the configuration and return an Automatic scanner.""" + import aioautomatic + + client = aioautomatic.Client( + client_id=config[CONF_CLIENT_ID], + client_secret=config[CONF_SECRET], + client_session=async_get_clientsession(hass), + request_kwargs={'timeout': DEFAULT_TIMEOUT}) try: - AutomaticDeviceScanner(hass, config, see) - except requests.HTTPError as err: + session = yield from client.create_session_from_password( + config[CONF_USERNAME], config[CONF_PASSWORD]) + data = AutomaticData(hass, session, config[CONF_DEVICES], async_see) + except aioautomatic.exceptions.AutomaticError as err: _LOGGER.error(str(err)) return False + yield from data.update() return True -class AutomaticDeviceScanner(object): - """A class representing an Automatic device.""" +class AutomaticData(object): + """A class representing an Automatic cloud service connection.""" - def __init__(self, hass, config: dict, see) -> None: + def __init__(self, hass, session, devices, async_see): """Initialize the automatic device scanner.""" self.hass = hass - self._devices = config.get(CONF_DEVICES, None) - self._access_token_payload = { - 'username': config.get(CONF_USERNAME), - 'password': config.get(CONF_PASSWORD), - 'client_id': config.get(CONF_CLIENT_ID), - 'client_secret': config.get(CONF_SECRET), - 'grant_type': 'password', - 'scope': SCOPE - } - self._headers = None - self._token_expires = dt_util.now() - self.last_results = {} - self.last_trips = {} - self.see = see + self.devices = devices + self.session = session + self.async_see = async_see - self._update_info() + async_track_time_interval(hass, self.update, timedelta(seconds=30)) - track_utc_time_change(self.hass, self._update_info, - second=range(0, 60, 30)) - - def _update_headers(self): - """Get the access token from automatic.""" - if self._headers is None or self._token_expires <= dt_util.now(): - resp = requests.post( - URL_AUTHORIZE, - data=self._access_token_payload) - - resp.raise_for_status() - - json = resp.json() - - access_token = json[ATTR_ACCESS_TOKEN] - self._token_expires = dt_util.now() + timedelta( - seconds=json[ATTR_EXPIRES_IN]) - self._headers = { - 'Authorization': 'Bearer {}'.format(access_token) - } - - def _update_info(self, now=None) -> None: + @asyncio.coroutine + def update(self, now=None): """Update the device info.""" + import aioautomatic + _LOGGER.debug('Updating devices %s', now) - self._update_headers() - response = requests.get(URL_VEHICLES, headers=self._headers) + try: + vehicles = yield from self.session.get_vehicles() + except aioautomatic.exceptions.AutomaticError as err: + _LOGGER.error(str(err)) + return False - response.raise_for_status() + for vehicle in vehicles: + name = vehicle.display_name + if name is None: + name = ' '.join(filter(None, ( + str(vehicle.year), vehicle.make, vehicle.model))) - self.last_results = [item for item in response.json()[ATTR_RESULTS] - if self._devices is None or item[ - 'display_name'] in self._devices] + if self.devices is not None and name not in self.devices: + continue - response = requests.get(URL_TRIPS, headers=self._headers) + self.hass.async_add_job(self.update_vehicle(vehicle, name)) - if response.status_code == 200: - for trip in response.json()[ATTR_RESULTS]: - vehicle_id = _VEHICLE_ID_REGEX.match( - trip[ATTR_VEHICLE]).group(1) - if vehicle_id not in self.last_trips: - self.last_trips[vehicle_id] = trip - elif self.last_trips[vehicle_id][ATTR_ENDED_AT] < trip[ - ATTR_ENDED_AT]: - self.last_trips[vehicle_id] = trip + @asyncio.coroutine + def update_vehicle(self, vehicle, name): + """Updated the specified vehicle's data.""" + import aioautomatic - for vehicle in self.last_results: - dev_id = vehicle.get('id') - host_name = vehicle.get('display_name') + kwargs = { + 'dev_id': vehicle.id, + 'host_name': name, + 'mac': vehicle.id, + ATTR_ATTRIBUTES: { + 'fuel_level': vehicle.fuel_level_percent, + } + } - attrs = { - 'fuel_level': vehicle.get('fuel_level_percent') - } + trips = [] + try: + # Get the most recent trip for this vehicle + trips = yield from self.session.get_trips( + vehicle=vehicle.id, limit=1) + except aioautomatic.exceptions.AutomaticError as err: + _LOGGER.error(str(err)) - kwargs = { - 'dev_id': dev_id, - 'host_name': host_name, - 'mac': dev_id, - ATTR_ATTRIBUTES: attrs - } + if trips: + end_location = trips[0].end_location + kwargs['gps'] = (end_location.lat, end_location.lon) + kwargs['gps_accuracy'] = end_location.accuracy_m - if dev_id in self.last_trips: - end_location = self.last_trips[dev_id][ATTR_END_LOCATION] - kwargs['gps'] = (end_location['lat'], end_location['lon']) - kwargs['gps_accuracy'] = end_location['accuracy_m'] - - self.see(**kwargs) + yield from self.async_see(**kwargs) diff --git a/requirements_all.txt b/requirements_all.txt index cdceebcd5fe..1432545bcfd 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -37,6 +37,9 @@ SoCo==0.12 # homeassistant.components.notify.twitter TwitterAPI==2.4.5 +# homeassistant.components.device_tracker.automatic +aioautomatic==0.1.1 + # homeassistant.components.sensor.dnsip aiodns==1.1.1 diff --git a/tests/components/device_tracker/test_automatic.py b/tests/components/device_tracker/test_automatic.py index 8e7d37d8798..dd03fd1da57 100644 --- a/tests/components/device_tracker/test_automatic.py +++ b/tests/components/device_tracker/test_automatic.py @@ -1,241 +1,90 @@ """Test the automatic device tracker platform.""" - +import asyncio import logging -import requests -import unittest -from unittest.mock import patch +from unittest.mock import patch, MagicMock +import aioautomatic from homeassistant.components.device_tracker.automatic import ( - URL_AUTHORIZE, URL_VEHICLES, URL_TRIPS, setup_scanner) - -from tests.common import get_test_home_assistant + async_setup_scanner) _LOGGER = logging.getLogger(__name__) -INVALID_USERNAME = 'bob' -VALID_USERNAME = 'jim' -PASSWORD = 'password' -CLIENT_ID = '12345' -CLIENT_SECRET = '54321' -FUEL_LEVEL = 77.2 -LATITUDE = 32.82336 -LONGITUDE = -117.23743 -ACCURACY = 8 -DISPLAY_NAME = 'My Vehicle' + +@patch('aioautomatic.Client.create_session_from_password') +def test_invalid_credentials(mock_create_session, hass): + """Test with invalid credentials.""" + @asyncio.coroutine + def get_session(*args, **kwargs): + """Return the test session.""" + raise aioautomatic.exceptions.ForbiddenError() + + mock_create_session.side_effect = get_session + + config = { + 'platform': 'automatic', + 'username': 'bad_username', + 'password': 'bad_password', + 'client_id': 'client_id', + 'secret': 'client_secret', + 'devices': None, + } + result = hass.loop.run_until_complete( + async_setup_scanner(hass, config, None)) + assert not result -def mocked_requests(*args, **kwargs): - """Mock requests.get invocations.""" - class MockResponse: - """Class to represent a mocked response.""" +@patch('aioautomatic.Client.create_session_from_password') +def test_valid_credentials(mock_create_session, hass): + """Test with valid credentials.""" + session = MagicMock() + vehicle = MagicMock() + trip = MagicMock() + mock_see = MagicMock() - def __init__(self, json_data, status_code): - """Initialize the mock response class.""" - self.json_data = json_data - self.status_code = status_code + vehicle.id = 'mock_id' + vehicle.display_name = 'mock_display_name' + vehicle.fuel_level_percent = 45.6 - def json(self): - """Return the json of the response.""" - return self.json_data + trip.end_location.lat = 45.567 + trip.end_location.lon = 34.345 + trip.end_location.accuracy_m = 5.6 - @property - def content(self): - """Return the content of the response.""" - return self.json() + @asyncio.coroutine + def get_session(*args, **kwargs): + """Return the test session.""" + return session - def raise_for_status(self): - """Raise an HTTPError if status is not 200.""" - if self.status_code != 200: - raise requests.HTTPError(self.status_code) + @asyncio.coroutine + def get_vehicles(*args, **kwargs): + """Return list of test vehicles.""" + return [vehicle] - data = kwargs.get('data') + @asyncio.coroutine + def get_trips(*args, **kwargs): + """Return list of test trips.""" + return [trip] - if data and data.get('username', None) == INVALID_USERNAME: - return MockResponse({ - "error": "invalid_credentials" - }, 401) - elif str(args[0]).startswith(URL_AUTHORIZE): - return MockResponse({ - "user": { - "sid": "sid", - "id": "id" - }, - "token_type": "Bearer", - "access_token": "accesstoken", - "refresh_token": "refreshtoken", - "expires_in": 31521669, - "scope": "" - }, 200) - elif str(args[0]).startswith(URL_VEHICLES): - return MockResponse({ - "_metadata": { - "count": 2, - "next": None, - "previous": None - }, - "results": [ - { - "url": "https://api.automatic.com/vehicle/vid/", - "id": "vid", - "created_at": "2016-03-05T20:05:16.240000Z", - "updated_at": "2016-08-29T01:52:59.597898Z", - "make": "Honda", - "model": "Element", - "year": 2007, - "submodel": "EX", - "display_name": DISPLAY_NAME, - "fuel_grade": "regular", - "fuel_level_percent": FUEL_LEVEL, - "active_dtcs": [] - }] - }, 200) - elif str(args[0]).startswith(URL_TRIPS): - return MockResponse({ - "_metadata": { - "count": 1594, - "next": "https://api.automatic.com/trip/?page=2", - "previous": None - }, - "results": [ - { - "url": "https://api.automatic.com/trip/tid1/", - "id": "tid1", - "driver": "https://api.automatic.com/user/uid/", - "user": "https://api.automatic.com/user/uid/", - "started_at": "2016-08-28T19:37:23.986000Z", - "ended_at": "2016-08-28T19:43:22.500000Z", - "distance_m": 3931.6, - "duration_s": 358.5, - "vehicle": "https://api.automatic.com/vehicle/vid/", - "start_location": { - "lat": 32.87336, - "lon": -117.22743, - "accuracy_m": 10 - }, - "start_address": { - "name": "123 Fake St, Nowhere, NV 12345", - "display_name": "123 Fake St, Nowhere, NV", - "street_number": "Unknown", - "street_name": "Fake St", - "city": "Nowhere", - "state": "NV", - "country": "US" - }, - "end_location": { - "lat": LATITUDE, - "lon": LONGITUDE, - "accuracy_m": ACCURACY - }, - "end_address": { - "name": "321 Fake St, Nowhere, NV 12345", - "display_name": "321 Fake St, Nowhere, NV", - "street_number": "Unknown", - "street_name": "Fake St", - "city": "Nowhere", - "state": "NV", - "country": "US" - }, - "path": "path", - "vehicle_events": [], - "start_timezone": "America/Denver", - "end_timezone": "America/Denver", - "idling_time_s": 0, - "tags": [] - }, - { - "url": "https://api.automatic.com/trip/tid2/", - "id": "tid2", - "driver": "https://api.automatic.com/user/uid/", - "user": "https://api.automatic.com/user/uid/", - "started_at": "2016-08-28T18:48:00.727000Z", - "ended_at": "2016-08-28T18:55:25.800000Z", - "distance_m": 3969.1, - "duration_s": 445.1, - "vehicle": "https://api.automatic.com/vehicle/vid/", - "start_location": { - "lat": 32.87336, - "lon": -117.22743, - "accuracy_m": 11 - }, - "start_address": { - "name": "123 Fake St, Nowhere, NV, USA", - "display_name": "Fake St, Nowhere, NV", - "street_number": "123", - "street_name": "Fake St", - "city": "Nowhere", - "state": "NV", - "country": "US" - }, - "end_location": { - "lat": 32.82336, - "lon": -117.23743, - "accuracy_m": 10 - }, - "end_address": { - "name": "321 Fake St, Nowhere, NV, USA", - "display_name": "Fake St, Nowhere, NV", - "street_number": "Unknown", - "street_name": "Fake St", - "city": "Nowhere", - "state": "NV", - "country": "US" - }, - "path": "path", - "vehicle_events": [], - "start_timezone": "America/Denver", - "end_timezone": "America/Denver", - "idling_time_s": 0, - "tags": [] - } - ] - }, 200) - else: - _LOGGER.debug('UNKNOWN ROUTE') + mock_create_session.side_effect = get_session + session.get_vehicles.side_effect = get_vehicles + session.get_trips.side_effect = get_trips + config = { + 'platform': 'automatic', + 'username': 'bad_username', + 'password': 'bad_password', + 'client_id': 'client_id', + 'secret': 'client_secret', + 'devices': None, + } + result = hass.loop.run_until_complete( + async_setup_scanner(hass, config, mock_see)) -class TestAutomatic(unittest.TestCase): - """Test cases around the automatic device scanner.""" - - def see_mock(self, **kwargs): - """Mock see function.""" - self.assertEqual('vid', kwargs.get('dev_id')) - self.assertEqual(FUEL_LEVEL, - kwargs.get('attributes', {}).get('fuel_level')) - self.assertEqual((LATITUDE, LONGITUDE), kwargs.get('gps')) - self.assertEqual(ACCURACY, kwargs.get('gps_accuracy')) - - def setUp(self): - """Set up test data.""" - self.hass = get_test_home_assistant() - - def tearDown(self): - """Tear down test data.""" - self.hass.stop() - - @patch('requests.get', side_effect=mocked_requests) - @patch('requests.post', side_effect=mocked_requests) - def test_invalid_credentials(self, mock_get, mock_post): - """Test error is raised with invalid credentials.""" - config = { - 'platform': 'automatic', - 'username': INVALID_USERNAME, - 'password': PASSWORD, - 'client_id': CLIENT_ID, - 'secret': CLIENT_SECRET - } - - self.assertFalse(setup_scanner(self.hass, config, self.see_mock)) - - @patch('requests.get', side_effect=mocked_requests) - @patch('requests.post', side_effect=mocked_requests) - def test_valid_credentials(self, mock_get, mock_post): - """Test error is raised with invalid credentials.""" - config = { - 'platform': 'automatic', - 'username': VALID_USERNAME, - 'password': PASSWORD, - 'client_id': CLIENT_ID, - 'secret': CLIENT_SECRET - } - - self.assertTrue(setup_scanner(self.hass, config, self.see_mock)) + assert result + assert mock_see.called + assert len(mock_see.mock_calls) == 2 + assert mock_see.mock_calls[0][2]['dev_id'] == 'mock_id' + assert mock_see.mock_calls[0][2]['mac'] == 'mock_id' + assert mock_see.mock_calls[0][2]['host_name'] == 'mock_display_name' + assert mock_see.mock_calls[0][2]['attributes'] == {'fuel_level': 45.6} + assert mock_see.mock_calls[0][2]['gps'] == (45.567, 34.345) + assert mock_see.mock_calls[0][2]['gps_accuracy'] == 5.6 From f7b6f8e8fbec5e3975813ea35cacf511b315a63d Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 16 Apr 2017 03:32:06 +0200 Subject: [PATCH 079/146] Upgrade chardet to 3.0.2 (#7112) --- homeassistant/package_constraints.txt | 2 +- requirements_all.txt | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/package_constraints.txt b/homeassistant/package_constraints.txt index 5314f2aa218..f2ea6e743c4 100644 --- a/homeassistant/package_constraints.txt +++ b/homeassistant/package_constraints.txt @@ -7,4 +7,4 @@ voluptuous==0.9.3 typing>=3,<4 aiohttp==2.0.7 async_timeout==1.2.0 -chardet==2.3 +chardet==3.0.2 diff --git a/requirements_all.txt b/requirements_all.txt index 1432545bcfd..116099177ac 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -8,7 +8,7 @@ voluptuous==0.9.3 typing>=3,<4 aiohttp==2.0.7 async_timeout==1.2.0 -chardet==2.3 +chardet==3.0.2 # homeassistant.components.nuimo_controller --only-binary=all http://github.com/getSenic/nuimo-linux-python/archive/29fc42987f74d8090d0e2382e8f248ff5990b8c9.zip#nuimo==1.0.0 diff --git a/setup.py b/setup.py index c7a4eaa821c..05f117652d1 100755 --- a/setup.py +++ b/setup.py @@ -24,7 +24,7 @@ REQUIRES = [ 'typing>=3,<4', 'aiohttp==2.0.7', 'async_timeout==1.2.0', - 'chardet==2.3' + 'chardet==3.0.2' ] setup( From 6cbe28a9cd4d68487c754107a30ac53df507faa8 Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Sun, 16 Apr 2017 04:00:01 +0200 Subject: [PATCH 080/146] Send stderr of ping tracker to devnull (#7096) When pinging an inaccessible device, OS errors like ping: sendto: No route to host can occur. For a ping tracker this is not an error but rather a normal situation. Thus, it makes sense to hide the error. --- homeassistant/components/device_tracker/ping.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/device_tracker/ping.py b/homeassistant/components/device_tracker/ping.py index 7c217b7aabb..ee9a4d19d37 100644 --- a/homeassistant/components/device_tracker/ping.py +++ b/homeassistant/components/device_tracker/ping.py @@ -45,7 +45,9 @@ class Host(object): def ping(self): """Send an ICMP echo request and return True if success.""" - pinger = subprocess.Popen(self._ping_cmd, stdout=subprocess.PIPE) + pinger = subprocess.Popen(self._ping_cmd, + stdout=subprocess.PIPE, + stderr=subprocess.DEVNULL) try: pinger.communicate() return pinger.returncode == 0 From 9249b6bc332ec45e81e7c8cc7cad7393da2088e3 Mon Sep 17 00:00:00 2001 From: Marcelo Moreira de Mello Date: Sun, 16 Apr 2017 03:05:15 -0400 Subject: [PATCH 081/146] Upgraded Amcrest module to 1.1.9 to support new firmware versions: (#7130) - V2.400.AC01.15.R.20170328 - V2.420.AC00.17.R.20170322 --- homeassistant/components/camera/amcrest.py | 2 +- homeassistant/components/sensor/amcrest.py | 2 +- requirements_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/camera/amcrest.py b/homeassistant/components/camera/amcrest.py index a50cdc859a7..72d3120c77a 100644 --- a/homeassistant/components/camera/amcrest.py +++ b/homeassistant/components/camera/amcrest.py @@ -18,7 +18,7 @@ from homeassistant.helpers import config_validation as cv from homeassistant.helpers.aiohttp_client import ( async_get_clientsession, async_aiohttp_proxy_web) -REQUIREMENTS = ['amcrest==1.1.8'] +REQUIREMENTS = ['amcrest==1.1.9'] _LOGGER = logging.getLogger(__name__) diff --git a/homeassistant/components/sensor/amcrest.py b/homeassistant/components/sensor/amcrest.py index 2d05372220b..40556fbe5ad 100644 --- a/homeassistant/components/sensor/amcrest.py +++ b/homeassistant/components/sensor/amcrest.py @@ -19,7 +19,7 @@ import homeassistant.loader as loader from requests.exceptions import HTTPError, ConnectTimeout -REQUIREMENTS = ['amcrest==1.1.8'] +REQUIREMENTS = ['amcrest==1.1.9'] _LOGGER = logging.getLogger(__name__) diff --git a/requirements_all.txt b/requirements_all.txt index 116099177ac..f82fbaeaaad 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -55,7 +55,7 @@ alarmdecoder==0.12.1.0 # homeassistant.components.camera.amcrest # homeassistant.components.sensor.amcrest -amcrest==1.1.8 +amcrest==1.1.9 # homeassistant.components.media_player.anthemav anthemav==1.1.8 From 7d761867988a51e2a472be4440e69a2d6a6373a5 Mon Sep 17 00:00:00 2001 From: Gianluca Barbaro Date: Sun, 16 Apr 2017 11:06:57 +0200 Subject: [PATCH 082/146] Mqtt camera (#7092) * first commit * minor fixes * minor fix * async_camera_image + test * minor fix * async calls --- homeassistant/components/camera/mqtt.py | 74 +++++++++++++++++++++++++ tests/components/camera/test_mqtt.py | 28 ++++++++++ 2 files changed, 102 insertions(+) create mode 100755 homeassistant/components/camera/mqtt.py create mode 100644 tests/components/camera/test_mqtt.py diff --git a/homeassistant/components/camera/mqtt.py b/homeassistant/components/camera/mqtt.py new file mode 100755 index 00000000000..39fbdc7fd9f --- /dev/null +++ b/homeassistant/components/camera/mqtt.py @@ -0,0 +1,74 @@ +""" +Camera that loads a picture from an MQTT topic. + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/camera.mqtt/ +""" + +import asyncio +import logging + +import voluptuous as vol + +from homeassistant.core import callback +import homeassistant.components.mqtt as mqtt +from homeassistant.const import CONF_NAME +from homeassistant.components.camera import Camera, PLATFORM_SCHEMA +from homeassistant.helpers import config_validation as cv + +_LOGGER = logging.getLogger(__name__) + +CONF_TOPIC = 'topic' + +DEFAULT_NAME = 'MQTT Camera' + +DEPENDENCIES = ['mqtt'] + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ + vol.Required(CONF_TOPIC): mqtt.valid_subscribe_topic, + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string +}) + + +@asyncio.coroutine +def async_setup_platform(hass, config, async_add_devices, discovery_info=None): + """Setup the Camera.""" + topic = config[CONF_TOPIC] + + async_add_devices([MqttCamera(config[CONF_NAME], topic)]) + + +class MqttCamera(Camera): + """MQTT camera.""" + + def __init__(self, name, topic): + """Initialize Local File Camera component.""" + super().__init__() + + self._name = name + self._topic = topic + self._qos = 0 + self._last_image = None + + @asyncio.coroutine + def async_camera_image(self): + """Return image response.""" + return self._last_image + + @property + def name(self): + """Return the name of this camera.""" + return self._name + + def async_added_to_hass(self): + """Subscribe mqtt events. + + This method must be run in the event loop and returns a coroutine. + """ + @callback + def message_received(topic, payload, qos): + """A new MQTT message has been received.""" + self._last_image = payload + + return mqtt.async_subscribe( + self.hass, self._topic, message_received, self._qos, None) diff --git a/tests/components/camera/test_mqtt.py b/tests/components/camera/test_mqtt.py new file mode 100644 index 00000000000..35552ca805e --- /dev/null +++ b/tests/components/camera/test_mqtt.py @@ -0,0 +1,28 @@ +"""The tests for mqtt camera component.""" +import asyncio + +from homeassistant.setup import async_setup_component +import homeassistant.components.mqtt as mqtt + + +@asyncio.coroutine +def test_run_camera_setup(hass, test_client): + """Test that it fetches the given dispatcher data.""" + topic = 'test/camera' + yield from async_setup_component(hass, 'camera', { + 'camera': { + 'platform': 'mqtt', + 'topic': topic, + 'name': 'Test Camera', + }}) + + client = yield from test_client(hass.http.app) + + mqtt.publish(hass, topic, 0xFFD8FF) + yield from hass.async_block_till_done() + + resp = yield from client.get('/api/camera_proxy/camera.test_camera') + + assert resp.status == 200 + body = yield from resp.text() + assert body == '16767231' From 3528705afd2f230b2ec5eacf8a69d1d57caf1cb4 Mon Sep 17 00:00:00 2001 From: Martin Hjelmare Date: Sun, 16 Apr 2017 13:27:25 +0200 Subject: [PATCH 083/146] Bump version to 0.43.0.dev0 (#7132) --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index b73f64bfa72..a65b721625c 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -1,7 +1,7 @@ # coding: utf-8 """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 -MINOR_VERSION = 42 +MINOR_VERSION = 43 PATCH_VERSION = '0.dev0' __short_version__ = '{}.{}'.format(MAJOR_VERSION, MINOR_VERSION) __version__ = '{}.{}'.format(__short_version__, PATCH_VERSION) From a1208261a8c17aa17be5d6dde928284d2889a9a1 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 16 Apr 2017 11:10:55 -0700 Subject: [PATCH 084/146] Load zwave panel (#7127) * Load Z-Wave panel when component loads * Update frontend * Fix tests --- homeassistant/bootstrap.py | 3 ++- homeassistant/components/frontend/version.py | 15 ++++++++------- .../frontend/www_static/compatibility.js | 2 +- .../frontend/www_static/compatibility.js.gz | Bin 362 -> 360 bytes .../components/frontend/www_static/core.js | 2 +- .../components/frontend/www_static/core.js.gz | Bin 2695 -> 2682 bytes .../frontend/www_static/frontend.html | 16 ++++++++-------- .../frontend/www_static/frontend.html.gz | Bin 139452 -> 139925 bytes .../www_static/home-assistant-polymer | 2 +- .../www_static/panels/ha-panel-config.html | 2 +- .../www_static/panels/ha-panel-config.html.gz | Bin 17039 -> 17135 bytes .../panels/ha-panel-dev-service.html | 2 +- .../panels/ha-panel-dev-service.html.gz | Bin 17902 -> 17941 bytes .../www_static/panels/ha-panel-history.html | 2 +- .../panels/ha-panel-history.html.gz | Bin 11885 -> 11892 bytes .../www_static/panels/ha-panel-logbook.html | 4 ++-- .../panels/ha-panel-logbook.html.gz | Bin 34867 -> 34883 bytes .../www_static/panels/ha-panel-zwave.html | 1 + .../www_static/panels/ha-panel-zwave.html.gz | Bin 0 -> 5936 bytes .../frontend/www_static/service_worker.js | 2 +- .../frontend/www_static/service_worker.js.gz | Bin 2513 -> 2506 bytes homeassistant/components/zwave/__init__.py | 4 ++++ 22 files changed, 32 insertions(+), 25 deletions(-) create mode 100644 homeassistant/components/frontend/www_static/panels/ha-panel-zwave.html create mode 100644 homeassistant/components/frontend/www_static/panels/ha-panel-zwave.html.gz diff --git a/homeassistant/bootstrap.py b/homeassistant/bootstrap.py index 4c586d12ccd..afcd2717e72 100644 --- a/homeassistant/bootstrap.py +++ b/homeassistant/bootstrap.py @@ -27,7 +27,8 @@ _LOGGER = logging.getLogger(__name__) ERROR_LOG_FILENAME = 'home-assistant.log' FIRST_INIT_COMPONENT = set(( - 'recorder', 'mqtt', 'mqtt_eventstream', 'logger', 'introduction')) + 'recorder', 'mqtt', 'mqtt_eventstream', 'logger', 'introduction', + 'frontend')) def from_config_dict(config: Dict[str, Any], diff --git a/homeassistant/components/frontend/version.py b/homeassistant/components/frontend/version.py index 44563480cdb..408d40092a0 100644 --- a/homeassistant/components/frontend/version.py +++ b/homeassistant/components/frontend/version.py @@ -1,20 +1,21 @@ """DO NOT MODIFY. Auto-generated by script/fingerprint_frontend.""" FINGERPRINTS = { - "compatibility.js": "83d9c77748dafa9db49ae77d7f3d8fb0", - "core.js": "5d08475f03adb5969bd31855d5ca0cfd", - "frontend.html": "feaf3e9453eca239f29eb10e7645a84f", + "compatibility.js": "c679589d32e0588becbf104d9907e96a", + "core.js": "4073d1aa7a9367ac39f33f43c34b51c9", + "frontend.html": "1f8de6ac579f877695ccd06a60a8d703", "mdi.html": "989f02c51eba561dc32b9ecc628a84b3", "micromarkdown-js.html": "93b5ec4016f0bba585521cf4d18dec1a", - "panels/ha-panel-config.html": "6dcb246cd356307a638f81c4f89bf9b3", + "panels/ha-panel-config.html": "41395854f8e541c9fee32615e1fc315f", "panels/ha-panel-dev-event.html": "1f169700c2345785855b1d7919d12326", "panels/ha-panel-dev-info.html": "61610e015a411cfc84edd2c4d489e71d", - "panels/ha-panel-dev-service.html": "0fe8e6acdccf2dc3d1ae657b2c7f2df0", + "panels/ha-panel-dev-service.html": "4a8cc058f68f737b8129196e3033ef37", "panels/ha-panel-dev-state.html": "48d37db4a1d6708314ded1d624d0f4d4", "panels/ha-panel-dev-template.html": "6f353392d68574fbc5af188bca44d0ae", - "panels/ha-panel-history.html": "6945cebe5d8075aae560d2c4246b063f", + "panels/ha-panel-history.html": "c136dc6b97bb7c619b33f12232cf129b", "panels/ha-panel-iframe.html": "d920f0aa3c903680f2f8795e2255daab", - "panels/ha-panel-logbook.html": "a1fc2b5d739bedb9d87e4da4cd929a71", + "panels/ha-panel-logbook.html": "5cd70ad9981d846c9bb6f57b0adfe0e3", "panels/ha-panel-map.html": "e3c7a54f90dd4269d7e53cdcd96514c6", + "panels/ha-panel-zwave.html": "c014a55b05832b195339aa1dde98c563", "websocket_test.html": "575de64b431fe11c3785bf96d7813450" } diff --git a/homeassistant/components/frontend/www_static/compatibility.js b/homeassistant/components/frontend/www_static/compatibility.js index c152c50ddfa..178d14688ab 100644 --- a/homeassistant/components/frontend/www_static/compatibility.js +++ b/homeassistant/components/frontend/www_static/compatibility.js @@ -1 +1 @@ -!(function(){"use strict";function e(e,r){var t=arguments;if(void 0===e||null===e)throw new TypeError("Cannot convert first argument to object");for(var n=Object(e),o=1;o`6+^lIXOSKAh9GfDKjUtq*5=dn89^|VSclLK?gW3dL=Sj!ynE56h zxsjRVn7Qg!{DBKku6;OnoBOur(u7$XO5ZJW*)i$8q|^C*ZBlj}HXon(D*rm*)h`>6 za4bkT;!Dy&m`jsyi{hPXA_OUPv-|R}p zWI?5ZUfs#RLzIrIKiP2e^wUGf!rn%`Pw_W%xtn?Y5M!F*=a2j97$U39C0^fYOq+PL VsXMY@;{HF3e+^$0$}ur8006Giu3`WH literal 362 zcmb2|=HSpvJRiZtoSdIqkXVwLl$n!RQmL0!%-}lFF#nK&Ke_SRauQ8Y9kY~-@=pPDRD&6MoGa{~V_B-g* zEa-FnCN#%o)xN|fT91!^l;(Q-Y`?1G%am}ny>=J6Ic|J7xa8*_Iqish%kCOqJaa2x z+IAQ7rJGXc=!n}FynB)&KjqRnz0%y|Z>8(E7T(;wsql5#t>?RWKRj!hKjqd(#pmTO zvbc2nTNY@i%GJbAt7EiaQww+1@b0{wm43KlMWVukc>xbTL>TqHp3kxFwNvx;*CFo? zvbXTeNqYUrF7(A|;Z5__e%X;IKdWxl^j|KGo9%YpI4s3xdguSAqVEySdBHZn1s>00 XJKP=PX{xdE%xU=(8r!v0m>3uU9geas diff --git a/homeassistant/components/frontend/www_static/core.js b/homeassistant/components/frontend/www_static/core.js index df563364eaa..7e0557be497 100644 --- a/homeassistant/components/frontend/www_static/core.js +++ b/homeassistant/components/frontend/www_static/core.js @@ -1 +1 @@ -!(function(){"use strict";function e(e){return{type:"auth",api_password:e}}function t(){return{type:"get_states"}}function n(){return{type:"get_config"}}function r(){return{type:"get_services"}}function i(){return{type:"get_panels"}}function s(e,t,n){var r={type:"call_service",domain:e,service:t};return n&&(r.service_data=n),r}function o(e){var t={type:"subscribe_events"};return e&&(t.event_type=e),t}function c(e){return{type:"unsubscribe_events",subscription:e}}function u(){return{type:"ping"}}function a(e,t){return{type:"result",success:!1,error:{code:e,message:t}}}function f(t,n){function r(i,s,o){var c=new WebSocket(t),u=!1,a=function(){if(u)return void o(C);if(0===i)return void o(O);var e=i===-1?-1:i-1;setTimeout((function(){return r(e,s,o)}),1e3)},f=function(t){var r=JSON.parse(t.data);switch(r.type){case"auth_required":"authToken"in n?c.send(JSON.stringify(e(n.authToken))):(u=!0,c.close());break;case"auth_invalid":u=!0,c.close();break;case"auth_ok":c.removeEventListener("message",f),c.removeEventListener("close",a),s(c)}};c.addEventListener("message",f),c.addEventListener("close",a)}return new Promise(function(e,t){return r(n.setupRetry||0,e,t)})}function d(e){return e.result}function v(e,t){return void 0===t&&(t={}),f(e,t).then((function(n){var r=new L(e,t);return r.setSocket(n),r}))}function h(e,t){return e._subscribeConfig?e._subscribeConfig(t):new Promise(function(n,r){var i=null,s=null,o=[],c=null;t&&o.push(t);var u=function(e){i=Object.assign({},i,e);for(var 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 literal 2695 zcmb2|=HSpvJRiZtoSa{js+U#Fur@L}|F)G--TnB9FAfTruaTPHTsu*V<*tdvTP5Ev zwd!995^YMoxn_J%mumb@k^TRD?!vq)NBx-JI7@fS@U<8JOlz|#eZI42tH;vQWq$Jx zdM=yVu~j(avHAn1+nN`4PO|>HhwXl6(cY4ZEn=HXr=;EvQMG&X{VUVkvKQhD(r5OW zr1ZI}wV!wta_;CMwczGE4!JIOo~gHST%Xty+O1REn5}m+Pk5!U=(H_`TcSc^WalmM zpE$wpL(!4zzZWFbD!D6%S3dor(^(?obu9F-y=tjoe(c9{pW1c89xIrpvR-kbH>CrnMJ73ibMNCGEC2b-?9-&%yel zg$jjT9XtHx9j%yRpD4MpPwdQ|5omL=b%y=!2VU#dQhI*st$H};c-$VZLi=M)?5r1) zFT7EBq87z@XMyjH#oqF=_TNNomP+qX+P*_%KB@sX!*B^MdjfK zSKUvKbBsF{+j;A05!2-fO>(+vPbRNzU=qGqGAWqrzK{U>jbkgB`fhyM;-~s>W;{>j zS&n~G3YWwhe7xav;h2VTpt8im`=6dn{kxNgTTN!|dr<}dUF*-au~`&-=$y50&x4MS zdh670n%q&n;IO`Vqhi9;lz)7w7bVV3T+NaHt>*KrB(IGrE3`L?{9AM6l#@4?rE16- zH{~yKXVO^PMO?YOZpuHjEH-|&P&>wzBWB%R^9Sp=lvPwer~Z)7n)s2!b`s0o=q z&t0mu^_lpN#l~m#(rV+pefwt0MAzP(+O#X@R`*^j<3mqsyspjYSzZw|u?7-Yd?T2jaI&eCBxHBPY^^b4)j zh!FU;ig}9k>`4amPfSah{7*7VCn#mA$p0SBHjzlx?B9nSz8wgeVq;x%(n2i3=4icP zmbB}u=N)Y&0j=8M(#FPiGxm1xWSii*e>dBEj>!UFp0KZQ@K<^AKxXNhi)ZlBZN>VnjlNqnfbn@GBmTThDhaW$5+XzK8vL%^rovzRKY^L_D0EaR| zlM0*b5w1nt4UZTZR-I2Z;HVVaTHPR5xUnob<+=R>`I{=zjaB0Ei@e@5eU~5}XSHU3@mUjYfM-*>vn|xZydb;bB(@EF7E@*}p&M;fdCA>&VxTKdeu$MD0PvG?o z|8$oN;afc~NB%B9tK*)(UvcXG;TXOK|0}HXXB<#>`!I7qW6dS0nrG`9 z`yEy&M4x$-sv^#&!Bg@5dp4u%g!V@fQ_|TN+0;f)vEQ2IFez4B-23RQZGF#g#C@=F zxxdU#I{J&TbyRt2dYj_vjRo~5F1pX|kT|h&SEGb2ug2C>d}n6xWV8MVoy?{_g=Mzy zTNXZN&OK%f35G%z+*6-rv+w=InXXsz(1NLuA>G;Wb`tMIt=-aD$=#)HIgcFoUf#Q~ z>2!jw;gM%ERuy>mRvMU=rPZYKO-#IXe(6unPJP`QH~z)HZ9dViW)=GF)lv_k3CwMe zby>}WZ|s_yrtmy)O=v|Yb8C2FK_feVN&WZf;@dS=^!_fFd3LdEM*KI?o2P2m3g@%r zxG%mG&-K6NXyB{Oi}m&e?p|x{oc#a#-jfQ?b1j}tf0+L#{fG7bcP1)TnnwEJs|EJI zNYCPWqjP21KQreDJzH0!pOX}%s};Dlxi$o@lr*b-RsQAOl+6?+zI++n}aNCJ3U`3cFFH_ zwF@!wIKNAZdm)Rs^5d8lO_@_?tx(>qd+Dm*acS@}z6G%0;QpyH;zYO@y8t!ln0 zviUcsY3=wWcUY^Ksnkn6Y4OB0T?(yJ{h#mI>cm%(@PP0AuTM?vR`a+{-MM$`+>Tjy z-FS{YwA_AY&#o6)#;dxIHOg&`;4#wNyHBfm>uIlYPqrOX|2~!eu`>Bjm)j5CJ4X!j z?#g`)&HJQazU!_Y|LspkT;IZHgk66s+c&qs_Qmdl+HY1$rLey~6U)t9!?K@?*=KJ6 z_rvc~RoctC4SR$Cy%WC_ni!;ft3|_i;-#3sdrNp*hBjduDG$Z zB=o+(R;C+$^AEm$uH19#E+6BejoPu7<6o(n&S`zTV8c99i3HYp3-*;Pb~5Ds_$G4K zt%iP^hDq(~zs1}x3KYLQao6OPzlEa1e_Ysi==wL&eTAyW^OqXFd3AB!+cUwo7q;Zx zJsmDI|I@Te^_>!rg5~<7K0nN~GXA)nUF?{*yo|!u?QzSC9{%|4xHP70;kF7@L$f1O z64PH?(|c3!&?kIZuR(BeaTJH&*}fv>@9O0Ot5l|JH_BW#SLydWK8D(t%fkHpT*Smr zul&lx7b9}JRN=nqdA5I+W|NGzEPQ-G`-03~#_Us#;*7g5+$8~oBhM%^Eciw%laub&G=}g-QuaUjd@wNY`!9uy2Nfx z%nq-|9T{C59ha}RZa!;t{P=&_RrAlw{Qq11e2w>Bm-{xw_uR8T)^YQ*hFHD0xXr%z zeD)swc~dqlVEX(l+WziE?YGAs+;dQjS{HkPwQuK9!>t)hC1=*T=!rkQzNz-pdcDuO z6T{1`La$U@k(Q4sF9|)nW%HSs$k6Ra?1R2?oZ1uTCcUv^!pV$~b+60$OI+V>X<8ij nbgM+wRnx7n_pE=nc>B>a=g(*^I+1$t{y+8}b;k5|1qKEHBbqEm diff --git a/homeassistant/components/frontend/www_static/frontend.html b/homeassistant/components/frontend/www_static/frontend.html index ce38aab6821..cb89b1a8b6b 100644 --- a/homeassistant/components/frontend/www_static/frontend.html +++ b/homeassistant/components/frontend/www_static/frontend.html @@ -1,7 +1,7 @@ - \ No newline at end of file +}()); \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/frontend.html.gz b/homeassistant/components/frontend/www_static/frontend.html.gz index f41ff60ac7600e79608fd580e7832c236c02c5d9..90e1acbd1c78ebda78022b47aa20908668eff1a7 100644 GIT binary patch delta 138734 zcmdmUkYnmm4tDu&4vw&wpC+;^2?_X~%`5VAIN0MhZL^)^?PA@t6RoxDr@g)V>gq|O z^J44$-hDE=JzIbCu9LS-e!Tp2_TqoOxVd|t^k2XF=;76qi++^mN9u@G&SX1y@9W`< z>tA2B(eB>=?8Bc|OJ-g_TKhZee_HIh+l#agXDHXdd-`F+if6BP@5y1macjZ3_p9PR zU*5L1`*rE;_Jh0Dd|npycb0xr#_yFH;#cdJAKd@+divG7wV_U1)8^=kJ>P$5y?ocQ zv#0m)F~9!pF7e7);CY~sNb2nCk|lq$<(6cws#>@4gzN0BKOZL>w9i_-=dHG3o1yw$ zz4-cy@-WBGAJ&}`Gl+OmAnmqM;$#2SR}b~pUq0)4Z<}l7Z51|)y0fqL+HCctP3^X&DhUxW8f`nqWLD!z?Q($`Pbz->*kRw} zR(fw;cEq}a%h%-SPm|;^;g$N;op6f1`<31~_S0(w<@c{&6cgK}>ObyY4~^c+ z|NUnI--4WCy>A;=-QsvPRZ_2WMV3i%!3O;Wht4yku$=eZ80EOObn)sJg|addydP%V z3;vwXsQ7AIpffjD6{E+-<Aa=4H$=Y5xx3}++>GU(Pj%j0 z@9)2NeV6EFSJPnA>^UnqE$a1jAAVM5vbpDQkg3V|{_-#_ecxcTtnMc+`@M%J=wn_6bq32Qd(x2rjmUtgGf z?Z=yZrdxWmwm*N_*BN__b;1_0NUFQ?hS}yY33SKe@*G6#LI~ z1#fN!zlam}S5`?MO*+tQ=6)sPb^F0JYCo=Ss26==pfy>1HSLt5O z)Rp)kee>q`$jRBO7P)6kmpGI6`P&@3XWjBo*Erc$uuKhQ^jozkn>`CUvI``9Cfiy@ zTInVyE3SR@c2fphn0xc@(#MTy+VGc~bOV!KxHZ~g2NW92-BoA!O_ z#f>3bg62=F^t|IHej}!}g1s(GRP{;X)_0rYiy{!EaxC?CGQb=9lg}$GP1;m35QpFJY&vnz;_fZ0p>co(S_rPj9+=&mie?6oQkgChFKpZ$V(qrBbOK}eCjljC?(_E<#kCb<(oCD2Wvpl!~T@h#%exm zY0Vv{?KbNq78Up$TUQ+MBc`}?-gJjMpF$^h$8J9{`)h7k{e1n#{i|QG?c23N`IZ1{ zPQA^h{enTI#~R8y=1s&Xzb8XkJ*^6{$rS5Zh zH$`>2D}RBbgSM27LH(}%YZ+tDdDlc-Fwc_USfp6oeaJmqk5_4etK|EmjlDORW^Wg5 zna=;rK2`h1iz8kCqC~k1znm9~oP9R!#9b~avu3^e`_mjaHido+KXCu=!iJ-30`d!! zo)v$OnIovW{h(rk>1)PmD>Pc<**k%*XVgm%DLR-e%Srz4vira-Mgf*D!DqMh=+!NF-<-ni^WyPi zyMH≧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%0D()!DNhl={ykv8^n9C|#Sq>O{oi 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 diff --git a/homeassistant/components/frontend/www_static/home-assistant-polymer b/homeassistant/components/frontend/www_static/home-assistant-polymer index abbdc6f0555..10d09a9408f 160000 --- a/homeassistant/components/frontend/www_static/home-assistant-polymer +++ b/homeassistant/components/frontend/www_static/home-assistant-polymer @@ -1 +1 @@ -Subproject commit abbdc6f055524c5d3ed0bb50e35400fed40d573f +Subproject commit 10d09a9408fccf03e989e071ac626e6a06bd125a diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-config.html b/homeassistant/components/frontend/www_static/panels/ha-panel-config.html index 62a9e31885b..0dd41d2581b 100644 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-config.html +++ b/homeassistant/components/frontend/www_static/panels/ha-panel-config.html @@ -1,4 +1,4 @@ -

\ No newline at end of file + \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-service.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-dev-service.html.gz index c094f8d9fb0fe662c7cee283ca8ec842dfd41a80..408f974b4e50d04807b0c383b7157606b8e73b63 100644 GIT binary patch literal 17941 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

H(XSr3ecB;{azX4G_ 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 PfAV|8OqN&+GBN-FahlGd diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-history.html b/homeassistant/components/frontend/www_static/panels/ha-panel-history.html index 5d1f6163383..c50633e74dd 100644 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-history.html +++ b/homeassistant/components/frontend/www_static/panels/ha-panel-history.html @@ -1 +1 @@ -

\ No newline at end of file + \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-history.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-history.html.gz index 4d7d1ec9bad4e30fc9190db079a57acc271691a8..d7f2133ac54375cd2f9e0b9465e4d01f85c0eaa4 100644 GIT binary patch delta 11572 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

1$t?9| zv9q>{)jw*#;5Omb!ATw)?z!yV+2g*V{o(O_R=yvEQ?p~$mKk|@jBV`uP7x;uoy!nXi2Arkq@Z zjH(?6Ys_=r59S;U2k%dCIH7mp1^Z66*b)c%ErFd%^Xwc&9Q7986qlUvNIxdxp!(NN zb{&=TuggE2*?%nI`m>lXscl)ZU#bq=JF?_yI@6kc-@kmQ2t61jAmz1f(QIY)wLEXx zDiU8mnV2E%F?WgB)gIUS!>s}_7u;t^9pJwvy-j*`GTy$C8gA?Eg3 zZ^xEyofR)WGA}$GJNLu46*J@RdCRew*fMi-PGm{vt^RMoHf2xX9;~kULBpaYl*L!n*Z|+cV9Jj-e`$EW>>jCYsZAl9Ffoq8%5Uf@%h&8+5D|X zx7uP)h%Vb&XHQ)4b-#HJu{SnbCdMK5l*H zt9P#^-buC5SZ=9Ze&+qmr0s1tdF&6QMb#Vbu=9DqC!jOKyd?6&o72YH4I4Mj4>Av* z+cj(97bo`S3rl>Y0u}%L-FZ@6jsMh-^y{~mN7sKS=e%*^^2SGfkA>grwCBG_Sbo|3EhFib$ z^N7#WyuN??Gp|lSebM^mB@b;RPJb7lJkwy&gpY5`*4C<;C#r8qG7p+AB4!mGb8lLi jdCsi}!6?Io)khf?MM}sWI{Wm|hk9nk(-KWd>lhdSp-FlK delta 11550 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

xbzqfuHm0FL+J3TA(3Q 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 F3;@nUT2lZ3 diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-logbook.html b/homeassistant/components/frontend/www_static/panels/ha-panel-logbook.html index 3cdf5654da8..51ef5e1e043 100644 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-logbook.html +++ b/homeassistant/components/frontend/www_static/panels/ha-panel-logbook.html @@ -1,2 +1,2 @@ -

\ No newline at end of file + \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-logbook.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-logbook.html.gz index 728de3ce443a1e49a2582588f5ede6a44dcf7993..23c8ae4b59490d28a524a45c9ed1c6647ef4a52d 100644 GIT binary patch delta 34369 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 delta 34307 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
32{E2J{%_R{Ab=P@> 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 diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-zwave.html b/homeassistant/components/frontend/www_static/panels/ha-panel-zwave.html new file mode 100644 index 00000000000..85ded22435a --- /dev/null +++ b/homeassistant/components/frontend/www_static/panels/ha-panel-zwave.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-zwave.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-zwave.html.gz new file mode 100644 index 0000000000000000000000000000000000000000..711692041f33c43684ea86836c5ca13555b77fdc GIT binary patch literal 5936 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 bE|pT(WAg5GC+mHF{%36dy}&Ctl7RsLg`tMu literal 0 HcmV?d00001 diff --git a/homeassistant/components/frontend/www_static/service_worker.js b/homeassistant/components/frontend/www_static/service_worker.js index 8f2d6161e73..eddca3a2331 100644 --- a/homeassistant/components/frontend/www_static/service_worker.js +++ b/homeassistant/components/frontend/www_static/service_worker.js @@ -1 +1 @@ -"use strict";function setOfCachedUrls(e){return e.keys().then(function(e){return e.map(function(e){return e.url})}).then(function(e){return new Set(e)})}function notificationEventCallback(e,t){firePushCallback({action:t.action,data:t.notification.data,tag:t.notification.tag,type:e},t.notification.data.jwt)}function firePushCallback(e,t){delete e.data.jwt,0===Object.keys(e.data).length&&e.data.constructor===Object&&delete e.data,fetch("/api/notify.html5/callback",{method:"POST",headers:new Headers({"Content-Type":"application/json",Authorization:"Bearer "+t}),body:JSON.stringify(e)})}var precacheConfig=[["/","e908e36c8b741daeb2387aab993051a0"],["/frontend/panels/dev-event-1f169700c2345785855b1d7919d12326.html","3975cb76bc0b7b1e26416ca6d1d8e716"],["/frontend/panels/dev-info-61610e015a411cfc84edd2c4d489e71d.html","6568377ee31cbd78fedc003b317f7faf"],["/frontend/panels/dev-service-0fe8e6acdccf2dc3d1ae657b2c7f2df0.html","e1f927a20bc1e8ee0dde85e8173539bc"],["/frontend/panels/dev-state-48d37db4a1d6708314ded1d624d0f4d4.html","ca4fa5299da2a6c7e595cef38a5cee31"],["/frontend/panels/dev-template-6f353392d68574fbc5af188bca44d0ae.html","16e3e7de4dcb93b9cb05486adef915a3"],["/frontend/panels/map-e3c7a54f90dd4269d7e53cdcd96514c6.html","aa36ba71ab2ff533f7fd3d0a4fddbdeb"],["/static/compatibility-83d9c77748dafa9db49ae77d7f3d8fb0.js","5f05c83be2b028d577962f9625904806"],["/static/core-5d08475f03adb5969bd31855d5ca0cfd.js","1cd99ba798bfcff9768c9d2bb2f58a7c"],["/static/frontend-feaf3e9453eca239f29eb10e7645a84f.html","286783bbce5966d43fe56c50cbc338b7"],["/static/mdi-4921d26f29dc148c3e8bd5bcd8ce5822.html","14b01c4c4c7a06d156acd83862082ab3"],["static/fonts/roboto/Roboto-Bold.ttf","d329cc8b34667f114a95422aaad1b063"],["static/fonts/roboto/Roboto-Light.ttf","7b5fb88f12bec8143f00e21bc3222124"],["static/fonts/roboto/Roboto-Medium.ttf","fe13e4170719c2fc586501e777bde143"],["static/fonts/roboto/Roboto-Regular.ttf","ac3f799d5bbaf5196fab15ab8de8431c"],["static/icons/favicon-192x192.png","419903b8422586a7e28021bbe9011175"],["static/icons/favicon.ico","04235bda7843ec2fceb1cbe2bc696cf4"],["static/images/card_media_player_bg.png","a34281d1c1835d338a642e90930e61aa"],["static/webcomponents-lite.min.js","32b5a9b7ada86304bec6b43d3f2194f0"]],cacheName="sw-precache-v3--"+(self.registration?self.registration.scope:""),ignoreUrlParametersMatching=[/^utm_/],addDirectoryIndex=function(e,t){var n=new URL(e);return"/"===n.pathname.slice(-1)&&(n.pathname+=t),n.toString()},cleanResponse=function(e){return e.redirected?("body"in e?Promise.resolve(e.body):e.blob()).then(function(t){return new Response(t,{headers:e.headers,status:e.status,statusText:e.statusText})}):Promise.resolve(e)},createCacheKey=function(e,t,n,a){var c=new URL(e);return a&&c.pathname.match(a)||(c.search+=(c.search?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(n)),c.toString()},isPathWhitelisted=function(e,t){if(0===e.length)return!0;var n=new URL(t).pathname;return e.some(function(e){return n.match(e)})},stripIgnoredUrlParameters=function(e,t){var n=new URL(e);return n.search=n.search.slice(1).split("&").map(function(e){return e.split("=")}).filter(function(e){return t.every(function(t){return!t.test(e[0])})}).map(function(e){return e.join("=")}).join("&"),n.toString()},hashParamName="_sw-precache",urlsToCacheKeys=new Map(precacheConfig.map(function(e){var t=e[0],n=e[1],a=new URL(t,self.location),c=createCacheKey(a,hashParamName,n,!1);return[a.toString(),c]}));self.addEventListener("install",function(e){e.waitUntil(caches.open(cacheName).then(function(e){return setOfCachedUrls(e).then(function(t){return Promise.all(Array.from(urlsToCacheKeys.values()).map(function(n){if(!t.has(n)){var a=new Request(n,{credentials:"same-origin"});return fetch(a).then(function(t){if(!t.ok)throw new Error("Request for "+n+" returned a response with status "+t.status);return cleanResponse(t).then(function(t){return e.put(n,t)})})}}))})}).then(function(){return self.skipWaiting()}))}),self.addEventListener("activate",function(e){var t=new Set(urlsToCacheKeys.values());e.waitUntil(caches.open(cacheName).then(function(e){return e.keys().then(function(n){return Promise.all(n.map(function(n){if(!t.has(n.url))return e.delete(n)}))})}).then(function(){return self.clients.claim()}))}),self.addEventListener("fetch",function(e){if("GET"===e.request.method){var t,n=stripIgnoredUrlParameters(e.request.url,ignoreUrlParametersMatching);t=urlsToCacheKeys.has(n);t||(n=addDirectoryIndex(n,"index.html"),t=urlsToCacheKeys.has(n));!t&&"navigate"===e.request.mode&&isPathWhitelisted(["^((?!(static|api|local|service_worker.js|manifest.json)).)*$"],e.request.url)&&(n=new URL("/",self.location).toString(),t=urlsToCacheKeys.has(n)),t&&e.respondWith(caches.open(cacheName).then(function(e){return e.match(urlsToCacheKeys.get(n)).then(function(e){if(e)return e;throw Error("The cached response that was expected is missing.")})}).catch(function(t){return console.warn('Couldn\'t serve response for "%s" from cache: %O',e.request.url,t),fetch(e.request)}))}}),self.addEventListener("push",function(e){var t;e.data&&(t=e.data.json(),e.waitUntil(self.registration.showNotification(t.title,t).then(function(e){firePushCallback({type:"received",tag:t.tag,data:t.data},t.data.jwt)})))}),self.addEventListener("notificationclick",function(e){var t;notificationEventCallback("clicked",e),e.notification.close(),e.notification.data&&e.notification.data.url&&(t=e.notification.data.url)&&e.waitUntil(clients.matchAll({type:"window"}).then(function(e){var n,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 diff --git a/homeassistant/components/zwave/__init__.py b/homeassistant/components/zwave/__init__.py index eb755dbf1b8..0a32a664dc3 100755 --- a/homeassistant/components/zwave/__init__.py +++ b/homeassistant/components/zwave/__init__.py @@ -26,6 +26,7 @@ import homeassistant.config as conf_util import homeassistant.helpers.config_validation as cv from homeassistant.helpers.dispatcher import ( async_dispatcher_connect, async_dispatcher_send) +from homeassistant.components.frontend import register_built_in_panel from . import const from .const import DOMAIN @@ -615,6 +616,9 @@ def setup(hass, config): hass.bus.listen_once(EVENT_HOMEASSISTANT_START, start_zwave) + if 'frontend' in hass.config.components: + register_built_in_panel(hass, 'zwave', 'Z-Wave', 'mdi:nfc') + return True From 75242e67a793156a768eed94634751d015db7686 Mon Sep 17 00:00:00 2001 From: Patrik Date: Sun, 16 Apr 2017 20:35:52 +0200 Subject: [PATCH 085/146] IKEA Tradfri Gateway: added support for RGB (#7115) * After rebase and all fixes * Added color_rgb_to_hex to util.color * Added test_color_rgb_to_hex * Changed reference to color_rgb_to_hex * Bumped to pytradfri 0.5, having support for retry * Bumped to pytradfri 0.5, having support for retry * Bumped to pytradfri 0.5, having support for retry * Bumped to pytradfri 0.5, having support for retry * Rolled back to 0.4 * Rolled back to 0.4 --- homeassistant/components/light/tradfri.py | 42 ++++++++++++++++------- homeassistant/util/color.py | 5 +++ tests/util/test_color.py | 5 +++ 3 files changed, 39 insertions(+), 13 deletions(-) diff --git a/homeassistant/components/light/tradfri.py b/homeassistant/components/light/tradfri.py index 1b2e42b5b99..4a2641dc338 100644 --- a/homeassistant/components/light/tradfri.py +++ b/homeassistant/components/light/tradfri.py @@ -5,16 +5,16 @@ import logging import voluptuous as vol -# Import the device class from the component that you want to support -from homeassistant.components.light import ATTR_BRIGHTNESS, \ - SUPPORT_BRIGHTNESS, Light, PLATFORM_SCHEMA -from homeassistant.const import CONF_HOST, CONF_API_KEY +import homeassistant.util.color as color_util +from homeassistant.components.light import ( + ATTR_BRIGHTNESS, ATTR_RGB_COLOR, Light, + PLATFORM_SCHEMA, SUPPORT_BRIGHTNESS, SUPPORT_RGB_COLOR) +from homeassistant.const import CONF_API_KEY, CONF_HOST import homeassistant.helpers.config_validation as cv +SUPPORTED_FEATURES = (SUPPORT_BRIGHTNESS | SUPPORT_RGB_COLOR) -SUPPORTED_FEATURES = (SUPPORT_BRIGHTNESS) - -# Home Assistant depends on 3rd party packages for API specific code. +# https://github.com/ggravlingen/pytradfri REQUIREMENTS = ['pytradfri==0.4'] _LOGGER = logging.getLogger(__name__) @@ -31,7 +31,6 @@ def setup_platform(hass, config, add_devices, discovery_info=None): import pytradfri # Assign configuration variables. - # The configuration check takes care they are present. host = config.get(CONF_HOST) securitycode = config.get(CONF_API_KEY) @@ -58,7 +57,9 @@ class IKEATradfri(Light): self._light_control = light.light_control self._light_data = light.light_control.lights[0] self._name = light.name + self._brightness = None + self._rgb_color = None @property def supported_features(self): @@ -80,21 +81,36 @@ class IKEATradfri(Light): """Brightness of the light (an integer in the range 1-255).""" return self._light_data.dimmer + @property + def rgb_color(self): + """RGB color of the light.""" + return self._rgb_color + def turn_off(self, **kwargs): """Instruct the light to turn off.""" return self._light_control.set_state(False) def turn_on(self, **kwargs): - """Instruct the light to turn on.""" + """ + Instruct the light to turn on. + + After adding "self._light_data.hexcolor is not None" + for ATTR_RGB_COLOR, this also supports Philips Hue bulbs. + """ if ATTR_BRIGHTNESS in kwargs: self._light.light_control.set_dimmer(kwargs.get(ATTR_BRIGHTNESS)) + if ATTR_RGB_COLOR in kwargs and self._light_data.hex_color is not None: + self._light.light_control.set_hex_color( + color_util.color_rgb_to_hex(*kwargs[ATTR_RGB_COLOR])) else: self._light.light_control.set_state(True) def update(self): - """Fetch new state data for this light. - - This is the only method that should fetch new data for Home Assistant. - """ + """Fetch new state data for this light.""" self._light.update() self._brightness = self._light_data.dimmer + + # Handle Hue lights paired with the gatway + if self._light_data.hex_color is not None: + self._rgb_color = color_util.rgb_hex_to_rgb_list( + self._light_data.hex_color) diff --git a/homeassistant/util/color.py b/homeassistant/util/color.py index 52d7a9f63aa..26a05bbc0bc 100644 --- a/homeassistant/util/color.py +++ b/homeassistant/util/color.py @@ -305,6 +305,11 @@ def color_rgbw_to_rgb(r, g, b, w): return _match_max_scale((r, g, b, w), rgb) +def color_rgb_to_hex(r, g, b): + """Return a RGB color from a hex color string.""" + return '{0:02x}{1:02x}{2:02x}'.format(r, g, b) + + def rgb_hex_to_rgb_list(hex_string): """Return an RGB color value list from a hex color string.""" return [int(hex_string[i:i + len(hex_string) // 3], 16) diff --git a/tests/util/test_color.py b/tests/util/test_color.py index d7560d4f7bf..97e5d0b7927 100644 --- a/tests/util/test_color.py +++ b/tests/util/test_color.py @@ -173,6 +173,11 @@ class TestColorUtil(unittest.TestCase): self.assertEqual((127, 127, 127), color_util.color_rgbw_to_rgb(0, 0, 0, 127)) + def test_color_rgb_to_hex(self): + """Test color_rgb_to_hex.""" + self.assertEqual('000000', + color_util.color_rgb_to_hex(0, 0, 0)) + class ColorTemperatureMiredToKelvinTests(unittest.TestCase): """Test color_temperature_mired_to_kelvin.""" From 951af6c76de58329e6419c6e202b59a03dc8d07a Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 16 Apr 2017 14:37:39 -0700 Subject: [PATCH 086/146] Make Tradfri discoverable (#7128) * Make Tradfri discoverable * Fix lint errors * Fix bugs and clean up calls to light_control * Add more color util tests * Add coap client to dockerfile --- .coveragerc | 3 + Dockerfile | 1 + homeassistant/components/configurator.py | 2 +- homeassistant/components/discovery.py | 2 + homeassistant/components/light/tradfri.py | 57 +++------ homeassistant/components/tradfri.py | 141 +++++++++++++++++++++ requirements_all.txt | 2 +- tests/util/test_color.py | 5 +- virtualization/Docker/scripts/coap_client | 14 ++ virtualization/Docker/scripts/openalpr | 2 +- virtualization/Docker/setup_docker_prereqs | 5 + 11 files changed, 188 insertions(+), 46 deletions(-) create mode 100644 homeassistant/components/tradfri.py create mode 100755 virtualization/Docker/scripts/coap_client diff --git a/.coveragerc b/.coveragerc index 2d40ca8b7b3..ae489fd5926 100644 --- a/.coveragerc +++ b/.coveragerc @@ -97,6 +97,9 @@ omit = homeassistant/components/*/thinkingcleaner.py + homeassistant/components/tradfri.py + homeassistant/components/*/tradfri.py + homeassistant/components/twilio.py homeassistant/components/notify/twilio_sms.py homeassistant/components/notify/twilio_call.py diff --git a/Dockerfile b/Dockerfile index cd219b24084..579229d154a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,6 +8,7 @@ MAINTAINER Paulus Schoutsen #ENV INSTALL_OPENZWAVE no #ENV INSTALL_LIBCEC no #ENV INSTALL_PHANTOMJS no +#ENV INSTALL_COAP_CLIENT no VOLUME /config diff --git a/homeassistant/components/configurator.py b/homeassistant/components/configurator.py index d912f9914b5..3376815b9d5 100644 --- a/homeassistant/components/configurator.py +++ b/homeassistant/components/configurator.py @@ -180,7 +180,7 @@ class Configurator(object): # field validation goes here? - callback(call.data.get(ATTR_FIELDS, {})) + self.hass.async_add_job(callback, call.data.get(ATTR_FIELDS, {})) def _generate_unique_id(self): """Generate a unique configurator ID.""" diff --git a/homeassistant/components/discovery.py b/homeassistant/components/discovery.py index 08190ed1002..7a18148e517 100644 --- a/homeassistant/components/discovery.py +++ b/homeassistant/components/discovery.py @@ -28,11 +28,13 @@ SCAN_INTERVAL = timedelta(seconds=300) SERVICE_NETGEAR = 'netgear_router' SERVICE_WEMO = 'belkin_wemo' SERVICE_HASS_IOS_APP = 'hass_ios' +SERVICE_IKEA_TRADFRI = 'ikea_tradfri' SERVICE_HANDLERS = { SERVICE_HASS_IOS_APP: ('ios', None), SERVICE_NETGEAR: ('device_tracker', None), SERVICE_WEMO: ('wemo', None), + SERVICE_IKEA_TRADFRI: ('tradfri', None), 'philips_hue': ('light', 'hue'), 'google_cast': ('media_player', 'cast'), 'panasonic_viera': ('media_player', 'panasonic_viera'), diff --git a/homeassistant/components/light/tradfri.py b/homeassistant/components/light/tradfri.py index 4a2641dc338..277824f4c64 100644 --- a/homeassistant/components/light/tradfri.py +++ b/homeassistant/components/light/tradfri.py @@ -1,52 +1,29 @@ """Support for the IKEA Tradfri platform.""" -import logging - - -import voluptuous as vol - -import homeassistant.util.color as color_util +from homeassistant.components.tradfri import KEY_GATEWAY from homeassistant.components.light import ( - ATTR_BRIGHTNESS, ATTR_RGB_COLOR, Light, - PLATFORM_SCHEMA, SUPPORT_BRIGHTNESS, SUPPORT_RGB_COLOR) -from homeassistant.const import CONF_API_KEY, CONF_HOST -import homeassistant.helpers.config_validation as cv + ATTR_BRIGHTNESS, SUPPORT_BRIGHTNESS, Light, ATTR_RGB_COLOR, + SUPPORT_RGB_COLOR, PLATFORM_SCHEMA as LIGHT_PLATFORM_SCHEMA) +from homeassistant.util import color as color_util +DEPENDENCIES = ['tradfri'] SUPPORTED_FEATURES = (SUPPORT_BRIGHTNESS | SUPPORT_RGB_COLOR) - -# https://github.com/ggravlingen/pytradfri -REQUIREMENTS = ['pytradfri==0.4'] - -_LOGGER = logging.getLogger(__name__) - -# Validation of the user's configuration -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_HOST): cv.string, - vol.Optional(CONF_API_KEY): cv.string, -}) +PLATFORM_SCHEMA = LIGHT_PLATFORM_SCHEMA def setup_platform(hass, config, add_devices, discovery_info=None): """Setup the IKEA Tradfri Light platform.""" - import pytradfri + if discovery_info is None: + return - # Assign configuration variables. - host = config.get(CONF_HOST) - securitycode = config.get(CONF_API_KEY) - - api = pytradfri.coap_cli.api_factory(host, securitycode) - - gateway = pytradfri.gateway.Gateway(api) + gateway_id = discovery_info['gateway'] + gateway = hass.data[KEY_GATEWAY][gateway_id] devices = gateway.get_devices() lights = [dev for dev in devices if dev.has_light_control] - - _LOGGER.debug("IKEA Tradfri Hub | init | Initialization Process Complete") - - add_devices(IKEATradfri(light) for light in lights) - _LOGGER.debug("IKEA Tradfri Hub | get_lights | All Lights Loaded") + add_devices(Tradfri(light) for light in lights) -class IKEATradfri(Light): +class Tradfri(Light): """The platform class required by hass.""" def __init__(self, light): @@ -57,8 +34,6 @@ class IKEATradfri(Light): self._light_control = light.light_control self._light_data = light.light_control.lights[0] self._name = light.name - - self._brightness = None self._rgb_color = None @property @@ -98,17 +73,17 @@ class IKEATradfri(Light): for ATTR_RGB_COLOR, this also supports Philips Hue bulbs. """ if ATTR_BRIGHTNESS in kwargs: - self._light.light_control.set_dimmer(kwargs.get(ATTR_BRIGHTNESS)) + self._light_control.set_dimmer(kwargs[ATTR_BRIGHTNESS]) + else: + self._light_control.set_state(True) + if ATTR_RGB_COLOR in kwargs and self._light_data.hex_color is not None: self._light.light_control.set_hex_color( color_util.color_rgb_to_hex(*kwargs[ATTR_RGB_COLOR])) - else: - self._light.light_control.set_state(True) def update(self): """Fetch new state data for this light.""" self._light.update() - self._brightness = self._light_data.dimmer # Handle Hue lights paired with the gatway if self._light_data.hex_color is not None: diff --git a/homeassistant/components/tradfri.py b/homeassistant/components/tradfri.py new file mode 100644 index 00000000000..264ac9f42c6 --- /dev/null +++ b/homeassistant/components/tradfri.py @@ -0,0 +1,141 @@ +""" +Support for Ikea Tradfri. + +For more details about this component, please refer to the documentation at +https://home-assistant.io/components/ikea_tradfri/ +""" +import asyncio +import json +import logging +import os + +import voluptuous as vol + +import homeassistant.helpers.config_validation as cv +from homeassistant.helpers import discovery +from homeassistant.const import CONF_HOST, CONF_API_KEY +from homeassistant.loader import get_component +from homeassistant.components.discovery import SERVICE_IKEA_TRADFRI + +DOMAIN = 'tradfri' +CONFIG_FILE = 'tradfri.conf' +KEY_CONFIG = 'tradfri_configuring' +KEY_GATEWAY = 'tradfri_gateway' +REQUIREMENTS = ['pytradfri==0.4'] + +CONFIG_SCHEMA = vol.Schema({ + DOMAIN: vol.Schema({ + vol.Inclusive(CONF_HOST, 'gateway'): cv.string, + vol.Inclusive(CONF_API_KEY, 'gateway'): cv.string, + }) +}, extra=vol.ALLOW_EXTRA) + +_LOGGER = logging.getLogger(__name__) + + +def request_configuration(hass, config, host): + """Request configuration steps from the user.""" + configurator = get_component('configurator') + hass.data.setdefault(KEY_CONFIG, {}) + instance = hass.data[KEY_CONFIG].get(host) + + # Configuration already in progress + if instance: + return + + @asyncio.coroutine + def configuration_callback(callback_data): + """Called when config is submitted.""" + res = yield from _setup_gateway(hass, config, host, + callback_data.get('key')) + if not res: + hass.async_add_job(configurator.notify_errors, instance, + "Unable to connect.") + return + + def success(): + """Set up was successful.""" + conf = _read_config(hass) + conf[host] = {'key': callback_data.get('key')} + _write_config(hass, conf) + hass.async_add_job(configurator.request_done, instance) + + hass.async_add_job(success) + + instance = configurator.request_config( + hass, "IKEA TrĂĄdfri", configuration_callback, + description='Please enter the security code written at the bottom of ' + 'your IKEA TrĂĄdfri Gateway.', + submit_caption="Confirm", + fields=[{'id': 'key', 'name': 'Security Code', 'type': 'password'}] + ) + + +@asyncio.coroutine +def async_setup(hass, config): + """Setup Tradfri.""" + conf = config.get(DOMAIN, {}) + host = conf.get(CONF_HOST) + key = conf.get(CONF_API_KEY) + + @asyncio.coroutine + def gateway_discovered(service, info): + """Called when a gateway is discovered.""" + keys = yield from hass.async_add_job(_read_config, hass) + host = info['host'] + + if host in keys: + yield from _setup_gateway(hass, config, host, keys[host]['key']) + else: + hass.async_add_job(request_configuration, hass, config, host) + + discovery.async_listen(hass, SERVICE_IKEA_TRADFRI, gateway_discovered) + + if host is None: + return True + + return (yield from _setup_gateway(hass, config, host, key)) + + +@asyncio.coroutine +def _setup_gateway(hass, hass_config, host, key): + """Create a gateway.""" + from pytradfri import cli_api_factory, Gateway, RequestError + + try: + api = cli_api_factory(host, key) + except RequestError: + return False + + gateway = Gateway(api) + gateway_id = gateway.get_gateway_info().id + hass.data.setdefault(KEY_GATEWAY, {}) + gateways = hass.data[KEY_GATEWAY] + + # Check if already set up + if gateway_id in gateways: + return True + + gateways[gateway_id] = gateway + hass.async_add_job(discovery.async_load_platform( + hass, 'light', DOMAIN, {'gateway': gateway_id}, hass_config)) + return True + + +def _read_config(hass): + """Read tradfri config.""" + path = hass.config.path(CONFIG_FILE) + + if not os.path.isfile(path): + return {} + + with open(path) as f_handle: + # Guard against empty file + return json.loads(f_handle.read() or '{}') + + +def _write_config(hass, config): + """Write tradfri config.""" + data = json.dumps(config) + with open(hass.config.path(CONFIG_FILE), 'w', encoding='utf-8') as outfile: + outfile.write(data) diff --git a/requirements_all.txt b/requirements_all.txt index f82fbaeaaad..d8a07866d2c 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -655,7 +655,7 @@ python-wink==1.2.3 # homeassistant.components.device_tracker.trackr pytrackr==0.0.5 -# homeassistant.components.light.tradfri +# homeassistant.components.tradfri pytradfri==0.4 # homeassistant.components.device_tracker.unifi diff --git a/tests/util/test_color.py b/tests/util/test_color.py index 97e5d0b7927..bf2f4e5832f 100644 --- a/tests/util/test_color.py +++ b/tests/util/test_color.py @@ -175,8 +175,9 @@ class TestColorUtil(unittest.TestCase): def test_color_rgb_to_hex(self): """Test color_rgb_to_hex.""" - self.assertEqual('000000', - color_util.color_rgb_to_hex(0, 0, 0)) + assert color_util.color_rgb_to_hex(255, 255, 255) == 'ffffff' + assert color_util.color_rgb_to_hex(0, 0, 0) == '000000' + assert color_util.color_rgb_to_hex(51, 153, 255) == '3399ff' class ColorTemperatureMiredToKelvinTests(unittest.TestCase): diff --git a/virtualization/Docker/scripts/coap_client b/virtualization/Docker/scripts/coap_client new file mode 100755 index 00000000000..bbc5ba0a2c2 --- /dev/null +++ b/virtualization/Docker/scripts/coap_client @@ -0,0 +1,14 @@ +#!/bin/sh +# Installs a modified coap client with support for dtls for use with IKEA Tradfri + +# Stop on errors +set -e + +apt-get install -y --no-install-recommends git autoconf automake libtool + +git clone --depth 1 --recursive -b dtls https://github.com/home-assistant/libcoap.git +cd libcoap +./autogen.sh +./configure --disable-documentation --disable-shared +make +make install diff --git a/virtualization/Docker/scripts/openalpr b/virtualization/Docker/scripts/openalpr index ffecc864914..b8fe8d44338 100755 --- a/virtualization/Docker/scripts/openalpr +++ b/virtualization/Docker/scripts/openalpr @@ -12,7 +12,7 @@ PACKAGES=( apt-get install -y --no-install-recommends ${PACKAGES[@]} # Clone the latest code from GitHub -git clone https://github.com/openalpr/openalpr.git /usr/local/src/openalpr +git clone --depth 1 https://github.com/openalpr/openalpr.git /usr/local/src/openalpr # Setup the build directory cd /usr/local/src/openalpr/src diff --git a/virtualization/Docker/setup_docker_prereqs b/virtualization/Docker/setup_docker_prereqs index f2238e43876..69f76e927e2 100755 --- a/virtualization/Docker/setup_docker_prereqs +++ b/virtualization/Docker/setup_docker_prereqs @@ -10,6 +10,7 @@ INSTALL_FFMPEG="${INSTALL_FFMPEG:-yes}" INSTALL_OPENZWAVE="${INSTALL_OPENZWAVE:-yes}" INSTALL_LIBCEC="${INSTALL_LIBCEC:-yes}" INSTALL_PHANTOMJS="${INSTALL_PHANTOMJS:-yes}" +INSTALL_COAP_CLIENT="${INSTALL_COAP_CLIENT:-yes}" # Required debian packages for running hass or components PACKAGES=( @@ -62,6 +63,10 @@ if [ "$INSTALL_PHANTOMJS" == "yes" ]; then virtualization/Docker/scripts/phantomjs fi +if [ "$INSTALL_COAP_CLIENT" == "yes" ]; then + virtualization/Docker/scripts/coap_client +fi + # Remove packages apt-get remove -y --purge ${PACKAGES_DEV[@]} apt-get -y --purge autoremove From 58dfc1d1b1dcaca08662b558b32ff9adc045ca2a Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Sun, 16 Apr 2017 14:53:03 -0700 Subject: [PATCH 087/146] Make version number optional and a string to fix identify issue introduced in iOS 1.0.1 (#7141) --- homeassistant/components/ios.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/ios.py b/homeassistant/components/ios.py index 22f8b832b3d..c5ffc34864c 100644 --- a/homeassistant/components/ios.py +++ b/homeassistant/components/ios.py @@ -138,7 +138,7 @@ IDENTIFY_DEVICE_SCHEMA_CONTAINER = vol.All(dict, IDENTIFY_DEVICE_SCHEMA) IDENTIFY_APP_SCHEMA = vol.Schema({ vol.Required(ATTR_APP_BUNDLE_IDENTIFER): cv.string, vol.Required(ATTR_APP_BUILD_NUMBER): cv.positive_int, - vol.Required(ATTR_APP_VERSION_NUMBER): cv.positive_int + vol.Optional(ATTR_APP_VERSION_NUMBER): cv.string }, extra=vol.ALLOW_EXTRA) IDENTIFY_APP_SCHEMA_CONTAINER = vol.All(dict, IDENTIFY_APP_SCHEMA) From 409fd62a7c755e30432da1de213aaa16aa2d4c69 Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Sun, 16 Apr 2017 18:06:59 -0400 Subject: [PATCH 088/146] Fix for zwave RGB setting (#7137) --- homeassistant/components/light/zwave.py | 16 +++++----- tests/components/light/test_zwave.py | 42 ++++++++++++------------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/homeassistant/components/light/zwave.py b/homeassistant/components/light/zwave.py index 45660474fde..ce85276cae9 100644 --- a/homeassistant/components/light/zwave.py +++ b/homeassistant/components/light/zwave.py @@ -310,25 +310,25 @@ class ZwaveColorLight(ZwaveDimmer): if self._zw098: if kwargs[ATTR_COLOR_TEMP] > TEMP_MID_HASS: self._ct = TEMP_WARM_HASS - rgbw = b'#000000ff00' + rgbw = '#000000ff00' else: self._ct = TEMP_COLD_HASS - rgbw = b'#00000000ff' + rgbw = '#00000000ff' elif ATTR_RGB_COLOR in kwargs: self._rgb = kwargs[ATTR_RGB_COLOR] if (not self._zw098 and ( self._color_channels & COLOR_CHANNEL_WARM_WHITE or self._color_channels & COLOR_CHANNEL_COLD_WHITE)): - rgbw = b'#' + rgbw = '#' for colorval in color_rgb_to_rgbw(*self._rgb): - rgbw += format(colorval, '02x').encode('utf-8') - rgbw += b'00' + rgbw += format(colorval, '02x') + rgbw += '00' else: - rgbw = b'#' + rgbw = '#' for colorval in self._rgb: - rgbw += format(colorval, '02x').encode('utf-8') - rgbw += b'0000' + rgbw += format(colorval, '02x') + rgbw += '0000' if rgbw and self.values.color: self.values.color.data = rgbw diff --git a/tests/components/light/test_zwave.py b/tests/components/light/test_zwave.py index 0afe9ec8f6a..9629744bc16 100644 --- a/tests/components/light/test_zwave.py +++ b/tests/components/light/test_zwave.py @@ -207,36 +207,36 @@ def test_set_rgb_color(mock_openzwave): """Test setting zwave light color.""" node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR]) value = MockValue(data=0, node=node) - color = MockValue(data=b'#0000000000', node=node) + color = MockValue(data='#0000000000', node=node) # Suppoorts RGB only color_channels = MockValue(data=0x1c, node=node) values = MockLightValues(primary=value, color=color, color_channels=color_channels) device = zwave.get_device(node=node, values=values, node_config={}) - assert color.data == b'#0000000000' + assert color.data == '#0000000000' device.turn_on(**{ATTR_RGB_COLOR: (200, 150, 100)}) - assert color.data == b'#c896640000' + assert color.data == '#c896640000' def test_set_rgbw_color(mock_openzwave): """Test setting zwave light color.""" node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR]) value = MockValue(data=0, node=node) - color = MockValue(data=b'#0000000000', node=node) + color = MockValue(data='#0000000000', node=node) # Suppoorts RGBW color_channels = MockValue(data=0x1d, node=node) values = MockLightValues(primary=value, color=color, color_channels=color_channels) device = zwave.get_device(node=node, values=values, node_config={}) - assert color.data == b'#0000000000' + assert color.data == '#0000000000' device.turn_on(**{ATTR_RGB_COLOR: (200, 150, 100)}) - assert color.data == b'#c86400c800' + assert color.data == '#c86400c800' def test_zw098_set_color_temp(mock_openzwave): @@ -244,29 +244,29 @@ def test_zw098_set_color_temp(mock_openzwave): node = MockNode(manufacturer_id='0086', product_id='0062', command_classes=[const.COMMAND_CLASS_SWITCH_COLOR]) value = MockValue(data=0, node=node) - color = MockValue(data=b'#0000000000', node=node) + color = MockValue(data='#0000000000', node=node) # Suppoorts RGB, warm white, cold white color_channels = MockValue(data=0x1f, node=node) values = MockLightValues(primary=value, color=color, color_channels=color_channels) device = zwave.get_device(node=node, values=values, node_config={}) - assert color.data == b'#0000000000' + assert color.data == '#0000000000' device.turn_on(**{ATTR_COLOR_TEMP: 200}) - assert color.data == b'#00000000ff' + assert color.data == '#00000000ff' device.turn_on(**{ATTR_COLOR_TEMP: 400}) - assert color.data == b'#000000ff00' + assert color.data == '#000000ff00' def test_rgb_not_supported(mock_openzwave): """Test value changed for rgb lights.""" node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR]) value = MockValue(data=0, node=node) - color = MockValue(data=b'#0000000000', node=node) + color = MockValue(data='#0000000000', node=node) # Suppoorts color temperature only color_channels = MockValue(data=0x01, node=node) values = MockLightValues(primary=value, color=color, @@ -290,7 +290,7 @@ def test_no_color_channels_value(mock_openzwave): """Test value changed for rgb lights.""" node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR]) value = MockValue(data=0, node=node) - color = MockValue(data=b'#0000000000', node=node) + color = MockValue(data='#0000000000', node=node) values = MockLightValues(primary=value, color=color) device = zwave.get_device(node=node, values=values, node_config={}) @@ -301,7 +301,7 @@ def test_rgb_value_changed(mock_openzwave): """Test value changed for rgb lights.""" node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR]) value = MockValue(data=0, node=node) - color = MockValue(data=b'#0000000000', node=node) + color = MockValue(data='#0000000000', node=node) # Suppoorts RGB only color_channels = MockValue(data=0x1c, node=node) values = MockLightValues(primary=value, color=color, @@ -310,7 +310,7 @@ def test_rgb_value_changed(mock_openzwave): assert device.rgb_color == [0, 0, 0] - color.data = b'#c896640000' + color.data = '#c896640000' value_changed(color) assert device.rgb_color == [200, 150, 100] @@ -320,7 +320,7 @@ def test_rgbww_value_changed(mock_openzwave): """Test value changed for rgb lights.""" node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR]) value = MockValue(data=0, node=node) - color = MockValue(data=b'#0000000000', node=node) + color = MockValue(data='#0000000000', node=node) # Suppoorts RGB, Warm White color_channels = MockValue(data=0x1d, node=node) values = MockLightValues(primary=value, color=color, @@ -329,7 +329,7 @@ def test_rgbww_value_changed(mock_openzwave): assert device.rgb_color == [0, 0, 0] - color.data = b'#c86400c800' + color.data = '#c86400c800' value_changed(color) assert device.rgb_color == [200, 150, 100] @@ -339,7 +339,7 @@ def test_rgbcw_value_changed(mock_openzwave): """Test value changed for rgb lights.""" node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR]) value = MockValue(data=0, node=node) - color = MockValue(data=b'#0000000000', node=node) + color = MockValue(data='#0000000000', node=node) # Suppoorts RGB, Cold White color_channels = MockValue(data=0x1e, node=node) values = MockLightValues(primary=value, color=color, @@ -348,7 +348,7 @@ def test_rgbcw_value_changed(mock_openzwave): assert device.rgb_color == [0, 0, 0] - color.data = b'#c86400c800' + color.data = '#c86400c800' value_changed(color) assert device.rgb_color == [200, 150, 100] @@ -359,7 +359,7 @@ def test_ct_value_changed(mock_openzwave): node = MockNode(manufacturer_id='0086', product_id='0062', command_classes=[const.COMMAND_CLASS_SWITCH_COLOR]) value = MockValue(data=0, node=node) - color = MockValue(data=b'#0000000000', node=node) + color = MockValue(data='#0000000000', node=node) # Suppoorts RGB, Cold White color_channels = MockValue(data=0x1f, node=node) values = MockLightValues(primary=value, color=color, @@ -368,12 +368,12 @@ def test_ct_value_changed(mock_openzwave): assert device.color_temp == zwave.TEMP_MID_HASS - color.data = b'#000000ff00' + color.data = '#000000ff00' value_changed(color) assert device.color_temp == zwave.TEMP_WARM_HASS - color.data = b'#00000000ff' + color.data = '#00000000ff' value_changed(color) assert device.color_temp == zwave.TEMP_COLD_HASS From 1ce2b6357a456d88a3a7ad835afb2e8c69dc4569 Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Sun, 16 Apr 2017 15:27:03 -0700 Subject: [PATCH 089/146] Replace rollershutter with cover in demo (#7140) --- homeassistant/components/demo.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/demo.py b/homeassistant/components/demo.py index e03cb72ea44..6212567f3d7 100644 --- a/homeassistant/components/demo.py +++ b/homeassistant/components/demo.py @@ -159,13 +159,13 @@ def async_setup(hass, config): tasks2.append(group.Group.async_create_group(hass, 'living room', [ lights[1], switches[0], 'input_select.living_room_preset', - 'rollershutter.living_room_window', media_players[1], + 'cover.living_room_window', media_players[1], 'scene.romantic_lights'])) tasks2.append(group.Group.async_create_group(hass, 'bedroom', [ lights[0], switches[1], media_players[0], 'input_slider.noise_allowance'])) tasks2.append(group.Group.async_create_group(hass, 'kitchen', [ - lights[2], 'rollershutter.kitchen_window', 'lock.kitchen_door'])) + lights[2], 'cover.kitchen_window', 'lock.kitchen_door'])) tasks2.append(group.Group.async_create_group(hass, 'doors', [ 'lock.front_door', 'lock.kitchen_door', 'garage_door.right_garage_door', 'garage_door.left_garage_door'])) @@ -176,8 +176,8 @@ def async_setup(hass, config): 'device_tracker.demo_paulus'])) tasks2.append(group.Group.async_create_group(hass, 'downstairs', [ 'group.living_room', 'group.kitchen', - 'scene.romantic_lights', 'rollershutter.kitchen_window', - 'rollershutter.living_room_window', 'group.doors', + 'scene.romantic_lights', 'cover.kitchen_window', + 'cover.living_room_window', 'group.doors', 'thermostat.ecobee', ], view=True)) From 37f959eb02cc83e423ded42252726cd2d2f88110 Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Sun, 16 Apr 2017 18:45:40 -0400 Subject: [PATCH 090/146] Add debug logging to automation initial state (#7068) --- homeassistant/components/automation/__init__.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/automation/__init__.py b/homeassistant/components/automation/__init__.py index 66c7c763cc9..5c3d944aad4 100644 --- a/homeassistant/components/automation/__init__.py +++ b/homeassistant/components/automation/__init__.py @@ -263,15 +263,23 @@ class AutomationEntity(ToggleEntity): @asyncio.coroutine def async_added_to_hass(self) -> None: """Startup with initial state or previous state.""" - enable_automation = DEFAULT_INITIAL_STATE - if self._initial_state is not None: enable_automation = self._initial_state + _LOGGER.debug("Automation %s initial state %s from config " + "initial_state", self.entity_id, enable_automation) else: state = yield from async_get_last_state(self.hass, self.entity_id) if state: enable_automation = state.state == STATE_ON self._last_triggered = state.attributes.get('last_triggered') + _LOGGER.debug("Automation %s initial state %s from recorder " + "last state %s", self.entity_id, + enable_automation, state) + else: + enable_automation = DEFAULT_INITIAL_STATE + _LOGGER.debug("Automation %s initial state %s from default " + "initial state", self.entity_id, + enable_automation) if not enable_automation: return From 5fa8037231d30937144d8f3b3006a58f69210f8b Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Mon, 17 Apr 2017 01:36:15 +0200 Subject: [PATCH 091/146] Always return True/False from is_state and is_state_attr (#7138) * Always return True/False from is_state and is_state_attr These functions are documented to always return True/False but the short-circuit evaluation would return None if the entity_id did not exist. * Reword into a single statement --- homeassistant/core.py | 5 +++-- tests/helpers/test_template.py | 10 ++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/homeassistant/core.py b/homeassistant/core.py index 320e857ac9e..a467cf28e51 100644 --- a/homeassistant/core.py +++ b/homeassistant/core.py @@ -648,7 +648,7 @@ class StateMachine(object): Async friendly. """ state_obj = self.get(entity_id) - return state_obj and state_obj.state == state + return state_obj is not None and state_obj.state == state def is_state_attr(self, entity_id, name, value): """Test if entity exists and has a state attribute set to value. @@ -656,7 +656,8 @@ class StateMachine(object): Async friendly. """ state_obj = self.get(entity_id) - return state_obj and state_obj.attributes.get(name, None) == value + return state_obj is not None and \ + state_obj.attributes.get(name, None) == value def remove(self, entity_id): """Remove the state of an entity. diff --git a/tests/helpers/test_template.py b/tests/helpers/test_template.py index b6951172c64..71075124f32 100644 --- a/tests/helpers/test_template.py +++ b/tests/helpers/test_template.py @@ -314,6 +314,11 @@ class TestHelpersTemplate(unittest.TestCase): """, self.hass) self.assertEqual('yes', tpl.render()) + tpl = template.Template(""" +{{ is_state("test.noobject", "available") }} + """, self.hass) + self.assertEqual('False', tpl.render()) + def test_is_state_attr(self): """Test is_state_attr method.""" self.hass.states.set('test.object', 'available', {'mode': 'on'}) @@ -322,6 +327,11 @@ class TestHelpersTemplate(unittest.TestCase): """, self.hass) self.assertEqual('yes', tpl.render()) + tpl = template.Template(""" +{{ is_state_attr("test.noobject", "mode", "on") }} + """, self.hass) + self.assertEqual('False', tpl.render()) + def test_states_function(self): """Test using states as a function.""" self.hass.states.set('test.object', 'available') From 103377bdb05bc7b67f6f05cfc9e8828607f84a7f Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Mon, 17 Apr 2017 01:40:12 +0200 Subject: [PATCH 092/146] Add LIFX Cloud scene support (#7124) This uses the LIFX HTTP API to list and activate the scenes that are stored in the LIFX cloud by the native LIFX smartphone apps. --- .coveragerc | 1 + homeassistant/components/scene/lifx_cloud.py | 97 ++++++++++++++++++++ 2 files changed, 98 insertions(+) create mode 100644 homeassistant/components/scene/lifx_cloud.py diff --git a/.coveragerc b/.coveragerc index ae489fd5926..43aa685fcc4 100644 --- a/.coveragerc +++ b/.coveragerc @@ -321,6 +321,7 @@ omit = homeassistant/components/remote/harmony.py homeassistant/components/remote/itach.py homeassistant/components/scene/hunterdouglas_powerview.py + homeassistant/components/scene/lifx_cloud.py homeassistant/components/sensor/amcrest.py homeassistant/components/sensor/arest.py homeassistant/components/sensor/arwn.py diff --git a/homeassistant/components/scene/lifx_cloud.py b/homeassistant/components/scene/lifx_cloud.py new file mode 100644 index 00000000000..f600510d406 --- /dev/null +++ b/homeassistant/components/scene/lifx_cloud.py @@ -0,0 +1,97 @@ +""" +Support for LIFX Cloud scenes. + +For more details about this component, please refer to the documentation at +https://home-assistant.io/components/scene.lifx_cloud/ +""" +import asyncio +import logging + +import voluptuous as vol + +import aiohttp +import async_timeout + +from homeassistant.components.scene import Scene +from homeassistant.const import (CONF_PLATFORM, CONF_TOKEN, CONF_TIMEOUT) +import homeassistant.helpers.config_validation as cv +from homeassistant.helpers.aiohttp_client import (async_get_clientsession) + +_LOGGER = logging.getLogger(__name__) + +LIFX_API_URL = 'https://api.lifx.com/v1/{0}' +DEFAULT_TIMEOUT = 10 + +PLATFORM_SCHEMA = vol.Schema({ + vol.Required(CONF_PLATFORM): 'lifx_cloud', + vol.Required(CONF_TOKEN): cv.string, + vol.Optional(CONF_TIMEOUT, default=DEFAULT_TIMEOUT): cv.positive_int, +}) + + +# pylint: disable=unused-argument +@asyncio.coroutine +def async_setup_platform(hass, config, async_add_devices, discovery_info=None): + """Setup the scenes stored in the LIFX Cloud.""" + token = config.get(CONF_TOKEN) + timeout = config.get(CONF_TIMEOUT) + + headers = { + "Authorization": "Bearer %s" % token, + } + + url = LIFX_API_URL.format('scenes') + + try: + httpsession = async_get_clientsession(hass) + with async_timeout.timeout(timeout, loop=hass.loop): + scenes_resp = yield from httpsession.get(url, headers=headers) + + except (asyncio.TimeoutError, aiohttp.ClientError): + _LOGGER.exception("Error on %s", url) + return False + + status = scenes_resp.status + if status == 200: + data = yield from scenes_resp.json() + devices = [] + for scene in data: + devices.append(LifxCloudScene(hass, headers, timeout, scene)) + async_add_devices(devices) + return True + elif status == 401: + _LOGGER.error("Unauthorized (bad token?) on %s", url) + return False + else: + _LOGGER.error("HTTP error %d on %s", scenes_resp.status, url) + return False + + +class LifxCloudScene(Scene): + """Representation of a LIFX Cloud scene.""" + + def __init__(self, hass, headers, timeout, scene_data): + """Initialize the scene.""" + self.hass = hass + self._headers = headers + self._timeout = timeout + self._name = scene_data["name"] + self._uuid = scene_data["uuid"] + + @property + def name(self): + """Return the name of the scene.""" + return self._name + + @asyncio.coroutine + def async_activate(self): + """Activate the scene.""" + url = LIFX_API_URL.format('scenes/scene_id:%s/activate' % self._uuid) + + try: + httpsession = async_get_clientsession(self.hass) + with async_timeout.timeout(self._timeout, loop=self.hass.loop): + yield from httpsession.put(url, headers=self._headers) + + except (asyncio.TimeoutError, aiohttp.ClientError): + _LOGGER.exception("Error on %s", url) From d4b05a6a852678b4291f400da7a33cdd49b639bd Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Mon, 17 Apr 2017 02:40:22 +0200 Subject: [PATCH 093/146] Fix LIFX lights with disappearing names (#7119) * Cache the name of LIFX lights After #7031 the LIFX device will change during an unregister/register transition. This has the user-visible effect of the new device missing a friendly name until the next poll. We now cache the name internally and it will then transfer to the new device when it registers. * Allow LIFX logging even without an available device This will allow us to set the device to None when it unregisters. * Calculate LIFX availability from the existence of a device This has become possible because the device is no longer needed to provide the name of the light when it is unavailable. We just have to forget the device when it unregisters. --- homeassistant/components/light/lifx.py | 34 ++++++++++++-------------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/homeassistant/components/light/lifx.py b/homeassistant/components/light/lifx.py index da09601c1bb..945c163435b 100644 --- a/homeassistant/components/light/lifx.py +++ b/homeassistant/components/light/lifx.py @@ -82,9 +82,8 @@ class LIFXManager(object): """Callback for newly detected bulb.""" if device.mac_addr in self.entities: entity = self.entities[device.mac_addr] - _LOGGER.debug("%s register AGAIN", entity.ipaddr) - entity.available = True entity.device = device + _LOGGER.debug("%s register AGAIN", entity.who) self.hass.async_add_job(entity.async_update_ha_state()) else: _LOGGER.debug("%s register NEW", device.ip_addr) @@ -94,7 +93,7 @@ class LIFXManager(object): def ready(self, device, msg): """Callback that adds the device once all data is retrieved.""" entity = LIFXLight(device) - _LOGGER.debug("%s register READY", entity.ipaddr) + _LOGGER.debug("%s register READY", entity.who) self.entities[device.mac_addr] = entity self.async_add_devices([entity]) @@ -103,8 +102,8 @@ class LIFXManager(object): """Callback for disappearing bulb.""" if device.mac_addr in self.entities: entity = self.entities[device.mac_addr] - _LOGGER.debug("%s unregister", entity.ipaddr) - entity.available = False + _LOGGER.debug("%s unregister", entity.who) + entity.device = None entity.updated_event.set() self.hass.async_add_job(entity.async_update_ha_state()) @@ -129,29 +128,27 @@ class LIFXLight(Light): self.updated_event = asyncio.Event() self.blocker = None self.postponed_update = None - self._available = True + self._name = device.label self.set_power(device.power_level) self.set_color(*device.color) @property def available(self): """Return the availability of the device.""" - return self._available - - @available.setter - def available(self, value): - """Set the availability of the device.""" - self._available = value + return self.device is not None @property def name(self): """Return the name of the device.""" - return self.device.label + return self._name @property - def ipaddr(self): - """Return the IP address of the device.""" - return self.device.ip_addr[0] + def who(self): + """Return a string identifying the device.""" + if self.device: + return self.device.ip_addr[0] + else: + return "(%s)" % self.name @property def rgb_color(self): @@ -247,7 +244,7 @@ class LIFXLight(Light): hsbk = [hue, saturation, brightness, kelvin] _LOGGER.debug("turn_on: %s (%d) %d %d %d %d %d", - self.ipaddr, self._power, fade, *hsbk) + self.who, self._power, fade, *hsbk) if self._power == 0: if changed_color: @@ -282,12 +279,13 @@ class LIFXLight(Light): """Callback that gets current power/color status.""" self.set_power(device.power_level) self.set_color(*device.color) + self._name = device.label self.updated_event.set() @asyncio.coroutine def async_update(self): """Update bulb status (if it is available).""" - _LOGGER.debug("%s async_update", self.ipaddr) + _LOGGER.debug("%s async_update", self.who) if self.available and self.blocker is None: self.updated_event.clear() self.device.get_color(self.got_color) From 9ed4ed2e475d70dbc84851bf910b747cd551d008 Mon Sep 17 00:00:00 2001 From: thecynic Date: Mon, 17 Apr 2017 14:04:44 -0700 Subject: [PATCH 094/146] lutron: fix typo that prevented callback registration (#7148) --- homeassistant/components/lutron.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/lutron.py b/homeassistant/components/lutron.py index d5e889027d1..3bd1682bc41 100644 --- a/homeassistant/components/lutron.py +++ b/homeassistant/components/lutron.py @@ -58,7 +58,7 @@ class LutronDevice(Entity): self._area_name = area_name @asyncio.coroutine - def async_add_to_hass(self): + def async_added_to_hass(self): """Register callbacks.""" self.hass.async_add_job( self._controller.subscribe, self._lutron_device, From cec39077ba781d95dd695e306378d1250389fe91 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 18 Apr 2017 00:25:50 +0200 Subject: [PATCH 095/146] Fix HassIO timeout bug (#7155) * Fix HassIO timeout bug * fix lint * Add long polling timeout to stop event --- homeassistant/components/hassio.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/hassio.py b/homeassistant/components/hassio.py index 154be0917bb..25da7a67f4b 100644 --- a/homeassistant/components/hassio.py +++ b/homeassistant/components/hassio.py @@ -131,7 +131,8 @@ def async_setup(hass, config): elif service.service == SERVICE_ADDON_START: yield from hassio.send_command("/addons/{}/start".format(addon)) elif service.service == SERVICE_ADDON_STOP: - yield from hassio.send_command("/addons/{}/stop".format(addon)) + yield from hassio.send_command( + "/addons/{}/stop".format(addon), timeout=LONG_TASK_TIMEOUT) elif service.service == SERVICE_ADDON_UPDATE: yield from hassio.send_command( "/addons/{}/update".format(addon), payload=version, @@ -168,8 +169,10 @@ class HassIO(object): @asyncio.coroutine def send_command(self, cmd, payload=None, timeout=DEFAULT_TIMEOUT): """Send request to API.""" - answer = yield from self.send_raw(cmd, payload=payload) - if answer['result'] == 'ok': + answer = yield from self.send_raw( + cmd, payload=payload, timeout=timeout + ) + if answer and answer['result'] == 'ok': return answer['data'] if answer['data'] else True _LOGGER.error("%s return error %s.", cmd, answer['message']) From 919bb08d02ec30ae3cca0e68b1c7eb0104fb1f25 Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Mon, 17 Apr 2017 22:51:06 -0700 Subject: [PATCH 096/146] Fix iOS icon calculation to return mdi:battery for levels above 95 --- homeassistant/components/sensor/ios.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/sensor/ios.py b/homeassistant/components/sensor/ios.py index ba963e44b6c..5f5f4ba0cf0 100644 --- a/homeassistant/components/sensor/ios.py +++ b/homeassistant/components/sensor/ios.py @@ -96,7 +96,7 @@ class IOSSensor(Entity): elif battery_state == ios.ATTR_BATTERY_STATE_UNPLUGGED: if rounded_level < 10: returning_icon = "{}-outline".format(DEFAULT_ICON) - elif battery_level == 100: + elif battery_level > 95: returning_icon = DEFAULT_ICON else: returning_icon = "{}-{}".format(DEFAULT_ICON, From b7141901f63bfe3f0826e8c12b704bdae8469c82 Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Mon, 17 Apr 2017 22:58:04 -0700 Subject: [PATCH 097/146] Change iOS sensor unique ID to use the device ID --- homeassistant/components/sensor/ios.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/sensor/ios.py b/homeassistant/components/sensor/ios.py index 5f5f4ba0cf0..35f03d7a1c1 100644 --- a/homeassistant/components/sensor/ios.py +++ b/homeassistant/components/sensor/ios.py @@ -56,7 +56,8 @@ class IOSSensor(Entity): @property def unique_id(self): """Return the unique ID of this sensor.""" - return "sensor_ios_battery_{}_{}".format(self.type, self._device_name) + device_id = self._device[ios.ATTR_DEVICE_ID] + return "sensor_ios_battery_{}_{}".format(self.type, device_id) @property def unit_of_measurement(self): From 9c0171ec5ee5300a5f7bc05f3ba5fe9550ecfbb5 Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Mon, 17 Apr 2017 23:31:50 -0700 Subject: [PATCH 098/146] Track device last identify time --- homeassistant/components/ios.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/ios.py b/homeassistant/components/ios.py index c5ffc34864c..bac5bb59d96 100644 --- a/homeassistant/components/ios.py +++ b/homeassistant/components/ios.py @@ -8,6 +8,7 @@ import asyncio import os import json import logging +import datetime import voluptuous as vol from voluptuous.humanize import humanize_error @@ -20,6 +21,8 @@ from homeassistant.core import callback from homeassistant.components.http import HomeAssistantView +from homeassistant.remote import JSONEncoder + from homeassistant.const import (HTTP_INTERNAL_SERVER_ERROR, HTTP_BAD_REQUEST) @@ -55,6 +58,8 @@ ATTR_TEXT_INPUT_BEHAVIOR = "textInput" BEHAVIORS = [ATTR_DEFAULT_BEHAVIOR, ATTR_TEXT_INPUT_BEHAVIOR] +ATTR_LAST_SEEN_AT = "lastSeenAt" + ATTR_DEVICE = "device" ATTR_PUSH_TOKEN = "pushToken" ATTR_APP = "app" @@ -192,7 +197,7 @@ def _save_config(filename, config): """Save configuration.""" try: with open(filename, "w") as fdesc: - fdesc.write(json.dumps(config)) + fdesc.write(json.dumps(config, cls=JSONEncoder)) except (IOError, TypeError) as error: _LOGGER.error("Saving config file failed: %s", error) return False @@ -285,7 +290,7 @@ class iOSIdentifyDeviceView(HomeAssistantView): try: req_data = yield from request.json() except ValueError: - return self.json_message('Invalid JSON', HTTP_BAD_REQUEST) + return self.json_message("Invalid JSON", HTTP_BAD_REQUEST) try: data = IDENTIFY_SCHEMA(req_data) @@ -293,6 +298,8 @@ class iOSIdentifyDeviceView(HomeAssistantView): return self.json_message(humanize_error(request.json, ex), HTTP_BAD_REQUEST) + data[ATTR_LAST_SEEN_AT] = datetime.datetime.now() + name = data.get(ATTR_DEVICE_ID) CONFIG_FILE[ATTR_DEVICES][name] = data From 43799b8fee5cf5a8094d65999712049b67a41380 Mon Sep 17 00:00:00 2001 From: Kevin Date: Tue, 18 Apr 2017 11:46:18 +0200 Subject: [PATCH 099/146] small fix for random effect in order to use the whole rgb range. So 255 is not excluded anymore. (#7156) --- homeassistant/components/light/flux_led.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/light/flux_led.py b/homeassistant/components/light/flux_led.py index f599d788994..f39ef3881a6 100644 --- a/homeassistant/components/light/flux_led.py +++ b/homeassistant/components/light/flux_led.py @@ -216,9 +216,9 @@ class FluxLight(Light): (red, green, blue) = self._bulb.getRgb() self._bulb.setRgb(red, green, blue, brightness=brightness) elif effect == EFFECT_RANDOM: - self._bulb.setRgb(random.randrange(0, 255), - random.randrange(0, 255), - random.randrange(0, 255)) + self._bulb.setRgb(random.randint(0, 255), + random.randint(0, 255), + random.randint(0, 255)) elif effect == EFFECT_COLORLOOP: self._bulb.setPresetPattern(0x25, 50) elif effect == EFFECT_RED_FADE: From 226066eafd02063acbc04ea758568d3cd255b0f4 Mon Sep 17 00:00:00 2001 From: Mike Megally Date: Tue, 18 Apr 2017 02:50:43 -0700 Subject: [PATCH 100/146] exposed content_type in rest_command (#7101) * exposed content_type in rest_command, which allows for manually specifying the content_type for more-strict api endpoints * fixed up column length Length was 86 chars, and it needed to be 79 * double import of HTTP_HEADER_CONTENT_TYPE Removed the accidental double-import of HTTP_HEADER_CONTENT_TYPE * moved rest_command-specific config value into component * if no content_type, default to None * unit test * newline * unused CONTENT_TYPE_TEXT_PLAIN * removed the http-agnostic abstraction hass provided in favor of aiohttps hdrs constant --- homeassistant/components/rest_command.py | 12 +++++++++++- tests/components/test_rest_command.py | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/rest_command.py b/homeassistant/components/rest_command.py index 7084339ab42..5bf629ed37f 100644 --- a/homeassistant/components/rest_command.py +++ b/homeassistant/components/rest_command.py @@ -8,6 +8,7 @@ import asyncio import logging import aiohttp +from aiohttp import hdrs import async_timeout import voluptuous as vol @@ -31,6 +32,8 @@ SUPPORT_REST_METHODS = [ 'delete', ] +CONF_CONTENT_TYPE = 'content_type' + COMMAND_SCHEMA = vol.Schema({ vol.Required(CONF_URL): cv.template, vol.Optional(CONF_METHOD, default=DEFAULT_METHOD): @@ -39,6 +42,7 @@ COMMAND_SCHEMA = vol.Schema({ vol.Inclusive(CONF_PASSWORD, 'authentication'): cv.string, vol.Optional(CONF_PAYLOAD): cv.template, vol.Optional(CONF_TIMEOUT, default=DEFAULT_TIMEOUT): vol.Coerce(int), + vol.Optional(CONF_CONTENT_TYPE): cv.string }) CONFIG_SCHEMA = vol.Schema({ @@ -72,6 +76,11 @@ def async_setup(hass, config): template_payload = command_config[CONF_PAYLOAD] template_payload.hass = hass + headers = None + if CONF_CONTENT_TYPE in command_config: + content_type = command_config[CONF_CONTENT_TYPE] + headers = {hdrs.CONTENT_TYPE: content_type} + @asyncio.coroutine def async_service_handler(service): """Execute a shell command service.""" @@ -86,7 +95,8 @@ def async_setup(hass, config): request = yield from getattr(websession, method)( template_url.async_render(variables=service.data), data=payload, - auth=auth + auth=auth, + headers=headers ) if request.status < 400: diff --git a/tests/components/test_rest_command.py b/tests/components/test_rest_command.py index 0648a30c922..9dbea53cd64 100644 --- a/tests/components/test_rest_command.py +++ b/tests/components/test_rest_command.py @@ -221,3 +221,22 @@ class TestRestCommandComponent(object): assert len(aioclient_mock.mock_calls) == 1 assert aioclient_mock.mock_calls[0][2] == b'data' + + def test_rest_command_content_type(self, aioclient_mock): + """Call a rest command with a content type.""" + data = { + 'payload': 'item', + 'content_type': 'text/plain' + } + self.config[rc.DOMAIN]['post_test'].update(data) + + with assert_setup_component(4): + setup_component(self.hass, rc.DOMAIN, self.config) + + aioclient_mock.post(self.url, content=b'success') + + self.hass.services.call(rc.DOMAIN, 'post_test', {}) + self.hass.block_till_done() + + assert len(aioclient_mock.mock_calls) == 1 + assert aioclient_mock.mock_calls[0][2] == b'item' From 1925748f614240d8db23abf6cd387f208cbeae9e Mon Sep 17 00:00:00 2001 From: Greg Dowling Date: Tue, 18 Apr 2017 11:01:23 +0100 Subject: [PATCH 101/146] Add vera power meter. (#7134) * Add vera power meter. * Use W for power. --- homeassistant/components/sensor/vera.py | 6 ++++++ homeassistant/components/vera.py | 7 ++++++- requirements_all.txt | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/sensor/vera.py b/homeassistant/components/sensor/vera.py index 81f69001f82..e0fa16d7907 100644 --- a/homeassistant/components/sensor/vera.py +++ b/homeassistant/components/sensor/vera.py @@ -10,6 +10,7 @@ from homeassistant.const import ( TEMP_CELSIUS, TEMP_FAHRENHEIT) from homeassistant.helpers.entity import Entity from homeassistant.components.sensor import ENTITY_ID_FORMAT +from homeassistant.util import convert from homeassistant.components.vera import ( VERA_CONTROLLER, VERA_DEVICES, VeraDevice) @@ -49,6 +50,8 @@ class VeraSensor(VeraDevice, Entity): return 'lux' elif self.vera_device.category == "Humidity Sensor": return '%' + elif self.vera_device.category == "Power meter": + return 'watts' def update(self): """Update the state.""" @@ -67,6 +70,9 @@ class VeraSensor(VeraDevice, Entity): self.current_value = self.vera_device.light elif self.vera_device.category == "Humidity Sensor": self.current_value = self.vera_device.humidity + elif self.vera_device.category == "Power meter": + power = convert(self.vera_device.power, float, 0) + self.current_value = int(round(power, 0)) elif self.vera_device.category == "Sensor": tripped = self.vera_device.is_tripped self.current_value = 'Tripped' if tripped else 'Not Tripped' diff --git a/homeassistant/components/vera.py b/homeassistant/components/vera.py index 555a800708c..9d7494147e0 100644 --- a/homeassistant/components/vera.py +++ b/homeassistant/components/vera.py @@ -20,7 +20,7 @@ from homeassistant.const import ( EVENT_HOMEASSISTANT_STOP) from homeassistant.helpers.entity import Entity -REQUIREMENTS = ['pyvera==0.2.25'] +REQUIREMENTS = ['pyvera==0.2.26'] _LOGGER = logging.getLogger(__name__) @@ -35,6 +35,7 @@ CONF_LIGHTS = 'lights' VERA_ID_FORMAT = '{}_{}' ATTR_CURRENT_POWER_W = "current_power_w" +ATTR_CURRENT_ENERGY_KWH = "current_energy_kwh" VERA_DEVICES = defaultdict(list) @@ -181,6 +182,10 @@ class VeraDevice(Entity): if power: attr[ATTR_CURRENT_POWER_W] = convert(power, float, 0.0) + energy = self.vera_device.energy + if energy: + attr[ATTR_CURRENT_ENERGY_KWH] = convert(energy, float, 0.0) + attr['Vera Device Id'] = self.vera_device.vera_device_id return attr diff --git a/requirements_all.txt b/requirements_all.txt index d8a07866d2c..a509529a5f3 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -665,7 +665,7 @@ pyunifi==2.0 # pyuserinput==0.1.11 # homeassistant.components.vera -pyvera==0.2.25 +pyvera==0.2.26 # homeassistant.components.notify.html5 pywebpush==0.6.1 From 15d8f8b8279f077c71c910f93e413435cfc0726e Mon Sep 17 00:00:00 2001 From: Martin Hjelmare Date: Tue, 18 Apr 2017 17:26:59 +0200 Subject: [PATCH 102/146] Add support for tradfri color temp (#7153) * Add support for tradfri color temp * Only return rgb_color if supported features indicate support. * Return color_temp if supported features indicate support and dict with allowed color temperatures exist for manufacturer. * Add manufacturer specific supported features, with default. * Color temperature is set from a dict of allowed pairs per manufacturer, where kelvin is mapped to hex_color. When a user sets a color temperature, the closest matching temperature is selected and set. * Clean up --- homeassistant/components/light/tradfri.py | 50 +++++++++++++++++++++-- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/light/tradfri.py b/homeassistant/components/light/tradfri.py index 277824f4c64..9626b098485 100644 --- a/homeassistant/components/light/tradfri.py +++ b/homeassistant/components/light/tradfri.py @@ -1,14 +1,25 @@ """Support for the IKEA Tradfri platform.""" +import logging -from homeassistant.components.tradfri import KEY_GATEWAY from homeassistant.components.light import ( - ATTR_BRIGHTNESS, SUPPORT_BRIGHTNESS, Light, ATTR_RGB_COLOR, - SUPPORT_RGB_COLOR, PLATFORM_SCHEMA as LIGHT_PLATFORM_SCHEMA) + ATTR_BRIGHTNESS, ATTR_COLOR_TEMP, ATTR_RGB_COLOR, SUPPORT_BRIGHTNESS, + SUPPORT_COLOR_TEMP, SUPPORT_RGB_COLOR, Light) +from homeassistant.components.light import \ + PLATFORM_SCHEMA as LIGHT_PLATFORM_SCHEMA +from homeassistant.components.tradfri import KEY_GATEWAY from homeassistant.util import color as color_util +from homeassistant.util import slugify + +_LOGGER = logging.getLogger(__name__) DEPENDENCIES = ['tradfri'] SUPPORTED_FEATURES = (SUPPORT_BRIGHTNESS | SUPPORT_RGB_COLOR) +SUPPORTED_FEATURES_IKEA = (SUPPORT_BRIGHTNESS | SUPPORT_COLOR_TEMP) PLATFORM_SCHEMA = LIGHT_PLATFORM_SCHEMA +IKEA = 'ikea_of_sweden' + +ALLOWED_TEMPERATURES = {IKEA: {2200: 'efd275', 2700: 'f1e0b5', 4000: 'f5faf6'}} +ALLOWED_FEATURES = {IKEA: SUPPORTED_FEATURES_IKEA} def setup_platform(hass, config, add_devices, discovery_info=None): @@ -35,10 +46,16 @@ class Tradfri(Light): self._light_data = light.light_control.lights[0] self._name = light.name self._rgb_color = None + self._ok_temps = ALLOWED_TEMPERATURES.get( + slugify(self._light.device_info.manufacturer)) @property def supported_features(self): """Flag supported features.""" + features = ALLOWED_FEATURES.get( + slugify(self._light.device_info.manufacturer)) + if features: + return features return SUPPORTED_FEATURES @property @@ -56,10 +73,27 @@ class Tradfri(Light): """Brightness of the light (an integer in the range 1-255).""" return self._light_data.dimmer + @property + def color_temp(self): + """Return the CT color value in mireds.""" + if not self.supported_features & SUPPORT_COLOR_TEMP or \ + not self._ok_temps: + return + kelvin = next(( + kelvin for kelvin, hex_color in self._ok_temps.items() + if hex_color == self._light_data.hex_color), None) + if kelvin is None: + _LOGGER.error( + 'unexpected color temperature found %s', + self._light_data.hex_color) + return + return color_util.color_temperature_kelvin_to_mired(kelvin) + @property def rgb_color(self): """RGB color of the light.""" - return self._rgb_color + if self.supported_features & SUPPORT_RGB_COLOR: + return self._rgb_color def turn_off(self, **kwargs): """Instruct the light to turn off.""" @@ -81,6 +115,14 @@ class Tradfri(Light): self._light.light_control.set_hex_color( color_util.color_rgb_to_hex(*kwargs[ATTR_RGB_COLOR])) + elif ATTR_COLOR_TEMP in kwargs and \ + self._light_data.hex_color is not None and self._ok_temps: + kelvin = color_util.color_temperature_mired_to_kelvin( + kwargs[ATTR_COLOR_TEMP]) + # find closest allowed kelvin temp from user input + kelvin = min(self._ok_temps.keys(), key=lambda x: abs(x-kelvin)) + self._light_control.set_hex_color(self._ok_temps[kelvin]) + def update(self): """Fetch new state data for this light.""" self._light.update() From 5574686d740ba719a342cac583632f8b1a40f08b Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 18 Apr 2017 08:55:51 -0700 Subject: [PATCH 103/146] Disable MQTT camera test (#7164) --- tests/components/camera/test_mqtt.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/components/camera/test_mqtt.py b/tests/components/camera/test_mqtt.py index 35552ca805e..b79f7245f28 100644 --- a/tests/components/camera/test_mqtt.py +++ b/tests/components/camera/test_mqtt.py @@ -1,10 +1,13 @@ """The tests for mqtt camera component.""" import asyncio +import pytest + from homeassistant.setup import async_setup_component import homeassistant.components.mqtt as mqtt +@pytest.mark.skip @asyncio.coroutine def test_run_camera_setup(hass, test_client): """Test that it fetches the given dispatcher data.""" From c7a11277ac57001442aa72145117c032e01fb093 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 18 Apr 2017 18:03:56 +0200 Subject: [PATCH 104/146] myStrom WiFi bulbs (#7161) * Add initial support for myStrom WiFi bulbs * Upgrade python-mystrom to 0.3.8 * Add myStrom light * Fix lint issue --- .coveragerc | 3 +- homeassistant/components/light/mystrom.py | 121 +++++++++++++++++++++ homeassistant/components/switch/mystrom.py | 2 +- requirements_all.txt | 3 +- 4 files changed, 126 insertions(+), 3 deletions(-) create mode 100644 homeassistant/components/light/mystrom.py diff --git a/.coveragerc b/.coveragerc index 43aa685fcc4..4c3d883cae4 100644 --- a/.coveragerc +++ b/.coveragerc @@ -233,13 +233,14 @@ omit = homeassistant/components/light/lifx.py homeassistant/components/light/lifx_legacy.py homeassistant/components/light/limitlessled.py + homeassistant/components/light/mystrom.py homeassistant/components/light/osramlightify.py + homeassistant/components/light/piglow.py homeassistant/components/light/tikteck.py homeassistant/components/light/tradfri.py homeassistant/components/light/x10.py homeassistant/components/light/yeelight.py homeassistant/components/light/yeelightsunflower.py - homeassistant/components/light/piglow.py homeassistant/components/light/zengge.py homeassistant/components/lirc.py homeassistant/components/lock/nuki.py diff --git a/homeassistant/components/light/mystrom.py b/homeassistant/components/light/mystrom.py new file mode 100644 index 00000000000..e29535d60e6 --- /dev/null +++ b/homeassistant/components/light/mystrom.py @@ -0,0 +1,121 @@ +""" +Support for myStrom Wifi bulbs. + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/light.mystrom/ +""" +import logging + +import voluptuous as vol + +from homeassistant.components.light import ( + Light, PLATFORM_SCHEMA, ATTR_BRIGHTNESS, SUPPORT_BRIGHTNESS) +from homeassistant.const import CONF_HOST, CONF_MAC, CONF_NAME, STATE_UNKNOWN +import homeassistant.helpers.config_validation as cv + +REQUIREMENTS = ['python-mystrom==0.3.8'] + +_LOGGER = logging.getLogger(__name__) + +DEFAULT_NAME = 'myStrom bulb' + +SUPPORT_MYSTROM = (SUPPORT_BRIGHTNESS) + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ + vol.Required(CONF_HOST): cv.string, + vol.Required(CONF_MAC): cv.string, + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, +}) + + +def setup_platform(hass, config, add_devices, discovery_info=None): + """Set up the myStrom Light platform.""" + from pymystrom import MyStromBulb + from pymystrom.exceptions import MyStromConnectionError + + host = config.get(CONF_HOST) + mac = config.get(CONF_MAC) + name = config.get(CONF_NAME) + + bulb = MyStromBulb(host, mac) + try: + if bulb.get_status()['type'] != 'rgblamp': + _LOGGER.error("Device %s (%s) is not a myStrom bulb", host, mac) + return False + except MyStromConnectionError: + _LOGGER.warning("myStrom bulb not online") + + add_devices([MyStromLight(bulb, name)], True) + + +class MyStromLight(Light): + """Representation of the myStrom WiFi Bulb.""" + + def __init__(self, bulb, name): + """Initialize the light.""" + self._bulb = bulb + self._name = name + self._state = None + self._available = False + self._brightness = 0 + self._rgb_color = [0, 0, 0] + + @property + def name(self): + """Return the display name of this light.""" + return self._name + + @property + def supported_features(self): + """Flag supported features.""" + return SUPPORT_MYSTROM + + @property + def brightness(self): + """Brightness of the light.""" + return self._brightness + + @property + def available(self) -> bool: + """Return True if entity is available.""" + return self._available + + @property + def is_on(self): + """Return true if light is on.""" + return self._state['on'] if self._state is not None else STATE_UNKNOWN + + def turn_on(self, **kwargs): + """Turn on the light.""" + from pymystrom.exceptions import MyStromConnectionError + + brightness = kwargs.get(ATTR_BRIGHTNESS, 255) + + try: + if not self.is_on: + self._bulb.set_on() + if brightness is not None: + self._bulb.set_color_hsv(0, 0, round(brightness * 100 / 255)) + except MyStromConnectionError: + _LOGGER.warning("myStrom bulb not online") + + def turn_off(self, **kwargs): + """Turn off the bulb.""" + from pymystrom.exceptions import MyStromConnectionError + + try: + self._bulb.set_off() + except MyStromConnectionError: + _LOGGER.warning("myStrom bulb not online") + + def update(self): + """Fetch new state data for this light.""" + from pymystrom.exceptions import MyStromConnectionError + + try: + self._state = self._bulb.get_status() + self._brightness = int(self._bulb.get_brightness()) * 255 / 100 + self._available = True + except MyStromConnectionError: + _LOGGER.warning("myStrom bulb not online") + self._available = False diff --git a/homeassistant/components/switch/mystrom.py b/homeassistant/components/switch/mystrom.py index 515900dd2df..e813da43dfa 100644 --- a/homeassistant/components/switch/mystrom.py +++ b/homeassistant/components/switch/mystrom.py @@ -12,7 +12,7 @@ from homeassistant.components.switch import (SwitchDevice, PLATFORM_SCHEMA) from homeassistant.const import (CONF_NAME, CONF_HOST) import homeassistant.helpers.config_validation as cv -REQUIREMENTS = ['python-mystrom==0.3.6'] +REQUIREMENTS = ['python-mystrom==0.3.8'] DEFAULT_NAME = 'myStrom Switch' diff --git a/requirements_all.txt b/requirements_all.txt index a509529a5f3..8a6f550d1f9 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -623,8 +623,9 @@ python-hpilo==3.9 # homeassistant.components.media_player.mpd python-mpd2==0.5.5 +# homeassistant.components.light.mystrom # homeassistant.components.switch.mystrom -python-mystrom==0.3.6 +python-mystrom==0.3.8 # homeassistant.components.nest python-nest==3.1.0 From de71fee0a095ea043c66be92ad8bd6685b7fc74f Mon Sep 17 00:00:00 2001 From: Thibault Cohen Date: Tue, 18 Apr 2017 12:09:06 -0400 Subject: [PATCH 105/146] Fix #7026 adding a new wol parameter (#7144) --- homeassistant/components/switch/wake_on_lan.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/switch/wake_on_lan.py b/homeassistant/components/switch/wake_on_lan.py index c86a4674bb6..4413da191d3 100644 --- a/homeassistant/components/switch/wake_on_lan.py +++ b/homeassistant/components/switch/wake_on_lan.py @@ -21,6 +21,7 @@ _LOGGER = logging.getLogger(__name__) CONF_MAC_ADDRESS = 'mac_address' CONF_OFF_ACTION = 'turn_off' +CONF_BROADCAST_ADDRESS = 'broadcast_address' DEFAULT_NAME = 'Wake on LAN' DEFAULT_PING_TIMEOUT = 1 @@ -28,6 +29,7 @@ DEFAULT_PING_TIMEOUT = 1 PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_MAC_ADDRESS): cv.string, vol.Optional(CONF_HOST): cv.string, + vol.Optional(CONF_BROADCAST_ADDRESS): cv.string, vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Optional(CONF_OFF_ACTION): cv.SCRIPT_SCHEMA, }) @@ -38,21 +40,25 @@ def setup_platform(hass, config, add_devices, discovery_info=None): name = config.get(CONF_NAME) host = config.get(CONF_HOST) mac_address = config.get(CONF_MAC_ADDRESS) + broadcast_address = config.get(CONF_BROADCAST_ADDRESS) off_action = config.get(CONF_OFF_ACTION) - add_devices([WOLSwitch(hass, name, host, mac_address, off_action)]) + add_devices([WOLSwitch(hass, name, host, mac_address, + off_action, broadcast_address)]) class WOLSwitch(SwitchDevice): """Representation of a wake on lan switch.""" - def __init__(self, hass, name, host, mac_address, off_action): + def __init__(self, hass, name, host, mac_address, + off_action, broadcast_address): """Initialize the WOL switch.""" from wakeonlan import wol self._hass = hass self._name = name self._host = host self._mac_address = mac_address + self._broadcast_address = broadcast_address self._off_script = Script(hass, off_action) if off_action else None self._state = False self._wol = wol @@ -75,9 +81,9 @@ class WOLSwitch(SwitchDevice): def turn_on(self): """Turn the device on.""" - if self._host: + if self._broadcast_address: self._wol.send_magic_packet(self._mac_address, - ip_address=self._host) + ip_address=self._broadcast_address) else: self._wol.send_magic_packet(self._mac_address) From bbad15f85307c5e5a9b4f630602a62e0b04a1f7f Mon Sep 17 00:00:00 2001 From: Greg Dowling Date: Tue, 18 Apr 2017 17:11:08 +0100 Subject: [PATCH 106/146] Add subscription update for Wemo switches, fix bug in Insight switches, fix wemo motion bug, fix wemo discovery (#7135) * Fix wemo discovery. * Bump wemo version, add subscription_update for basic switch, fix bug with turning insight switches off. * Fix missed callback change for wemo motion. * Regress netdisco changes. --- homeassistant/components/binary_sensor/wemo.py | 18 ++++++++++++------ homeassistant/components/wemo.py | 2 +- requirements_all.txt | 2 +- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/binary_sensor/wemo.py b/homeassistant/components/binary_sensor/wemo.py index 07deea02f6e..7f44370510e 100644 --- a/homeassistant/components/binary_sensor/wemo.py +++ b/homeassistant/components/binary_sensor/wemo.py @@ -40,12 +40,14 @@ class WemoBinarySensor(BinarySensorDevice): wemo.SUBSCRIPTION_REGISTRY.register(self.wemo) wemo.SUBSCRIPTION_REGISTRY.on(self.wemo, None, self._update_callback) - def _update_callback(self, _device, _params): - """Called by the wemo device callback to update state.""" + def _update_callback(self, _device, _type, _params): + """Called by the Wemo device callback to update state.""" _LOGGER.info( 'Subscription update for %s', _device) - self.update() + updated = self.wemo.subscription_update(_type, _params) + self._update(force_update=(not updated)) + if not hasattr(self, 'hass'): return self.schedule_update_ha_state() @@ -72,7 +74,11 @@ class WemoBinarySensor(BinarySensorDevice): def update(self): """Update WeMo state.""" + self._update(force_update=True) + + def _update(self, force_update=True): try: - self._state = self.wemo.get_state(True) - except AttributeError: - _LOGGER.warning('Could not update status for %s', self.name) + self._state = self.wemo.get_state(force_update) + except AttributeError as err: + _LOGGER.warning('Could not update status for %s (%s)', + self.name, err) diff --git a/homeassistant/components/wemo.py b/homeassistant/components/wemo.py index 20c9f6eeca2..d9fa0bc7f56 100644 --- a/homeassistant/components/wemo.py +++ b/homeassistant/components/wemo.py @@ -14,7 +14,7 @@ from homeassistant.helpers import config_validation as cv from homeassistant.const import EVENT_HOMEASSISTANT_STOP -REQUIREMENTS = ['pywemo==0.4.17'] +REQUIREMENTS = ['pywemo==0.4.18'] DOMAIN = 'wemo' diff --git a/requirements_all.txt b/requirements_all.txt index 8a6f550d1f9..7ae864fd84e 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -672,7 +672,7 @@ pyvera==0.2.26 pywebpush==0.6.1 # homeassistant.components.wemo -pywemo==0.4.17 +pywemo==0.4.18 # homeassistant.components.zabbix pyzabbix==0.7.4 From d007269eccd48c9133e5cef90bf02f9001e79561 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Arnauts?= Date: Tue, 18 Apr 2017 22:03:06 +0200 Subject: [PATCH 107/146] Update neato.py (#7166) Fix leftover copy/paste error in comment of neato.py --- homeassistant/components/neato.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/neato.py b/homeassistant/components/neato.py index 7bc4724e18c..67716c6a2e5 100644 --- a/homeassistant/components/neato.py +++ b/homeassistant/components/neato.py @@ -81,7 +81,7 @@ ALERTS = { def setup(hass, config): - """Setup the Verisure component.""" + """Setup the Neato component.""" from pybotvac import Account hass.data[NEATO_LOGIN] = NeatoHub(hass, config[DOMAIN], Account) From 1e758ed0301e1d99b367d5a60901a4b1f7d675e9 Mon Sep 17 00:00:00 2001 From: Erik Eriksson Date: Wed, 19 Apr 2017 00:20:52 +0200 Subject: [PATCH 108/146] Keep track of already added players (#7149) --- .../components/media_player/squeezebox.py | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/homeassistant/components/media_player/squeezebox.py b/homeassistant/components/media_player/squeezebox.py index eec8eeb8177..40c48f55215 100644 --- a/homeassistant/components/media_player/squeezebox.py +++ b/homeassistant/components/media_player/squeezebox.py @@ -29,8 +29,6 @@ _LOGGER = logging.getLogger(__name__) DEFAULT_PORT = 9000 TIMEOUT = 10 -KNOWN_DEVICES = [] - SUPPORT_SQUEEZEBOX = SUPPORT_PAUSE | SUPPORT_VOLUME_SET | \ SUPPORT_VOLUME_MUTE | SUPPORT_PREVIOUS_TRACK | SUPPORT_NEXT_TRACK | \ SUPPORT_SEEK | SUPPORT_TURN_ON | SUPPORT_TURN_OFF | SUPPORT_PLAY_MEDIA | \ @@ -71,18 +69,8 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None): host, port, error) return False - # Combine it with port to allow multiple servers at the same host - key = "{}:{}".format(ipaddr, port) - - # Only add a media server once - if key in KNOWN_DEVICES: - return False - KNOWN_DEVICES.append(key) - _LOGGER.debug("Creating LMS object for %s", ipaddr) lms = LogitechMediaServer(hass, host, port, username, password) - if lms is False: - return False players = yield from lms.create_players() async_add_devices(players) @@ -173,6 +161,11 @@ class SqueezeBoxDevice(MediaPlayerDevice): """Return the name of the device.""" return self._name + @property + def unique_id(self): + """Return an unique ID.""" + return self._id + @property def state(self): """Return the state of the device.""" From e4bbbe20dd2b4f8891f94a104b1cd954114999ee Mon Sep 17 00:00:00 2001 From: Mitesh Patel Date: Tue, 18 Apr 2017 17:24:58 -0500 Subject: [PATCH 109/146] Fix id zone mismatch (#7165) * Fixes issue with id mismatch when multiple devices are connected to the lutron bridge * Updates labels * removes no longer needed config values. * removes no longer needed imports --- .../components/light/lutron_caseta.py | 2 +- homeassistant/components/lutron_caseta.py | 20 ++++++++----------- requirements_all.txt | 2 +- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/homeassistant/components/light/lutron_caseta.py b/homeassistant/components/light/lutron_caseta.py index e77501e8ce4..705886855b0 100644 --- a/homeassistant/components/light/lutron_caseta.py +++ b/homeassistant/components/light/lutron_caseta.py @@ -42,7 +42,7 @@ class LutronCasetaLight(LutronCasetaDevice, Light): def turn_on(self, **kwargs): """Turn the light on.""" - if ATTR_BRIGHTNESS in kwargs and self._device_type == "WallDimmer": + if ATTR_BRIGHTNESS in kwargs: brightness = kwargs[ATTR_BRIGHTNESS] else: brightness = 255 diff --git a/homeassistant/components/lutron_caseta.py b/homeassistant/components/lutron_caseta.py index 5519240bc49..1e19083e959 100644 --- a/homeassistant/components/lutron_caseta.py +++ b/homeassistant/components/lutron_caseta.py @@ -10,15 +10,13 @@ import logging import voluptuous as vol import homeassistant.helpers.config_validation as cv -from homeassistant.const import (CONF_HOST, - CONF_USERNAME, - CONF_PASSWORD) +from homeassistant.const import CONF_HOST from homeassistant.helpers import discovery from homeassistant.helpers.entity import Entity REQUIREMENTS = ['https://github.com/gurumitts/' - 'pylutron-caseta/archive/v0.2.5.zip#' - 'pylutron-caseta==v0.2.5'] + 'pylutron-caseta/archive/v0.2.6.zip#' + 'pylutron-caseta==v0.2.6'] _LOGGER = logging.getLogger(__name__) @@ -28,9 +26,7 @@ DOMAIN = 'lutron_caseta' CONFIG_SCHEMA = vol.Schema({ DOMAIN: vol.Schema({ - vol.Required(CONF_HOST): cv.string, - vol.Required(CONF_USERNAME): cv.string, - vol.Required(CONF_PASSWORD): cv.string + vol.Required(CONF_HOST): cv.string }) }, extra=vol.ALLOW_EXTRA) @@ -41,9 +37,7 @@ def setup(hass, base_config): config = base_config.get(DOMAIN) hass.data[LUTRON_CASETA_SMARTBRIDGE] = Smartbridge( - hostname=config[CONF_HOST], - username=config[CONF_USERNAME], - password=config[CONF_PASSWORD] + hostname=config[CONF_HOST] ) if not hass.data[LUTRON_CASETA_SMARTBRIDGE].is_connected(): _LOGGER.error("Unable to connect to Lutron smartbridge at %s", @@ -71,6 +65,7 @@ class LutronCasetaDevice(Entity): self._device_id = device["device_id"] self._device_type = device["type"] self._device_name = device["name"] + self._device_zone = device["zone"] self._state = None self._smartbridge = bridge @@ -93,7 +88,8 @@ class LutronCasetaDevice(Entity): @property def device_state_attributes(self): """Return the state attributes.""" - attr = {'Lutron Integration ID': self._device_id} + attr = {'Device ID': self._device_id, + 'Zone ID': self._device_zone} return attr @property diff --git a/requirements_all.txt b/requirements_all.txt index 7ae864fd84e..4583058cdff 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -266,7 +266,7 @@ https://github.com/bah2830/python-roku/archive/3.1.3.zip#roku==3.1.3 https://github.com/bashwork/pymodbus/archive/d7fc4f1cc975631e0a9011390e8017f64b612661.zip#pymodbus==1.2.0 # homeassistant.components.lutron_caseta -https://github.com/gurumitts/pylutron-caseta/archive/v0.2.5.zip#pylutron-caseta==v0.2.5 +https://github.com/gurumitts/pylutron-caseta/archive/v0.2.6.zip#pylutron-caseta==v0.2.6 # homeassistant.components.netatmo https://github.com/jabesq/netatmo-api-python/archive/v0.9.1.zip#lnetatmo==0.9.1 From 4becfb66e3dede68f11471b8df7edf2ccab6d712 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 18 Apr 2017 20:11:18 -0700 Subject: [PATCH 110/146] Upgrade pytradfri to 1.0 (#7163) --- homeassistant/components/tradfri.py | 6 +++--- requirements_all.txt | 2 +- virtualization/Docker/scripts/coap_client | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/tradfri.py b/homeassistant/components/tradfri.py index 264ac9f42c6..098b1788742 100644 --- a/homeassistant/components/tradfri.py +++ b/homeassistant/components/tradfri.py @@ -21,7 +21,7 @@ DOMAIN = 'tradfri' CONFIG_FILE = 'tradfri.conf' KEY_CONFIG = 'tradfri_configuring' KEY_GATEWAY = 'tradfri_gateway' -REQUIREMENTS = ['pytradfri==0.4'] +REQUIREMENTS = ['pytradfri==1.0'] CONFIG_SCHEMA = vol.Schema({ DOMAIN: vol.Schema({ @@ -100,10 +100,10 @@ def async_setup(hass, config): @asyncio.coroutine def _setup_gateway(hass, hass_config, host, key): """Create a gateway.""" - from pytradfri import cli_api_factory, Gateway, RequestError + from pytradfri import cli_api_factory, Gateway, RequestError, retry_timeout try: - api = cli_api_factory(host, key) + api = retry_timeout(cli_api_factory(host, key)) except RequestError: return False diff --git a/requirements_all.txt b/requirements_all.txt index 4583058cdff..519616f4a7e 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -657,7 +657,7 @@ python-wink==1.2.3 pytrackr==0.0.5 # homeassistant.components.tradfri -pytradfri==0.4 +pytradfri==1.0 # homeassistant.components.device_tracker.unifi pyunifi==2.0 diff --git a/virtualization/Docker/scripts/coap_client b/virtualization/Docker/scripts/coap_client index bbc5ba0a2c2..fa16d14c0cb 100755 --- a/virtualization/Docker/scripts/coap_client +++ b/virtualization/Docker/scripts/coap_client @@ -9,6 +9,6 @@ apt-get install -y --no-install-recommends git autoconf automake libtool git clone --depth 1 --recursive -b dtls https://github.com/home-assistant/libcoap.git cd libcoap ./autogen.sh -./configure --disable-documentation --disable-shared +./configure --disable-documentation --disable-shared --without-debug CFLAGS="-D COAP_DEBUG_FD=stderr" make make install From e5feeec7a41636886f97f3be94f4364b52b11a67 Mon Sep 17 00:00:00 2001 From: Johan Bloemberg Date: Wed, 19 Apr 2017 05:24:44 +0200 Subject: [PATCH 111/146] Value of 0 should not be considered `unknown`. (#7139) * Value of 0 should not be considered `unknown`. * Reflect disconnect state in entity states. * Due to adding unknown state on disconnect, the amount of reconnects can sometimes be more. Test for at least 2 reconnect attempts. --- homeassistant/components/sensor/dsmr.py | 7 ++++++- tests/components/sensor/test_dsmr.py | 6 +++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/sensor/dsmr.py b/homeassistant/components/sensor/dsmr.py index b9c3f82cdc5..84669a57000 100644 --- a/homeassistant/components/sensor/dsmr.py +++ b/homeassistant/components/sensor/dsmr.py @@ -153,10 +153,15 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None): yield from protocol.wait_closed() if hass.state != CoreState.stopping: + # unexpected disconnect if transport: # remove listerer stop_listerer() + # reflect disconnect state in devices state by setting an + # empty telegram resulting in `unkown` states + update_entities_telegram({}) + # throttle reconnect attempts yield from asyncio.sleep(config[CONF_RECONNECT_INTERVAL], loop=hass.loop) @@ -207,7 +212,7 @@ class DSMREntity(Entity): if self._obis == obis.ELECTRICITY_ACTIVE_TARIFF: return self.translate_tariff(value) else: - if value: + if value is not None: return value else: return STATE_UNKNOWN diff --git a/tests/components/sensor/test_dsmr.py b/tests/components/sensor/test_dsmr.py index a09f16b00fd..59e66ca82b6 100644 --- a/tests/components/sensor/test_dsmr.py +++ b/tests/components/sensor/test_dsmr.py @@ -56,7 +56,7 @@ def test_default_setup(hass, mock_connection_factory): telegram = { CURRENT_ELECTRICITY_USAGE: CosemObject([ - {'value': Decimal('0.1'), 'unit': 'kWh'} + {'value': Decimal('0.0'), 'unit': 'kWh'} ]), ELECTRICITY_ACTIVE_TARIFF: CosemObject([ {'value': '0001', 'unit': ''} @@ -82,7 +82,7 @@ def test_default_setup(hass, mock_connection_factory): # ensure entities have new state value after incoming telegram power_consumption = hass.states.get('sensor.power_consumption') - assert power_consumption.state == '0.1' + assert power_consumption.state == '0.0' assert power_consumption.attributes.get('unit_of_measurement') is 'kWh' # tariff should be translated in human readable and have no unit @@ -199,5 +199,5 @@ def test_reconnect(hass, monkeypatch, mock_connection_factory): # wait for sleep to resolve yield from hass.async_block_till_done() - assert connection_factory.call_count == 2, \ + assert connection_factory.call_count >= 2, \ 'connecting not retried' From ce9bb0e84ce926cbef7d785b52cc0521112838ae Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 18 Apr 2017 20:58:25 -0700 Subject: [PATCH 112/146] Upgrade netdisco (#7171) --- homeassistant/components/discovery.py | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/discovery.py b/homeassistant/components/discovery.py index 7a18148e517..ed766fc3997 100644 --- a/homeassistant/components/discovery.py +++ b/homeassistant/components/discovery.py @@ -20,7 +20,7 @@ from homeassistant.helpers.event import async_track_point_in_utc_time from homeassistant.helpers.discovery import async_load_platform, async_discover import homeassistant.util.dt as dt_util -REQUIREMENTS = ['netdisco==1.0.0rc2'] +REQUIREMENTS = ['netdisco==1.0.0rc3'] DOMAIN = 'discovery' diff --git a/requirements_all.txt b/requirements_all.txt index 519616f4a7e..baee6d80f92 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -399,7 +399,7 @@ mutagen==1.36.2 myusps==1.0.5 # homeassistant.components.discovery -netdisco==1.0.0rc2 +netdisco==1.0.0rc3 # homeassistant.components.sensor.neurio_energy neurio==0.3.1 From 5179832f6f0fc4032bbcc17693781cb0095c5b4b Mon Sep 17 00:00:00 2001 From: Alessandro Mogavero Date: Wed, 19 Apr 2017 07:19:27 +0100 Subject: [PATCH 113/146] Added new services to platform kodi (#6426) * added new service * fixed basic test in kodi platform * Added new method async_get_albums * Added new methods in module kodi * added method find_song in kodi module * method add_song_to_playlist made async * Added media type to method async_play_media * added methods async_clear_playlist and play_song * methods play_song and find_song made async * added new service play_song * Improved kodi._find now it find for whole words only * added possibility to specify artist in kodi.async_find_artist * added kodi.async_find_album * added new optional input to play_song service * In async_play_song added handling of no song found * default artist value changed to '' * async_add_song_to_playlist now can also search for musinc * added service add_song_to_playlist * Added new service add_album_to_playlist * added services to switch shuffle mode * added service add_all_albums_to_playlist * handled error in async_unset_shuffle and async_set_shuffle * Added abstract methods to media_player * _server substituted with server property * style made consistent with requirements * Fixed issue with pylint * Services moved to kodi platform * service play_song removed * removed service unset_shuffle * all add services merged into one * removed service get_artists * added kodi_ to service names * Fixed some style issues * Removed changes in media_player __init__ * Implemented requested changes * Fixed pylint problem --- homeassistant/components/media_player/kodi.py | 191 +++++++++++++++++- 1 file changed, 190 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/media_player/kodi.py b/homeassistant/components/media_player/kodi.py index a137a332f7e..e10886d6916 100644 --- a/homeassistant/components/media_player/kodi.py +++ b/homeassistant/components/media_player/kodi.py @@ -8,6 +8,7 @@ import asyncio from functools import wraps import logging import urllib +import re import aiohttp import voluptuous as vol @@ -17,7 +18,7 @@ from homeassistant.components.media_player import ( SUPPORT_PLAY_MEDIA, SUPPORT_VOLUME_MUTE, SUPPORT_VOLUME_SET, SUPPORT_STOP, SUPPORT_TURN_OFF, SUPPORT_PLAY, SUPPORT_VOLUME_STEP, MediaPlayerDevice, PLATFORM_SCHEMA, MEDIA_TYPE_MUSIC, MEDIA_TYPE_TVSHOW, MEDIA_TYPE_VIDEO, - MEDIA_TYPE_PLAYLIST) + MEDIA_TYPE_PLAYLIST, MEDIA_PLAYER_SCHEMA, DOMAIN) from homeassistant.const import ( STATE_IDLE, STATE_OFF, STATE_PAUSED, STATE_PLAYING, CONF_HOST, CONF_NAME, CONF_PORT, CONF_SSL, CONF_PROXY_SSL, CONF_USERNAME, CONF_PASSWORD, @@ -76,6 +77,34 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ cv.boolean, }) +SERVICE_ADD_MEDIA = 'kodi_add_to_playlist' +SERVICE_SET_SHUFFLE = 'kodi_set_shuffle' + +ATTR_MEDIA_TYPE = 'media_type' +ATTR_MEDIA_NAME = 'media_name' +ATTR_MEDIA_ARTIST_NAME = 'artist_name' +ATTR_MEDIA_ID = 'media_id' + +MEDIA_PLAYER_SET_SHUFFLE_SCHEMA = MEDIA_PLAYER_SCHEMA.extend({ + vol.Required('shuffle_on'): cv.boolean, +}) + +MEDIA_PLAYER_ADD_MEDIA_SCHEMA = MEDIA_PLAYER_SCHEMA.extend({ + vol.Required(ATTR_MEDIA_TYPE): cv.string, + vol.Optional(ATTR_MEDIA_ID): cv.string, + vol.Optional(ATTR_MEDIA_NAME): cv.string, + vol.Optional(ATTR_MEDIA_ARTIST_NAME): cv.string, +}) + +SERVICE_TO_METHOD = { + SERVICE_ADD_MEDIA: { + 'method': 'async_add_media_to_playlist', + 'schema': MEDIA_PLAYER_ADD_MEDIA_SCHEMA}, + SERVICE_SET_SHUFFLE: { + 'method': 'async_set_shuffle', + 'schema': MEDIA_PLAYER_SET_SHUFFLE_SCHEMA}, +} + @asyncio.coroutine def async_setup_platform(hass, config, async_add_devices, discovery_info=None): @@ -103,6 +132,33 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None): async_add_devices([entity], update_before_add=True) + @asyncio.coroutine + def async_service_handler(service): + """Map services to methods on MediaPlayerDevice.""" + method = SERVICE_TO_METHOD.get(service.service) + if not method: + return + + params = {key: value for key, value in service.data.items() + if key != 'entity_id'} + + yield from getattr(entity, method['method'])(**params) + + update_tasks = [] + if entity.should_poll: + update_coro = entity.async_update_ha_state(True) + update_tasks.append(update_coro) + + if update_tasks: + yield from asyncio.wait(update_tasks, loop=hass.loop) + + for service in SERVICE_TO_METHOD: + schema = SERVICE_TO_METHOD[service].get( + 'schema', MEDIA_PLAYER_SCHEMA) + hass.services.async_register( + DOMAIN, service, async_service_handler, + description=None, schema=schema) + def cmd(func): """Decorator to catch command exceptions.""" @@ -593,6 +649,139 @@ class KodiDevice(MediaPlayerDevice): if media_type == "CHANNEL": return self.server.Player.Open( {"item": {"channelid": int(media_id)}}) + elif media_type == "PLAYLIST": + return self.server.Player.Open( + {"item": {"playlistid": int(media_id)}}) else: return self.server.Player.Open( {"item": {"file": str(media_id)}}) + + @asyncio.coroutine + def async_set_shuffle(self, shuffle_on): + """Set shuffle mode, for the first player.""" + if len(self._players) < 1: + raise RuntimeError("Error: No active player.") + yield from self.server.Player.SetShuffle( + {"playerid": self._players[0]['playerid'], "shuffle": shuffle_on}) + + @asyncio.coroutine + def async_add_media_to_playlist( + self, media_type, media_id=None, media_name='', artist_name=''): + """Add a media to default playlist (i.e. playlistid=0). + + First the media type must be selected, then + the media can be specified in terms of id or + name and optionally artist name. + All the albums of an artist can be added with + media_name="ALL" + """ + if media_type == "SONG": + if media_id is None: + media_id = yield from self.async_find_song( + media_name, artist_name) + + yield from self.server.Playlist.Add( + {"playlistid": 0, "item": {"songid": int(media_id)}}) + + elif media_type == "ALBUM": + if media_id is None: + if media_name == "ALL": + yield from self.async_add_all_albums(artist_name) + return + + media_id = yield from self.async_find_album( + media_name, artist_name) + + yield from self.server.Playlist.Add( + {"playlistid": 0, "item": {"albumid": int(media_id)}}) + else: + raise RuntimeError("Unrecognized media type.") + + @asyncio.coroutine + def async_add_all_albums(self, artist_name): + """Add all albums of an artist to default playlist (i.e. playlistid=0). + + The artist is specified in terms of name. + """ + artist_id = yield from self.async_find_artist(artist_name) + + albums = yield from self.async_get_albums(artist_id) + + for alb in albums['albums']: + yield from self.server.Playlist.Add( + {"playlistid": 0, "item": {"albumid": int(alb['albumid'])}}) + + @asyncio.coroutine + def async_clear_playlist(self): + """Clear default playlist (i.e. playlistid=0).""" + return self.server.Playlist.Clear({"playlistid": 0}) + + @asyncio.coroutine + def async_get_artists(self): + """Get artists list.""" + return (yield from self.server.AudioLibrary.GetArtists()) + + @asyncio.coroutine + def async_get_albums(self, artist_id=None): + """Get albums list.""" + if artist_id is None: + return (yield from self.server.AudioLibrary.GetAlbums()) + else: + return (yield from self.server.AudioLibrary.GetAlbums( + {"filter": {"artistid": int(artist_id)}})) + + @asyncio.coroutine + def async_find_artist(self, artist_name): + """Find artist by name.""" + artists = yield from self.async_get_artists() + out = self._find( + artist_name, [a['artist'] for a in artists['artists']]) + return artists['artists'][out[0][0]]['artistid'] + + @asyncio.coroutine + def async_get_songs(self, artist_id=None): + """Get songs list.""" + if artist_id is None: + return (yield from self.server.AudioLibrary.GetSongs()) + else: + return (yield from self.server.AudioLibrary.GetSongs( + {"filter": {"artistid": int(artist_id)}})) + + @asyncio.coroutine + def async_find_song(self, song_name, artist_name=''): + """Find song by name and optionally artist name.""" + artist_id = None + if artist_name != '': + artist_id = yield from self.async_find_artist(artist_name) + + songs = yield from self.async_get_songs(artist_id) + if songs['limits']['total'] == 0: + return None + + out = self._find(song_name, [a['label'] for a in songs['songs']]) + return songs['songs'][out[0][0]]['songid'] + + @asyncio.coroutine + def async_find_album(self, album_name, artist_name=''): + """Find album by name and optionally artist name.""" + artist_id = None + if artist_name != '': + artist_id = yield from self.async_find_artist(artist_name) + + albums = yield from self.async_get_albums(artist_id) + out = self._find(album_name, [a['label'] for a in albums['albums']]) + return albums['albums'][out[0][0]]['albumid'] + + @staticmethod + def _find(key_word, words): + key_word = key_word.split(' ') + patt = [re.compile( + '(^| )' + k + '( |$)', re.IGNORECASE) for k in key_word] + + out = [[i, 0] for i in range(len(words))] + for i in range(len(words)): + mtc = [p.search(words[i]) for p in patt] + rate = [m is not None for m in mtc].count(True) + out[i][1] = rate + + return sorted(out, key=lambda out: out[1], reverse=True) From a41d0aced7d729ad5923ee4be1ac25b954948d5c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 19 Apr 2017 12:48:15 +0200 Subject: [PATCH 114/146] Supress trackback and upgrade PyMata to 2.14 (#7176) --- homeassistant/components/arduino.py | 46 +++++++++++++++-------------- requirements_all.txt | 2 +- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/homeassistant/components/arduino.py b/homeassistant/components/arduino.py index 239c80523df..8625685c057 100644 --- a/homeassistant/components/arduino.py +++ b/homeassistant/components/arduino.py @@ -13,7 +13,7 @@ from homeassistant.const import ( from homeassistant.const import CONF_PORT import homeassistant.helpers.config_validation as cv -REQUIREMENTS = ['PyMata==2.13'] +REQUIREMENTS = ['PyMata==2.14'] _LOGGER = logging.getLogger(__name__) @@ -29,18 +29,25 @@ CONFIG_SCHEMA = vol.Schema({ def setup(hass, config): - """Setup the Arduino component.""" + """Set up the Arduino component.""" import serial + + port = config[DOMAIN][CONF_PORT] + global BOARD try: - BOARD = ArduinoBoard(config[DOMAIN][CONF_PORT]) + BOARD = ArduinoBoard(port) except (serial.serialutil.SerialException, FileNotFoundError): - _LOGGER.exception("Your port is not accessible.") + _LOGGER.error("Your port %s is not accessible", port) return False - if BOARD.get_firmata()[1] <= 2: - _LOGGER.error("The StandardFirmata sketch should be 2.2 or newer.") - return False + try: + if BOARD.get_firmata()[1] <= 2: + _LOGGER.error("The StandardFirmata sketch should be 2.2 or newer") + return False + except IndexError: + _LOGGER.warning("The version of the StandardFirmata sketch was not" + "detected. This may lead to side effects") def stop_arduino(event): """Stop the Arduino service.""" @@ -67,25 +74,20 @@ class ArduinoBoard(object): def set_mode(self, pin, direction, mode): """Set the mode and the direction of a given pin.""" if mode == 'analog' and direction == 'in': - self._board.set_pin_mode(pin, - self._board.INPUT, - self._board.ANALOG) + self._board.set_pin_mode( + pin, self._board.INPUT, self._board.ANALOG) elif mode == 'analog' and direction == 'out': - self._board.set_pin_mode(pin, - self._board.OUTPUT, - self._board.ANALOG) + self._board.set_pin_mode( + pin, self._board.OUTPUT, self._board.ANALOG) elif mode == 'digital' and direction == 'in': - self._board.set_pin_mode(pin, - self._board.INPUT, - self._board.DIGITAL) + self._board.set_pin_mode( + pin, self._board.INPUT, self._board.DIGITAL) elif mode == 'digital' and direction == 'out': - self._board.set_pin_mode(pin, - self._board.OUTPUT, - self._board.DIGITAL) + self._board.set_pin_mode( + pin, self._board.OUTPUT, self._board.DIGITAL) elif mode == 'pwm': - self._board.set_pin_mode(pin, - self._board.OUTPUT, - self._board.PWM) + self._board.set_pin_mode( + pin, self._board.OUTPUT, self._board.PWM) def get_analog_inputs(self): """Get the values from the pins.""" diff --git a/requirements_all.txt b/requirements_all.txt index baee6d80f92..32d95676c27 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -26,7 +26,7 @@ PyJWT==1.4.2 PyMVGLive==1.1.3 # homeassistant.components.arduino -PyMata==2.13 +PyMata==2.14 # homeassistant.components.rpi_gpio # RPi.GPIO==0.6.1 From 8ba41563c940b8695ecaacc321b8f07c9ad6637c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 19 Apr 2017 14:09:00 +0200 Subject: [PATCH 115/146] Disable invalid-sequence-index (#7177) --- homeassistant/helpers/__init__.py | 1 + homeassistant/util/color.py | 6 +++++- homeassistant/util/dt.py | 3 ++- homeassistant/util/location.py | 3 +-- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/homeassistant/helpers/__init__.py b/homeassistant/helpers/__init__.py index 0fc75a476f6..47a7627b5ce 100644 --- a/homeassistant/helpers/__init__.py +++ b/homeassistant/helpers/__init__.py @@ -14,6 +14,7 @@ if False: ConfigType = Dict[str, Any] +# pylint: disable=invalid-sequence-index def config_per_platform(config: ConfigType, domain: str) -> Iterable[Tuple[Any, Any]]: """Generator to break a component config into different platforms. diff --git a/homeassistant/util/color.py b/homeassistant/util/color.py index 26a05bbc0bc..57d88c5328d 100644 --- a/homeassistant/util/color.py +++ b/homeassistant/util/color.py @@ -183,7 +183,7 @@ def color_name_to_rgb(color_name): # Taken from: # http://www.developers.meethue.com/documentation/color-conversions-rgb-xy # License: Code is given as is. Use at your own risk and discretion. -# pylint: disable=invalid-name +# pylint: disable=invalid-name, invalid-sequence-index def color_RGB_to_xy(iR: int, iG: int, iB: int) -> Tuple[float, float, int]: """Convert from RGB color to XY color.""" if iR + iG + iB == 0: @@ -219,6 +219,7 @@ def color_RGB_to_xy(iR: int, iG: int, iB: int) -> Tuple[float, float, int]: # Converted to Python from Obj-C, original source from: # http://www.developers.meethue.com/documentation/color-conversions-rgb-xy +# pylint: disable=invalid-sequence-index def color_xy_brightness_to_RGB(vX: float, vY: float, ibrightness: int) -> Tuple[int, int, int]: """Convert from XYZ to RGB.""" @@ -259,18 +260,21 @@ def color_xy_brightness_to_RGB(vX: float, vY: float, return (ir, ig, ib) +# pylint: disable=invalid-sequence-index def color_RGB_to_hsv(iR: int, iG: int, iB: int) -> Tuple[int, int, int]: """Convert an rgb color to its hsv representation.""" fHSV = colorsys.rgb_to_hsv(iR/255.0, iG/255.0, iB/255.0) return (int(fHSV[0]*65536), int(fHSV[1]*255), int(fHSV[2]*255)) +# pylint: disable=invalid-sequence-index def color_xy_brightness_to_hsv(vX: float, vY: float, ibrightness: int) -> Tuple[int, int, int]: """Convert an xy brightness color to its hsv representation.""" return color_RGB_to_hsv(*color_xy_brightness_to_RGB(vX, vY, ibrightness)) +# pylint: disable=invalid-sequence-index def _match_max_scale(input_colors: Tuple[int, ...], output_colors: Tuple[int, ...]) -> Tuple[int, ...]: """Match the maximum value of the output to the input.""" diff --git a/homeassistant/util/dt.py b/homeassistant/util/dt.py index 52e85081599..5e8b3382fb1 100644 --- a/homeassistant/util/dt.py +++ b/homeassistant/util/dt.py @@ -1,4 +1,4 @@ -"""Provides helper methods to handle the time in HA.""" +"""Helper methods to handle the time in Home Assistant.""" import datetime as dt import re @@ -184,6 +184,7 @@ def get_age(date: dt.datetime) -> str: elif number > 1: return "%d %ss" % (number, unit) + # pylint: disable=invalid-sequence-index def q_n_r(first: int, second: int) -> Tuple[int, int]: """Return quotient and remaining.""" return first // second, first % second diff --git a/homeassistant/util/location.py b/homeassistant/util/location.py index 950f2f99fed..c7bc4205297 100644 --- a/homeassistant/util/location.py +++ b/homeassistant/util/location.py @@ -9,7 +9,6 @@ from typing import Any, Optional, Tuple, Dict import requests - ELEVATION_URL = 'http://maps.googleapis.com/maps/api/elevation/json' FREEGEO_API = 'https://freegeoip.io/json/' IP_API = 'http://ip-api.com/json' @@ -83,7 +82,7 @@ def elevation(latitude, longitude): # Author: https://github.com/maurycyp # Source: https://github.com/maurycyp/vincenty # License: https://github.com/maurycyp/vincenty/blob/master/LICENSE -# pylint: disable=invalid-name, unused-variable +# pylint: disable=invalid-name, unused-variable, invalid-sequence-index def vincenty(point1: Tuple[float, float], point2: Tuple[float, float], miles: bool=False) -> Optional[float]: """ From 921760f8c1a48cd97509bcb4302b5ec5ad3f5132 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 19 Apr 2017 14:34:23 +0200 Subject: [PATCH 116/146] Upgrade mypy to 0.501 (was renamed from mypy-lang) (#7117) --- requirements_test.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_test.txt b/requirements_test.txt index 2d8ebe6a238..c2c5cf65f1b 100644 --- a/requirements_test.txt +++ b/requirements_test.txt @@ -3,7 +3,7 @@ # new version flake8==3.3 pylint==1.6.5 -mypy-lang==0.4.5 +mypy==0.501 pydocstyle==1.1.1 coveralls>=1.1 pytest>=2.9.2 From 2f4b2ddc0a175871ae0c11e8628ccd0d11a2ed3c Mon Sep 17 00:00:00 2001 From: Sytone Date: Wed, 19 Apr 2017 09:08:48 -0700 Subject: [PATCH 117/146] Add condition for API failure (#7181) * Add condition for API failure If you are not running the latest ve3rsion of ZM this will cause exceptions to fire. This fix handles a response from ZM but a non successful attempt. This resolves the issue https://github.com/home-assistant/home-assistant/issues/7178 * Fixed houndci-bot issues --- homeassistant/components/camera/zoneminder.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/homeassistant/components/camera/zoneminder.py b/homeassistant/components/camera/zoneminder.py index be38d468f2d..e419564a887 100644 --- a/homeassistant/components/camera/zoneminder.py +++ b/homeassistant/components/camera/zoneminder.py @@ -101,11 +101,17 @@ class ZoneMinderCamera(MjpegCamera): status_response = zoneminder.get_state( 'api/monitors/alarm/id:%i/command:status.json' % self._monitor_id ) + if not status_response: _LOGGER.warning('Could not get status for monitor %i', self._monitor_id) return + if status_response['success'] is False: + _LOGGER.warning('Alarm status API call failed for monitor %i', + self._monitor_id) + return + self._is_recording = status_response['status'] == ZM_STATE_ALARM @property From 90baa2ce4d7171b236d364d30c3288df6f3b88aa Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 19 Apr 2017 09:15:18 -0700 Subject: [PATCH 118/146] Add history to component priority list (#7173) --- homeassistant/bootstrap.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/bootstrap.py b/homeassistant/bootstrap.py index afcd2717e72..7f8c586fd80 100644 --- a/homeassistant/bootstrap.py +++ b/homeassistant/bootstrap.py @@ -28,7 +28,7 @@ _LOGGER = logging.getLogger(__name__) ERROR_LOG_FILENAME = 'home-assistant.log' FIRST_INIT_COMPONENT = set(( 'recorder', 'mqtt', 'mqtt_eventstream', 'logger', 'introduction', - 'frontend')) + 'frontend', 'history')) def from_config_dict(config: Dict[str, Any], From 1a635fede3b5ae6c6de3bb01328f7ac0e1b94d02 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 19 Apr 2017 09:15:39 -0700 Subject: [PATCH 119/146] Tweak Tradfri (#7172) --- homeassistant/components/light/tradfri.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/light/tradfri.py b/homeassistant/components/light/tradfri.py index 9626b098485..542f8dae8ef 100644 --- a/homeassistant/components/light/tradfri.py +++ b/homeassistant/components/light/tradfri.py @@ -46,17 +46,15 @@ class Tradfri(Light): self._light_data = light.light_control.lights[0] self._name = light.name self._rgb_color = None + self._features = ALLOWED_FEATURES.get( + slugify(self._light.device_info.manufacturer), SUPPORTED_FEATURES) self._ok_temps = ALLOWED_TEMPERATURES.get( slugify(self._light.device_info.manufacturer)) @property def supported_features(self): """Flag supported features.""" - features = ALLOWED_FEATURES.get( - slugify(self._light.device_info.manufacturer)) - if features: - return features - return SUPPORTED_FEATURES + return self._features @property def name(self): @@ -92,8 +90,7 @@ class Tradfri(Light): @property def rgb_color(self): """RGB color of the light.""" - if self.supported_features & SUPPORT_RGB_COLOR: - return self._rgb_color + return self._rgb_color def turn_off(self, **kwargs): """Instruct the light to turn off.""" From 9b43b39370cce5aa724c70b7982a853d839890f6 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 19 Apr 2017 09:23:44 -0700 Subject: [PATCH 120/146] Update frontend --- homeassistant/components/frontend/version.py | 26 +++++++++--------- .../frontend/www_static/compatibility.js | 2 +- .../frontend/www_static/compatibility.js.gz | Bin 360 -> 362 bytes .../components/frontend/www_static/core.js | 2 +- .../components/frontend/www_static/core.js.gz | Bin 2682 -> 2695 bytes .../frontend/www_static/frontend.html | 23 ++++++++++------ .../frontend/www_static/frontend.html.gz | Bin 139925 -> 140243 bytes .../www_static/home-assistant-polymer | 2 +- .../components/frontend/www_static/mdi.html | 2 +- .../frontend/www_static/mdi.html.gz | Bin 194700 -> 197240 bytes .../www_static/panels/ha-panel-config.html | 2 +- .../www_static/panels/ha-panel-config.html.gz | Bin 17135 -> 17179 bytes .../www_static/panels/ha-panel-dev-event.html | 2 +- .../panels/ha-panel-dev-event.html.gz | Bin 2720 -> 2728 bytes .../panels/ha-panel-dev-info.html.gz | Bin 1195 -> 1195 bytes .../panels/ha-panel-dev-service.html | 2 +- .../panels/ha-panel-dev-service.html.gz | Bin 17941 -> 17945 bytes .../www_static/panels/ha-panel-dev-state.html | 2 +- .../panels/ha-panel-dev-state.html.gz | Bin 2934 -> 2941 bytes .../panels/ha-panel-dev-template.html | 2 +- .../panels/ha-panel-dev-template.html.gz | Bin 7350 -> 7357 bytes .../www_static/panels/ha-panel-history.html | 2 +- .../panels/ha-panel-history.html.gz | Bin 11892 -> 11893 bytes .../www_static/panels/ha-panel-logbook.html | 4 +-- .../panels/ha-panel-logbook.html.gz | Bin 34883 -> 34871 bytes .../www_static/panels/ha-panel-map.html | 8 +++--- .../www_static/panels/ha-panel-map.html.gz | Bin 44162 -> 44154 bytes .../www_static/panels/ha-panel-zwave.html | 2 +- .../www_static/panels/ha-panel-zwave.html.gz | Bin 5936 -> 5961 bytes .../frontend/www_static/service_worker.js | 2 +- .../frontend/www_static/service_worker.js.gz | Bin 2506 -> 2514 bytes 31 files changed, 46 insertions(+), 39 deletions(-) diff --git a/homeassistant/components/frontend/version.py b/homeassistant/components/frontend/version.py index 408d40092a0..c060256408a 100644 --- a/homeassistant/components/frontend/version.py +++ b/homeassistant/components/frontend/version.py @@ -1,21 +1,21 @@ """DO NOT MODIFY. Auto-generated by script/fingerprint_frontend.""" FINGERPRINTS = { - "compatibility.js": "c679589d32e0588becbf104d9907e96a", - "core.js": "4073d1aa7a9367ac39f33f43c34b51c9", - "frontend.html": "1f8de6ac579f877695ccd06a60a8d703", - "mdi.html": "989f02c51eba561dc32b9ecc628a84b3", + "compatibility.js": "83d9c77748dafa9db49ae77d7f3d8fb0", + "core.js": "5d08475f03adb5969bd31855d5ca0cfd", + "frontend.html": "32bdf1e9eb7b2d73682a65cfc5ded063", + "mdi.html": "d86ee142ae2476f49384bfe866a2885e", "micromarkdown-js.html": "93b5ec4016f0bba585521cf4d18dec1a", - "panels/ha-panel-config.html": "41395854f8e541c9fee32615e1fc315f", - "panels/ha-panel-dev-event.html": "1f169700c2345785855b1d7919d12326", + "panels/ha-panel-config.html": "0b42cb4e709ce35ad2666ffeca6f9b14", + "panels/ha-panel-dev-event.html": "2db9c218065ef0f61d8d08db8093cad2", "panels/ha-panel-dev-info.html": "61610e015a411cfc84edd2c4d489e71d", - "panels/ha-panel-dev-service.html": "4a8cc058f68f737b8129196e3033ef37", - "panels/ha-panel-dev-state.html": "48d37db4a1d6708314ded1d624d0f4d4", - "panels/ha-panel-dev-template.html": "6f353392d68574fbc5af188bca44d0ae", - "panels/ha-panel-history.html": "c136dc6b97bb7c619b33f12232cf129b", + "panels/ha-panel-dev-service.html": "415552027cb083badeff5f16080410ed", + "panels/ha-panel-dev-state.html": "d70314913b8923d750932367b1099750", + "panels/ha-panel-dev-template.html": "567fbf86735e1b891e40c2f4060fec9b", + "panels/ha-panel-history.html": "be115906882752d220199abbaddc53e5", "panels/ha-panel-iframe.html": "d920f0aa3c903680f2f8795e2255daab", - "panels/ha-panel-logbook.html": "5cd70ad9981d846c9bb6f57b0adfe0e3", - "panels/ha-panel-map.html": "e3c7a54f90dd4269d7e53cdcd96514c6", - "panels/ha-panel-zwave.html": "c014a55b05832b195339aa1dde98c563", + "panels/ha-panel-logbook.html": "bf29de0c586a598113c6cc09ead12b00", + "panels/ha-panel-map.html": "31c592c239636f91e07c7ac232a5ebc4", + "panels/ha-panel-zwave.html": "f52d0c001f48e0c7b33a172f3a71b547", "websocket_test.html": "575de64b431fe11c3785bf96d7813450" } diff --git a/homeassistant/components/frontend/www_static/compatibility.js b/homeassistant/components/frontend/www_static/compatibility.js index 178d14688ab..c152c50ddfa 100644 --- a/homeassistant/components/frontend/www_static/compatibility.js +++ b/homeassistant/components/frontend/www_static/compatibility.js @@ -1 +1 @@ -!(function(){"use strict";function e(e,r){var t=arguments;if(void 0===e||null===e)throw new TypeError("Cannot convert first argument to object");for(var n=Object(e),o=1;otcEoM$|F}#qS-D9!cu*?v{Wmnq?Dd+jcCbKLlFaLLaCw=B?3m8*%LR>x?;rWWq1;oW&VEB$cAibRD6^8y}xh%oAXJ)dLUYp3SxuS4D) zWN+b_ll1zLUFeI`!kgx;{jwubepcP8>AzeWH{0#HaafAY^v?fJMc*Tu^MY-D3p}31 YcDOsn(^O;SnbYzoG`4H0FflLy0C4iNAOHXW literal 360 zcmb2|=HLi>`6+^lIXOSKAh9GfDKjUtq*5=dn89^|VSclLK?gW3dL=Sj!ynE56h zxsjRVn7Qg!{DBKku6;OnoBOur(u7$XO5ZJW*)i$8q|^C*ZBlj}HXon(D*rm*)h`>6 za4bkT;!Dy&m`jsyi{hPXA_OUPv-|R}p zWI?5ZUfs#RLzIrIKiP2e^wUGf!rn%`Pw_W%xtn?Y5M!F*=a2j97$U39C0^fYOq+PL VsXMY@;{HF3e+^$0$}ur8006Giu3`WH diff --git a/homeassistant/components/frontend/www_static/core.js b/homeassistant/components/frontend/www_static/core.js index 7e0557be497..df563364eaa 100644 --- a/homeassistant/components/frontend/www_static/core.js +++ b/homeassistant/components/frontend/www_static/core.js @@ -1 +1 @@ -!(function(){"use strict";function e(e){return{type:"auth",api_password:e}}function t(){return{type:"get_states"}}function n(){return{type:"get_config"}}function i(){return{type:"get_services"}}function r(){return{type:"get_panels"}}function s(e,t,n){var i={type:"call_service",domain:e,service:t};return n&&(i.service_data=n),i}function o(e){var t={type:"subscribe_events"};return e&&(t.event_type=e),t}function c(e){return{type:"unsubscribe_events",subscription:e}}function u(){return{type:"ping"}}function a(e,t){return{type:"result",success:!1,error:{code:e,message:t}}}function f(t,n){function i(r,s,o){var c=new WebSocket(t),u=!1,a=function(){if(u)return void o(C);if(0===r)return void o(O);var e=r===-1?-1:r-1;setTimeout((function(){return i(e,s,o)}),1e3)},f=function(t){switch(JSON.parse(t.data).type){case"auth_required":"authToken"in n?c.send(JSON.stringify(e(n.authToken))):(u=!0,c.close());break;case"auth_invalid":u=!0,c.close();break;case"auth_ok":c.removeEventListener("message",f),c.removeEventListener("close",a),s(c)}};c.addEventListener("message",f),c.addEventListener("close",a)}return new Promise(function(e,t){return i(n.setupRetry||0,e,t)})}function d(e){return e.result}function v(e,t){return void 0===t&&(t={}),f(e,t).then((function(n){var i=new j(e,t);return i.setSocket(n),i}))}function h(e,t){return e._subscribeConfig?e._subscribeConfig(t):new Promise(function(n,i){var r=null,s=null,o=[],c=null;t&&o.push(t);var u=function(e){r=Object.assign({},r,e);for(var t=0;t2;9oMioX58M6DqP-;*Tf{b(PD#BTqH6c%`&Xv7WiP}Rq|fX# zN$GP{Yd`TQ)>w?u`;$j)2h zKXHQHhoU3be=kU=RdQDjuYCGLr?W)F>saVvd(~3G{Me7@KDFzFJz`ATz_>DSR+prL z@!OdfB`>xe*pU};)b{N2O~-qtD`!Vt+T?sM^hDH&X<5oauI+A))7G05_6F{sS#R}h zLCC5o>%y87&XmK`nanR|ErgR%!5y5t$ZR++99_sbVJMNzK(Z*$8V8+jR zGj>~QU)|*C+EleCg|Tm5d!mMw@pc`BV**@rYRvaln14IEyKq9|K5_pE&u(qKyDMh( zhb=0X=Y2H%bM9Nsy*KN%%YR(I`?hy`UkF=<#3nuNO=~ZF6zcWkO4@C4>VV4upM&*9 z3l$2xI(GQWJ6bWtK2dUGpV*l_Bhcn#>kRwd54_f^rS$yNTlH|x@wh!+h4#mq*jXXi@oJ#?Z1iGES27&w0(!zOg7F_rC!CBHRpaX3LO@GJoDq3-kWvu zN8+Zaxc~g}JX`IzR=|a4_d|ZE1U!m5KW+a)Ta{Iw&tJb^aP{-))0WF`+Gg+3%KY=6 zWzQkw**AT=XMg1RB;MNhQGvHg0}vsBo&l=atM(eiH-i^{_f zuDYKd=NNY^w)580BBsj|n&foTo=jfbz$ARJWKuBKeIWt%8^=~M_1*Zi#ZUF&%y^#4 zvmF1X6fTK1_;|zT!Z8iwKxK)A_dh+E`gbP}x0=k__o52^yVjp;W3wpw&^c@0o(CNt z_13B1G`XXC!C`&#M#Y4wDgXFVFG`%7xSAvXTg~TLNnRUMR%mY&`M2iCDJO3(OVyAw zZpvTe&ZM!ni@0)m-IRZ5S#11lp>~WbN6fmt<`33!DXXY{PW>UDHSr^d?If1FpHpwJ zpSx6R>of5ki;d6frPaoH`}WP0iLSjnwP{z*t?s>6#)qENcwL*(v%Df`#vij>pOf8l z-g?LFR(4Z5suaKV3x|l(&8k+FyjPqv55#Ym_{{OXM_4H2p1ssUgWn6}=j-N$dFe6p zTZWcN^)fiOPgq~Ps4BKTrIqKK+Z&5FD>h6!+>r6?+|J_#m2hkq=i_5&Cz

EyTNEZ4-P4?lkBwh@YGWJ@yLI$fXd*-Y(Q0S;w` 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 diff --git a/homeassistant/components/frontend/www_static/frontend.html b/homeassistant/components/frontend/www_static/frontend.html index cb89b1a8b6b..345f4e103d4 100644 --- a/homeassistant/components/frontend/www_static/frontend.html +++ b/homeassistant/components/frontend/www_static/frontend.html @@ -1,7 +1,7 @@ -

\ No newline at end of file +}()); \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/frontend.html.gz b/homeassistant/components/frontend/www_static/frontend.html.gz index 90e1acbd1c78ebda78022b47aa20908668eff1a7..3b5d1597428325a6a9c511cf029b8f0912bf3606 100644 GIT binary patch delta 138333 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
M6K@kJnP+Vd)aW7 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 z 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≧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

R>&d8^=Yr9CZx3b*uO7**o#p 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

9u=T(_UK7XG)_lt+J;I*1dTYSow@T#`Dx0OsY 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%0D0KYwnz1mw5ee^YmwTPanQN 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

^tb=q?#7k3+^$J2y!}G6>qDga zTjfdFS2iXvda|xLH|NmZU3>rk{CN1W*wc6KXH3*@VzHGQ+!Z(Nfq zZnj^o(mZe;yJ45|!M0n8Y@W?~;*W6J#(v)$78!qEap@kp!++0eS^pDAQ(hN#GtTOs zw`7q+;f1;0PV7e#{dR4%U+;QAc^RjRmbKTLceekR&u;iw )_4J+HB|#1=G%H^I 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⪻SHZt)(kt&OvHcQW zI;&69$C|w}b*Y-bI}xix2{l{d9<8W|4Gu8Tn`)A7t<7z;Wv01?p8oRnBDb!&d|j?( z6UZ3e^kxg2e~D?LTKkVpUDK~Ub=Ka$(P3@P@kesn3M=bdo*#Yv?CEo{qpzPWeZMbe z&uN95_Mr<8ne%<0`&eb6p_&lu6O;QjhSBwnX3BEn>aQHF1$$pK>pl)+T(hRNep}D? zX2S&-OgpyK5BOnUk{Hqol;-6+X8<>4>;0$JpLr{u zsBmcWg#FC=xhG9FQt4cgs_^+sxktGtbDzn$ z@P_4Fhnw7%Ph$0rj}Fe{xRu0j5vO0@+TvL0HMF;LE%QmwNVH()w4v zG%|eB>B!Fa$l9@Bk>2*h9{<;6v_DZj>*mbeF>i^bmTKO~1BXvMQ`+|PW6HC&GP||s zU7s}7if10rmnSx_jxR1Mc$V^_;-=so@e`h|g+lpxva>=bPv1M=!%ph8=Opgy#UWkV zr|XYscC4w2dA5Zkkm33f*(IIT1(O&*s+`O}#qYRK&c&teSi||x7Z1$fjMwAoFAp(S z+|O+%D>QM&;pL4TZ_lW@{MOv|;v(P7Z0kiauBy$#@xp=oE@^0Vu$;(y;+)lb@4dSb zVEuuIiLUk&*moA-P;~qHB;`z#-j25YN-rXeSbeJzGV{mvs>rMoOrW~7T53meQqw~u-QX;zTVF{Ibw!p zKYHgdw{BS$-{B^skSbgMGuCO*nUM9lTy=lb0+0EvzQfIbI4voDnuGB17m=E=0x^xU zfr`xkxASNkpR1qp%baiN?}_OX&PngL(Z1R8H1e0&_II*zMar9R-&v%$dglZC8~2PS z{xZ3y+|_&KsKn?0ZC3>4?itwo9C)O&((Bc$HAdU^iBGbu*Sh^{*9*ISHnkBi{X@B| zFUD?uIcui#i3_aLZRhabyY*Xct>wLwx`%ylYMgF(y6VZJMq8H^dNb?IH#8iWQoF#( zLecrovr?XE96i~>s*Ce)EJ)TDV&0ddJbV53_icY)|9#xvYEZfJ$>gT6gS_dJWCi|7 zPqKbla(9#XsjFtuqQ_Jh2$G$Flajc*4=-Hf5Pb3d3d^`m zmAlS=-R)(SeO~Y_PE(w!+_v#te*N^rrx)$BUQv;l@@B(@r;jGh60&=gWpgZYpSa?s zi7b4luV&9Q6nd;{V&0S(lrpn-+GSI(!(S`Q6!zCOB>#Q(x8i?fjPMeR7yQqr9e%)U zoN=L|c!7sSeV=*CV~4ZRz3pKOm-~B%vh>TQn)$LYurL3}_tR)&mVt@Vnwhijs-73D z-(Z`&t6OP#xmO^Uc)4*c_rEn<&zcrYdwZwTILjiNgZaCrgx~X?jdhjNOgHShet%c_ z4u^#kD<61R3bb1Euq`lbHu0n1=2_ekPS5vj zKlGRRK4aycqGM6g(PBBJ9tvE~R-HT4-nM_Uhi$z*_v6{|%MN|b@vFZ7kfitA zw08av>A=932WA^wXZm>e?MP-->H}I{hZPholhScRctm|G{2B>QGRjc zV1?A@>ean_{{MM-`0?)F*V|e3WX@*WHGDVT9MKY~6U(7!;K*;Ltr-;>)D*rgt$A1c zr!{%ML|;{0tG8~k;yZ4{ttXVUAj7d#+x_sF|GQ$Q@G=M4uleL+#>+Y+|{}0X8CFYyFiqqa6(YiY^beDAG(!WiMwEmfyeYcPo{H*b(jp}ODYy;B-a1~%_*`?l|WYRQwjS%pvBZ^gaJzkls- z{juK1XLWKupJ+T~x%r*3Va9jAM5?fDI_noGg4#T z?FjXJ0@>T>IXYal@Wn;T@=l;kg?3vlDI;nNq zoj>=kxXE<(8SAkR%UGjNY6^>_P3r#mDV%9K^A3Xy-Q%)`lD(}?6>TchKTdGD*qD}+ zW_975Z-%nd&yTi7kBnc=W7!zj$f&2~(wLRDNNk~RtmeV0?I+&U^M7aP`MKq5dY7-o z%Ll5*nKn(HDZO{Fz<&6Yy6j7 zdp>XLt9-?qe*%7OQQ*I?eQe7Cal^XI6AB&*H+CIloakZW*jMK`MRWdZcgEDj1KpG4 zj+z%5xOKQ3V|O=>H(DBh@j!iR6BF0ExyujB95>mbTDU)0S238^QX%&nF#<9xe`+edzOg;R=f=nIA& zYA!0<`)|&%>HDLav{&L(k3p5}C%*Zt+m}7`IPUb=d&aEVW&7ua9SnaRQen{)fbJaCl+2hA9vDw{o2=Q8?{mcTFajV`G$aMBc5Ni#Bk#M0`l!A_nU8;GiQU6>jP`$?~AM--8*agM87+7R>j+;dwZfjpWeJ@ z`?_=Y_HCbIDz@&Py!m|2+3)$czt{a@u#@%o()fUkHr8!*h4nY*ZoM4$;Dxxtuhxv~ zuXZWV%&-jjl=5D)MEK6sd`ZRDA5-5L)r7ErJl8mLX7AO*FVyUoHJ?l5THtGQ!K`mW zN@ZtT<<{lK42BLHB-%b2-1@p;tLU%&3XF%X_c*cqmfPbPp`!31E}>&?;HWq~x z)io0gyOwKNBs;4LD$HQ0cgVOX7~en1WkbQyG`=3=88SJmZ##cqsg$#esnxMbxkpnr zj`eHFxmPzk-sF6HY%+IFY`;PNYt5#gKeXnYt+HoZdrCj~4Ab@ZbJ;YOi!9n~ttP$O z@mOY;_`>(MIZjTN@-9xZ+_6e#lCtLNEf0Em!+-@Q7pcFHcrFDyHnomlH9SYKFm z^ko0y$7epQ@0+F6+v-@lMkMo@f0twS$&lX@4y`rg3Cj1l^@ndUTW8DbD-ZT$|4usF z-B8KAxMn{^$QQw_d+L zWutdmxi*5o?ORGB_cQL*x^*`0f>T1KJg9&FGwO6s{OX0gJeJ;V@iUG)cuTH)$GSQ% zf4}hIfzRh`7dmdeUog}{BwtDd-=NJAOAjnJ-fS=$;A2L3&Gc0!YqV7td0N3!RB&_q5AQc zzh~|A6zaD;>bUU8DRcFe=vi(IZ%=Vr`b2iLFbg*YvKcXXsXvmDnJspJW zBd47)QP~jwt18tXneo}VgCY0##zz@BzLeVbJ(o3K!%=8kzm;DjLtt{X;^D3PH_lQi z&D1sz}a$FF&@ z^wV-J&x7vw1a}8YUr$o3S)zVevcqkr=dq2R*>~l)?s$Co@P*u`&vQD0eoD%2mHxSA z`x2L*S9>$oc^-C=`cvh}kpc-lHlUzur|r4@I}J{G%O*Ztv^;QLz2dI5e4O$evpXy5s$zFU8>hOpRelioE;Dh% zqlKYLf?Ktm7Qb6?mZi+v)<SSPZ62=_KGB@`_Zc&Xlj60GO^zqpYq@4T zNQ}NEdxXoq=5m4k|2D5f!fcw#{(n8aTI8lly~uZ6^J~M5#|;vN9()=sf4mbm7i_l8 zDXiygJJhaY#QX7X#GZ?P`!hSO5TKoQQGQDWOch8@a|37S`e>QVo z5S-U9&vANh@)o^+#-W$2V|EI(o~#ZCi`lh!>g~5~^`Q?e7BKj-US`t&{BG{Nk4~zW zjjt686p7zGb^c?K#Qcp{=B`{_bCu!ozdSw8u;u$-zpAR=ZF29=kC&+rCu?$Z)!6^- zl}!G$dyU@o|EF7jojzW9WvjQk&dKhHkw16ei>P_Y^-M`>Ro5)8XHC*e{P)d!X{nlF zy6ISSP2KL8tw}R1>R;q9Og6i0^Vn5*zUnOxQ8PX#2fqm)xuaeBBI-8%Rqy>ccc*^V z?&A|BSkKR6x*E87MTCXuo0ERa*MHVmIo~#o!Fs;9FVD6I)^?nc$0zU2e=ot-aK1t6 zh+QtvO|NU`CY^eHic#atl#MAlzG@yG7Tk6x_dn2j-oU+Z&p#Gs+jCO&_7M-~Enil~ z^*u-Qt6KZ9`tCo`qL$Zfe!pUgzg4}aE75AHIgiPn!=|}`?aUK4?U-C?;ppK1&0_bC z$Vz?hi?>bQOwzVI@iXt3BG2yRK(VWdS2_Qcy36nBj1yCt);7uIV)mxYug~A<8E@-0 z;Qb-f(>VRxxij++diW63oFKv0n4IOj(G!yp@aCf!1wa z^^=}X&nXx1W-j#HawGYM$AO}1pUO);XA38mh?Fhem)UTk=IvIG?imYKST7GwkE?%m_`qi!TiC>W(do9s z`lI_e7fSUuy?@DSED>pZCRn+7lG0R0sec|jxgz#!%$=b2urc!YmDij{7CFSOZa*ov zHz?1swd><#F;h2torUK%XkMN<<9ypn2EREgF3!Ei@HT(RgFVw&OH9uFyQj0b{rvgQ zbGdtFy_?cn_I3$Vy~!E=TSgP=GBU)3rk-bE5}5X&C15>!*R@aSH@(9)1~odJ%jglV zmaJ}Rcz7uKJku&Rv#q0TV(DDm2GNL zzPiP>d(ZUE83`h?Ri65@&0+%NKKIEaI_Ili+h=}(wdU)WV~$cPf%SQ7itIyQbg~Pr zIc?tkM24<7GXU#N9XKupi=PjIi`Isuh{kjLr|Ss%=| zGc-55C;wV*AN&38jUoY|w_YalrOPa3mutElSmY!#*`Tk3uY=F>=efiCS_{~mGX)-8 z6nx}T+UC&CDCyCDl=0MTzWxLCiMliPn+miffDM zTg!rAuAs+Bhr)nq6C`7JDN(~YFG60R~%oVzzy+@O^GOHS0W&c~0r zCO+9#(|9MVr>u#?(M{sX#1GuJl;26|uqLNI&FG5G<3Au@|HtAuTZp4sB>TU0Tm|Po z*u43vx=6U<&i12jo3`q$yb-u%hgdYn{eqDColhJ#r(H=CuW<90uWP@U7-FdtvtGkO z^Ayjb9|juLmTf(0>0PcKyyxzpx%2t?cJ56--f?6Yzv4M(elB=Uu+dqa-fL%XSG@22 z<8#XWgw$WgHO33N3a$h`n!3$-fxu%Y-9G&@uP4_$OFI-lf4ZZd@R23KEY{0ROMXwb zT+WbuvZsEsY}!|jwnt~Cez|aj;T)5;=?>nN67H={3wfJ!cv|`AD`)Vp<`lKq^|o1X zd&!pLzTb|_Jm~v1?UVifGvfEoP01E`?Z;nGAhWJr@7(?aH3j>aSi%n3efg3(Wd(cV z-3l#+iLUa?uV@S3&@r@em3Dbi@%ExC({Y*987AAN9N&GIoa}g+&?kcjc{M z^J|vAroipm@ZF(RnNQ>Dv)HrWX7WWkx7|qb;t|_>_NIaFTDE;5sjE#l=O2|n{;2=@ zqxYI}ryiZZ{>VT1iknMQk_A+LYBg_q9%!Cg)zw&b_*A zgH)DweD-R;tkb?(+J0Hxlh``59jx|jS=LoFx9EAJ>)`;UFP)+1!Z>4|)=#_Nt5scD zRrmSd!}j0j<>SPgR4#~0cj?I=>3HxrPGx)Tl%tIa{OvE@JS=^_scUIWQ2eXlAmm_q zpd#U}v;V1>+goD}`P>q9Wm3QBH!V-#fDspWEr))3gMxW9QwC$!>ZudVEten33+wO} zND|D5@DyavFtBhk?&wwd(s+5rm-@4kkDfYzPU1FlOmI|j(G)&?>8qMtV=kxi#puA= zoi*m3)2t4QRvdD!k}H?d3oH^;pf3xoVn>q(hZw$Dcd8Ul%JdT<5 zj<$up%GV2(<}@9Nl*?PFMRJ9b~wTn1W7Q8Q-b(`X*nj*FhqLSJ!pPR!!oXweir=!$OMZyFQ$pzS^IqDqQj>TzfOGE zW6+mjpL>7Dq)ne$zrC6k;U*<{=^Yl7st`g@bg!ds%k6ernq zt2c=zr9R(aRPy$fY?4A~+qqL3QIcVs&s{iw!RPnfG(j1cjvajeXCG#KVW)I`gO}Ei zn2qPB&dqN1HIZ&Mlx}zwc2jSn*?-+z_k*^$%9~V%H{UBsPW)WKxvu*Ehi{+z^W);= z?e)|55Y*^BF}i zPHUTa62Hol3Jk&$G&1;4E7<7TUOQ~_Qt>j|X1Th+y)(;MqSjYg1TA`Ir*nXYX246Satf@vj63iVylmSJ$sqo z@AAQxSYa#Azoy=kYvMkiO_K0_78Q~FbEAoRYqjpjY*U}tY%A@5ujAwwV`|(e+h`%M z?SY6*aD%V@6~Tu*)tWOa=W6b0t>SXtylRThnhAQ_cu$}FBkT8lg7LI_9dY`K_qrB) zE({Mjytu7?#**Jt6oRH{%&dv^{^{0h`>*DI;*G70aeJfm1OGN^9CJFpY|G}OM(nI_ z>)!ozn)B;UyO_FtV*8#cH%k>Zd`>Y9|I($&|5Qc9`HWKDvkIws>W51ESZ3y}cy!mt zRdLO_dpc8&_rG@fs5K?4bKN4&IM-l}H2VNGVX z_d))94>S@)+!;=BUU zk z-FH9q_VYsqP8KKpu5t*QnD(*EF8bqc)c5`1J5#N5H~f^ER^RPeW$WqM(^5Zs>5ZLE zTPEkd?b-49*I(ncu^+><_pO+CU!#3`yquh!?u@9MmPuQDl*+jcUIsnX+;h0NV*2T0 z%~5;KJiM~t&irXIFT=SO{_R-L{N%xr+*+%H%O3}>|5&6wQTo%q!$o}au20^1K2t{j zkZ;OOhZ}N#3UBN&y3lvPEzY+pDPnJ^!=n11YBTl{#m&%WhOPs^+n6o^bRJaJ>L*GWs>+WDugAN+1RWS#fM>;KOW4_{tB{CW0v|I-dz6X#bv ze7Adk|E9!)96LIKJ7i`~-%*-1HF3tPo%8u^mO0$naQ3?i)0N~YJhPvb?K&fKy!g;` zL>vm&_CvVL;U@!S+)=PQ3>xY{1n_q^wl@se8XYrFSD(DD}weQGTq zmzbts{(by6|NM9N^~GWQ0V_X(|-@sd?{{c3@GzwPR{QPJ zo9D!<{4JOfeCqq>Q=GB=lu=-ue%+WowO0Q=74lTY-2KonXhFd6}=PoF%pL=q~ zepTIfTA#Q7$g7>3fAaJ6D@Sef{`DPA-FDvQyie?st7kuN+ObB=uHJdZ{Y&TLH|%(2 zcI(Y~f9(W=G?Bh}obx6<48JXX=(KK8y`IIRz}?GyQgwKAHcWB-^X{BOWf)V@i36S= z^VUt?xHL)N>xISFURHkpaIALu%_7Znu3{T2>wg|`jgE?YZzlX^zkk!`HDt`oOuNBYOEqgVg!@i?j^ z*llv<>eaW8-u;ihW8U>Ux^&a~fXtWrF`1u@-ixQs5>Ji0etmcTrOVGu_HXXjxfBo{ zzCU>F{_?vu^=}>Bn;7<3@wLcF*#<8=AAO~y??&##O<$d!iBI0nwnIlUSk~cwkofu~ z-vx7J`!%inkM?D7J#k%7cr-B6P;*D}r?OR?Tc;uIGmkWM3!|CaXSmReOm^j(?_5?mHTDa%p!E+@~DvOK4I8E#4*{nRk|I5WR!g6nI zi}IVfh8#+B4Q_RA(3{kFYJnt&p2E2)f0}!*Eq}B0#Lo22)+BX?!`EU1^tY!k{FImf z#&!0I*Gp?>7m9cZY6redxf`}S@yukYrcJAoMGm$eEnGImiu0Arf88fSGVTq}CP-R` z{`?bgXQw6qOTVr=UqcVoY1Z5J1V6Jg-*)oBn?x_0(5m-NzkAf31n=(?n3bxgnwe3V zALqWe^^iwzOn|8TncQpHTV;9YX$q~3`*7w~Uf=IK_YU6qc=yaEyA?$aT6#W$J^6i@Be zEIGPiNwuhg-rQp)7o~Cq4>`;Exv*8;)cmG$lXKF7jsK=79t})Ta$M41vFX4^>6RJp z%F4eqrf|Q%Cs$bW{XWCB`|=06>TX}{c3p8PJ@S{~BawrPN_kRB18bt~{-3qG`P?kq zJjaMhNuo?4UhQIdqhYx0?sQ%&vn0Q{YTfm#-d$64diZ18*Y;y3b66|ZnO$htSQm0& zuH~v7MYiW=o>bbt#==tcufU>@)tuI{-(Oy6x-lsxZ%?3RQ-khLyW`hSE6%z5Zk9+3 zUC=e5B;*6SO5s~67x#e7oIMmsF!&JvaKGdj-G>nkz>WAE+AUGMI^nd`t& zF}s`1>y~tX6Y`(NwpV(4#}mfGabqZImgoBrnF1^LJP+kj`MlqU(2I1 z{9^@eR|QziWmpmMIPcwz>~x!pZ+{qAulH!}>sHBUG;$4id+S{EkIaxCD-(}eUf#@n zG)J+4CFj)xgL#4#w_57Gn{>@Cb{>$|_}g>qi}Y>9N~`mab~##aH}GEma-#mp)T%R` z6F6V`y_`z}S!+wJB%r^|JT!Az@^SE~h+Cx`5gvYT2OEamlg z8IQ~kX7ej|15J9# zdixr$$|ki)ruS{Q>h`nb$=wLv!bM2}w#`~M&bE7t-_dp2JTJv|V*X`w0a>wwelxec zPpY3$v@PKCmT(p^%R@<9HY!hw=>G23ZQnVuz5a4ZSMB{1vuAIzm3BG0s?W7@zlb9WnB|aD$ObviWSsKQ@P-Hw#R0vA5>TxblA$bb2$-pc8uP^)#YsASr4m!o^Pt4v%N zry1n=F+kOI(VLcxQ`ti20%uwo$H11BAwYD z%MZtH;;4WAM&NwWR#ASdgWq3q?t43n&8t$QFZeanMzfxz%9(FNj;nmxn!M8I#lKrQ zN_+dlPi|YvFfaY>^KBLvZreuZtL@&O{Mwc4#G;L0W++bI@&^UC8V^MpTDWjo2=aes*{WU0F6ph$^ZkSJ+1cuzVta0fc5F=4I9vYpQ9oyi z4u`?(odtI^1wSp2dmeJ5%SN)W?_S31^aR__bE@v$GQYq+b()XXz@OMqC5^<+UNMl+wJ1{`hpIYFr~gfP69d8WVlnyRI>^vd7KDHof>-6L{&te z_Y$Y<&r{V7mBC-19L$V5%Hgs$#K7UjrscM-{GJ!5um7~hi<|!o*W|P3OfKvCS`=rv ziS40*&w;|MCO3O`P*T@Xm9YRYvtQ zSDp1y{k->|ec*%z9e-vV6rZSOFpE)BDM0euwQrAPPku2@4yh7bb3540`9#gFU~Y8= z_gS+;bIv?Iy?eRnh9kke3g*+ECNRI6BkxeN$61b+*N(si2?v{2c-21KM zm{>ONi|Q}2U5P4;W%<@gvkKpC&{ddG#pPKGhZhxo3KjhNYebH zrzRwCBZd!~|8w&!Vfoy`iK&DU!@d1wCn z&B;qWzi-c-y4hsrf;P?5Q~6!*&g(o4qxEAAfFII;A8y zt~$nrZ*rEnZcNJ_wQvni8P?PFC3`(JD}%+D7VeDHdYf_MT1O=3EJ07V*Xsg z`I0YByjph9pt9uNo}#Nc0(U02WVO#*IPs#>14~i0>eK7?=I!2LF3GpUVL{RD2~4Z% zIkfIB%-y^Ai}E7bpU%duCU-Y#NH@eS7T+YWhDRghYL~*TA7_=Hs!V3=+P7sQzsl?a zq2=oRs{weC|o`*U$eYm?>)<+ggY<;S*^U;7jlyrrgi(#MP=x4wTr zCf=CYf1@BL`xxttX-OIjmlS8s^XwJvntMlCx>RxU=5;^n?e^t(1hg!cV1Kpr86t{ZTFL&nmUHvK4BL8ej#Uz zmtKfl@MW`+G>x8k#*+2YpJkB?xSgZLuU~il^s&zGA?uxY8$K=x zWq2Gd*cx+fS8r6g$@{KnxgY)YI(yc#t*(aN`pbVP-8DB{QlGH%;>O=)dp9-m z9e%pB?DW(>%7clY_r^Ni+l$5n$Kf01m9ldv} zaLVcp3gLwhE2l1AW3CgUuH2*ec%#6nCjEl%6Lub%ly0BdIq~?E6%AADjO5;|e%rFs z-_6ZqLEoF1irtZ6P9Z|;%qyLI>p2$97d3LeDdKcsQi)p)r^`;sJ1n1tR`l*Nd9!+< z-~5{?2f~GRRJ`L#&D{Fkk- z+O_IX_)I~c1$!@s?P|+cRF}By)H?N{DEq!Z@h-O-p{~vwE010N(P-Q}PxiTfoMLzV zj*dGvwXb&VdKaW$yt32k^WP^kO}>`&tnSX9;_7zez*hd^dTUj&PL-2$<|S_4?IV9E z`dp=5+_%pUjn2E@-nC1s^I2+=M82VSZ~XE$7naXYa*q78-~02&mtScSp?m7;>UQ_& z{0Y0%8UD|Q+&6wbpTE8MWZTD%DpI?_vkD9x)Y*ELJSr?DR-RKVBi)Wl8cQ#-7to?oax|mZw zUvwpwb)1@IFL?cs%M~?cJ?{C>mue_^8pTZd_B}$N_p;|!ewCYV*>g)5{$0i6eN=xF zTl|78zMC$2+{@)Teyr)Fz&YiWb{Y|Ed|v&59oCC^+0S2oeR}r%`g!x@|LLT_5uzdbuN&)yFV3xDim_r-17f6F&n z^7nO(-ioV86*_KuD85JG?yFszNB_R_(c|{q{qv@`*cUnOZ~aHFepP$(^7HN18<#&^ zxDc_!-EY|{uCwd7m+xng;_#0ZukYH|y)fifuF>{DdvB4sJoDIsU(U2k>q>9@J^A}l zWtqR~v61Spr}xXxd$uvQYkn$=-c+3xnIe4`>|W{q;7iZn`|9lR_UrLt$KobzICuSt z!4m)TDSWa?>-&qpdLNr#H1W#$+`kjpUZ$y)3cOw*@Y*SKbJU7h;k?t&z{NY zbqe`iB=o>(P3h%-T!+uETH&K2*V0}7q$J7fWcGuer~HwV7aaOH%e>vXD!W62>)u8A zrECZ9%wKI9dYM`HaqMIf?&)V^{(SmTcC3We&;nyh)a;*>$Y4X5?VTh?p$?nwx6?__C9 zb71IPsKa)8MZ(6a^{MyGwm!P%`uWGVx3^hO9k%$uap#%U>it|iE%kFhT-1|}GoI0q zwIFa)rIS_O`wb>p?Z^Hkeivn)$$0wakJrfxERO#w?<~4I^Zahlu5)cumg-oWhdX$j z3V8kS9_O8vze@y+CdXv9{!7ofaG>^lY|Qb$`yUC$CT@z-9Z^q~b%3YJ$4=eYJN|4>S4WdnSv1oshXlEx$-Ox$R|h z!KoSp?sTuSn zY`>Lboo%W7ga7%{&p4b}ETPg=-0*#0%EkQmQ#2l~&Ag)*_(II;(2{ia3y+Clx6XL$=zc`z$uc1xwS>_o|+6ucwRo)~e$9LjQf^q_*XWE?i#i zGa=}k0mE;BsfNpbO6RT4=e0hq_%m9l(nR{~!If9Pgl(0&p}p{N?8OHCNSAZ=H+KCl z)XUQQac0}4>t^;Da~3LZOMc$D$I;A4a>J}n4<2(v)9Pd~-O5K1mjvVHUAfHHdgHRn zkJOCViT8{a)kj%ZE}FY&(jviQ+&_8J7Yg3&j|gWCP)*({{c9za92O-K4Z7nx+KM|)?%I;?ihZRl>T=` zsq$2uibJfS$Fzc|xt>YyCo!ryZ*k7CuKM9E)tQu z`SGvv;Ge@^oZp?A9P0S!8Ow>UPaOm@&De1E?28M3=cwkn6*ZYBn;TcR^k{$fUHw~H!uojnuga`2m*TTO`<`C<@WJhA zO_biot+A}@dN+C;J>j0(`+i}PK+mD15d9q=E_IrDR3EsfbiDDpnT4TUS6g7y{H2c_ z;@ta}MJzs-xW}VR`LC4v#@)}8=3m(P@m#%}wzb{6H@$CHGyOAMG@*D&o|Bi1gqFA5 z`48(#Ki2#+x&I;3Am#|y;lAn<4wbAII4&>N6==_k3flDXs<(tw_DhM{@e5t!y|}oY~y^czfe+lWN|_p3e^Wujlw{J!$s^MZ1a% zih@3^^{b7~Uky8c()pbE{j^}dIbM^Lc2BvIctmdVg~G^1p*xdjdfYnTxUpP6^T@63 z4-V~^E%GKZE5vrOo1&$?&Y4L8tPIZVfy*YZS}*hDELT^)LPd#uPEOgOnat*=X7Wpv zUh`L9w7o01*6_6cJ);xf&P4mFS^!QTA%S?^vE zhPLL_e|e%^UM%0xBu7zxdJb@)E6y zOJZyOPl;Hxg5lxJw)(A#a(qDyf}w2QF;3^3yLckft8?Z4E;Bgr`@H@B+TR}@9**(3 z@W+D3aq9%l{OC0zWmYm#{?oDy60@BrH*2z7_I>2|D2U^_U&@5E)eEZFH6~>z+a1Y` zIFyjLs6|lfz2EgFC+7=wXO8pg2=kxZCE@aQrEjN;X7`H{Y0b|Q42tSmqKe)|?0j)- z&qGJY=$tbT6Z3ADyZUf*i|J;yrc3=yem1E+`q&}X&7Op*in|+?$OTgP(}@7cM{Sq_3Rsu*kqmOepWN*p$*0mXY#_6$SHs)~9@7Q_gK?xIZ~Z@~Pc6lhcPc+1uW+-~Z3V{L1^)&ytk-EtY?& zKcbLub=`!7gAWeJbR4c+{3ALebAplS8BV)j-5v}tB96N7my5Aw@7&5KH2+1$o}#w{P!voK4frf3tD_ zN>9Okv*xXxv`;$HT54xmf=SRSCFz7xsrL+GTzBeI&$ot3{gMqlG5wTu`!?&wTPxgovJ)3ET0V`*)SkObH##qJ-I`tT_4OOS+c`2RyeJ7v zPb+e ze6i1Xg~iq*dv`qB^9eA%U4DY!SWMgA=y-&kVG3ts zpLgZr67i#RFFb16`RErzfYov-!F-+fPiBZbNL`?#Ju7wT$4zUqeoe?wSb1Tll|tK` z<+m?pobQbeD4YIz$F4{JKmVx9Jv!-$rN=ty7mMmkPM7UnzxU968$0`de;GyeX6VK2 zOiAD^IKN=Y^5@P<=hY-OZ<6z2XIr+)ea()jBNZ3Rr9bqYReWDaUwyd!DG%rB((Z%1_Z5ICJx*E`SJ6OK%LXYm3 zTJ}r(ZsyO;yI%hx_2v7$?RU=FW#5|O|5L8-fYUzDOS6;CUwON9V$F3e=6lJOOLlJc z*c|gld|`#-Z!rhQdY$UYiOY<>eO>(j%ZDvpQ#@W>X10Bm?_zW%1>#i*elOW;vC03g-gj!dSmaRo~KgaqrX%$eXz>C;a!*(~nOz z?Y!@G=W6iOquhDfwnkfaHkb)&)Y#WI?8)VtUsb}m@TAz?)%=RhCH6PCQaSFlIGS4D zUjM(y>iS!${7r68+Gg`Fx|qJJel3ssH2%M*|MOkn{_xjfw><*?|6OF;6XGGJo|P50 z{AjFz-Nyaqh5gs%KCFMsRaaZ{|7~gL{>&VyYf}Q&Fke12^)mAkd;Vl)vFiOCImtgO zqZHP@vYYeA^x>4{HgQ>Z^jGZWozYs87kl!Yi-d~I+3kb(G|`5@_lN3 z>xLPt!am%1S+=7zXU)qp0h2OOmCOFy-hXd9-)w7L@>X*0l&^uWo&=nCJ z+PaT6X%{vby?nPNO)Y7PUVf#1VTFrKfjq_w;GySq^EpWrufMI=yV|rHgKH{a4nc z&M@<>ji1V{Re#Y#Z*Be6bM7nuDm<;}*(Y4jEuXqZbCynZj_<>|4u|Y*OD5${w2FGR z>&z-wJ#nUO%s~|_mlJkstqRzyuG-$Aaa&J0Kdt=n$75N=8&iv?Kb3QNwj#5-iM=LB zasqRwiPCw!M*U5jCSE1b_N zq@3wq#k4of{PwB#&Q@|GlTpFL}$*#8;d)wo}TNI0ij z?Jo+nOSvueZ1$`*6E4J&@U3->zou zpLpH+`LE5qR&AFVceGx8@_t8sulpl29^1{ie^j@>EGYAOylu5{?{2wci3%+p=_>m= zFIX)9d_x7`#v7%X(t9P@ZPJOwK{O*7rZjz7+QzG?5K=JNEfeq939 z&L1`2MyPf?nOV#FK#cv6PoCAL@6U}LuL#_)tZNq!b6O_1al1zne~$598=rFf`d{Dr zYU`g^zv5HB@KIpvV@rkm%Z0z6w#(c2y0WYxaU-Bsp!i&K1x&dtYPzJ1>tB6MhPP~MmQ+4^69^ndry@BeRWwW=>X zVE*GZ=QB6!9gn=fDA!ZxidSJ;j@73AjOpv@S-b3h#T@;!Htw(U?h^iY1^=$D&7Af7 z?&mGD&p)2tt{)%vtmgm6>reS*d)X8Bvmacx!t`;@BnzS42N^i`J-$<*6I1hG_9{#D zl=22&*)3WRKlaV?xYRW(W6he!w^%NwNY80>Xg;gvp7goyyj_zdovOP!?;{;ymA z{Q2?x{Po`TC(a(@xu5HE=k76<`?+gb?tD-Ck(Yh%-8K-V`ylVkhwY{@b&DhAw?{v5 z^GklYbLZVH2gN(Jqe9}CPCQv|(f{fCQ@*#=%>SoPpRVtn$D=r}qf#r@L3Go@HFsSf z2D611#=P?X*j&S_5oR3r*DL;{Y+Q{TQ*+6a9CxuD;YL^Lt$#-yminzP8{?H-wf<0s z!_B$1YpoyjMF}ZvEYW-TVIto~9+L~j(>&(cWzFlhzWK?>3xp5hc<7{ zmN`G;kJ`fABlSO;Zp^Mp^<3UBd*;CHdA9LW?wN%Z?Eb8~@ccrPW>%ZS zO5mC8n(x}oBb3$fO^%hVImi5SeD9~D9*Mz+PVHNA z=aEL{YKJXSUp1uEtxt-~T#_&H%dXL$^Dl?v@$}p2Z5}tb{VNqr+4JAxbv=vCx3lIC zUl%EUiO+M{ZJYB)@bSg@W=UQXyccsCSM2+$xT4?2h;MqAYMTykuo;)&0?kM7Gn8cl z|AtnZc-Q?dc(FLyRcif?(<@$F&ew0a7iU-h=i81qoZ>7A$ID)d>@&XkwDHgnrQZS4 zRwkL6o}c4RaqH9rk7sTdk}Z9IrdBlU#0y=`Z6B{+eRF@mZH&9( z`H=68^NsyPcPi$~C3wqrt=!?X;^_P(e4*cV+3(T59{%muhtkZ|+yS~9PHM_qiB0$* zHp$h-c;4C>6E>ASIFM3ixJj_%Vo21=^d(A)tM43sFttAQOUla>H@BV*%noMzd)YEX zg{}%LnDl*l+uW|_yX4Mycq@G2{y5>Bq(*I&hgQ@@mb*-Cb2xdpMLvg5%45rTR$zJU z+uK_{dna_A;InVvdqrt)!UU1aJO^G?eHPRz2`W1lX}UqPq4kek%@XHBydS3=J;&?s z^hJYV=U$5gA(M|M)!#AxCvsBciIhg_yuRYjOABYrw0gNpHJa78dr8=XSHGiGyMaI_0+8!?#Z*RYE?G_=2o#qFhrQ|&qiBYp_lx5!eAu_059gkzvww*}BK&zDmt+bN!Msi`g${+`~C-M#pX4FTSuvrV7U}tnAhhx%T~h!P4p{-xg+D z&S5&YXx$yhG!|RsAAh$@WsF`nZ$|x6F%7@0?Jk=--=2+H@LOHS|AoyZsfEjz$j64i zdu=~`-QCvhlN@r-uM0I^v@pYX;k>YCIv2jb-4ZtY)SPwqch*Vhtd3Y0Q^fh^IZNo1 z!h{u<8aNJL>Moh8HPMyxN-Fc|M0r0+ueYyv`jk|s)=$(p8T})Aa_!?sz90LXsxqDy z9;ttq9rAfr&EuVVcs>Add-Ptehlfbc~x6<3DOsr0@x@5Qbhhx2!L zzKOcu8s~fJulXk#i`VC)fp#psm*h~+GJ1GBK@G``Cm?XEKGb*{&1_q zAEtuRPah6-MVci4G;O%`j$uujXPuB@as4I3jJFO_mcIHN%?FB{e>Q8)J7Mx{LT-wQ zTF|bhj~xwPHink9x!WezQty<$m_`WzN2$Am^pXfYn5N+zwKe_ zGtgP=v08)Wd0N>mk69adpENh!N&234vFj_F`pT^*Z{#$#7%G?S5xKfW{>KsH<=G-4 z6WHu-Ov&tAy|C{$Qd%EwR0(X~;OF!4G;!=B+G<$-+ zMZR>T+r3=%+&xa)8$O@4_R7l%tbe?1&l1)tE7tCBW#w?tU85rM@|)QYhMr9yb(R~x zefqZ0^tbf6Sv=E?oLQV?4eO3G%}YF4n{2q?`Gn_B3pd(ETKKcSVYi>uI8F1a=d%Y2 zt5}}R`tgNJWuBZh ztDZNEF*zl>B%n}O1TM=YB`Pdr9eP>T^>Ag~< z@^!^}<%6c)%+{Z_PP^kYr9)Y>v?Z=E=XAB&rhLW5UR+B8&zF!x&yM9l7-H(#H?N(ezgC=w}Jy6%G z)()+hbV4ie>W%01zh?O7zrPoE&$j00rl`C5-WrK=^YvbQZs9n*->1>4i+$16J^8%t*M<6ZhP&S8N0^?^S+6g@)W6>L_ndY6@=uwa zn{mXU=X~c;fs^xU_xy`8suD3d^k34+kWJX2Y_68|r8*H*ReTXXYEsaE6~&#;7^d6_o?PqgiB4*h-C&1jOS_*Aj_ z6Q4p48#Ug^JIBcUT~nsHS@3(s_S3y=+d38R$7r7yyK%B@ikn5qC7YWn&Ckkr?`NHU zT#+%ZIjTD0A-8FqLZq8e(V2F?tl8xZ*N&|{={^6HM%LMm9)=QTw?`|=o%0J;wxzz< z`h`#N)!Uxu(V>lrbsb9%ME zC0k9`-^SJHzRPmLnjbEC5i6I|8y7hDUDUbna%RsSEV(E#&rAHn+S{y;MMM{zjhK4& z+E&j!JF1p_u0P)$cUO0}-1p@31=k+$`s94}Jmfbkz|RN?oOOZ_a^GhAq`8+opz`igJ1w%T?8TUhVqE$I_{%_&812qWQe?3OHky z7#`J}lkU2TbN0t&**^B=R`o9)c>b}~HZAzMzUA~h-*Z}f_etB^@2QV*PI%JaeZ=sZ zh@16<^;fT!edGOCRe#zh|6fA@Pouf{xs;cmUdNxBTJt*Q=dqo?EdK?(tef>+hD4V(*`ez<$MdBt5mXdnFUhO=-uWWhpJAIkFzxn%zyZ!s)_uJL| z+aYC{J}>-)vSFaxj#(xR2iPYZ;eT{_)@wJ8U5bUZFK$X6U-ap%%kdeqW{e3EspZrD zPrErw{><`v-R{Nr&u5rMJlN8_bf4k8FH0N`hUmm@o0P7o%-_mnYx??y{Q9$hC8W)t zzfH~TmiFB(&vO2E#T4$`X~i#XWxt*A3VXJNIex;8Mq!V$h1}l{PV-vyQBLh1`>cJP z#V7Z-8nW-ww=DWGL;uV5t$Q9l+c{NvYP_Xi>r~~dzp5D$3a8g|hMCN<_{#nztT@rl zFwif|B6r!kw9N_;i`NBSu(2>wGGpBn4yz!~1e|ceRNX+*sQv|OlxLZ_aiCyl@tqDG`r17rd^666>mK~8? z5X3K6m1*>A9Ycf1X%VH{k2ESTysa?~y!tLLZer$@4^p$9IM28_@spXK&DmwL>CrQm zUe1o}|FtW$wzhfl`}O?Z$D>b(`kWP8(UmeyaSp5TC$XP*zw>R~dE=o#xq(pqw2*`T zm!~Or@;2x+zOK5rYZW7_NT1c`JxbTN{y47n&GRN}lfb9KS=sX?F3r~8{pB2I|AV>r zeimh&x~D!dksj2K)^EFu>^&WomZi)9Z{)rLw%du`MDp$;AO# z_c%A@%3s-j!gS_l&v&na{!86``r?=W#oC9}m1>H7%(BAI9w)Nd&9lC{kbh@u+5J!! z)23V9S1zrrn0`j-rgiW^c?kyR{3i$J$?M47)A;ysRmHy#yXreu>!dGZ`m*JLndU#n zmOT}A`&Py~n*}%&UOD)U5d-EURk+rMKig+l>T4v58IMo$YV@t^Ek4LK=VP5>mZG$i#^VDaMX#s4m%F#W z{^vHP7oNdQQg&w&KfRgZ9Q-;-)3e#SaQ@n?HM18_SJ73e_6>dCV=1%0a7)(l-5P>k zy}t@1n?;0=#YpuBeibuL_1hS>F8pv_Vy|lWlRalP#@D_#e}C|IyjP1f}dIxlK3 zKVt64aDS7epmV0MyJi+ksqgZ)%Z#r6EY!6Az1(hV-*P@0m4xA3g;>SEzlR6?d=x_m>~yWmcK`7P|{RUg}X7FwW-v zdp9bs@#4keyVAH70W%VD?Z%%8TKeoSTZ>OIwb$@?;_f4g|n}?pAm;cQ? z!=5j)K7Z4EuAXHTmG)i}yALpa&Rh0}QOaJ?@y(MTrq_-a&2&C+{p2~llBt`tGVA|N zXz-|PxV!Js>f=hE3nHFW3U_{=q&ipb+T1MHm94cq-K)a81VS}$7U^@pcQ|)7{@a6V z2b!-c{NH`NqPoN^eMa8@F+AciOM{4_f#*H&n0=Twz{>(P|Sf$}PA$FMo)A9!2 z;4U?$2~`_Y*V*b6@|8|KEwKlPm1;9bA+Gb!_3BN{&NS84xc=sTEhyQO?tR$etdYV!8{dQe1x9yYNWMSHvV302 zgd<#&RoCtRniCUl%khOfl>1VXLHfed)vY_UY(Gdmdt`BGC7Rc?tWoNja8iAe#LWV}HYJM!{y)Apx&Ef}>}+f5YyPZmo3~~q z19P=Pz{bbMr+bN?(R5ZzdwCp$;+dYJp{Kk2E-Vf%yM(O z)tv2a_AIID)8Vx9pZ;u`bLpSEHt+U(p~?ir*BF)TfnastjxIj{e$pL zt+ADS-^7FF3D3=5zToqrv*i|_-c|0~SSafH>4n9kUa7j;s{i48^>TN%X#YOCIrsO` z!^`*lKEqUHG4YL|8Mn1%@lPSe+Ru-+J(^tq%;n14#lOs+yuPZs;rso4U*qlm?3q=u ztvap#f9#f7qE~vPw!WTq(fE2!;qqB0#T~0Qdhd+5a!QSJ;y%NLvm0hk?-2Pt)z7hD z_Gk8W4GFKsbtdSZ{p2EW$st9W=fB^d`K#^oS34Uyb*%1uwyJUCOm>aCn?40CT)acv zr=RhGQAjox^$FJ4AH#l9J$OsC1XQ}M`HcfIZZixf-b}yU$Zr0+kq05 zB>(rty-oGf(~o`E5^~nP9=d))$;K<&B^QM&omlDgX05lz7PH0QG7b0IKD<)qr0S>Y z@t$*&=$r1nYWhb!LXR2EWKQ<0G?=sJLT;@6LzOR!HYLqqId#$HM!uc;+0Qly`*v-P z*w@__@1|zY6r>cmt6orH4u{{|+cPS~7us)G%)n^yLF42OVYBNlb=50ooeW6Hvc4oR z_uhqxa{eXiiWPF_eOG;3jjpGw?QQk69y?blJybUM0W-I43PWrvkE zT0TGPq?78lNdK+(W{DH)rJtx=oV`h^XvYZ?Q_h#$jHfT>`nuKanP(z%z4FYnYZjh~ z3leHMWuw}ZR;6~rllv%F`KG{}Q$4q?DMbf_gH4r`jZKx_vTqDrE~q7%NHi_iTWRz0#1z$-35RYt+hjaAO-wl?MB_`ps_)wd$6 zKRx?o5imdY)0a10Q+ST8Ui4+b?#rj=P0l|^HS)$4OU*-KeY z+t**Z9d>$x!K}R%o-uyM1c=_^;lYDd4>W@!dslp`MmGS;!q>;xuQ9nL; z$GFQG<-v@yCbp-aL8DWbIOX6>zVd$P5kd(LE`{}mh-Ouym{~zkK ziB;a<p_iYk)_~Pm+>wkXz`1SPZ%g?vl+opM^U&*Y!vSrm$H?~6VRZo?) z+#k-lnf}GJ!LH?JQ24AM?nYV3z7Hnm({@bfj^lscbIz}J`%>|yS`#nXYfM)j7f5-# z2b+F6^6tsz%?o!t515=?bI~B!S^J_t_XnO!J=$!Ms~Vs5TU$I0vD;;B6!n<@^r@J7 z#h-dzM#hekar5j$V;5Mwm&o1qBgpjdhdt9z*BZoYz7R1D&Yoi4e}Ol>He8Zt_cHnJ z-8!>6A7?SY=1bd@a=q#G?K-3N{qgel-MO`V*^U9pFUqi|6>hrg$FMB>5e)wQ^ zqqa|q0r#T&la6UIye@CLzpPp)R9Za1^KiZC!+PIT?R5`k9FcCzo{(m&6|^Y4WU|8g z_e?I*6?(gvi=Hr`hxN0nD zZ+p3Rrr8{esXLxeuc$Vd?{`<|J7_}yCs$LT4IM>3Y+hI&f7;=WGBy?*4FXncWUFQ)|O8d>eAu~ zU#@J4t;+4GG;D~^i+dWHf24d}#IuQt8yaU#S#ro{uT5~x*|gO9nCMIFxvvWOm!+IM z8@Y2|(f8|LGynhi@@KlL^e(sSj@ot~E+%=%K+vY0V{ z@|-<9*}X@O&MjKqXKwcGaOLH@D;K_BH+g>lrowzX-MF$Z%NBIq4_z_$R0`ke7qa1# zGrC+-6Vy(Zu2Vdfc*bK=`L1jAZ1d!PYTk{$rg`a5?p|R=seg7cwaNmL8lP6{M_g2X zyKKf^tq-%xw=8%1w?HDOQ~sfP>pHD>zLWI1?ap~zzR9chnZx;hdtPuJ_t(!aU*CRx zc~U)pp~2j(pB5}U?f5eJp}WN)#q%ZovVn&rN*?{``&}UZPhrjs7S79iI4(y$xnWZu zA9hZDuBu0jXdAEjzI$t)iw55QV|`I6gG;^MFIo8VRqozp5dRZE^^8V&p1=d#qNp%z7&1XC0xaksKv#{vO%vH^o{#yEf zoVb}sU1t+N$3cffsgGaXpB8Z2!R3GFf5#QRCiMlJ%5(Rq3+5^0-k7`NoV`NFmj25d zo^S8pH+Aa`8}5nM{;JIRX416k`SJ%rYTX}>&+xOo_*GP7_o}^@j~KYwR2wXYOix_8EDwI-WeCEiwiVxcG4C&#v(T)pG;jTgiQ|rw6^Lc9W&-LE? zo4x&`r`zo=vfo{Fef^#D>uMe!y8PzQ;qQ7j=cGO6nol^Lx;j0H`Qvo9OO`Y4bmv@6 zdz<_t@AnO*d2!E#esXN7cU3-@bp4L>_eP^# zlajdvT$ibHu&OT=c1~W?_s38xXKL0@S*>#BkK(82{afCVnR1TOD!?1 z32P5HDV$&Q#>IJoy2n0w4mX$j4@*i;HzZB^obx0f4A<)w%k zyVdI%CYi)aAvrrEnAyyt$!nZQQBkh9)7v-iDTQZMGq zKdW$s!aSDu3-l&R2Hig-X|Rla_>~>REu6XC(SkC>+F?xwRP+^%*m_|F<713 zvDLF<@ytmPw}Yd4j5Je3TtDqOcfE3pLVRnzP#EjvBr9eir|L9Dfma?gj-{R4*yOQ- zK|4-s$=O>Hy6zGU2ft5>WKs1}xV+58>~d$8`jwkER43;gIrEY)z2n@9u2VKXyetm` z_0IaTt~I+XzWrGIMNX#`|NY9ei3A>c~s{Q9XEPN~oXs<@9|) zQy;yVG`0Se%KVMf`&Vi&Qa|=pSiV3--YW2>O~8`FPQRyh6-_e?f6;AXAX(ymy2)j8 z>IpF~jwd!eM`s!KOyj656Or;;`Iq<%zPYnpX8xP+5?R$1YtV7dUG>}KnWm}tk|qg!dAd_}WxesjJ3LZl zoVMwYe;HI?YdoA)J!fjU>`VcXplQ7pu3sk?2&hc|*tjfhF;CQ^6&sIldAq{<1-ml0 z$N?@f$NX1&Z04Qzx_#Tm zrP5=!{`JHEwR~Rx_#wr#_6bAC%%v*Y^^P}7)_7%BmPB|RvRqmp;c2J7?Bhk5MNP{* znKsAquBpCbS+-E9A^C{)?TKe~b&c=pr76n`zAj7Q$$rtZVQ*Ca6oaY{VM|U;=sKFm z@#WyVJx?2!3%PXMC|Pmx=w7bl_dC8WR!{zC&|VRLw8X z`@x)bPiwKzJDqGn9VO=0$|b@JTe%Y%o*Z!hojw0|8N(%^be-w@cRbD9vVZs0_zCYL zME@S`c>nwD(ffB_>2LSXWoOzI^7m?dN1m5;c)g&R_MQ6s|K5ewTOL1Dx%jT|-=j9I z_2sMgD@U-*JZS0ht!fqL?fZA1=5KiWO~XVSY2Xsg>Ee2ID6>bst?TZr4V71N(QPub2 zowH%v#_5}u8tk34XpinaoywC4gKDJiZj|r5ehLLdlNRR z)#&v+*WELvOf#cxiF?QFgUh*RYM#xm|9(pNQ|}QG_D4#|`ft{8C9?;6w3df`NY)py zzHYdn^RJ`+3NF{u#OaKGKPUAs`q1>_Z$|y{^H;2{#Gkvm!q{@dWDzcry({JNm$+)W z>uTIhl#za`zkI`|uZO(TK~Z_D&r)aikuw(;Cr-I?`n5&Yl-T;!>)SW2-@m3cPq7vwDJjSBleP4digi@jd+ zY~v>}*zMl8GW*u%&vU9y%l2P+b7MwzztzJ7!fD0tw(fG|$W~z!GkY51GchCa*kisE zZ3}hZe?0bXvgJ3m*_Q6#a${NresFU)uQ4%HlJPCBzumZQhs}~J+8T?JoZemXI=$OY z`P9v8r9F;;vXi=(A38Zro15Rl%d_xdL0O)bc4zmVNgFh@{ap6``}gahy?srLtB-Qd zYvo1fM4BhxyEu18&I({U?Dz_7xL$AJ|7U+&mQ0TEOGg&vmZDTKkT2+ z+J0}(w6_&SQL&!4c1+5guPo9LDf%?`Xz!{!iXRl7R;%CbyL2wmVZ-D{mlh^16%(A~ zQoOlBbDq5GjtgE!XG9c_Z14Z`KIKrV(6xT4r%yhrmnvmS9Q3>N{z-i$Z&|Ni;le(l zzL2f#zL7@L(l*+Z+}?Je=+111HuaCUyx+(FpWoAWHbNlxqtTsjkLH;rc0KKTbNidq ziBIRB?X5nn`}@b9Pt4Az83Z4@L}gmfkbb0j$1vr-8UNS&Prl_}slD0nJl9vUK3_^N zXW|a+)X&G?%kA5{ca6thm)Yq?FX}a>y!;}$UDzm>{ot_%#+}J-M?H*Ys?B}E<`>NM zK9IlW|V$MHGeaCrFa#B5^&c^AR;75BHDH!Yp>{#w!F z%KG^_rj9RmR&ZqcPt8>g{h?~>q&iR8S@id&g!4)EkEgr5QI(nT*(P6)>qA-6g{m9I zE!Q}v+T9k(+Oseu>0xy5fwXIS3P*c?t#S64Ff&NUeb)+|Qi+_Sv#(2A>PP4E+^%NQ z*nD%zf_iuP9cuaQOzfsk(?)-7ZYoZ0 z$|&ZR3>Nq^?@+>?e|0x%Jl@OM*H-?1UjN_y>)h_!ug?G9z|QS@wEjTl0~2@F&X4T# zp8fYP|55+`t^B2n1xrf{E*_X-RDVDr=Dq9p2@eg6c%r7t`nG?}XLi1t>Bh^TlfN}| z%dXXHw}1aC?f?7j+fvaVY=V#T4KD7SvHF0C`=!T4hq=9?y;d|NcAj~yvGDSj7sr%q zk|#QG6kpL&3ABEu!s*xh((@A;=4Z*NG1^|QZS zKjZ18i47H}Dsq$V&yU|%6ZuNE+?-|0V%OusobvV2v(6k-jgs7Kvwqu_E@5Bo$*$^a zJT>pA2!&}M{^VVL*O_^f+my6vZgL+M{ygzC=T*n?-qpWLdymZdC7TeD#%ZxH^+cSh zs;Pq86ON^k{=bxa3&W*b(<5_pZ&x#g`pPNYdpFf6CiKAWhDYjI=?hbB~Bvq;y!_~%K@h2n`(rzY`wY~8FJsk>BpkKy#zYyoq-ve&j^ z?2~gAOfeLUy4v~I<*GH))>T4rcf4n9oa*=_X@Ace;qyu-ndVr3IB-%&L&8e6Mdwzq z(D}<=3-gT`9$YO7_@23SW#;jXU*~VD+j7nS!jmZ3#;y~NrYm{sOX6)~PuHrcxmM1M z+-4V6li_dwKmB>w>wYamSaFJ-^sRSC z^w)@_vTfpiC;mmDWy)y&HlH160@A%uv`CZ+slv%newj@XhGe=&En#6go z>z=mDQCX?yl9~6X*=2LTOs?1LJ!{8qb=K&-=LPYP*#g0H!~gQ{Q#OBhqIX%i6MUYNwb~n9NI8y3cYw@Sm{U&8dD8*=P1$i(SGs`RnpM>aVlTo&SG0H0IKW zysLR@r+$5IrgrXD%cXDLx%;eam+Klkn|+*qIe%VqJg&`Ub!z6h$$_#wWZFWM`0 z28)#X`&mnN2Yhl`_3_^MtFu=gC_Z)C>Zr0Dqh!N>ry&{~;e{Ob+1tdR65W4f8Dn~^z+x#uWs%Crnj!P^Z<{g%f6Qjw2UTl+3_UHitUhm z$>#RxW1ormvkkYW{hb_I_W0eTDxrfelK+I`wrZ<(C(2hp|HA&ga!&AEVK=3qVqWo? z>CdXx<+@%Cz0AAo`uxc7^DVa>BrS`pEN{3a9NE1oS5057JXm36{jv<@!YkX14X5dS z>9x`+&wIk*8MW~B)2!P|+05UaxW2vp`d5pu$Nf0^)KbH4OjHe?%bYOFE4nNBr0(>n;5KIo~pl9ri-1i)`DsJ zxz9NzrA&QWW6mer@84Vf&?XRazbr0V`t>nIH&^+VE-YU)B>A8|yRyj5`{%*NYXyLdz-CreFab4|=J=5mL$NlHkK70QEwxGW= ztW|x3*H=xb-{uv*ms2ft8nb3$$dkqOf16gG&*_iO)p|C+>QVo(tZ7D9>R-o9Z4CT& zO0GI=^0pP>u6x5?b{+a&J@<&l<-0xI9MAt)WInbi{A^KJI;Y`|S<=jP@|0=cx{9hZM z{kXJr+AXcwcN>l3Wfy*UEbHH?q$PL6R_$V&?DhWd`m?teGbrHy>rx39fKMZzjOsHGM6_fOLNF# z^x?eFXE9~(6cvUvJ)_@e8IHL8T`}wA`;rA|MrV6tFCR1A|M$y>Jpw_RN8FTMyc+^l zZ{1>!bndKoX>Yt_WRja8va#cbw96Znm76<6_FQ&#SKh-{B3=IF_aZgfo6U*!>l-J^ zglBmc)r7u?dr{9UJ3nx{Ox)@##m?m}!inAQ1^QKa{pK|`&9KpyFi7#|X)s{_w`P-Z znz-8b*a>mXDKRIno_Mx>^JF2FcT6A7w;Zchn4Y~*{Li^}_a@%4d*LAGah>(duM0kF zX2zYh%uwFDBPV>abGz8`KiZl}f-X)^uhd)3^5SXB^glE!j&b4yk6rrDOx!H_P0Ms;Mw{WMk;n1*VEkOLH_4{6q<$fEx z`l^_jiktx(=j?egHR^oPmiJe$l~l*Ce>}OVOT}1l%85@Gxe7!kD^%C@xI~#nS&Lod z?2&26>-r)XmFdp_Il7TFaWu(5GT_^OpjF)Y)SCp6duNX-zQ^mN7B_NOcE z`gIr9Fh)G#`zZHqO;SQoeT?j}x;+x&XIEc(FS33=dm4M#_dK6n-@0baoGicTb&wU4 z@qdM>(`xn`D%b!0VzAb1{(L(p`;TwmKD`|E$~!h{+BXSy2hQ~3g>@QIrptY|zJHqH zE5+mK^n|5Q!sDNHR7AzH&$r97KmYsqc`Bb^qJ+#W#yR0B%jcX5)W~F8zObqONQ7px zL($Glm8x65&wl>bK3M<9m(TY3^CVW~Ty8h3-C_6f8SDQCo%7}E>wdqB%$#2Qc@0<1 z-*=nqs(yWVcxt<#n^kpR_QWL#`e&`|-e)pAp4KLNXI{d!f>YsBAAOl{%yPpyD+Q-A z1I~qZuiSj!S+-;@HiAh*e z%g?d?h&bQZwN>--i+3%ajfIBG^%NSCrI$T!$?BAF@wR9PT{h{s+lfneS3L07KQF(I zy}89kOR0X-k80iU;~}rBqW>#4ZJN1%_oWlcA*p|jbs9vauYHM|bi?x!*QW^I-)Z%o zk3V!gJuz*ziHKLV%jHK?bhbbGDpIZy_9=9j<{e1c9 zg4Z*D7BX3VcKD-KdTa0WZ(1(JJq&KoE9O=Ci|%9jsL7M`vcBQs1z|DYodWXwbMk!i zTUvzK{WdkHt!rGU;dOn&sfm{=Gp%J`hs}+j7aw>3@1HF(7k8vZ?K_rY`ty^La>LG# zXT?6{O%d4FsQRP&uWi;>8-)cEEdr+{THSed@I-^*k1JWrcU~ztaYr<;_|#ix-oFfo z)84fN?A?;P*V5c&f{OC<`UvJ_7oKfk>}!6$Ya!FoDSwaNyL#n^q^r)+vWMrto^F11 zM7L-1x6dnjCdX&}y}SGOw;%ng=}w!EGEa<{`D$v53FGZ{aqE*B1+yGNZr;8VJxhVR zu|V+couF^mX4co$9sIfe*u7;R+k@_;-c8Qs{q)qlDrD}9sx!&kWpZZBp352}Qomen zzU6xrkwUBAX20w>rro#XSS2+-{#sPa{gub$EAFi>^f?x3 zE*ic5o?q|wqxL*g@*6AneTNt)+}coh*w5_c**S|UI~f3lOzWfyY@M?!kw)Vd$*l$Kh3`{e*W?L z|KC3RvDS80=t}XPJLi?)omW|39d_0JpW{FO|I%s&4wsh_?T4~^@2ag7JTPJEBS%Yl zJ^LSZwfpweMBn20Qzp#)LZx2#c(cp?Th+g=$vtUh6XvYD{zdjp<;u9z?`@_EPDr)# z*m$Z~IJL+4vdD}Tg-l|n4xahPVSl#hl5^_4e}0Uw;^{y^7Aae^s@Uspd_Nl8^XN?ng&%W^c$)+Eo#gY4;nfrdr3r*a0wqCn9v>=LO;kSt9i%ZYuygnP!!O7Ek zdLsK?Rnhf}gHJtvJ-z+A|9ty(=NeZB8&y0weysnfomfp0i^BV-8z($jboxg}gT)<> z$x*Cn3v~bAt=jYVbLCdA8OJ)huFLqoxRLYBdtU6G^gcPGQ?-v&Vy6{Lr|o~tK4HrR z?U@(qwI!Ivr}>!UQbE$H0zb;C-Y72LIkYkptb_`zcFukSk?FV2sB zy1xJV#;wJ|oCcblf1mh@3siYO-g&rx?#tJ=chBEvYj3|#cWEBi?rXw_wtf1z zUv-^5({k?xbQ;)JaSa|5=exJAAd9jwu5)%Qpqg%dc$L*9{zVv!w zM7_0X-!TcL=^LIHZ}WaLb$+${)onLwH+L^ExO6>rvrm+x-(1NV^SoFauD-1LBYrtg za_-H@m(PkqChT0SKIM+@mZm9>H0qfa8mX9UmHsAtfA!tx`Sa_lYX0tO%Ko0Mox>5< zdgu&mzK3Pdhs3Claw#57c1?!UG8ro#DD`X%-?L|q{@um?%>w)8JXx;ZZl3pQ?}wFl zFRQi~SJYRZ`SIz)$B%dYFIRlbUw!M9 z)K{;px7eKOzj3np-?P8ge7(--!{vQ?ZnqB_IgL8 zk9_>%ZOiU|SG)J;*EHXFdAogfH9u2Lr$*?m6XTdxyg$bDBafQh#+W(h?b~X%_5FFq z{qgC`pMPJUUjLf$;#ohN-m1@8Jk>_=FM1x$J^FEPeQQD9F{b~2Z=b&Xc=z}7`tjH6 z(p(~n{Z=H1-1cnaciMT~y7_I+sjm~hn@cY~SJ1k3{;~JXA`^d{TEHqhtE+KkxoVg*7YX8QhvKOgXTnqWAgQTc0H?Ozq!i zzH`~USA@~-JzGV6G()0M@MUA>mBB|{Q~MILUVhkX7tlL>VWiBbDekO0RBPG4^rp4G6%y!5li z8Xx=CH@?E56+Zs&Ud5%KY1tRp>z#G<^8dx(kE~KTa%`=Qgxkq?$9wDDzkdB_D-^B0 zC1)9ra^T67<;M1t56tkrD6)~+cU$J-oRaG~a@;zqN52%mn>Q!IMd=FL9;2_13iD^@ zNE~>mExt4OXX5DQ*SBsgtUul;c%YFfgxT|g!0a^3Sthop&rB5boLsCQUYz1G zlhNHfBXIqd+4pL~cQ5N?eQu{^k+R!ps*0uvgX}jg@oPHq<&!QpK2Q35U|mSKS#x;8 z%@<`c8gpIWS9)cJercBJ`abVfkjZTZyT1jQEYCi8wF{m)WVJF*;OE%_&8t7ox-YE1 z5LG*2f;PWg^G;psLzmA;JEq<%P>hWonRH%sqSNzVKCzUtt^)YPk-`Vp39YqwjlCd?{}`jw-(d}{j>A)8!lCCdpDM9-Ix98 z@Wgs%@RBp@T0PdTT)(iNDXx1<_cM88ZCS0~cUfk~-#mSy{Zgmwg(Y6z4UI341RHN* zGj3L}ZL}>iv57MJu;9cG$B!14>J`UQEkYGaEHBNSy4Kj~>b9VTSGr!w3N1YIBVZ&Jz|$s$cWx@Vd@>cSY}pc4T=Tin;Q;C9LQFk3#qJlMdXQ@*&2)OV99xSW|j_ z&%NlcdA3XQ?Q3iQ|N8PYS9N;0Pmvne=M`JhUKd&}I+dwX@A2%pNG|`+*}t8yDE=sY z_U`ag2AAT;zm-|G-Tclw!^Y?R`ObhqmOE#D_5WCx^I*c^=PPMlYIjuV=-zxyj-?mQH7y`pexqWeS`5q|1A}{`Gw|KPz9zoSEk!CHJ-0 z?UwAt>N@l>(iK{V<8mCwT3Z+uR!yb}1M;@5#UI%2+pFVgyW7e)PC zbnwZM=(6+AD;^c^xp`@y&+5hh|7^RqW^QP9vg?jelZ|I)vP4I0yLMF1buD+F@wFX` z_HY=KH*-#j3adAAzBSv@TQ%W!^lC1dc{f)vnJWG?kC@H%%v65mu|(ciKJR(oB;2T< z)v$N_u_vAD7CdLWoB8Av<8w{fj=M{xCT%ZUa>`HsW{b_#Hyz0kp;3=7>o%UO?OdffQG1Qu z#_fC5d^Q)(WzU*9Ge>%I;@7kb?AzZTzPwuP())P}dA3fID*p7MciS$Zn8U$SE+?Jy zvNuqcVEvi(oK>|x>`vvkm2dOe3Z|DhZRrp^W5uKZ-zyiX4;&5QBtQKkL`?$KSK9jk8Z_lat`(zr4__!ExF8 z@}xZ<*##|Zu3xYJ|7}B&vQw?><@%=9sr%hJ)0~;hQ$j?IUOoEjwdXbKhLGnCOKaG; zVzuJx>yO@F7nHp}_Wib1<+HBt&bhMtkL1_7pPRlG{Rw+o|N6&$yS1v@{~Arof9Z&b?zByrd048z|JSW8yB13<{UEhjxyF96J2{$~2za30+WEIer^tIZrj_sDSA=}&=-<0kOz2xdVby;zX z!Yqw8+qwF}wU>hL7AJM?-*lq+;>#~z9u#p+-zz(FM_>JeJilh4W1EWpTNmk0H%LGD zN4RLoCK1OHZlU_kXOp65hB$68E#zZ6v`qBOQjf^X#TsX4{+zv7(Oo0ayl6ZdjQu_G<^}LH$e}DY-<>6zm&m4bQVuhdm z%Hz<}XUSR8vfoAX=;Y|kBQGNs@oZ6EBW#h}ZM%7io)Fh;iQj+rKCAZ)*fq<}I3#$v zf9395EQRYgZ;0NS^*uATd|B(h@SD-!9UN@0g%@p@!M5SkoM(cnA^W56_rBYG>RwBD z^&jzfZ}{ytJZ1h7TN>vZvaDJ6)6&9~p|@8bmz*i$es@uw+P|8pho5a$msY+z_0F?# z>dU?NSAE|8{CVcqe>={c3Wz9A$g01mcy`7F4zKL04lB9YT(ci}F6=zB!Te_IPaA<% zg}=|dm;3+m%eHe?FL$uKyLEBm!eeQE;hZ;*KD@X}r($LWx5n3K-5E2_2tTi4`2Vfa z_-Dh{bteneUTL%Rc$oZ4+R&R+wJG84GK)>y5?itsG^Zwx8sAla_?{6#F)w_hQR^<9$VCS<|HAe{tWN zR>ru*E8Ue{F|lcfn_#!VOc5(Ju_-TpnUzcp;@I~_RkxSx-BY%HE~7j4ry^_vx3I2` zo>4YedC|XD*XnD2eEE^8dGs*jx|zTEJ$X7iYwDHi3m9H!?%j3CL16QgoYa&+vmS>+Uy4Z!DkDSh-zUMo{OX;-*lM z{v|iUW$G6=FtZ$elW;oOU)}zhts#HN;WO7xv!@omPt2a*ua|3-|5$CdS*}t3>9@6e z7a8V0RzLjJ|5bfh=%0e(`@Ll!cTGAd{B31_1&fV|QBsB*i_N6A13h`i+8kW@mdUYe zv+6aj_B3#2P5wQ{T;xIB@y_-AzrWu7U2n&{<@>IvN#;i!PI%Ab_n+v|`g7T-%&IwI z^K)6=UUR)T?O~1Y$63}&2DeW}KTvCM7n@4Sw0S5+|)n!&X^f0d%LLnjey^bJKhhPZ+f_wYhGG!IN`u@trO1ZnK0H@M?024&3U6`a^ixXp4qu}V?R0vbzSH*``wI8h>$VGh|8PZdV%oHKPrfd$ ziT3rFJm=n~gbR$y3Q>lQZ7%Oc7KZ#uXb}Cdg}rRU*2@hX!C(H&v- zH^S~`#EYkSs>rwRoV@0lk?-?9sa}bmso(Ehe3$od+7aEg$&$Pi>ucBE536O_s;5<- z*%4&-aLN4ozn2bFyi4!N`7g0`^?^idu4;wM-+od;q0(aNWtd|jcpBr7zIdk9Z@XD`~)+{Z& z{2{ILD8QpD}N^7VhA`@ZN@y095pJ=02+$X_|QTAV)Oe8j*W8ses-CrEC>;^!i3m|Ry;wHn zGGEmR_N6-yxH`L=K3FuRPxoBcr-{A+tM;zm#oxhbGOP1V2+NGtlP7Pz-^>|q5I(IU ze5;qg?fKVl+Y01ko;ircF5}HeyLsG>w|kQDmO0t`wSz7_jb%5g=PG%qWVt@DpGmrW zLFxQ%$9U^D51B+`olE_H?fRhGn^AwOaMB$ZgIar_P(pG3h|SwmDCu zZ)l&nq+fT=-1zqHr{8}bD_vK=e$&a-H-f+3^NcuIx^PS5YrU6&8Vd{A<_cYX-W2#D zRYcKY{mN4!|9rW-rQfH?AO00RbE8gBf^nkJvjfjKjqZJYdi|ZX_};HAm8m{8mCnZI zAA&voi)!9-M4vi)!HvbWY5Mgj$kbe!qO?rlm%1WV5Z9)$wyzuV${W78Y@5ssCpgS9?G2&X(=h z+t0^`#+|#^$@Sz2qp?Wa>&1a@&YA0;&x?BKtGy?4>HRGxyE7jaUEY<_&Oa^oQrhy_ zVfyB47kR>Y zH2!gW`>N2&Qjre_-t(D+x(fYs*dtls`sp@bRY?Z7gy{Dp|GqvK*FW$7T`>RGpPyT= ze*U=n`Sf-B?pM^s-`}^_Zr|?@pWZHCd3V2UO{8M|?V>|L(`PMiSaJEAe^9Q7`O5Mj zLA|pn=^H0;)LYN~lbY#!XXDB2%nJ(Ard&S1Ad<P6K1{Ei8EUxxHEa{O3%EaS>F{({EoBLiyZV@{?$6I*L$n$ zCCx)d2QIqlet-Gm?ahr#5aO=u(xh#?XlwCxqmVygpMU>)eR;Zj)T}@K*>%6!wy^GK>o}@( z+v;oL{r&#oDrf&Qe$RYW${$?6Uti%x?`FGaqZ&x#S;r}1L^Zx#eb4~^Q zt`&6asy_0rikW*(OxP}Cjvp7SlJ4ovI5)$4l8lfG2RnzhQdDcnrcW>TY${BeYEYjP z`?dUE#Nl~cdVF@8dDe9wI}+f}pxV6acu1+=|4+s8nwO(fH*mxS9#F9sxGLClNLZ`Y z{OrwQJNC>SAuN_`ZGN*N^B?SLKHJ5|7GAKTk@GmO%A%0PD!$i(v2poijTRm?qa#lp8D%VH_bm}KTr~a1rVndZ#2DX-UO4m1*J#GKt+gR%RA$X6 zTCBFu`OT(93mcR@-Yt;OYF2nZ?|qQV#2w2NUd{P?*Y`ct|jFmUnbELmD znlJh9%o>(k^AhWrSeO56UubjVufhvi|Hhpz`=>j|`i3%_71cfH(RF0FUh;i<+rt;- zB~CM0H*zg#Uy#FX%34yoMI&Mm$YiS$8EYi zJ>Khg);{-`HxDm;`d;}rcS`*V?(B&7&6)QD4kVwR{qV6+Y4SS`l{+j9b~AoUOwegi zs&UQH>}Y+ZDR^$(=XDN$GF}-Rd)GH}>MF&;7RxP`NhkG7m1l$}m-+5Cwq4?^Q4sHU z_R#|8jSTDEbXv=0jm5gn^4y+lKe+Pi_rVKO7$&AU39w&Yd0aI)?{3qAb%Hm$>d%x| zO=dlLr;TgYB!SKsRb@Vsu7Z7%v!xaE8XpEv`mFG?>5!U&rlIwevT(x-b`SZOA}*!+ zpDj}R}dxmMca^uTMN>E1Eg^+@h4~L!@?T{B?l}m%x^SX~mpP zA40z>)*o8c)yVtS_sX0jpVjKqeu^zgagE#EHAAQE&U-=jO7~ATm0mMKgyO1?du2}L z*f&`{hVxm{716fuU;Ab{EA2VvT{yj0Yvzg6phBDJWfxV#9|*3!bN9gdwH-5Og}db+ zm+oEOBDhGrd`dQ(hIpyyLi2;Z3q`ih+$i3By*89v*>YOFoatvqj>@U5PmJ$mym~)B z?tc8zhtDFbqZlrwv(0*TIW_Dmd$8Ou<_(v5v`z}uYW+-7b^1QRcq?!72iu?}1!aE~ zuD)I3ayG0$^U&VksNYQZ_8vbWo0ObmRNyA+vSw!ETq z(WlFI)*_|_-;=s#9xLVy@KE`-`kmISMX7wo;Q@ZaS5E0fJo__;>%z?~DqWjpAOF1W zq4cUFi2Zq{o@>?q%~loaYufsfctaJ%J#CBcT$viVlX;4V8DB`Z1WV!b`h@VGLT*fI zCI6>9@jFx>wNa^YUD9sj_zJJah>N}7rq8&XVe#k4RhGi@AurWd)h5*KGrwgT;Tn8N zI{(Od{`cWwd7EOqpR}CfnUE}eInXmMI--V!Y1Wz!Y36<(LAQ#?kT(<7RxuRlPUf9| zV#QWh?{AAv728LJJq?TtC5^X&o8|&+?%Z1BvUTqGe0AD(hKI+dB&Ih{VHTO zR z@8>rbm1TeK_*bnwbCvtcpATPO@18$@|K7D4Z4MLqg6gdox_BxCcCCy&v%Px#1HJrq zVdgvC^H_R0f7+^a#dw&U`zELLwf;no+v$}2pw6_yqe*-(j1D||WxZhnr_9`G<)v%B z?YzY|b&ABl6_MAK3TtLQW?{?b$d})((Y|q4m8h()QOM_mJXe|Avb!E7y?5Kq7Gt-x z^Fq!A-35GCX3K1?*YM1FX)AHiD`639RQ|&yYrg3>Mf|-HTekN0`RA9n_eWovc4^I% z!;_d7+OrzG-0)|zr~>Z_cB5IInwA_pt*`!5=o4C}I)g>_qFTh32k(qit+ndvWczqeo4fmdY|lSm?;oFM=68Pi ziEolWCJ0ZoU~|39a=@giNux2weQHMaiOVOVHa|ZVxYjbj^=OnqqPE%B7rGL`3;r)L zTNAw7yYkaqZNxt^||YS>BuG<}A12 z%5D0-g(3BXLuiVH@De?#{DjKa3iU2?yA-qTJ}h)B+Qziu#O3Cx`uxj(s_-PaEq}V| z{EfTvEGPNurbKxPzv>lREAa8&ohhPYHrfqsC3J1>hbK>*!WY=damar_Ht^U z_q5gYe81gzR!PG1<1<+7?jQca^{Ridx%i~UWMSsb%=)}b<~Wz{nJxD;flnpTJVR^J z2Wg#r!GlxF!Vi3HQrg;lDJ7U$EPq8%>7gZ$mfbgqs&~|wIypijF!bn^HBu|5o@3dx z9tp$hhID*a7@>Wd&1hl-luDxEYmo>H&-AgP1lXBahh`P zt9U*m9#y&Z?anv&G~2F3Zn)s^Ku5Ow(>kV>XK$7=xZjmL5Hoetrzwq@f2Upu{p4C` z(-J42UMj)y_-VGY?!QE5*Z+@~w=aLbRj_1fF~`}92VYnT7|mTGK0mQOE&YzJ|Bu3{ zM|UkZ{_COqnd5LOi)-DDxpEFEzd0RFE#ZtgEN-{{&JEwRc0tXO%rqsXG_TYX9^YCb zqc6reuHJUvu;f6%q{mM>7OHS2MQ&6$6|3+~{Gf{DBGtWI>C^mPUrBo(v@un#gz;y! z?5B?4U{*nGUUl0eN~*SPfkFpc>l4z`o!C8nmb2Oj8J5(BJYd)EIna9LUCkNgPmK{y z%G(0E#4ZcP?K-T~_9>ZpTG-m#1?FbYL$-D#W-n`Sa8}~~6l1|rm(AW*IwOD5jpUlF zs%O?uzbKfn)XE6{|K-)`*ikicg7(a!sk0OXPQ2^9yzIJ#aY^g(bz*-H>}gV-d#2u3 z`#Q73#-n-OtCE9kj57;c^!9&cwRz8XFQHr1;H;08iu<3mpyJS1O@AM)n|1s2bAJ8v z{NXw}PecS>Ex5h$dCIhgs+MOjr!QE*dR1bPYLLVszin;azj^1Ml{TAw#lfpgVBHj9 zW}Y`uj&E%WwiybjJmo314e0D%#J<9D+ZTrBdbO)wt0!;Oj?KS0C*5uCh4h7I*-kFd zGCn-{@utGv{CmVtaa!a#HXW{r$eSQluDmz>rgBPJ-m~Z%taGQ$WE8q#6uJ3Lm(hWQ ze>axQ%#`E(#dQ0}f&;Nl3kBXv`boor`KSZTIwe_EuPp{w7$ z3!QKGC|wO@ZL!n6dro29YkkEj9xL?^^4@!PUNJ(D>&~)-_J?WZJ4H7uwJzVD|9JOz z{`K;8Rgs)?PVBaE_O5=CqW^wRk=ZLf|B?)O%|h|!v+RQUpRUwbGVWnawpCPW@P8|1 zxYj6ZnrG0HqBgd(bC$)Z*b0V!uVwl6CTN%2%1EDXyLr1b3*H>6zNF1t<|lpfX7(19 zNgRGz%(<5Zj{T}GOMM}??AU|fON;Cc3zy9s2b(dGh`NW#F9ja+DnQovQ z8BjdgKI4y)QXlUsHs&3^*X~OEJz1HT&9#VCxPNYC#|+ISz8|%JEpPTL4REgS`MxCF z^xUeT^N(~x0v6SpynXsCr$w=K{(=5wEQdTyn=;uH0?(Y-_i@LO_q#>+-Pe8i-|6TX z`!3mc-_Km~?G~DNQewf<1c${_Rhf50cr7@Xa8MvXYE?=rf3UA%rbEh=)UzHIj9uxk zE|wm8sui{O*3;ukx2|c;c>HshkkSDg#lrf~0L$8G|BOrJj(%NGvm$K8Db8bu_VF|H z2kxEsH2Z>f&%DG3vN>kow>YO8v92z+xnIkq#n5s_*yZTNE31<(W-2Z(FI&gKUg+26 zvgfO4lfCB71E=I!nRYU?E^FIyfcKzap5xKTT5h58$b{PtI+2?4EvkR^Ij|evn8O&X z^6tyudh7r1{+?d$f8Wl2ukG4-Ozg(WrIpQ%ldAT5y;<+0IY(rcndhCV$LaaWd#WrS zzj^#^_wVDTo*8o%u$$~qKCyc4%ERH)za-bP+k6mmd^nAR>(kXgmv$xB&A#~2Z^bL?@|pX1UQ5%Sl9uU=c&)3Pe?Ggtj-jjlx7`sydEF8g^aTnyUjzNpb) z`~2WH7mhri@3~-q&9jCbf9`31Hu6>Z=cf1mu4L)a*SxRS${e{>mAxSD#<6{u3l05q z%sxKp5x(Br)pv27)h*ZOPff2sRefw=aqUl2`1Q%tr+e4VJ$ilDtsP5dK2x2!E9&y9 ztf)t|%4a0jN*1`@-F;8BzrJ|suFmTTeq6D&I|Z9#%$D@8*Y^%{h>}Vzs5^P`mImOlawuTh0V0m9@^*Ob3eZb|< z9jxA0T#UVTBst_5BwN~qPF_~z^2&^_{LM~-oDa>TP*(<`=DQ21cVQD?Ct@-TiCDjSS=CeCy8Zg}z zdA^I&QB(X#ZF%UU11@aF=5ilBJd}=iv`X-PlGr})-|6SuuTOveT(v)#VKNWD%pTv! z%Tr^o+?k_zebO#hA+H(H^IJtSo_Z}VtzY@w|7=@YGLzc_)eE0K#c>@tBbU{6XUk-z z{g;ieEt$oxExlZdr|nQkmF6m`tW_>6uk6&wak?uXb9Ey}-E_a$w?TbXBCA&|uZmZx z3HfjKAjjEW`fEAYM%I_Vw7pdC=GG|If1bU6!>*&Bb8 zDe~o>`c07!qxV1W&zrNg_Px1P`n69+cXzChS(j_4WI?<>Ti6`?urGk8b0| zZj-L_1SP)@JWq6aAOfauW@X?E0V3`Jh^fS-XkrUXE2lans(s zD=$Aj{F$w9aLi<0`C>(0FiX7nPX=$xHCfV1xhk555Ar%+d7O!y z*5jpc>q?i{%@_Mb0^AnX&+*#ob6P=c&g!rwi|iNLG|poQT~?~I+;9K7awe9ieCmZx zH@>a5I%PFY$X1Bqq))E!!QrtMiSWvlKV4LM~! zd;3*u##d6`rmBlOnTI8D>@CO)u|B3DeW~k`%fc5nWv}XMdsjLnyir;8-qmh~L44%x zz((mssR~aoWH;{g`kFK6O+~Ls>&q4Oo7I=5{GTTMa<1c>KL;B2PuVOKti_*Oq(5Yor<&O?_4+e$@HqL)E{W?6)I%8iSWV zUAALycud}=goZcH`9t%!uyY>EjL3BWF>XkH$Lhmq^)3YBXZknIhQY&G8q;q?QSA(JSgCc#VW*Y$#owh{Ha!nyjp09ICng=h z{m`gs{<3QeSNPmfQa-kFf01=FOYiKBxqlW+G&{*Rk=NpM+9u7?e8aN$yaDU{Y871c zpT)IREa-Zn-{BePruaR!fm`Bhy`D#y@$HHEtZEM?|1Nb6TQ-|>ZSgL4%{__*5n8pE z;yPFVTM#!tPq8Rw?*4Nb@@I8|3-w>B6@J}iU7Xa;$-0>J>w(X^Y)uwil2~FSRr0Q2 zbN}B@r%&HLeLXv#>r_d_i^{{bH-ab4o}IEdZb!;znUzxl4*f4GoOw%PcS^prHtWs$ zn)_}4H!9!T+x&ON3+;bFb;8e;@2&Z2zyH$1r`M0q53{t=iLpxDw%*{UfXKh%MGI8U zRjq10q9SUp@>pu&QRA;#yrKK<9Q8V!Wp&ule2tl;1b6U@k)NTJ% z$Le_2+{H7jZa+;bDRuXqdhJ(TPiX0yH9>0*mI&4_dn%xG)oi!wp|Bf2K69;^W<2%c z8mk`7Lthpin8Ve5H8#Gy>&xN$VaDDCVtbBcGPw9XTD(%}rq=Sz!(OHZyVm?OD6$G@ z+n#<-rqVmzm}moG9l%uIr}!N42!CuhP|1bDSd}_#+}-i zIlp;T+x%HSV(X`-uk2!3_ifkxtPSV+|Hm}>UOYSJfi{y!zVjKY3u}2#OKdp!P9{}7 zQ?!P|O<;A!#-jp<3);?c>zntLs%-7%)~P@7rFphhcoMtN^3;|c>1DvN&QN8 z;f(Vydc>aYJ+UwJbzN!SnYCN@Ejhw7r>!!`@W5t{HJi5`bgnB~Rlhik?X6|#vQ4)G zWH+v|pHsf0Qhk4I?CjQEn^_iFO0sM|`mv~+%cOP@2Vd}+DFUs1`mc_NzV)kjv-KAA8|B^g zZwoVg|KoRBVUclb+9a-BTfRR%KV?Vky4WofC!aDiv9>rk?W;;gnNY3D#=!dHcIVx! z+HY9CTc-4g&FJ&Tgq=b<;S(j-+q_xOAM-Dv_q-~jz{d)U#<<2xlNBlIyTqPceOkYj z{fG16nEy(DVibg(imR`z-=O$3Z{nJi)D5ZAbQ)7MLvFo`v73CTQg~f$#oNZfgP$sw zUOL+&5WhvXw0`;FOA1*jF^tW#Q^hy~LBnax7JuitSooNCNrqgs6~D`!qsZKNd0v;{ z0q5Dj`QRq)2K1a4aCVDzE zq9r3MCU8FYxW}=*@wcyO!qjEr>U}zvlXNFdY?xHnb4i0$+kelV_ts|0;bJ>%c_#32 zMSMB6Lq>PGXC*`Nw|95%NSuwtu1{nAJDwyh% zUoDxmFmTQvi*u)9v_v>3OjOpk&-2^IwlAkhTG`FpZR~LOV9drLD@)a;aT~PYaC;)DbBWMo+%VJNqGjF=#mI8w~5blO-%D8N?Qcd zRxJ3Y)OI(a*w3l%Mtz=T|JSOZCs`r--Wyq;p40HL7F?|8t$cgp%QV?pk?G=lj+jcX zm{3?eF?W^Vgi?Oik0J)WEKjopUcBJjb2}$`vBjg4Negx`Xg6_QmY=z?jdQbFYvjA@ z&s=RJO1HVqUU4NOzww)E#)jf-&V$cVT8d5eIpp*w@`NYuxOwe>TT5sCn&%&7S&K!# zHvW{H{;^NmNV)&WyNO><9#uP7AIBw>bhvZzL>{4eGwK5zrZ=2RaXaojy?w(nWKHl=XR`p- z&M7hL{(qG`Y53!J!Bty@B<9bH)SlFDf8H{I<8MgW^z^n&&1AP(GoR0kKM}H~yu2u$ zJ8*($<)c!IY@?Y~s%kq6CWfyox81tTBF-fD=81V%Ev{Xe8LG6#(@W)~V(jDm#0)+b ztEMZgYlPNJIp|^=8~S&}AGt{jPcB(#8zuGeK#xsW%RCEpmxQ)!ta8eYZ@gCt$=sPX zrM{ixLfixW4IZmpS6;VuJ_fGu>uWU}=yPGEaXPP;mn`Cyv zgVVg#?UGW_@BcTdr@!4%sFVF8^buoF$2X6q5Vmni-dbNtD)-#Rp!ev`%=~vr$ry&F8_xC)>L89Nw_^*>#-0JISJ9<{{m7 z(@Tt&d{Pb$b9`8RA~!{R)lGll+Qe~z`(wyLiC62or>Y#=k=hZ^SD$ov`s!(QKMGto zubVrkXQt@CBZpW7jb~@Lo)c}`r|O;M{jNa$RMZBW3m+N!3hq7-Ip!as>n0aTH@nVnUzh0TsI>gMf9&r5-zDGoEXl6FpWU~-``f1e z?UjK#+}uYu6$I)iFZN?*Ikzpc{<&yXD#PQPnj>?9mDC*cl{Z|z@Ob032O$^R&9i!i zU)UTAXy@cOYWJaL!v0plUH8wO?wwzC>t^5G+5K|y*A}bR>hEPWWU}b~aC^$uSzqr6 z&tE%x`!3nH`&XD8{~72QmY;LFYQZzRq>qo6tz@=*XZd02bmm2+UfU+^UAh0Nap*bmaMs+4%-XD)|ZvToyFSWvFa2T<|UACTd^y5hxw(DDVC0?F=KL6L-*6ZI~bpkRqF1_6xI4j!5 zOfP=prHK+^X;lWZUi{woN#LFR-Tn2I|K7GQPZd_*8EJ{Z6w+y zEW;YWv|2af#{Rd>7w1a$^v_uHF#ch;u|dhKdd15#c9bZxXntHKvC+(5>YQNV>*Z-a zTVDwZ1e$!k!K$?3+UK&9J(+R$zlZD+F5Mt*`@peFIXU@g0{5zq^?`BU>YfJHRaX2z zt(7gxdy_eo^VZ?6%`SqzYkmK$)tPkUz4Gdr|0QnsFW@?&y_bdeC%^3Ch3{UxwCxIh zAZ4*!kFkV(-HZrEz1)R*1>Tn?-p;n&VSLx{R!s3yO%uo96IVMOJUrYNG;Ucd_M`fm z(-z6cP~U(b3!=ip?KB^+H^DP4EU z(tM|Em%9E)L?ux_Z*qfVd)%_;i*N2N{PS)5qY!Vk6aG*49laRred+Lz4ew{=P5V+Y zcl%wh)p_X$baf_)@Ji42I2UnX@yc7C3W00x=W$J4IC)y8dFNXRQAwp5{_QeP^~CGH z-dQBX6X?JFzjMtU-zf`grd*5_U@+L6@Fgl*SLNWbmj{E_S_SW3_xr{1-QV}$vA4hX zf7h9w1f?e{O<8>9uLu5}agpJf^bD@km)a*TYMQKhVMmSag^PY({LX4>KYp#6U;oF< z&u9L0aasE}GhD9h?VKlg?DWBD#g`U(8&*8pyoI?w^Xi86y&WB=4jCmqnzlpYqncN> zT>a%`4O313EH{XKx@t0)!H)yRvL`(<(3f9{qGh@a=X zX5RV!TB);5UB&mOFCTt<`talP?AiPdxnY|Q6wA9XId`P>pH}^U#mVw^={+J&jC;B-n7*QHq8EDnIyCGno?Ys+qrihGtx~C9?qE*9vA3- ze_7Hh5tD^2k0xGZeD7D4@kFcV^MhWq$nQM|WqvuS_*zP?l#VxitiC*}=jqbFD}&$N z-R->Rm+S8L%MUL%X8XOSKb(7t?4vhLFV#fLUdheb{6@1#x0^#~Vg0K~_S+Q>^FE%l zPfswX&~mzq&DlenE`Ev2QR^)ES$IuIJ=5fp=9-5qGY$2>q#Iu=Pi8h*G{I|oz>!?< z2@MOiUh-bhKcm+3cEtzrZEt&R_i>j=_2gQ4CfXU@E?sm()5&1V+IFit=JhkC`+0wF zRx>?#BEUp-v9m~-#D>EaiJC6;mYX64ES=;(*mERL(M!=g(>Gn(G&1YU($8G#VSe9! zY2R79_&8fqi`;yf-!qoY?&bUS=i%YQ*N>KHI3HT0Cw_5t>ej^>(Q$eUrfa{_`8&;G z@dG7|jnn^5eSNT?R$M0ecO8=#uNZgwwohSGymiv%bebAfN{U`h(NZW8iQ6EvYg2vi zRL21St@D*8=DzCraxO9L#Mzwa^qj=x&s&!+Ja}o>)%9y)?_Pc1!MMvxSlV46^P76p zBkrr8udXjS^|o`JQ;Wmaj){LfB&WG0M?C4#{J!u1)x-Pt|Nijw@#V){n@#Vreb~t1 zvFUv8{GF0(XL|oqGoJVHn}O(zJpD8Ob8N1ZGoP)udLF2JwPE9p&!^`}UQ7MGH|}WZ zqJ0Hno0luDR<2uiVlQ((gWcmTf*-tHeB&NA?O4Q+zgwI@=hr*O@HcL zl@=>i^=tFmhpSo3*FQ|#Z+u{PYhU%^)P48%Kaj5eDssJJ{mF($O_$Hzv01k<`pyrf4Cll5XUBei{r9x}!uV}7 zS3h6XZ}jKu?_Vz>u9wTtn|9jc%X#LW(AXQZ#VVUDbtW#c{T$0E6T>&BN8qfr*5j@` zRcV76etyCYDXxF}nr5uw(eXMTU!cTNYS9$c+;THma9*TA#hHnQ2|G)^Zv7o={L$v) zsn+;U5=$g{kH{zaI4tlgkF~wXzj~g;llRpdB&4cT-7H?6sE}H@n6sb9@u3%ocR+2> z#2|mBD#>X`^-n`qPdHI&?SFs0S^<-`!dkho*Ee48stm5b#s6@-$;+F(EmoU-KF)jX zt+dnil);|LMbmxD1%-q!`@dtkDxKvJz4yvhTkEa}JHMi5MUhFXcK&+j7qBkg>rE0G#@N{lSXl(iJM!S2pzcO9(q}dZMO?*7Did|;YzvaDbi#2_g zZJczRHE#Wx-ShX={@OB0a?umH+T;$?dIQ$w-mc$|Z9TfSSht09o_xq`M>Um*pwhGZ z-+xp2SK0hYns=L_mrI=0Dn%>PRg(mdu{BFbC9k=+pquCY!kNOeJL?#%=RJ+TtsM55 zpG&iUGJj89qBm!QfY|c$Z|2u0u`;OTyFK3WD{;cl6{qL_o20LO!ykN@EYuqeX_)4F(XsqCt)YuaH-s_W(XRv$b zoJhlB_J;!LIg2Ln$IK31HDilT*1WIg`T6e`?wvZlJVZP=#aVR6mC~x%>g02`wwwQa zs(GXMqVp!b>$7jqTR-pH)1T+7j;>i9^Xq(_nSf98Vg08!Ki>I!ao^Wnbw9toeBE`8 zKTUmhY1cOnqi0Kx+InnFaNqf&FwDNry`S}g^MkeDrUxf52G;vY&nT9$e^yg}cgp7- zxw~K9chEg_OH??~)!h2wRY_MFwmT=8JQi)4+!VE|>T816HKt}Q(Wt{0H}M}&`na@9 zjQ>)Y%8{EZ6cr3VDM|PLy?kr^4Z(!A&`lO6d>SswvG=#>xGj45$0hL8(KW1d_OLFx z$;h&gbEY|qMvVZ^e8z1G^=Y5uo)ukr`JU(hJC%zb?3_J|O!FHY4jvahA@k-`Z_n0* z4NR5if6nAobh-RWQGc;P-D=Hi-3&E-TGv<4+#r33`IFHjrVSUpW@oRwQF^VgRy zX-RxsSg9lH`IA{Wq`Tu!!ON%(Wy%G?r_Nnj;@!P{(}TNe!QxZzbeGP}VVv(0EuEEa z>@cVIXA#>eh3s>Zya}3HG;&&0iDs%g?MZ z{kCOeNqyfg$-=2A@7Bz0TcwU=5Gw-C%q@Pzg zF0U*J^E)MAx;mr4<(-YNv_3H3|0}Up>B__VvtJxesB^mVCij`{ z)g2Mthu)l?rP!UN7GiC1_e!PN%G%7T@ZZ}xLJzs=91_;3pLQ}o$@GBz-JVIU`ZDvk z&9iG~V*S9(yjnW&-v0Z4|9siul^D$H|NmN+Qk;u%@vd`EidUp<;9jORzhRD>^zw~$ zd}a$HTfR@bzNvN&k3{1{F173OtFHVkS(*?&JymhZyYI_h9-eDd6z_Ofe{#OuONY4c zWs)CrDqi;OOx#))7Wz+NowdW4VDq-(x25~{FerPTdmYbk)_j6s*1_`m`)jKze@x$( z%qVS=>Alc2C-1Iarh%{kXOY{il-E)X>mQp=@-y?8JV|b)!!DNP!ZOW2svc*S%Kon2 zV^Hpt`)xXJ3Zqp0>~~#nO1k8yyxiAewO#tK$e#N%%BM?zzL&?d;L6Kmd#?9p`d_{2 zYrgFBt);)F)#b05lIK?%>dkt0-WKb^`cFMm{tB;xauN6Z-7B_N#5!_ju1@ zS({Iv-)WdKo}by$ylaKzW#)y&J($Phb9&UoEMYabN9;VrE;~BagUJ2$N*AL!a_~@@A^YxjES)Ofr-u5Pk z>tB4$e4_T`$;-=^m;XLq`c3Ne2kC`(N_OS(z3P1>t`V%fYxZ^PbP1ln_3Mr9ikq+$ z*dH}m)cTEMYSD#h&!_xsa=w1&cKJ?r87uwwyip+*fmtr|1I=eFG+w*K_m%GLM{EAa zX7+7dex<LQGmm!aADx@_rp`I&&*NJijx{2i>I-^W85SttTdc5A>gn$GwZe`e zIe*^&oUUq-Tl?nE9CfSW)AszVjn%hvLk{XZ%ReiBde+hSSsg2U|Age9Juks3!|%y4 zZ-Tf1?^|8JhTX^hSFh}eFJ{{Iy>_YLJi9yg_UjY^@)C_A^ErfgpYQS66YeZ*Q4!GR zdTG@LwUe

pbiCo#1_3z&wZRJ^v=R^rjtVZlWQXkCQL&Qke93jpLoYY8yGF!w+WJ zr*W=+Xx=)-U{{nz|C7R3OXiAtG0d94f3q#&&+f>D`|sM?-_hlqbY!xC-=*rgM`Hhr0NC4RmBhcBmZB@1S}P6~;ebaf|_!W;pM3EZby-Z$3I|2ua^|M!+# zy{ixHbY#9a&gaxlVgVz7(y)K++9Qs(|+tk`{UGpyw`L1Yt#;z85 zm8Ey0YSOmeqKiw;Cq1eA@PE=;COfP8i_cVi8#Q7+Z`q-}ea~~zx+}WxXYN0CSv6d^ z*Z;l5&FOz5O4*{e^i*z*6xd_O!Md=-TGjX83+Lm?I>(nz+j1yphW4c1rkk&=mY4jU zFzr$gkHP2DPu^PJwr`4hT3q%-wB2rISiO7NEqgUL1ZgWvCFl} z+`a3Kcg|ds7cebLxjtvx{>_iymi&31GJn?r{ntx%W_Ql53=J{%+i02b?&0$r;jfaS zLoVBWO?$7Ss%mqyX!V83CZ8%M-hGp`T#xC&<$bfa8k-;7dS>Z{`P;T+F1M1koLZ(5 zyKq^G8cU_-=Izy!pSmt^7EwwQm04^UmB`_swPZo%?yu~^7q*^1XMJ`0(hNrR`gwh` zr+c62y8id`>*?*&cl&4GpLjzxlwDBh=%cf9FZ@1#&^YSuy}v)+KD^xCetdrT65e{f z%^vr6lr_4W*eO=dd-hOfi$T*0|1$?NfB)EcW$lj5kM_3AFuXC@^+T@G51~Hsqk*#f zJ5pM`UYp*Rh}?BSXjV-4uSTPoDLeT!h5O_Krh8{Hiq&5}HQ}k9x6J-#?*qzt5hg+9 z(-;>q^hb(>OYqB??R%~NeSVnExarp0P{Zb4tY>mlZyb4#y%oLnU)Qlpcw!FCpF)VsyqkLN|sn|HI%@}$J_7d3q| zI2X=4)?1%A>*ej|yGze(68!Z_zmk7Z!R;RzA5*3>Mb^y-pP&1A|H)aRoC~^UPTc?F z{+>yFj=A^t{fui^=}w?y3O zT=M;6^nxoN+&sFrfBO9S@88o|4@!L2Pc}Qg)FN}&rKz7)+?Ph56!*Ea<;eMnYv%2p zi%%R8Wd3Oy(fIm7?RVir7wqF6%b2pp)Jy1Go%(l5{4MXbb$z$Dv+3Qu&hNk9E{^fg z*#-T~XLYYGX<9QwBxP-{VcpG5K`YL>{x&@KDWtivgnd;N6YtrTEHRU&ylOPM%-EB& zdA*%lV_~1m=TD-OV!EEbzZ`jORmv{wLle(jvI=6nczv&@-Da(x_ZPBWeZ9TksOpyR zi9Nf2)Uzetl=A*p0{}FYx&%?Z}aDcmaSj- zqH=lt+0zj}zUdtJP$50TB7Kj`{p>%cb{jq?-FW(OeRx?iL!wnx8CTnrXO-@^ex7T4 z+k5{nC(jjE*O>JMmmM0!`|6LowjO`n()lU-;fEb!;^(vL89%MIeUZO%p^p>u%Knru zaaSW;Kl)ETm!>alef{gkHK(T6)yPVSAOCSCZ|B_=@$=r-*TuMs9n=4@@8#!9Z(cvz z(pJRd-9DSIhhgE5wmhj{6KmY|Tn>FV;m^v%l{06~KB-orYq6&Ckbb%<$HQ~~)+Eil zapn^1Y=K>C{onT||NrqZ?e^pL(D`MjA_F%v1ok!t9hwmu{CYA|^7fZOw-W#F#5pOS zqC@|T8Fk#W4}W5{47HoF{>rbP z|MHgd&zYv>b)g|%vT$3c`F)q8(|RRRl6_6X;?Gnxvp(_sygTiDs)0cLrMXUGT-JNy z_Ljf5x2@g#Yx>7rM%nu1zb5_i>nd({dG!44tvmz0TbsiCHvJX5nKw!QL5$j5{S}JG zR_e+etWmFe^Q~Jj}Z~kwZ+NBXY-4jx?sYkOsdKv-~dk7&)(4s9n>uJ?IM;7kj~+xBvg& z+p)FWzHV3b|I@qU?d|rgF)fUlJddOP>VY*Klk43LPnc(a`}a@q|DP{k{@u2^drNG> z-I?h>H*7MQ9{uIj_hq}26B2Llcw995+!bZ%UWaQ@(;h#1eBs>nUdEp$c3ryn`L$e^ z^fugHUH<>w_20YW!(Ol4e(rDD-n!$tfA>Axxopb%KMkKRdH?8|uukK0k>{2tY`!4J3<`0 z8{S=(;T8@!q|9D()iRo=(mk}dt$x}hu``p;-#IoR-_u0B{u^6l#-4p2{_NGuH~ZWI(u!^j#npa)!n(oT`{vf`p8V$X z>es}e+gB`n+jQ5I%;OK6pK)UL3|~%-Ig>8*zB|#(sr*dxpR!+gyX}hSbbIHbZKnj=7FUbN_j7Si z%S?-L+Vx{w;6%^2Z#v$tFq&{O1mG$||I&Yn4 z@w{g>p?ex-oi9e}Ri((j+1&6kPR^RsZqvQGPbKdf--_Atu?g8UC*7#_+S2Vj>CA@> zPJ5%OHm*$Hruy`q&J|%7&s*%D4>9K(T5wl*+%>pr`|$q{X+3KWo}lv@=3x>0wdcht z$Q-i{uJQaAb>Z`k&C?eYF)DFnAF?#jw{PD&{ZtX7Z@t8FspW4gnVWXc>4~}e^Ymq} zeJb}j76z}JarbVZvG3$plKJ<2%_Wv4sHo|k_Tb-C`*V)3ucT##%IoRn+HY4b?R+V^ z>(#@;xxaE_zO4=F&70Y=MD1VBU$f)xTi)+zaejL5uC2ZO-(T;v*r$2^?Mkn_%E!Kw z_gMXH>4>zA5{kAn>V<@|?%67>+##+wUG*T5{&Z&hW!538()BskASg`Qn1-iKlLY3(ol#{*>4Xm*@zXUifrrbG^|?A@MDy zo8uk_aU|R>*jV#~Vf(EUf2Kv}PWja`;gVC($>vF~?Robw&#kmsp4%&MCg;`GrpVJa z7A0SHMJi_9Pnh58sA4+T;){3d+AJ-`ZR?gF`DFfm>Vzu>OHXub{w_P~YwjtWmi)BQ z*Y4qGm)mc%IJfoB>+F-=mA3Qef)1Pa^^0cx^OCuuwd>BQZSrB#m$R#PU5TBvev12c zzQFFa=ifbA{X35(N3Om~;{Lk&HG7?V;vSi_AG|Is^(gM2o6lyGb!$znIb!Fv-t(T) z{dV@`lxe*RBG;_#N9c;K(RxZ(8Vjn)odIKmX> z{7OAv?;P=S&CG~zE_*h!AKJ{h`PX8VM~=E1O`DBB?6F!Ex%YI5=h9%oEp``-T3^bX z%Vzv|!AWQ?%Vdp5)}j0&-%|c%usP|^-5`ATU`j$$<*cu}moARnwlZo(6wikF@0V#U zm|k(}RoPIWqzmK&on+`35QiFovi%+)DjNM}|NJ#2T37$r{V?{MtJ(DB zUh1VM6)@coSTXbX#-hhU-Ir2cZF*5J7~y=5!8&4F{QpDAufBf!bM2q!o71erT-TiN8O}op*XU6}FzNfafxlQ}4bj8?AdWG|Wn@4tE+++|9^Vc^bzO?_G%a$$PQwq}?O6KYSeGMR;YKqcSx9c!P@#}pZbw4 zUp^YHe%MmN$?484dr{Mg)x%-MnMZHBx2Op(+1lmnX;Odf0At4bJ$wRwCdZcklD0o8 zv-YL+oi9uKHD+%A-6(7l6`cKzCo zmCqLJDL!;iCgkxgj)!~KFz_Clqjl@2f7X`79Dd2&p3}>@+9v zxN_M`%}YDFdH7}|)gQl*`F!8IE%m$W>ngwh%Y3sj{L*=!-=F_)@=g@IzdDV7(~a*7 z+iJgGJo99-gLCq9SKCGl>u3A9nvN}6JnLnt+L6uO2B&==WlVX++OEa@;?5zv87po$ zBys5{e!*a8|IzdMe&mIp-V1niu&w`_}-YO6&iGeMU|~^h3||78NrK>c5(f_ zIn7BqUCYU(M%1u#{j%6YuG>U?B`q#LZ93}o-ckG7K4yj^n;+Hf-0Hch$FZPCB;~)W zO@c2*}GTGEt! zpRHxN@aTEY@q|X_)(+mJ!}Yc{_hSzp+n)uL|v_nslF-w%+$>-Lc$n&P5_e&g|J+@p<~9x%KlqV1{)6lD5}yZ#YZg)dye>2 zv^|`nAGBwtQ%2n7h`Z(&#U6i8lm9hml5y0cOMmBS2ps9u**N2&+KS_$3%A>6JY#2+ z*6jJYatHq3#^MPJ`~B`t(P*x$U9_QQ={qjZFBiA{ zI=JP|BvI8R7E^_%GcM$oJ9q2F6`#**lnlftckRw`iLVTrZo52g-cM#vSxqaApA!x` zov7J3M^ako=Q@t4@4jZaLYl0XAI43a_BZ9^hrgcAe1{mrl4L_#D$n@+t{2>N<&3or z!?MYNy{sp)%jM}x|`klhM@1Kappek4X5-1Bbf%_9{RD#kH|x{^<(?z_3D zMK7{&&C1Mor!Fpx_^xr)uTd#}=^b-+&4#;Po0pw(+a%X%uz%tahQE?kQHPf-ep53q zXKl{zA6fstSp>gK4b!^4#(Vvmirr^#)<-I_d#|0o$Te@0t;*RVNiWyWDd}<9Ie}*B z`HnkeCiY$xJ^RJ(%D;xdJ$3EVFZwAooVGlvp4#~0EB73Ot6m2-iCx>p8f|*+;kCSp zdWUt|cJ5Ji$~rtfk@?%*upipx4Clo=SBLiHNuQ4Oc~{R^zhu*)qImb@xP-$kJ7Tna zFKwzX%X}FUHqGz#{mEx-)5;Z@l5lY8NNT>_FMeB`Z&8% z%UuB-YLe&W?T+`98h?N1>)rO`XTrvGscY6&qKoI~9?sW0G2wR%ON7zg1<#`o6}6ve zDV>+Ebvs%lsB&6==JiSAU+Ztxq$&^1x-2Lo8m`wEcxm zS7?QJ85ZkIe-W{*zvNn*OzqMSvrZ`UFic3@W6WKyUayc<9in)@!m4!VI>zG?e5Qvz zSSI~%C@GY=VeZ4J&En)8a>l|*o^O|;f$9Gb>Z*zkBF+s<>l;q#@}@>D+{|%da&EsT z+x}M*7bOIJPOE=8$H#FC>u=S&QFmA!MKW&*m%C|+1e=!}yLe!RX3{zKLZgR9T3uNN zT+2*tj(8SlCcM?{j4iwRg-c?C-!=wC=bum6bl3CM^~ny)ZeP6{cmK^d*_ivUzST*_n{A9<85*`N@6YMw|8M** zi{;<3y;1Ph-RQR;YySUyng9KNp{~+9^Nv}Nzy6Nn}ufEADg5i(LGtxX6 zVm>}yzj0mh?j{aZFDLao>yBH=1lqdJy836%^^e6<#9nMtJ(ys(Gk5jy3_*K9_=aE-jK!ZTNt?1Ud99Gx=>%3U!G5x`6&WZb~CWM?<^nAEQsKh*B zU#$O?AkkSLu58`A)TF~+ol(`@C};VuWwFn<=}B&M(cY5Xpm}q{Ujg^-{5kKoZmanI z`0nrceRVsl>s`MzeB_L%K66c^Y}IU@!esyN4!;@qu9nN)c+7uu_1B>H@245%eVI}} zZIzFj=jzv+OrlnJyxF9s+SGmHe$cPPBo_BQbvtu^>CKC_4ya!3_576FpCfX%H*=)z zUs?)V-24@PWj$BbtFH`S)$K}reo4=-e0|~c#yNrOsvhMw6+Bq)Y0@S0=-(bjX`$#E zPZhBj?|)S;H~w32=*ynQ7dwx2`K|qQ{O(+@irLd$8yR)#|GCYI7Ljw>^y$Wm=z=Bu zsa85`Cign-n|{4qwM$os)9C?U?3sz7hC5W{)AznC$+#BZIPGI5vzGO_l^Z7>I-#PD#O%L%DP&n1=4IWh%p*l>`;M#N4dVpIQgh<2W7W z-7n9~?|GqbQU6v%Xl=*J)f_#?Brh$m{x?^|Dm_|w#X}uFzapL9=M}0f3Qc$PwD0Pz zoaB_s6m*I4OsTfODV~js=FGXMW|TjXamlS!f<;S$jWxOVLjw<$|V*;s$M(wbcwfFNqd7L@zy^ojIh5A!-y`FU6pfrF_HaXkzj5pLYz|zo?4+4f<>W>|o07^RIW_AGezP=Y%r=<$Xrjp1rkBh| zax-lBIYgJ9S`j$wmbh))p&B3Mlk2J1jmH9LZh1wav>4wCVJa0ZB0IIcl2Ps{>7A=dJBDj=Id0euGF~5 zllRbX%H+1UHzWn5Uajomw>!C_!>9gPb7oQtxA{-Ggy?*s>CSg$@<3RTPOLpy*@fChutQ4jREIZE~&Fc{sq=OYHuV% z3f)ee+H#m%v!lSZWoi4J^Pb$FHkBCaPk2+wp?t7)`6-k0Dt7$`Z#O=!6|m5XuD$Sm za%iv(_p8!$Hjz~q{f>4Vs}^|suJGWs=%WV=>l?q$Xeyt+Ew=yM{C9ORoyVn=x1DMf zXHMr()A4NIxaHENh_zCauXKM?bG=z+)jc_)v|d2ZGxcA^&O2#m%^1JMNEkCtGPL%1 zGU31U)!(1{<==(ru`s9cgC}MJCiFA|h z{ApQR1*YB&_xu;y`KNcg*}7*ILRO4Yvuiky-nhUbE1aXuz~wPhCBoM4*xwEO(++V? zd$O=x$XN8$#~t$?7Y0e_`DCdFZ%>U3agL7bp1z~}Z`Hc^>G#_h)#^9)&-wV%H1kMG zP^ZZe$qO3_7xlWWkv`pM#~Tq|BpSG@(D@ceNnKOV`^%3X|NT9E>DDcqubPM5<>F&m zw>MIK{c_Qd8}v%$&jhbKnHtw}sEF^0*oJrKLY$A=m3F9iOz53@Y?hjXi9FZ-;|>?T zH++@49?{5c(3iZT@0m}JtwCyay_$G`abfCB%eiikCv1N-vDEF}Y)QM~-5+b~_v|=P z^S;)8`8P#(&xPi?|M}X4dv44Az1!Zt{=Zo7kM+5$5+vF!`lMo}F|yZQ`Lq7UvX9){ zn^&*0D6;9&eEe%ei*Kw{tBb{}kGIw4`CSN)Yq>0*vDo+e-&+6Ir~f{Vn)WaL(*4Z( zC5KiV-2dlfqy*PT`_*R_iEeb>>bSJeI^}n8qNv1;EB_Q%Trc{PJp2D2UMKeV;cPpT z+)eb}We55%;NBG3G+S9^-;S#e{WG`)z0dVsZkp-ubyMU;S>L~nn`NH38lE#XeAvBA zNAb|B9U-?o+56O_v<}JT&VQLYbD~Q729C>%r|zqd3e^hQH0hbnDo;&IbuHEVMWHb~ zRZ~2^`CfX)5oNwm!m_n_qt$1X7K@(A0W1FBy_BVYYOlHWU%6eAe)w+W%t#emF)OZE z@z2F6+l^jHX54>rR)Xbq$lcolPdwDBAEt@P8{WJ%Z^PEwbgkktZJF@&*z`=MS)1F$ zE!UQQ^HQ=j*UfIcA^-Mu?ZeZjjDMHC;wh;tk4?8-eoxY6_By7+sjb1^eJ6S9N?hRm z;~B*DZMt43qhh_enxRX1j#uZ!k8-CENH6N1X!+2kFP7ol$!p9ObA$O8ICoYxyq>nj z-T0BDMBY|DhIboxF|-EVU|w~l>zLhyuXi>|9Nsg*R^e`ti_zk~i>sL>@@5OUU1MBi z``4q+c7C1Gw;ulZQ-PJ!-|jRz7Wn3*`N3Z`!67H)ejf;*(qCKERzE!@c=w5vSt-v{ z=66mEDVi#gHOse|N9)*$Rq0aQ9G%yHU%cL5em*{I)tTV%qRs1`q{W_$-8Ct4X}IKx zFXyhTF%Et0^YhZoM^|PZT59~$JN?tOnR`mr?psfuZxtMp?iHLq>8*TRNXfEg=Ts&$ z@@gDjYQ59DylDEnC;E3!etoABUw<*l^ToY|x2}NDsVfUVfzhQa3ok8oR(&0C(kf(E z$%>kn0oNw-%$}9WWnQWwILl-b&t|=+da7k4Sn@vK|87SrCayTH@4NrQ>c0N{n~j`r{Q1T55>`); zihUvFRpG4mS8(&3FRy%SYJUFFTx*$^ytKaZ|24xc$5Jy)6b_39Fz&J3#p}V@tX|Q; z+I`^^ql5b$4kf93Yb+(Xy%+>E&Q*kHCFF<{l_hd0bM~J&qnEAt&{BB!;+M?IhD(m@ zOnz0LwLU!m)Bbn=%D#X7`}y$nqeTjL3@Y7f4>BZm9SZ7^%}%;3(&)ZFh-dE#pHt~C zZ`&@aKYq2z)9l}z%rL&kMax6qt=+7$r1qTl#72P!DT2;DqUC2Rp8r{6wRxUx+^g~; zBPq=@4_v(SLZVWBuH3fdvf1QmoweD!pW3WV(H1*rFstFg)EOTx^{nDBiVjk1%{XbL5ThUOp|r7C3VW>)Ush)u%4qJ=Mct$bP*3tn0Iwt)B}kguJy4XGKXm zEsEj)rXX=i)Ox=1bGyibur1XOUp)=Xd-L<}74g<|c?s{19*0WatQtjQ>%Bf#TqGt) zWF_}$UysuhVSV%T&@9cpHYT5gQYzQm%*nm3vSNmD)1QUyHFIn)g;#%^-XDKWUu(CY zk>&QrCe4#7A&N7C>V1<$7jAoY^k&wX^@c{*G`=00t5>CO6IUIfzV-DSqvTs2rf<6o zjb)yFY*l9F6!Sgz<-|vW^usSF-ANL?sv7S3-tv>ZYs90BJ3KX8z9-2l=7O z<1WX$s*=k%&y`fG+TECIDd_Tb!j#}0_DO9D;W^Jlla1aUPUG5j!XT|sZHJ*`VE-G1 zCyL+C)Ljamw9-DMv@1y9!oDZ7cHO`4In(@4%@ZMy^3KVVH>;d6+Yq(nXO$Ws+qq@U z7kAsHw_``VMSOkQ^QQ4sJ@@{$GHGkruFQ(b z`HS3778ge7q(9ZIE=@Sr&XxLD_F{|X{1D$g&0DumGrDqam((Yly_+pNt2S=8%xbk% zn{%{}&3s*Fz+q#S*M%=0?LD3NX~x>~mapf=yjeYe^Yu)oz%}O`-$z`Q`(m-@;gp)a zHub%W620AebvsU_F)ytW-YvT-)AqdNX%jD%Ggb3GHtaQATJyg8jBmvA!#XF6GTj!1 ze-}R1`j`L7yA;_A+!|-(R@{-@y+HoVl`WbZ)mHYbNN*`U@v-Rm`u@QG6+d?bF(mQ1 z8-;$cTU)87+!kUpggw99F$xP`|qR z{!h{K9V-(U4{#dCJK3IOyqwG{^-pciE_^HXJrnU;!+q+gfUu;x~4o*$=(qLZ95UjiJ(jIP2maTW9d7nBz zWxo8n@4m#rhdGzJ8cHX!6gnLBf8*yd$LsY>&5$t8g2<^S7Hyt1Kc)O-NZPvSYPJoF zj8qIW?6pHb|9DvcbI1JH!|Q%a>z~~{{r7%-!5y(|62Sp_R%dUX`?xaE>eSKYDyjjz z_pLr3^JwHfvLxE7*IDd^kK!YZd4`3htiKdP|IAIvT7NKP`l>|5Sz()4-_G(lwQP>@ z`NkEBy0t2+(_Eb<=p-ylXj|;G>E=Cd`w6Pe63?F+uc}e05Iq>t^RB*YcG0$wmFtAk zjxL@XXO%v4%fx;AIuhfKxu5eEZAs`^)VX5z^qV%vPv`FWbztAWU6Z8LC8u}V?H7+@ zIdUhNACD{*#KY ze~uR?W@pp03#ujGc%^tRsBk%# z9-VQl%v&u>QatrsnQ89yJB+Tgo(3&dvF7|Jar|h{t9M6*RNZt+^+WCa7VVv|WX`e4 zC**xKCog(5Z)g3-vr9FdlWyFz>+Af{`_6q%ne2)tYsX{pGYtG)r)d1lJh{N2{KnC` zU-iwOW#0Wxw)^~l{kI9z>uYxYUn~0jzwYCIlcyJ|cV4QDlujQ|@ zEmcCF-TmEv-hcl4`kJa=sl4iKW+rd9$@r(~)m_x6S7AKS_*C_e_Vgb$-~V~#WgZn= zmtWX%`0M+E`F{H^7R~1o|Rb}znL-51Kgmvza$>xlY<@;z*uKg#ySAHAHs zXv$uOr z^v78og{2OeJt<0gfP z|BCzH@Wz@`Jbink(~skSx9*Xf9rH^`g6sH6wdB7aZd}`SLiEq5RpLv)yE>>!cah?)V zEL|l&|J{2#h9#f>C3ZSb{VMpS*_x`%*!k=5^ z-_JS2mcV8azEnZ=w@b%y6^+k^vlWyNJ?oOtEa=r&oG|qW7$?em#uUE%pRyfxb*vS6e^x{~B=gyk%7ptUXstp!d-^#kk`pe>N zWe|6=dvuK07m@oVEG7H%bgm}+uDxHaQqLn3Ep$TQi~1d>DPPaB-C&5Szs_}$E$d~1 zhnSq?X>aYrXSt+q=Pynds6T45WVU9Qn+$jB*Bue7|26HCT^%;flv|xm;rR9mN0v$M z4XQ|~Ixvh=Ze>g3G$^=&ELN%tWEB|c7I*ai>non z`R?y|@vQiNT==n_mp-i&uiM;S9BKFY_4`AI`_Gr3{~r;$Mz3_$<)CG^^j+44*V~^; z75><0yOFV=aEikzi@OaxjSHG)gr$FUN-gTDbEw=M~`O()3 zRZ>n#XZ<+0uD*G7#Wk*&&p}UQ%>~03edtU2@I1Ts^viYY*w5L7Gp#h@eKKj{!i2=j z6EN}Eoqr48`$c;spI4Gz&&r-4$SywmB~Bd zgocs|f4dQnEblLouD-o*euh=&*P8v~&3{;*9-p8RG>JvPKeYbT^7e(29_MH4UDD>y zTIi?M>fmi3cSYsJoV_0_%$KuFKiE{&lUrZ8{keY4J~;!Gnh5^frRy>tAI;hFk~v@& zuh=`I2#NKXg6E5+eogB?ak*0c+?zQ|*Q<9{K8>+CyM#^iS@E^5d0rvjo0h~*U9$M) zrTb^zE-d`@TCCjmMEI`OkMv_!;)eb^_b1 z&KthZyqt`+4;(pgne$H&+s|3&e1DnhwaZvlmi-KPzC7yGlRZq;>WLS%b5?Cvc~V=vhVcd=Na>KWoj}34zHP{o)?a z);#0jG|TuAcX*0P!Pf=NkLvxl`Rx^sv1*f8l+mKIcZN^(>Ox_sz3yxW9zHzT@Z{!% z3kO!8y7d0Rr)P(66y;1>6fO`pkC~Od-J_y@XPpaAzP^a&q_(uu6xZ;a_N2-!T?`x8 zmo1)QWUADd{^z}hL9dL+(q)dEoHrsOHcI}S8mGXlCo>R;SC(|6H7x4q5QGppBnabsbkp705Vpo#Z{e%Rjrs~N4E(5RTbW|f1W71_w`D8A(#DwDGYofm(%=W)g^a`f9>PB zkQ{b``z^Mjxj#?4R<=r@D0^pXkX+5Bch2Tm52nq9#AB37nzfBxiB5 z?fue~&o#ZdHK%%C-gou!{|^R7442HXxLEIGT%ElC>0%F6zl2$hJbN;JschPFrvAgx z_jk?&`NT7-&1<`{muJC$&-}W~FPb(+OIZx>-#qY*J-#e|kCcm`xOq)J+Hls+rdF=ZT-*n}hwaacVse0JntN#7%d+pbrYoBMZEIKmd ze5{t*%sFjBFC((J4(7$JepPfdAnC<7rkBr@j7_F5)myst;f-s~-xrs%wNF`S$hP9# z)zXxv?Fl-m`qMUDI8xPExow5dwljInk@cUr_h06S{*ixUcM;>plSd-M*g7?LlIKt`jjK!`?dpk7!JU_D)`0~hoIkr~fNk;Q?r}yEWd}-D`4$ijImr5>* zkJ6lGoZHBHI_TE!2e(fYpSTuKb~^M=F!imulHv z3LZC3XE|jBWvSOmu^w)bUUA1$djqS*x{ph~P4NG7hS@>7{$$I9Je$p%%$N_v%{XqM z>7g2ITy!e)o7U<%x$=wr-rU$*Fwtu1sU3aa4oq4SW@YE)t+{NTuuObW$J2K!KdKz_ zdK%03XZoYO+R2aY9@~p#ADsBh)H8GD|9LuhJ+wUkYi6Wd@v_ZTiCHJ|*6U-@(j{|+ z_&lsE;?^zEj_Eb?FVC)j%c1k<{Plgi+kY@Sya_hn&Btf6_y5x_PD}HL9W~5J;Y|tK z%`-cG<{dtJX*ct7$Bw=0HUuB8WZY0RVWHI-#xNFZ%Lw(5nWnw{+3YNJmd~f|eer4P z$txSfr)A8`d-%;nZqJEbEo<8@4Py8cU9t@RS)k(^KO=`J~C(K22G!w zwsrOg#M55rpD_>*{<${0{(sxPJ?>xU|5WN-%ff$W>A_>F)zy+wtCbF_&bYJSPy2+M zOWD*EeH=rY9{E0AFZoinaIfE?yADqBQ#aNxcJbn3e{8h>$tJdf#@K&a^Mr4{a?>x` z!amiKOVBt(+E!d(&{f2gy-cvQ4~2_^7OiEW9*SDizoh45=hUP z^;B16$-2T9pX~0uauW+*mUZKmTj{i;GbV&3bNvYUy#Mys_nE&huAe;ND$DWdiCNn_ znil7;O{hP1*l4Q8>p8o;tn`ivS)|>&BK)=bpu(=e6?#2_M^HRaGmDDfZTEpi2 z{a5$%v?S*#sxMzJ&*84W`zqpzm&L7XDnH*RsmjzpTj^)za70Ys@!BfZcoXAHF@5(5 zLO0fMZRuH^mg2dhWoV?n~#m^>>yyPv5bCQIGM`^ydp073=rjJgy(ZbbRf# z_$$>Sw|4D&XgY(_vpmZwwr9sF#W&4I_j3QWo4M&8cleqO^7STWZV~eiFtj{2SuM2O z%A@^;;ktlzYHL@!+PNBjKV@WnESBM%Y4hXW+mQu}H@GdoBNs2?a_7fijw$L(e?Q9o zwJI&>$GkjS?`Wm(xa!8q=dn`qWC_zp%k&@z zM*Y*rF8}`aRO_n!iGpkVMt8gWnv#zERP$J;TCi`!sjWLi7Yn(b6F-%EEAiJ&?hnQ@ z_`hVm+;igq{|8YnF6T#I>nb*PpB42Im(-3eSaU<;uVOcRlI(pHK z`VhhEtPvH;mWO6CFv;Iao*=aQ^zqZ0eo3ZT?HNsvdT%oOb3aK=N|FDRGGUWW($^dB z8~YS5OZwf?lGNs!^>L4i$tt6RGVijt$Xfil*}3&}N!R3%*E_e)4B5Mp>!y9jLd{J* zZ+#ES=Zae@#Q1H>yMDgh-u~WtiIo*P_6|P9-%6&pE@Bi@`PlIB31?-a^NlsfxP-r* zU&$%xC$P{c^07zg2I$JDFqx7D1>`S$O_!3l#iS9CG}_JU!15~md@GAwAo{2 zq}9Q`JEg@x3tX+_XU=k#yH@YmS~x+g-si)^Nmq)s6NDr!ZSvc+n~VcrY0Uog{et-W zeXDC)m%N?Q!6BCMFt+OHvB@gmFJ5NU{J8yuWz{mB!)s5hNnJCS(OdAT!OsO+3!gj0 zymcsHKKp87dF$N?C7Ukk)~06Mev={YEWrD5+D7g(TS&- zm%T{f>C-4<@4XqtB;gi-6^~!X={OL#nF<5 z&Y!cA@7xo9UekIy@t(fzW&cFoDeBpCv;B^}-u~&`-@~7O`(M{S8hNW&@O6k-$v5@z zw$tzm?&gg3N%?D*Ov$o%R_48?TF3eo0*t9d+zg}HS3o@bZ4f|6a=vq4iQrIIo6D-wv&RWp?QG-y5@U z@yhmU^`2q;QTWhkYuBld%v>iX{Pdk(s?1nnD?LfMlmG6M?R!e=oA2B0wW*0L-MFK2 za`e>l!pC~%vk&`urLi3^e8x2=Pvpt>y-ulzSSxm}XV~9Sv@!nFq(uTdSu!pi4|_5D zl9%P_UbZteMK<65{9hMs+-tnSwzkFT`&;SbTfLk<%v-gjQ7YQpWR<-B2e;pAJ2&36 zd(tC2MP;W~8)wCT#qQtyf49|ZwAjw5no#4D#+)t}_j5bjlm<=CL(H?DY22D(wdR^^ zYpiCCYrOQ$Z@-Q|*|Frj_^i3o^It8w&^;mU>Vt`qhi8hou5ULsGm8tXxwCru2P=nv zZl}b*bX~eJ^HkV{&}r(b*}vSfQuAC?^*hHw_paCc zZI1a(leo6t+WR8-d6jTy>#_T>SN~1FsW8{ERMan6=I~OFr2JI}Mcv>bonFe$ApPtIss?vUs#8Ckl&7#r=`q zU-?;g`3t@yf@l9JaJS4l^La;JXo9Jz+MS83m8v#d)md&)Fy&PiSbj#Oe)gReDpBgY zB}{D2nwHjVXI2)itYK%Gp4WKuACoLc@Z3zBt8qdn7Kz+Yt+o}&P_O%Pg2!ZO;rE4` zeWQ`Ch|OR?(LokM@g(rpV;{)I4%q$RI)^qWOo!J7Mj9*`n2BF~w7-t*#(w(}h`^=N;Zt~FVH^?H#a8~0~6hZPedUz(jUvAe(bj=lYz z+N$qw6JM5|usC_sbGzT9{R?jPZeMB8KfO#=U&;GEm#sxi$1CQEdZH~`iWQFX=mqYW zv#*zt`33L9|ID4{YqKr3Dp}|+cS(3MuikO0Vz+Y8tT2`{A-U<>zFgF*5!$VHlhKOX zY>u|JMc-X_Bj;e-U^kK1IO1@#r z`-;~aCMjeK?cc8K{;6!)3IXNSMrF%#XMK_SG3`eA><0?}Tx;I(OxIpvsK25su=u6h z>Xp&;OlB*@%~L1LJr&{hl=I!Rlj(b&Zn(?M;_&$O(^RXumhK4xFWbZ?|C}mtG-~q4 zLkqNVD?>R@lWt#Ed`{B3W#$Jcn%-rC%NsZI9 ztLOf?ob>ImaX6lSshU9}agNF|xy-U-r&}|e>@I!$<&$1NW%d!y1uJ%kE_$Y7E1cV5 zx$(*5liCYwd@VSa*-41q^tIdLrBKov^zWWW@BPcm7DgVMIrDkWq33~Oe2l+8o@sDY zRFYn5bn(QsyWuZ=UoH1q+qpM}_m$rTsYH9@jq^WltCn+l!*%k7wAIU?WnG`*R6-aY z)h~V;v2SWy{VqX!&!+migLS+&Om7tan0TSkOqS6rdF`favqEGKDo>wdTOZW!_T6uj zSip-pf+Y>IB@*??62;0@-@bpBpLYKhc;zC>eF87WzxUkWc`5v7q$ap zhav?W*>16DUH|loO|EB&-J8V{MxJ7=cR24}x%&5heMNl)2bY#?K`D_)Z7xNlp*yg58s<`4ce~m|!Xu{duiv{>g>^_>Y zY>x4r{50#)^^6x1&39PiS9K~~<#U#(-C6LlkIGl1>^!W=ed1oP`%dwDT*>RhD`u}=X2lmj{aaFx&7Cx7uT zRza2*`fFD&ZsGjd^^r}zI7ndEzQ@P&y=$D0oqQFszMki|U;1*l){o}(tuvpqO%r=w zwLMPp!EK#j-J6qSPOWa=dnnmq5#N15-9`PUP6gGyQ@OW6Apa2Kp}C)KnCHj6y!_Wo zq<+rA#BIy&rT6aE z?y9egJS%2;_QacI508Dgb-?N0*3h3HZ!h=%uK!*BpZoWHVwVqHVZK#1@5EDLdg=Ekt*ob(iURWI#$)8uZu zckGU-k!AjYRy-5_c6^NukXs^KYJAOYQ-{l%v(c=bAJt;YSD2UaCv@2>u zV^#gZt?3P`r4-J6Ji9tpl4+;i4a>f=%MKR2xwS2c{~AnVN_*Z1?Ogv|U;nZ2uV1m% zIza_*G$TxRZ)U%hbLT*5&B6H%j0ZxeTK6!&&kxHNzJFff#fFLYWnH!w%m+2pdv|2% z$H@oBd;0S)zh9Lf#?!j>ypu~>z&njb?S3UkmdUO45*jJ@Pm3ITEca~1)icg*N7saQ zw3*GC8DjO<;hU7Jm)MoreD@z}32o9TX*luawW5cuw)43&P9_iHt{GU?Jy_7NyuxpS zoe$qLm5hn$@@KRy?-+Gk7la>wX}e)(-?>LyPo?ZUkdl?LESI6+a^Sr7$2XT$9iFOr zC~B>T8r!FHtoQ5r-?aqn**HZ@Z^llKqF>(>o_Sx8aN5T_)6Mgza?8`QD?BZyzf4>u z-kbip!}dzvqa$wXkNLMGwJr%{Vqw2J{ltQRGJ(3uJShe~CzSS#@-4!S4Tb~UV5m~iHg60iI&zX0yEfVY#ru<-Y>)knnWzWHLaLArX) z^moj6by`CDt{m6gHLIZUfb(0QPiiH#zZcletah7w`fl8sjlchw1ooUc6Ob>OqnEWh zGQa-q(tV%Ye$VeSubkx<_`guf@^Q_S+QmleYq$Mh9)G?gStEaH%Gm=i9x@8MJ!=(A z)?a?-XpZKuKd+vD$>*1UH-DX4eVM!GN2B9seye6;Hy*v%Z|Eq|ayZ#4JUmzF zLih0-r}iD!Y=v&`shM-GcF_$t)klqqGaCJZ_xjXpFYK4|cPk3Q3vax6gR$Te%epN)dM~W-k+;mGeaG>EowImUCa4wmQmf z(TTlVl#Xsl*(-kb4r}=Yo`9}X0f$#5R0v%9CI zz6aU)J>U20GXMMe^Y_)%+!9E9JBxuQq5u7g+4%>PXaDWJ_+id8>x$0M=tt4csTr{o zHBNk5dVE7hXvnVOJ)J*Px_<1CeCcO7m-T(jiV4al6)TpLfdbkC*N)^BqO3wD-<8^GkWA-j>HzyuVj#dh?<1&&?tyvpzRBEST{(w(?e0!%N}M&0BKMM%44O zteC~RXafTWugkLuYZ*j2o<81Fv!BUct<0S#^vsmc+KQKokN(>**gIb`~B>yr*f0@+OGR&=XEP>a}eNnbueFR^OVE+n3>^| zsb(x9pIL4-&&ivyxQM^TBQNEC+dhx_ZFQI4hSmMbe0p70=j@}z`OiwdsF`O`{WWL3*SiYg zXujgWuh*Z=eH5?b__3P9JxBMY&y=&)HGArR zetlW_mh<3~CLxKRE^D_OO|EYfJ0GNY!bJDh9qD#&F)5~OuWdy~IKulRS|;#v^Yh&a zFuurh*xI71AVI1B=s&0HI~L^UmMq=B|NoaSZx3_bIP`vYlbqD-o%_u6)Tck2a=5k4 za@vVIM-AsJ2z7YpT~=|(h%?gH{aVaT;aceszKEs2Ja31jT+N#3kiW6)+R@Yc^pAwmAg&KCvx$+#eG;9A1|iMBA*?4e~zrr5ld~2$g+7R zGnoG@-RSpe!iSdC+_kTF3g}(r5lQ7e%@DWzz=e}RR$Gs#FRra!J}0bg+KKr5DCg-3 zuGe;o%lZdy_S|vXQieJCs+iBMb!<8N!c*%N^ww7AUHah3b*=OIl+Kkh?`yYow#xtF zQTethD&T2K+|Dh(-l$9FZ_D{FE2`2#d-Bq8iRafwr+35`>-j_ zHRVT4Z_K+=v{e2;wC5v>3$=EUE_VfIEael}sgoCzskvn8;!{sdr=Bi*>lE6gakBo6 zVavPu%Jr9@A4r(AWzoXEqqR}nXLOk5PhPcW^NVkBPfsz}wl42pGjk$e!2-zzwb~(* zr&gZ$6wa3Ku!!?Y+9{`30-Nq_4$*3I$+cdf|DKyU)9)YaS>K~FIqi2+e{NiHad)us z)U-&W7F+YGXKE{+z1Q_M{KheD(U~=@$CkfuvW;Aks&LAAM!n(Fy6&?{?U!sBtJ=#h z7l&6~Gd{Ad^Vy#Zd>p0~o3)PWe~Yue>Una;j>XBP!L>VV6!QCY{3e+(89uCH@VxPK zmG7))VxP_~+ZErt+P|M)fAt2lYj4<3OuPB#oj^mSO0-vC(e`sY*`gO$bOcshGBz-O zCX=(#&rv^Zk8Q-ByW02a-*XZQc!u@q~1md}`?m6;$;-vzKbKNJe@FpynAr^oC)aR>fbYh;z z9z775pQ;}BKD+Q)Z*4Qj^62N^XCFVZ_Veu-TQ=q^gcdyhGJEU&HG8DvZi+syZ~OV4 zapI{4&h?f0{jV#v8XI(()_T?Z%*t_`qc}4o#LdFMVAA>T!Yg9z-&bFJcID!;D~-ij z`xPsH|IB<-X>a$ZXusO7v^H~3Y02x=CEf?F8MiUze7(ma&BiUhTS4w)g-Y=4#|#z) z25TSd=|)ey#jV9QE4JWx#;%!VS0|_FO4rLQ=#)8rX?;co!{RQf7NI*yMF)!~o|*GG z?!?`+$8>vy7eVbqV&|+E4EGj+;gDEa$b

n)Z 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 diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-config.html b/homeassistant/components/frontend/www_static/panels/ha-panel-config.html index 0dd41d2581b..bbe911e4959 100644 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-config.html +++ b/homeassistant/components/frontend/www_static/panels/ha-panel-config.html @@ -1,4 +1,4 @@ -

\ No newline at end of file + \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-event.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-dev-event.html.gz index 4af3bed93ba641e0242eda70f26f59814a27ab04..3d3ac6f70aa8bf72dbe07752d7827aa4bfd91e8f 100644 GIT binary patch delta 2631 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 J)O$Gw1^^{>EZ+bC diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-info.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-dev-info.html.gz index c35637c53a865c05b16de0f20e998da0e90c4d06..50b91dba1161c95bfc7ae582306ef79d976670cb 100644 GIT binary patch delta 16 XcmZ3@xtfz*zMF&NOyBp7>`PbxE|mq_ delta 16 XcmZ3@xtfz*zMF$1%YEra_9ZL;D5C`6 diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-service.html b/homeassistant/components/frontend/www_static/panels/ha-panel-dev-service.html index 06ae2da147f..887d95325d6 100644 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-service.html +++ b/homeassistant/components/frontend/www_static/panels/ha-panel-dev-service.html @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-service.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-dev-service.html.gz index 408f974b4e50d04807b0c383b7157606b8e73b63..5ac8c8c977cbe25dfbb26d0e17e5dd893832d6c0 100644 GIT binary patch delta 15233 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

34ABP$BNjq(L{JLkq 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 D_tCOs delta 15246 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 I2r@DN0Ng>PX8-^I diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-state.html b/homeassistant/components/frontend/www_static/panels/ha-panel-dev-state.html index 1cc4b362708..37227fb4d52 100644 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-state.html +++ b/homeassistant/components/frontend/www_static/panels/ha-panel-dev-state.html @@ -1 +1 @@ -

\ No newline at end of file + \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-state.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-dev-state.html.gz index b9dea8501feb273dc23b08bcc948ca65df4bb823..bc975d427c00727e76625e465ac7535d38397bdc 100644 GIT binary patch delta 2940 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 delta 2933 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 cS \ No newline at end of file + \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-template.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-dev-template.html.gz index d663a6833245fbd2f4da0bb2ff3dbb87d66d2659..6ec343e910fc291ec2ccbaac54b9d5b6ad474eab 100644 GIT binary patch delta 7244 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 \ No newline at end of file + \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-history.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-history.html.gz index d7f2133ac54375cd2f9e0b9465e4d01f85c0eaa4..50006b9bb42d9689b8cf1da11ae94ad694e45aa1 100644 GIT binary patch delta 47 zcmewo^EHNDzMF&NOyBp7>?LXf9Qj;*`)vaw4i^-xzsPyKb90y4BX*8SOsbQT)-f;u E0N!B|^#A|> delta 46 zcmeww^CgB|zMF$1?B%D8>?LaakMsRS4jIT?&;GK%vG->4=5Dn|>>P@xC7P1fF)#oC D=o=IQ diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-logbook.html b/homeassistant/components/frontend/www_static/panels/ha-panel-logbook.html index 51ef5e1e043..d3a23fba566 100644 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-logbook.html +++ b/homeassistant/components/frontend/www_static/panels/ha-panel-logbook.html @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-logbook.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-logbook.html.gz index 23c8ae4b59490d28a524a45c9ed1c6647ef4a52d..49588c57be3aabdf067c6ae10bae4ed96e1c9f64 100644 GIT binary patch delta 34661 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 delta 34649 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 Q>PLLH>9%7mOy3z90P7Ao+yDRo diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-map.html b/homeassistant/components/frontend/www_static/panels/ha-panel-map.html index 013f27cf9b9..dbc34a17448 100644 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-map.html +++ b/homeassistant/components/frontend/www_static/panels/ha-panel-map.html @@ -1,8 +1,8 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-zwave.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-zwave.html.gz index 711692041f33c43684ea86836c5ca13555b77fdc..5696f89a83274e933a50303ffa28316d59c56f41 100644 GIT binary patch delta 5944 zcmdm>cT$gCzMF&NOyBp3?27fO=9$U2<@U;dD@iXtsaw{NQ)cK{aDbPM*=y0RtrK;f zC+%K-`Q`sQS25L(OXr1zot$4^y_OQUrOkmN$Zv$ zp8EN-fBnrR=f1uU=XjR;v*7QpHSfc=mquQCJoWLKPwi*#?$kW7@!!-#&tG5v`{6?U zh1cab9{){_{Jy-+=1t$*iThUYFW)A8qOhXsFW2wH@1b|&EsyS$zje6H+~WG~b-C@w z&$4CQ{=8xKj~u?g%d%b^-}86J{9Erb|9RVf__lIlZN;sA9<#3-SN4ZIZO-j}qf&8b ziCO2*+}l_8Z#&*-virFG zVBmb+VwDQFZ&y+!CzUjwcaE)jx1xKSrF@_FA=a$itsQ@Ao88UkOYOh*Ix-~anx{~w zN}#8Zif75B5GBvhNg|#>b5$mL7)@1ip5&wcF~(9QMwcT-kaeA7{j-xP^W4nX`qL+z zOni`8_@L9_!xN7e?3Z{iv8eji7T@`Jt#j7)+*gfqRr_`*Uc7ft=cC?>!Ub~=%FJGS zhc(5_Gv?(+lL)8Vo3`<6G4--ZtP6};YI;mL;i+BYHn+RSX4gAS4GcG(y48N-Bk{90 zZoEwlKH$aeJe_wRkEC1tv}KX?@y|6AsyDxCO_khay~b-ZpLc^wOUc`xmX-n1ys>lV zv+vSa*WMRmaLb9@~#Lh(tJo0D8aK2GEFZZP{jKe*ZYj9|FHSf@{mN01!|nT<+A3d8yH90EuS(+U;K;E%ukkE zU8bjcn1x<$x|8|-w7pjKE&qDbFmR#cbNax*)jzmV?K+*>4x|Uix`sX%7Ev=jeGiZ+cfgy%Nhk^>X8# zfOOYi^Z3+_?!;N%eyjb%KL35@_k|gX0(}B0e^>APuKoO%>6K`K(8Cqeiudl${rxb| z+Tfw0c{NvZcD~zr@!G%Iy7y)B_N{*3V=BRvwRbxIlzIDB@SA7VN4$Ukx@gDUyA%0d zq`8{!`8mn;L=_LyV*YK(%hm0Ay2}^vyWINy)$5|qTu-;~NbM`a_r$(z%k{c-vwf;_ z+Kz*F0=M|yZhV-R8P5M(Y?;aIzI!oM9$MZt*Sn_Vx_Wi+J@{`?@eUAebdv8P@oU^!IK%-sSea^qy%BOp(j~`}AGyV2Un_cgM!0Yet6=&?4 zl_U1M{`0r9=1pxThkY(gm}AEMcYnIX>$;tF&rw_=VXsoMe zTV8l#{gRX6C0{dl{Byr;Ba>17G2***WmNpUUEhwJJD0J)n&t3Yx!Ze|%le#{`He}0dh4MdkQfFoq z*?bT)RjRX)FS@0fC!QIic4V178qTzn#|g`DuH1n|s<8?Uk2#@)eJ*U$^0Zd!LhTk$e4{F7A5= zgifBG{^K9>n!5Xo-|ELzy!KuyIHmfbSMLAAXU^_gJAYect&U~)SJmLw>PP*rm=t97 zOjN~8Kl_}G@ilf$<8)eo%Ru^B7v55cM`R}E6`d`r{5~l^?FPxWNyuD4Z!29i+Xa5$z zirV_QuD!@RyKRkrPV)J?A6b`+OTONI|AVr(o__qJ>WN};`{vkPyrh*F<>#ZQ9og~V zi>73}b+F^Z526RRebVn`SKs1SZ@m7W+T6!I!YpC)*3VsN9h_c%{o2!0TQ@#*Z9KDd zonFMMN<-tw)5-1Ut6vy-CvMK0vgi1fq9xx~&%a++ztP6`dUTkY{J~?$3Crv zCZYusl2Xm`Uv^G%Of)j{)R~jK`(?#u56{i#rylK*bPCw^eS<;$b+PBnJBm;9eXpzg zoi=CF;~sI-FW+=G{oa|q?e3Rp?oxmD?`>W5z_UaN6|D&d3p$$4oKI6|Kg8WCQs}wL$$7^V z74;=vCN15Ze@#|7@jfhSQt&%f;g)ArCUcziDd*R&p!OY0G){h=@QmZ4W zJ1bwcO%j#MINaBCp@h}9`2K+%TeLJkZ7|uu;XAK=U3Ps!Ox)A7#-2tkey6A-aZ*k5 zif(#4?^x2aX?k0M<;LT24Rbi&oNFm|^l&ZqnwlmOCz|?F`>maLY^sW~m-Q+URYv}K zJ8h5r3l!KnDjfC~Ih{ov<|=)A`iEuCtH=5omz&zQ1l$fRoArFDTf?TqTTa=E z9#~P7Z2viw;cZk)o>R$9o)b1w>{*lx0im8km!SBzQNPm zrgHgQEA2d%ZIb_D*)4(ATF3lY9>JeSKPP2=dH(K7fJvc4VV(v@cw>E)z=ck}LRqd^ ztf{MemX06SMQ%2h#-BFC3;$pLLcD+ToZDUXH5AIin-fD~|g|*N96~3r2Y1y2f&kx<_ z#ZS7@RqWq7alXLyuHtf5xr$5c9k_^kw4%Rw(6~fK&9u>&QpvgyQ2j%r=8mxBJ*tG6IZ^L2rofP+jFMV z-lrCdu3#|V?tXbnmPn06+_WP>iU%0;vh=%@Pu8!MdC*pN+CXt07l-lh2|u-XA3F0K zo+7~^-!)%#W}`~Sk$o*DImH??Z#KW`ycJ;hJAqL%$Kbm9*Hasm%w|a2t?63em9yc3 zWxwivjai1wtSYOWq-B)nJe{PiBEcPE@9TY@Z8?X!XWXrXl0I?O$h_v(?mI?Xr9&-F z=^kR8!+*EFw78tn{cY?D|Fpwm{7*XG6|G)!>DI+SyR+KytThWYuUalFK6Pp7Jgx=N zN!xTUrY^qZD!Gbb*CAEcg&U>XCr)r-z3?YbYROct1rP7u=rxr*^d#Yem$GAW^-5O3 zw6+gd1s6un^GcS~$aG`=J$3muZszGzw+IwFNbESl-8%CMLpEj7bkX3i-uDD}`-U5OBE@5+aH(oIEvelM*#J51> zQHG=KvtxTWoRW?v>wNm8@MW#Vw1Uhq*0R4lCoj@C`}b5=`lA;tLhD4`+v`PLLsQr7 zWfpt2;e=Zm_u|i!cC3oo-R>gEC3$ml`03^wM^Z!mwwB#--4z^(8z?6KHst`k-=eD`3y8n%G*IB($8_PTXUD=kVi{|2xY%;(A8Xjib& zzwOB4maB=k);TIlz4GXAmrY0ycMdSFkKj;Ev8qbi{chD1pEWXRjrW&+(NowM&fY)W zN`&LY>aPGUwT`~KYloC(8 zTm7Y(+)7S6n>^eT7Bh8Jd~YJAA@;;l)o&)A@4hO>9p(3ky4+&ar9z`1r(CKHC)j zCnk$KMdkRXa=%pZJ*K|Z=zJIZe*ElM`r)nC+hycWum(7G^2S7 zb~-;w4YN6_e9hp)n_mwXmWUo%SNmu2d81jk-dbDfEqmz1p4hY?=EDSwEqb+Q!^sQk^Lqo8l%|);BG?z`2EU?$1|Fd)NN{IsJ+IqsBU!BaaXNC@}sc zm!~PR)Og3e^D4)RkE<=b*E;chb7k1GJGqPI^I`p94-4f7{0}tmzC9Vf zt?g#Dop`+TzNj~E6Z2JPiCJ@tdK{FC*jh4s-`d%tKV0G?|ETY3Gm755dn4QP<55}L z>*w{!ez5yer+H6g=i`)XN3#|(Nook(kJUfUs&BzAt5oD=*PhrJ*^#j`cW*_h zi%jXHb${lpRxZvzeRX1Jt1+&8aLXZ1Ay-G>+2emW8PT6V^nua}qCX{4U6 zt7T6_X2h#rD*UV0=enEsR9wH;nrFXRu6dhJDF2t8e{a{p zZ^6-@UpM`6+$C3Ezdtcj?b7*4+nsGqB=+{J2Yph1ym!W517>66>K(by+aDjVuCbc< zHdH)Dw`IZX$X`+R%eg0Kg{GeF(cnpnE1A76zBX%y69fOJt9j~rpVw~Nv-ro7zFR$P zvw0kM9hv!o{mHN6mO*9rUOwj9vi`K_Z#}8F-+?(SC*BL_R;<73?OOlm-|4B%$?ZSw z-MeazK4Z<_cu#Isb>U66!_8k4`Ij@BTsCPgdGB7eZQ@oh`TIRAk1R9z9^d9n>bKck z_N_c;Po3`F`pNaYoTcf>$=eSsxouaxXU(&2`}(7Ge>C4#np}T>&zI+zw%wojhn7Dq z_E-OV*FR| z9QduVWnsC?F1{r(HXo`olqXRzVw9IvatSr>0zQ*!$J{jAVa zx{WI@m`ID=HQl|Vw(U;MmJpo@esP{(yPnp)o_5xOiM1m)aNAT3|0M0xuBWyeIxd`g z-9GoXvB=BX{XxIZwmu1ZxyasO_dV}DKet}iz0dr&zPskA^Fp=onRj<@jH|Ub(hK@l zb<61-_u^moD*d@^;lNe zct4)-n!QNs_g|J%&SotM8Bt=zkNVG)@=5MXO`jMMzQAK?VVH^BZFS!28w(nbX>Xf! z@1g(ey+Hz}WdrKHoBw$1N}U=pL;O|O!8F}vd-p&8-;#5@$U1BH3_V9ZiI`}?7J=&5 z;GCxu7PYIW9jj zy==E?_o&V zpS6)ms!(jJEO+RiwXAV|nmN-`$Kxqaju}H$6O95r5?_9ReSs2>_4|(#NS?-MAtXR zX0BcFA?w;DkGcmPnv)Hj*Bx0@|CHmH{e_47-qr~+@!g0|Q_59P%XL$_#uxT_d$K}i zeaWG0KJ&>(&gXNV|M<2g@>NlDtUEU4pDOywY*HW` zW${0;bB3T@$db0D4X4Z2-T$=hYJA1*dY3&)-zyu>S0$)EJ1hU)#j%eyHzKf1!9C*t zzNhoU?>~B8AGp_komflh=Z77MFJqkN-t2Mwm0z47_+NBcr9${$bYKyjL%n- iIJl%IewyB;QtEn4KD_Q|eb3MTjJ?-?@0lFQzyJXHsDhJyaCl;yfyJCDZ!JKbdZrvL8)m=xGbbnoaTd-z*{N13SnEh6l8rOV^zVx+Z zN7VmMpX0Zm{PpXqH_PU26+7xeL&{g*UZs&yyftq9ruMgYcb@YM{_FPe^VijN6)Wmr zevN+f@!iH1zk+?`zWLt1Ab$1Zl``hcw&mga8|BO5L;qg2vj6T}edkl#*RT7sZ$B*D z&3fyb%^P*Q+sXTNvwtaO+siE5Rz2%)6z`tetQ7fqe9FzaSFeORhuYoPcEYbo-6w1E zjQiVSzeeBYS#r<*U+WyduZNFz(c6-sQ47>V}T;}B6_9wiuC)`Y#y7lb~SyuPj zO=l)Pkh~c@J=Nn9s~vynzm<#6-TqaRGp&XD%B?KHpU2tybL`CO)?VMdV#%dicfa4q zJ+=Oy_!oHe%-L7&oq?C5Dox)qnKQoNot3qDsgLMeF~h{_%_<$`3eOkLUHazk)ZIzG zT%UJ_{#>#->1DlB(owrrITfeB_$gnXa>MeG{r4}9!EPA~`|Oo#uf7*u)mj#t>p$tu z%0)IJPhYC+b9uB{#ct9MD^G=qELxroDvf?ZUMdT{gp@p2Om-3STr$bUL+GW-Mi-&g zDu$DeSa~WwV0WQ6*}So%7cjw=+`ry7MTOE(`kJ@Le# zV5>!etHO>Vl`qUM*)p3Z?b?<3ZBOZyegrA8Y4UI~+VG4UEoRNJcch6t-5XsQUz{uaiC+n~F^xl=* zX1QjILCMVrrza$SNzI(~wX}X7(>C+faS_uLcOPD5@_GY{hm*(kdGjYTZ@qXS^k(IP z?nhNGJXjYWE?%Hg7C3Lg|BekkeBY;-wWkMOPJWzoaTV9aeU>+Fr>B}19l5w`%5pO{ zjqIt9J$o}{w{Cl7^h8rnFk< zbeuP>d?oh8uR8u;;7#fKp|w-58btq?y=q-sd%f+u2TN^#`&_s#5|NaC{J_xYpZj2*DiX+9+fjQZS$c$z8T%8 zdcCAuZse)gUuDk{;C5L4Z%5;VIp()rrI&o(=zURc`|)iSn>SB?loea58{+3)*F2wvId&=q+4G9eS4d{+*W2` zxuVU>4Yu*6eW|$?zW?H*uOFZ7eswOQS#g0G`%j0LFE_ucSlsrt{^35Yw%dPYUpC~0 zm7JcfAK8*~Ou^t+f^}Kdqr*EYxPLh;*?W79$k{71Q%a_8b+Ub!>z99f*MhmV5t1ow z(r08VqqoaSyqi{bwICzWYxBz&=a#lF*>t3QvB%A+OB!A<{Ofmimr6`On6s7px9Df? zmumm|L}aeY_H$((c`bUzlB==4XisGK<^AW^U(3J$X+uL~@7{mM8o5o5JiBYnv22~v z?W6zh@2ULTyFl@)f$$ZT#b2HNzn46=D}LQCy>yf7>*Jb^U0?5D&XcxGx#R)Q1O4Re z@Pil1<#wldX@BiE*4r^hp(8pdX5EaZ`r&VE3yzuxh#TpCl2W@aG&^7N2eaiR{|EIZ zd_R|({QR`eiubzxwy%dLmWlU=?w`K=>(iCl{%_v&eEaQgaOdB~vsJeaw%l2N|M2tt ze9vO%?ypZj6fF8ZKcSJSvwVr&<-b*bOE}Z+*v|@J*8Ij9aoO5~=YDh5qRaK$1$37P z?v2|qeUib-?;2lT3dL?vd9-QqhPG#i&%ZTqjz2!e}D0txc;59OD}Pp+FP(>+yBI8X?M;1cdyCfI+s*@GUVaBADeeEc(il- zcDkO82{v}W>@zX4;exi=?)#sA8ou;0@BfnR8@p?|lvP#B(wbS__2SttHj16Gzwdea zSl@b$-IayaXD3}0{rl^5ad`Zi{eQaZzCNw`thz+vv_Sj?f9b`$8wCrz-@bkJZ}Y3D zt;PQvioCPi*68OXpO5|Abh*3d>+knJCaO-?-*@1WbbYfZF zfAU9_t*A)$KBXIB|CWAy&~h!a{@K<0OQP2w=Va18fBp4B>&svNty|kQH97fkH`7e- z(6|jDpOexyO+3ywpZ`MYv_olkHGVd%T)Oc4>iBy#^&4$`&8@@K%o85VUa7iTu(59E zJ((7nU(?=Y-MYiGJ^K6HMV}X~HAy}hd7~qzC*|8u&(h_lrWciuK+c>T%ef56t{_NSSJdX*x{`}i5lC=MS-q|XiDLH&b&x%}6MNVg4 z$2oOo_{(PjdoO&_JzZNgYwoAS(#g>r+V#zAZu`IK{(CTEhVs{-cYha0Y!dC-S-9+w z#VjrhkBvsN&A+&uTwowMTSe^kvb$w_B9|<=`TSJUF&;&Y+tm>>_Gf?oEO=*Ua(ngu zJ(ae8Hw%w-OI3YmyZQIh)!lhjr8o4G0L z*Y35iE$V-tKc&!L{C@$19dm}r^NnmRJQ|x6J|v5FNKR<4d$rVfg5$$hr%x*sQr9WQ zc+C+EIwp1KC`+8sw8pjq%YE`kT}_nDWv%-jH*K1+t8$@pOpru+q*F;pchRXW9Ky1X zHqFr~WID;kza`DxF=N*pwVCM&F;SAwBLgHNI@HcH9XG5u&|6;;6o1TND!Za?iaxKS zzvY{yiZMZ6H@%&A%sG*&@8HK$mVRib!jdJDOTCP_^gl29Fr}=&TQ7K$&{Ek@uH^ab z=kLfR{J+32>#Jk#$q*NMOZmy;<#j8z6o2Kuue~=Y)8F92o+I8j>#^$iWu?2TLt{1kr|)iL>ne%8KavYhek)v_sbQz91%E_kD$X&laK zuxic;Z(C7^-On0@g=5W_gQmOf<0?2U);ZgCR>7R3^JcfqWrp^OgmLl97q)f*w9& z^j&KauKoG)q7!Q@$~~lxDf+)rt3MaoulV@My{4)&lQ#Nqy3tkqzvT-5Qcd;8H9r=< z7FF5!=uWWXi=#(2KDraTk9*#h*X?$v|ENT6(6`b%*POJH+1ycN*V7>OGd~ZspS#F1 z`}3=1uJ2W+c-#}_(7T)Hr*fRLBYVm;6-}PH9cz|*PD!^qa+T+^#%bAL?zAOFC7T1< z>vz=uG4bd;C~%tbxc=p!_8sASj_?P^x9@O{dGyops^S;dNz1pGSS*ruve)vO+{b@b z-zn)}%QQ#L#6{;AFaO>!K{U&n%_S@#b5Rk)*>_J|W-Tq&6=jXosGP{mI4#JCViMUs?ywzP+TfP>NN)ZT7K=Asht_vv2V(4k)VEX5X=Ju2M(mYNkVHdv5Rmhl0Ng*^Nx~6C-1X1{!@4KlcjY^ z&MBSL?@Bx4VCQ-I0Gm6<@|jP#IFB)1^`3NS>p{*#g>yvBB<4PDE1Y#R;i1xUk2h|j zeMO%V7@s?r*Uvc2acylL2DgCwEV472Wg{#g>jXtGDxa-y2^3>luNER~EL^Nk9J z&Is(YQZhL$l&Qn4`ZXhAeaY3b#0QI}h$ZoHFh7r6S181GPN{y<>IMUY&Lyv0Pq-Dk zdM;u*bih+8`_NH?M<$mT5+7*rnm#;qz){dbtAS0;@b=S;j&{y1I^4dACL5vyW*m_+ zlG>s2`HM{X)Er-3=gfyw%vM%9Esk;D!K9+2q}jLRZuX;Rg+dt|dcOnNzL|?8^fi_` z-O5os^j7A_5zZ3J9X^ir_r4eN9^5+R*oN1a1Y*24PpH}@6L@t=>Xg@~IFpwzbzZ^O z`%vcSL_W^q=bkUJIaAH5UQX*wDUm#8WU{<9n+rs>bY>rAzQg#W zQbcdX@jEk~);X-HXmO2u#y(HE@1ZrSHL_59CfRy!FZS;SNQu%?D10CHyIpRZ1vm=TYTL8bFRmVP3oL_Sm(p;Dfd`azP)o{lO zODSi$e)R)y*p7c}a58+~(d)cfLZX*ntWTw9!}|s9x7CAWn;HU|4{fO`z=Eo^_& z*t5)J+o8t`i}dC$Ir(Er*sG|*dYj!-#iAv}R~@e?%Ma%7uSh<>`O%B{3MEUA1|3T_ zDR;PYrAxiyh}4gDvGz7o^!}dM*kAu8(o1-Et^09TlZY1zJ`cpX<%HU=wW_-ZU)%b9 zQBCT7mL*aRrXlq_u6~OYBcz|SOmJ}CkXJO>W!CqO0^Z3=llWJ-v;L3_l3?2<^KQlp zj-t#!7nc5)3!Z&X<~_)4#nmc$RbWl$3i0ZFF}ZdLKZL#o-M*Tiq~f4+?Tx)?!2X33 z8SH+oNzjko_UCLbOG2x}rs-Ta_Fa6)(03M&c<%m^{h ziO~T)%<79PGaNr^TvudVC?<0HxJv1zJF7&bmk5h{ra68TFz;CLMfXI{u?iPyq0G~^ zi|=^V$sBRabi5cc@%_hLyA|%PzrASJYOZNK$K4~!-)y?u@l|E@O=fLj3*m1j`O+2N z6&5BMELy(KYE{G`CrRxWtTUDCGq~nD%)T&lz223(mhr~`kv^(0^_3)c3zkfK* zDbT8U_FZIFwA-}yURwjRpT3d{n{xQtEba!4&YW9r1 z&x=3yK3skDp5C{xMVT8n2Q)r;(-`W#{pIalk&XRdrXHu%}ng1R+J%U;*N zyutY1S$^6h--*_KX|Zd>v?esxe7yU$D8@nP^o`dad^9$&tKP^qIdMo~dPqpdGeLi~ zi3OPl!tO{UPD_ud@SOXF(T%bCW$l!YKP{^r#n(0H-dp4K>Egvnb6&T0OuKE?9qxW4 zQ2k|>|4u8T@7rQzBSU@T=5t#a*)m-TT@q(sUcdav4(Fm1xA>z!+EiXEI}`Bcy6wEL z7QrVvI!`~<*=fmfPF8bO@&50A^3PsNp4gQ0bBndy?KbywZtoAIMgvJvkkVW*Rf}Wr0y|SI`~IxV&CiXLY-T=f#1?Xl1%TbZ;0E~xaV^``{!%C+veZu ziWh&vf9dOw`ro{#jV9Jj+atYd;jtIBHWQodCEvTfX_uTa^XB2)YJCa&dyg-7=B(fK zAWM zxTJcn#a`jM{ke&o%KhcT7Sx8Wxlw-cgH=zGv%|lJjDyvSte~({x&7y3^|KcSl z!gJz2h`oNhaFzJAmmBMI_+HP8^A34-ck;VrKOP|N}#wp$E?=HzIT?)yWt68^8l{MwCs_C)3D0c1Or)(sLg8-p4E^hC&Dm=vm2vK` zUvlXvt7U|^Nc7p20ej^Q`mT9x|MO=}Sn3@ij;FisZF;fh#?jZtPp%ycDs-@_(7Y-= z?e|J+vt|wvfo-l=!;)+|*J_As-e1Pj8kYBe%j@$2Dc}Eky)+kZ@?P5hk3nZg%CocU zd*A(#dlvshTke&~&Qovh^?iM|dt%|d4c9O86|rU1U;F;-eYWl&mSaD-CB4n}UA4aQ zxi;fAm*LKgvwQ99_tdFopFe0Qa%^IPlKaz0skRu~372oYPY;mWB+24@chd~v`jmCW zCqC$!cOO~B;_B7AdC|ukc9}O0vvHfmZJhdnuU_i?(x!-a1yNE@+)wF7)+NTRkeq)u z$|w5&iGQ3oyPnpkT`4oX+Zbc8W7@@5f$G=gDGFU82j70=yd)((ai;B!;-7yjxD!8p z?2G>LdzC!jU%plS-5;eSUdqq<Y1d$3}CoJIT3A{I5L zv?a2}PyH=q_DD9R?GRZxiTM<}*^9G$WnsN*#P9k(-W$>VWJB6^ruuZ&8<(~_9C*Ix zV(sFkUSb+)eKr%@uHC->?xbvOUiDFKiEpb#v=<1bd+y$N;mCcj2Tv8WSI&Rtme;3=L)YSg#$I~xepCf-@W%A9Qne02heqQg$aFlm< z%AvGdcS?`e3nXUAC|ojTD&`lltiSZkMr~4C!`1gUS&oTmyNRbTVZPbxxicVU{g)}A?AO(w}(B%M+@GeLXfh4{6skL6z! z+%MbD#pwP<-*}=K!(=mM!EE-`Uw0c$FtK{L)zp0Q(fBhTY&UcLKJC-``AJsq#O*?R z>(^g1sJ(BV>v;dWiG8_1>V1);uh=slsBJ0ucUj0#d5^v)t2g8Hz5D78-wvyPn)_ey zW7nPMtah&(r_M01zb9;&SroN-(Hjq`i2wVZ&JVx;=y`qMUislM z-|<&|vEYBvrIFA4-#o5&$f%x_x@~#={uA3|K8Pv1bF_S4ZT{x(e&0I|)hAckA70+y zACPj?@@(ws&Y+WD>v!l(ntrH%s`HG`SCcrnq$hrw-lbCNdQ9HE?qt2s&;N|gzZZA~ IM=~$~0LtBgCIA2c diff --git a/homeassistant/components/frontend/www_static/service_worker.js b/homeassistant/components/frontend/www_static/service_worker.js index eddca3a2331..cec17959a2e 100644 --- a/homeassistant/components/frontend/www_static/service_worker.js +++ b/homeassistant/components/frontend/www_static/service_worker.js @@ -1 +1 @@ -"use strict";function setOfCachedUrls(e){return e.keys().then(function(e){return e.map(function(e){return e.url})}).then(function(e){return new Set(e)})}function notificationEventCallback(e,t){firePushCallback({action:t.action,data:t.notification.data,tag:t.notification.tag,type:e},t.notification.data.jwt)}function firePushCallback(e,t){delete e.data.jwt,0===Object.keys(e.data).length&&e.data.constructor===Object&&delete e.data,fetch("/api/notify.html5/callback",{method:"POST",headers:new Headers({"Content-Type":"application/json",Authorization:"Bearer "+t}),body:JSON.stringify(e)})}var precacheConfig=[["/","a4f413788fb18e156f5303cc171b19ae"],["/frontend/panels/dev-event-1f169700c2345785855b1d7919d12326.html","3975cb76bc0b7b1e26416ca6d1d8e716"],["/frontend/panels/dev-info-61610e015a411cfc84edd2c4d489e71d.html","6568377ee31cbd78fedc003b317f7faf"],["/frontend/panels/dev-service-4a8cc058f68f737b8129196e3033ef37.html","e71181149bd7930ec846d7ce178a5129"],["/frontend/panels/dev-state-48d37db4a1d6708314ded1d624d0f4d4.html","ca4fa5299da2a6c7e595cef38a5cee31"],["/frontend/panels/dev-template-6f353392d68574fbc5af188bca44d0ae.html","16e3e7de4dcb93b9cb05486adef915a3"],["/frontend/panels/map-e3c7a54f90dd4269d7e53cdcd96514c6.html","aa36ba71ab2ff533f7fd3d0a4fddbdeb"],["/static/compatibility-c679589d32e0588becbf104d9907e96a.js","743c1e7f97785216ccba949543136c29"],["/static/core-4073d1aa7a9367ac39f33f43c34b51c9.js","7f6256bc75fbf6f98add338db973ddd2"],["/static/frontend-1f8de6ac579f877695ccd06a60a8d703.html","c24c69d225432c17b813d40149b4b7e4"],["/static/mdi-989f02c51eba561dc32b9ecc628a84b3.html","ceace2dd01ba2127f138aed71ef71040"],["static/fonts/roboto/Roboto-Bold.ttf","d329cc8b34667f114a95422aaad1b063"],["static/fonts/roboto/Roboto-Light.ttf","7b5fb88f12bec8143f00e21bc3222124"],["static/fonts/roboto/Roboto-Medium.ttf","fe13e4170719c2fc586501e777bde143"],["static/fonts/roboto/Roboto-Regular.ttf","ac3f799d5bbaf5196fab15ab8de8431c"],["static/icons/favicon-192x192.png","419903b8422586a7e28021bbe9011175"],["static/icons/favicon.ico","04235bda7843ec2fceb1cbe2bc696cf4"],["static/images/card_media_player_bg.png","a34281d1c1835d338a642e90930e61aa"],["static/webcomponents-lite.min.js","32b5a9b7ada86304bec6b43d3f2194f0"]],cacheName="sw-precache-v3--"+(self.registration?self.registration.scope:""),ignoreUrlParametersMatching=[/^utm_/],addDirectoryIndex=function(e,t){var n=new URL(e);return"/"===n.pathname.slice(-1)&&(n.pathname+=t),n.toString()},cleanResponse=function(e){return e.redirected?("body"in e?Promise.resolve(e.body):e.blob()).then(function(t){return new Response(t,{headers:e.headers,status:e.status,statusText:e.statusText})}):Promise.resolve(e)},createCacheKey=function(e,t,n,a){var c=new URL(e);return a&&c.pathname.match(a)||(c.search+=(c.search?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(n)),c.toString()},isPathWhitelisted=function(e,t){if(0===e.length)return!0;var n=new URL(t).pathname;return e.some(function(e){return n.match(e)})},stripIgnoredUrlParameters=function(e,t){var n=new URL(e);return n.search=n.search.slice(1).split("&").map(function(e){return e.split("=")}).filter(function(e){return t.every(function(t){return!t.test(e[0])})}).map(function(e){return e.join("=")}).join("&"),n.toString()},hashParamName="_sw-precache",urlsToCacheKeys=new Map(precacheConfig.map(function(e){var t=e[0],n=e[1],a=new URL(t,self.location),c=createCacheKey(a,hashParamName,n,!1);return[a.toString(),c]}));self.addEventListener("install",function(e){e.waitUntil(caches.open(cacheName).then(function(e){return setOfCachedUrls(e).then(function(t){return Promise.all(Array.from(urlsToCacheKeys.values()).map(function(n){if(!t.has(n)){var a=new Request(n,{credentials:"same-origin"});return fetch(a).then(function(t){if(!t.ok)throw new Error("Request for "+n+" returned a response with status "+t.status);return cleanResponse(t).then(function(t){return e.put(n,t)})})}}))})}).then(function(){return self.skipWaiting()}))}),self.addEventListener("activate",function(e){var t=new Set(urlsToCacheKeys.values());e.waitUntil(caches.open(cacheName).then(function(e){return e.keys().then(function(n){return Promise.all(n.map(function(n){if(!t.has(n.url))return e.delete(n)}))})}).then(function(){return self.clients.claim()}))}),self.addEventListener("fetch",function(e){if("GET"===e.request.method){var t,n=stripIgnoredUrlParameters(e.request.url,ignoreUrlParametersMatching);t=urlsToCacheKeys.has(n);t||(n=addDirectoryIndex(n,"index.html"),t=urlsToCacheKeys.has(n));!t&&"navigate"===e.request.mode&&isPathWhitelisted(["^((?!(static|api|local|service_worker.js|manifest.json)).)*$"],e.request.url)&&(n=new URL("/",self.location).toString(),t=urlsToCacheKeys.has(n)),t&&e.respondWith(caches.open(cacheName).then(function(e){return e.match(urlsToCacheKeys.get(n)).then(function(e){if(e)return e;throw Error("The cached response that was expected is missing.")})}).catch(function(t){return console.warn('Couldn\'t serve response for "%s" from cache: %O',e.request.url,t),fetch(e.request)}))}}),self.addEventListener("push",function(e){var t;e.data&&(t=e.data.json(),e.waitUntil(self.registration.showNotification(t.title,t).then(function(e){firePushCallback({type:"received",tag:t.tag,data:t.data},t.data.jwt)})))}),self.addEventListener("notificationclick",function(e){var t;notificationEventCallback("clicked",e),e.notification.close(),e.notification.data&&e.notification.data.url&&(t=e.notification.data.url)&&e.waitUntil(clients.matchAll({type:"window"}).then(function(e){var n,a;for(n=0;nld`Y-ozMF&NY~S|?Cg$SQqO#27)cErJqU_Wny{uw}r4iZ1w|5Et)#h4$T`{{$ z>45s0ETiwsW}4;3O+Nm_dDiTM$%=*xJ*Kw2*|F_^wYZ9^_p~W@{OoTqIVP1CetW}Q za80)->axfsi{QQMmT11py3$m+c7D-LhOY}Xqs8~kW;?TMWxbm~P4nw(Uzs*HoVu%X z<9EWz@Z<4oW`8=j+j{Sorqvg%4J?}H=jN`=3Vz{K^!vjbA+66-rZ0W)X*T!1k9j2* z56mvzedFA{4|#W6Ie#^--|_Ir7H#zn#rqz9ZvSlYboOh}m;-a`Q#?O>J@sZr*@E4h zJsdgN3ii(yt+SYYHm-ZUf^U6)-2YSDUMrrZ6_%ORXuamL-8gMo-Zt)Y=e`~JDb*9R z<6O)7F3LtNt;G4_*PcpTJb8U?tmVJ;*&>%j{=a;tH|KtX`GuZ2#l_EmE(*IY{=ee;uh9C0 znZai-cHPUIzDIJc)P!l4D;&i?-(2p0?#RcvJQ|@U%S?QoCq4I4-O1#obXJvB?)bTM zdHXBA>CQ9KQvSfI&H(YbVX0-9ODxmw^n#gHtFBQ zqo5SDLg)H|6bUyarJ3hUt}nm3GV_w}tlw8hA6i?Ew&Z-mrRDbbdhXC^obKIP<)%r}`Z zM@`IKtQViN8-ZR3=zKi&}%%AWEX83Hm(vgbV9)uBCc!xT=@ zi8h`gN|hR0Up*CCDIsi=yz@d(_OzutQ@XeuODBEyd3W-zf=SYUXE1a3)=xa+qZ%W;P&7{~bk;GO(;7bT^_{Msl9SFjGy5crY5BODMq+n%i)M;j^wnqGh@P?D`yS7w9X%z- zE{M-qTH+M3YUhD9$_Coc3@_D$MhzSQ5{s%|Pp{$A4V&dw8>wXS zhx^!HQ#-| zE1_^!=$y+j(esxzdM?(k>`)fX^om$B(SQEmbtm>b@}6P&_G(3N>9Oe-E8fi6tvjXO zDkC8-q4ky5jmgb37fdw`t2+MiPf}cBPtxkoZRQ#m6MAb-ZoH6`JG*w)pM7Sh^(UXV z3xBmf;$v>@zPdQgA9lO*lX4zzzq)?bO{?Dz-*W48T;8|-;IHS#@o+Y*s= zP*(W;n=^ao+s&6ef1Gbg-Sw*>*LQzT<=j)nt=m+8<IiCQ}_;IZyw4Ou&}>fQQFfFKu>t z)=>4}v(xTvyPFqI|6CO;-+H;$NFqP`N6G8m+u{ygw5zxgeLd*swxdzD?>Sa|llXP~ zM*F2Im$caj57<9q)itX<=DK9hW#8W)&YsygcekF`m6|us!U^-Q#mFc6UQs@C>_Srb zf6YH{O8@@%jE#T2=+=r?$1`p<&xrU?b}{in`@iXPZAByM^Cns@6hzTW98a`&s- z8XRy+PrK%@|B!ss!n*gC`@LmS@0L&A$tF{;_ma<8UuUJ(5s}AY$;*#q?aG#93EyKN zuN6EcZ+o-ZfjOZ&Z$ByjWl~zvW-a-7wubB1ck6u*uV>EDo%W8|q}e-e-NLOWllc#< z>Sii2K9r!mqIom>2i-r_xwY{>%{gWr`YX04M}Ll(uKeSdNpT_P?oM0z_hy^?#?8~? z>p!1aw6cEvE}5@uGP7KAFBn|fYC9+7`MDM1Y*|MNZ#>_4F*H$Zv7PBn@D~2emB`Y?|$grPoag`#i5nfGA8?D zuAVi|*sy+A?59;1!lv0itWOrHuKy=&mQro~K5A0#yUps~|GwEi`>bEyVe@ZZi}~%o z3Oc{9S5Jv&kUurwIeZcS^@X1ky?1BMS7~GUSjV{7Z|N?7_Oyd%UvzC({;}^>)$+iL zeG?w)=IInvtvYqCN!jv%*~QY#!)sUGIqv_ubmgjgTQlWu^E0s? zUUPWuynTWtyG*YMY>>Xcd;jFr-jjb5cDcW;KCz_qJj3&gruOGH{XXaL<=fnk&gKuU&lTUW>%aITsdFjG HVhjubZOZFQ delta 2506 zcmca4d`h@pzMF$1?B%BjCg$SQqO#27)cErJqU_Wny{uw}r4hf2XP*-N7cR2wdZU!$ zG*+=SSw`QN%{0r6n|%C9yNUVc{>?(1Orl|BF}MF$pJ$q+>g|=c++O7nceUL8pXZXV zM{YOB@(uQQ?DKWkq-85s2Xa5#T6gLx)0OsRIk6w|qzqm!tCw>8z`HK`I`p;bF0=gj4ue`?nuk2OnI&VJjrd9!WdJ~n0X zb;b`@CtaFZE~|59laE@_hJzpTrzMDO-BoaJPu=%>AH@%dn!Igw{r>*%=IX~bYqgsr z`tC2@e6ICy`0Ap9l22RLY9Ie!+Uqpyk^S9Ut)Hbou+5rSocGQq{>rOgkL2IS?XTz3 zDPCn6b&>t;B=g0g%$JPVO4Tkc*zdJ^&^sKs;6QV-v`%AdaM(9+RPUNGsS%C*WBAu>yMIvKAF33{68l(aLI@wtiU z96>#$UYErZ!mbxvBD7USI^vpHS4TvzgbaNmd)Gqw(i*et4q0hE^2T! zo?m)~rT4PP(+M+_R|Oui40mbK{5x}n_|cj~wn!g^o`@okmc%n2KBe^%PA)9F1Q*Wy zcs^w>OX!;E%?7+JPCgMQJoJ=xC+qk+Jz+>bp)uvJabkYrKD|m~4`-%~wv*F14wg1` zuHWhKj+-Z?O=Z&VOI)`l)MmxsYBxN&`27$4h|uCG!on(QqLNN6Y=vxrVvE|DK1~of zG-+}X(;xot?S(GF3oV@2CfsGJZxrQKYIN~jdarp!#3#!wH!`KZrgmQVpg-gL^$RtE zpASm;J=Rd}@|bk-h|u)qg)Pf&9Ga^1vwUf6u0Zn-*5gENS5CJw(jbgZ#Vh#;}e|cd@JVtW}ovsw81qkaN(B)N5i<^&8SFEfA{y( z&odQvehOcAuUo$B-dug}2Unvr1eb`Vxu>sUdz?`3%k=d~X-<3@S4`cfWhm;QyitCS_20Cu1$*0_XWW!NWTqAS_GykiSv(a!Sf*QXX7{pg~1F8%g# z^>Z_movZn#t`V)TsrdcpWn0dRH#?1s`}VH1IX}HxQR9~RiVu&OUPdYvJJ@zqE{wIl zd(hx?<=&P3hhExA_G~w;+0`2xt^e?ajLna0y&?N#H-??JZdzsA_RsL!!Yy(WZ$3+W zApfyRtljRhQqaAZ3u}L*J-cx-R$Mj9?%P7n0>A8a{RXcD!;&)!SGoNcsr$C;=l><^ z)|Uq6hI~DrajSVw#D}tri5Hgtn?CnWd5ultmiMoDx8CCGoxUQsUd`6vfKz(fHHZC& z-x+5eRMo$J;nt&#>8QUZiH%MMN zc$4{u*uTBoHm?68&EmUoKdb(2?&Yqhk5}xPAwIQudumqwwukO--aNg2-)3{htNPXJ z+-$RFNd-!q^pxcCt6$w|{HnE4s<7tG>l-gt8FUB6&w3-6wjwC{Xm#neXRkCDC`7DX zYrahRldRk46OCo+OcF1?MQ{AoVff}{w)qcrj)eZz(>>PIvVFO8N2b@mE#+6e!P6r% z_gS6lf8~B~yL-*~+g)$_*Znvv&*(L+buP;<9_i zy>cy?3(uyp|6Z4{-pblK!~LE5^YZJppH948zAAd3R$lH}t^D@pXVX{j`pL$7E_Azh zoan7no78LS&m_G+Uw^1E=lth9m7CY>s*CQguiJg~%@XN-8^fh)KdtPaQT5+i@i*I# zfPXT(#AY@N%V= zHFw_?25Xn=OMSO5E0VWgdwuDue_wC(=-ew_x2VZZc13cnJ?D1R{2Fq z^%}(l+55ZqPfqPU`Zr;x``Z&$i+Im7Jik~z@9x&%;`UEh4Znx$Okp+)pYiMK)Z#a{ zHqX9MW9Pam;Zp16SNgLJi=yVvulC65yX?_=x#Md4)dOMdv8PM3+iUhI+VJl(y*~R< yU$3OuRlBlPdvhmO|2Sr9zi!j-gAQN5HGe#8@Zfr^$cEkj#oKJR{z?{OU;qFtz3B`9 From 632256fae2ca8605cf97fd882ec0febaed8cad1b Mon Sep 17 00:00:00 2001 From: Gianluca Barbaro Date: Wed, 19 Apr 2017 18:26:44 +0200 Subject: [PATCH 121/146] Mqtt camera test (#7175) * mock mqtt * minor fix * minor fix * minor fix --- tests/components/camera/test_mqtt.py | 58 ++++++++++++++++++---------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/tests/components/camera/test_mqtt.py b/tests/components/camera/test_mqtt.py index b79f7245f28..802d29a510a 100644 --- a/tests/components/camera/test_mqtt.py +++ b/tests/components/camera/test_mqtt.py @@ -1,31 +1,47 @@ """The tests for mqtt camera component.""" import asyncio - -import pytest +import unittest from homeassistant.setup import async_setup_component -import homeassistant.components.mqtt as mqtt + +from tests.common import ( + get_test_home_assistant, mock_mqtt_component, get_test_instance_port) + +import requests + +SERVER_PORT = get_test_instance_port() +HTTP_BASE_URL = 'http://127.0.0.1:{}'.format(SERVER_PORT) -@pytest.mark.skip -@asyncio.coroutine -def test_run_camera_setup(hass, test_client): - """Test that it fetches the given dispatcher data.""" - topic = 'test/camera' - yield from async_setup_component(hass, 'camera', { - 'camera': { - 'platform': 'mqtt', - 'topic': topic, - 'name': 'Test Camera', - }}) +class TestComponentsMQTTCamera(unittest.TestCase): + """Test MQTT camera platform.""" - client = yield from test_client(hass.http.app) + def setUp(self): # pylint: disable=invalid-name + """Setup things to be run when tests are started.""" + self.hass = get_test_home_assistant() + self.mock_mqtt = mock_mqtt_component(self.hass) - mqtt.publish(hass, topic, 0xFFD8FF) - yield from hass.async_block_till_done() + def tearDown(self): # pylint: disable=invalid-name + """Stop everything that was started.""" + self.hass.stop() - resp = yield from client.get('/api/camera_proxy/camera.test_camera') + @asyncio.coroutine + def test_run_camera_setup(self): + """Test that it fetches the given payload.""" + topic = 'test/camera' + yield from async_setup_component(self.hass, 'camera', { + 'camera': { + 'platform': 'mqtt', + 'topic': topic, + 'name': 'Test Camera', + }}) - assert resp.status == 200 - body = yield from resp.text() - assert body == '16767231' + self.mock_mqtt.publish(self.hass, topic, 0xFFD8FF) + yield from self.hass.async_block_till_done() + + resp = requests.get(HTTP_BASE_URL + + '/api/camera_proxy/camera.test_camera') + + assert resp.status_code == 200 + body = yield from resp.text + assert body == '16767231' From b985e4ef0b1964aa4d22a939c1eb70d82bd1b16a Mon Sep 17 00:00:00 2001 From: Henrik Nicolaisen Date: Thu, 20 Apr 2017 01:36:11 +0200 Subject: [PATCH 122/146] updated pylgtv module to fix problems with timeouts (#7184) --- homeassistant/components/media_player/webostv.py | 4 +--- homeassistant/components/notify/webostv.py | 3 +-- requirements_all.txt | 8 ++++---- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/homeassistant/components/media_player/webostv.py b/homeassistant/components/media_player/webostv.py index fe029af163e..7fa4fd697c5 100644 --- a/homeassistant/components/media_player/webostv.py +++ b/homeassistant/components/media_player/webostv.py @@ -24,9 +24,7 @@ from homeassistant.const import ( from homeassistant.loader import get_component import homeassistant.helpers.config_validation as cv -REQUIREMENTS = ['https://github.com/TheRealLink/pylgtv' - '/archive/v0.1.4.zip' - '#pylgtv==0.1.4', +REQUIREMENTS = ['pylgtv==0.1.5', 'websockets==3.2', 'wakeonlan==0.2.2'] diff --git a/homeassistant/components/notify/webostv.py b/homeassistant/components/notify/webostv.py index e82971e0064..50788b8cccf 100644 --- a/homeassistant/components/notify/webostv.py +++ b/homeassistant/components/notify/webostv.py @@ -14,8 +14,7 @@ from homeassistant.components.notify import ( ATTR_DATA, BaseNotificationService, PLATFORM_SCHEMA) from homeassistant.const import (CONF_FILENAME, CONF_HOST, CONF_ICON) -REQUIREMENTS = ['https://github.com/TheRealLink/pylgtv/archive/v0.1.4.zip' - '#pylgtv==0.1.4'] +REQUIREMENTS = ['pylgtv==0.1.5'] _LOGGER = logging.getLogger(__name__) diff --git a/requirements_all.txt b/requirements_all.txt index 32d95676c27..7ab7178cbfa 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -245,10 +245,6 @@ holidays==0.8.1 # homeassistant.components.switch.dlink https://github.com/LinuxChristian/pyW215/archive/v0.4.zip#pyW215==0.4 -# homeassistant.components.media_player.webostv -# homeassistant.components.notify.webostv -https://github.com/TheRealLink/pylgtv/archive/v0.1.4.zip#pylgtv==0.1.4 - # homeassistant.components.sensor.thinkingcleaner # homeassistant.components.switch.thinkingcleaner https://github.com/TheRealLink/pythinkingcleaner/archive/v0.0.2.zip#pythinkingcleaner==0.0.2 @@ -560,6 +556,10 @@ pykwb==0.0.8 # homeassistant.components.sensor.lastfm pylast==1.8.0 +# homeassistant.components.media_player.webostv +# homeassistant.components.notify.webostv +pylgtv==0.1.5 + # homeassistant.components.litejet pylitejet==0.1 From 76d21548204bad0181953cd40848926e69b7ada3 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 19 Apr 2017 21:25:45 -0700 Subject: [PATCH 123/146] Fix wemo discovery (#7183) * Fix wemo discovery * Fix key --- homeassistant/components/binary_sensor/wemo.py | 4 ++-- homeassistant/components/light/wemo.py | 4 ++-- homeassistant/components/switch/wemo.py | 4 ++-- homeassistant/components/wemo.py | 9 +++++++-- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/binary_sensor/wemo.py b/homeassistant/components/binary_sensor/wemo.py index 7f44370510e..58bd411d758 100644 --- a/homeassistant/components/binary_sensor/wemo.py +++ b/homeassistant/components/binary_sensor/wemo.py @@ -20,8 +20,8 @@ def setup_platform(hass, config, add_devices_callback, discovery_info=None): import pywemo.discovery as discovery if discovery_info is not None: - location = discovery_info[2] - mac = discovery_info[3] + location = discovery_info['ssdp_description'] + mac = discovery_info['mac_address'] device = discovery.device_from_description(location, mac) if device: diff --git a/homeassistant/components/light/wemo.py b/homeassistant/components/light/wemo.py index 41143246931..02106511fe2 100644 --- a/homeassistant/components/light/wemo.py +++ b/homeassistant/components/light/wemo.py @@ -30,8 +30,8 @@ def setup_platform(hass, config, add_devices, discovery_info=None): import pywemo.discovery as discovery if discovery_info is not None: - location = discovery_info[2] - mac = discovery_info[3] + location = discovery_info['ssdp_description'] + mac = discovery_info['mac_address'] device = discovery.device_from_description(location, mac) if device: diff --git a/homeassistant/components/switch/wemo.py b/homeassistant/components/switch/wemo.py index 0e40c3eff3b..c92523ad705 100644 --- a/homeassistant/components/switch/wemo.py +++ b/homeassistant/components/switch/wemo.py @@ -36,8 +36,8 @@ def setup_platform(hass, config, add_devices_callback, discovery_info=None): import pywemo.discovery as discovery if discovery_info is not None: - location = discovery_info[2] - mac = discovery_info[3] + location = discovery_info['ssdp_description'] + mac = discovery_info['mac_address'] device = discovery.device_from_description(location, mac) if device: diff --git a/homeassistant/components/wemo.py b/homeassistant/components/wemo.py index d9fa0bc7f56..a4b6674af74 100644 --- a/homeassistant/components/wemo.py +++ b/homeassistant/components/wemo.py @@ -96,7 +96,12 @@ def setup(hass, config): if device is None: device = pywemo.discovery.device_from_description(url, None) - discovery_info = (device.name, device.model_name, url, device.mac, - device.serialnumber) + discovery_info = { + 'model_name': device.model_name, + 'serial': device.serialnumber, + 'mac_address': device.mac, + 'ssdp_description': url, + } + discovery.discover(hass, SERVICE_WEMO, discovery_info) return True From 931fce82392af6834539017f3c9c62065eb44f5a Mon Sep 17 00:00:00 2001 From: Charles Blonde Date: Thu, 20 Apr 2017 06:52:37 +0200 Subject: [PATCH 124/146] Add Bose soundtouch discovery support and upgrade libsoundtouch library (#7005) * Add Bose soundtouch discovery support and upgrade libsoundtouch library * Remove DEVICE global variable * Update netdisco to lastest version --- homeassistant/components/discovery.py | 1 + .../components/media_player/services.yaml | 25 +- .../components/media_player/soundtouch.py | 286 ++++++++--------- requirements_all.txt | 2 +- .../media_player/test_soundtouch.py | 301 ++++++++++++------ 5 files changed, 341 insertions(+), 274 deletions(-) diff --git a/homeassistant/components/discovery.py b/homeassistant/components/discovery.py index ed766fc3997..ea8710158d1 100644 --- a/homeassistant/components/discovery.py +++ b/homeassistant/components/discovery.py @@ -50,6 +50,7 @@ SERVICE_HANDLERS = { 'apple_tv': ('media_player', 'apple_tv'), 'frontier_silicon': ('media_player', 'frontier_silicon'), 'openhome': ('media_player', 'openhome'), + 'bose_soundtouch': ('media_player', 'soundtouch'), } CONF_IGNORE = 'ignore' diff --git a/homeassistant/components/media_player/services.yaml b/homeassistant/components/media_player/services.yaml index fa26e1613dc..e23616a47a9 100644 --- a/homeassistant/components/media_player/services.yaml +++ b/homeassistant/components/media_player/services.yaml @@ -222,30 +222,39 @@ soundtouch_play_everywhere: description: Play on all Bose Soundtouch devices fields: - entity_id: - description: Name of entites that will coordinate the grouping. Platform dependent. It is a shortcut for creating a multi-room zone with all devices + master: + description: Name of the master entity that will coordinate the grouping. Platform dependent. It is a shortcut for creating a multi-room zone with all devices example: 'media_player.soundtouch_home' soundtouch_create_zone: description: Create a multi-room zone fields: - entity_id: - description: Name of entites that will coordinate the multi-room zone. Platform dependent. + master: + description: Name of the master entity that will coordinate the multi-room zone. Platform dependent. example: 'media_player.soundtouch_home' + slaves: + description: Name of slaves entities to add to the new zone + example: 'media_player.soundtouch_bedroom' soundtouch_add_zone_slave: description: Add a slave to a multi-room zone fields: - entity_id: - description: Name of entites that will be added to the multi-room zone. Platform dependent. + master: + description: Name of the master entity that is coordinating the multi-room zone. Platform dependent. example: 'media_player.soundtouch_home' + slaves: + description: Name of slaves entities to add to the existing zone + example: 'media_player.soundtouch_bedroom' soundtouch_remove_zone_slave: description: Remove a slave from the multi-room zone fields: - entity_id: - description: Name of entites that will be remove from the multi-room zone. Platform dependent. + master: + description: Name of the master entity that is coordinating the multi-room zone. Platform dependent. example: 'media_player.soundtouch_home' + slaves: + description: Name of slaves entities to remove from the existing zone + example: 'media_player.soundtouch_bedroom' diff --git a/homeassistant/components/media_player/soundtouch.py b/homeassistant/components/media_player/soundtouch.py index 90a870a8c65..fb2e02494df 100644 --- a/homeassistant/components/media_player/soundtouch.py +++ b/homeassistant/components/media_player/soundtouch.py @@ -15,7 +15,7 @@ from homeassistant.const import (CONF_HOST, CONF_NAME, STATE_OFF, CONF_PORT, STATE_PAUSED, STATE_PLAYING, STATE_UNAVAILABLE) -REQUIREMENTS = ['libsoundtouch==0.1.0'] +REQUIREMENTS = ['libsoundtouch==0.3.0'] _LOGGER = logging.getLogger(__name__) @@ -29,33 +29,33 @@ MAP_STATUS = { "PLAY_STATE": STATE_PLAYING, "BUFFERING_STATE": STATE_PLAYING, "PAUSE_STATE": STATE_PAUSED, - "STOp_STATE": STATE_OFF + "STOP_STATE": STATE_OFF } +DATA_SOUNDTOUCH = "soundtouch" + SOUNDTOUCH_PLAY_EVERYWHERE = vol.Schema({ - 'master': cv.entity_id, + vol.Required('master'): cv.entity_id }) SOUNDTOUCH_CREATE_ZONE_SCHEMA = vol.Schema({ - 'master': cv.entity_id, - 'slaves': cv.entity_ids + vol.Required('master'): cv.entity_id, + vol.Required('slaves'): cv.entity_ids }) SOUNDTOUCH_ADD_ZONE_SCHEMA = vol.Schema({ - 'master': cv.entity_id, - 'slaves': cv.entity_ids + vol.Required('master'): cv.entity_id, + vol.Required('slaves'): cv.entity_ids }) SOUNDTOUCH_REMOVE_ZONE_SCHEMA = vol.Schema({ - 'master': cv.entity_id, - 'slaves': cv.entity_ids + vol.Required('master'): cv.entity_id, + vol.Required('slaves'): cv.entity_ids }) DEFAULT_NAME = 'Bose Soundtouch' DEFAULT_PORT = 8090 -DEVICES = [] - SUPPORT_SOUNDTOUCH = SUPPORT_PAUSE | SUPPORT_VOLUME_STEP | \ SUPPORT_VOLUME_MUTE | SUPPORT_PREVIOUS_TRACK | \ SUPPORT_NEXT_TRACK | SUPPORT_TURN_OFF | \ @@ -70,180 +70,99 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ def setup_platform(hass, config, add_devices, discovery_info=None): """Setup the Bose Soundtouch platform.""" - name = config.get(CONF_NAME) + if DATA_SOUNDTOUCH not in hass.data: + hass.data[DATA_SOUNDTOUCH] = [] - remote_config = { - 'name': 'HomeAssistant', - 'description': config.get(CONF_NAME), - 'id': 'ha.component.soundtouch', - 'port': config.get(CONF_PORT), - 'host': config.get(CONF_HOST) - } + if discovery_info: + # Discovery + host = discovery_info["host"] + port = int(discovery_info["port"]) - soundtouch_device = SoundTouchDevice(name, remote_config) - DEVICES.append(soundtouch_device) - add_devices([soundtouch_device]) + # if device already exists by config + if host in [device.config['host'] for device in + hass.data[DATA_SOUNDTOUCH]]: + return + + remote_config = { + 'id': 'ha.component.soundtouch', + 'host': host, + 'port': port + } + soundtouch_device = SoundTouchDevice(None, remote_config) + hass.data[DATA_SOUNDTOUCH].append(soundtouch_device) + add_devices([soundtouch_device]) + else: + # Config + name = config.get(CONF_NAME) + remote_config = { + 'id': 'ha.component.soundtouch', + 'port': config.get(CONF_PORT), + 'host': config.get(CONF_HOST) + } + soundtouch_device = SoundTouchDevice(name, remote_config) + hass.data[DATA_SOUNDTOUCH].append(soundtouch_device) + add_devices([soundtouch_device]) descriptions = load_yaml_config_file( path.join(path.dirname(__file__), 'services.yaml')) + def service_handle(service): + """Internal func for applying a service.""" + master_device_id = service.data.get('master') + slaves_ids = service.data.get('slaves') + slaves = [] + if slaves_ids: + slaves = [device for device in hass.data[DATA_SOUNDTOUCH] if + device.entity_id in slaves_ids] + + master = next([device for device in hass.data[DATA_SOUNDTOUCH] if + device.entity_id == master_device_id].__iter__(), None) + + if master is None: + _LOGGER.warning("Unable to find master with entity_id:" + str( + master_device_id)) + return + + if service.service == SERVICE_PLAY_EVERYWHERE: + slaves = [d for d in hass.data[DATA_SOUNDTOUCH] if + d.entity_id != master_device_id] + master.create_zone(slaves) + elif service.service == SERVICE_CREATE_ZONE: + master.create_zone(slaves) + elif service.service == SERVICE_REMOVE_ZONE_SLAVE: + master.remove_zone_slave(slaves) + elif service.service == SERVICE_ADD_ZONE_SLAVE: + master.add_zone_slave(slaves) + hass.services.register(DOMAIN, SERVICE_PLAY_EVERYWHERE, - play_everywhere_service, + service_handle, descriptions.get(SERVICE_PLAY_EVERYWHERE), schema=SOUNDTOUCH_PLAY_EVERYWHERE) hass.services.register(DOMAIN, SERVICE_CREATE_ZONE, - create_zone_service, + service_handle, descriptions.get(SERVICE_CREATE_ZONE), schema=SOUNDTOUCH_CREATE_ZONE_SCHEMA) hass.services.register(DOMAIN, SERVICE_REMOVE_ZONE_SLAVE, - remove_zone_slave, + service_handle, descriptions.get(SERVICE_REMOVE_ZONE_SLAVE), schema=SOUNDTOUCH_REMOVE_ZONE_SCHEMA) hass.services.register(DOMAIN, SERVICE_ADD_ZONE_SLAVE, - add_zone_slave, + service_handle, descriptions.get(SERVICE_ADD_ZONE_SLAVE), schema=SOUNDTOUCH_ADD_ZONE_SCHEMA) -def play_everywhere_service(service): - """ - Create a zone (multi-room) and play on all devices. - - :param service: Home Assistant service with 'master' data set - - :Example: - - - service: media_player.soundtouch_play_everywhere - data: - master: media_player.soundtouch_living_room - - """ - master_device_id = service.data.get('master') - slaves = [d for d in DEVICES if d.entity_id != master_device_id] - master = next([device for device in DEVICES if - device.entity_id == master_device_id].__iter__(), None) - if master is None: - _LOGGER.warning( - "Unable to find master with entity_id:" + str(master_device_id)) - elif not slaves: - _LOGGER.warning("Unable to create zone without slaves") - else: - _LOGGER.info( - "Creating zone with master " + str(master.device.config.name)) - master.device.create_zone([slave.device for slave in slaves]) - - -def create_zone_service(service): - """ - Create a zone (multi-room) on a master and play on specified slaves. - - At least one master and one slave must be specified - - :param service: Home Assistant service with 'master' and 'slaves' data set - - :Example: - - - service: media_player.soundtouch_create_zone - data: - master: media_player.soundtouch_living_room - slaves: - - media_player.soundtouch_room - - media_player.soundtouch_kitchen - - """ - master_device_id = service.data.get('master') - slaves_ids = service.data.get('slaves') - slaves = [device for device in DEVICES if device.entity_id in slaves_ids] - master = next([device for device in DEVICES if - device.entity_id == master_device_id].__iter__(), None) - if master is None: - _LOGGER.warning( - "Unable to find master with entity_id:" + master_device_id) - elif not slaves: - _LOGGER.warning("Unable to create zone without slaves") - else: - _LOGGER.info( - "Creating zone with master " + str(master.device.config.name)) - master.device.create_zone([slave.device for slave in slaves]) - - -def add_zone_slave(service): - """ - Add slave(s) to and existing zone (multi-room). - - Zone must already exist and slaves array can not be empty. - - :param service: Home Assistant service with 'master' and 'slaves' data set - - :Example: - - - service: media_player.soundtouch_add_zone_slave - data: - master: media_player.soundtouch_living_room - slaves: - - media_player.soundtouch_room - - """ - master_device_id = service.data.get('master') - slaves_ids = service.data.get('slaves') - slaves = [device for device in DEVICES if device.entity_id in slaves_ids] - master = next([device for device in DEVICES if - device.entity_id == master_device_id].__iter__(), None) - if master is None: - _LOGGER.warning( - "Unable to find master with entity_id:" + str(master_device_id)) - elif not slaves: - _LOGGER.warning("Unable to find slaves to add") - else: - _LOGGER.info( - "Adding slaves to zone with master " + str( - master.device.config.name)) - master.device.add_zone_slave([slave.device for slave in slaves]) - - -def remove_zone_slave(service): - """ - Remove slave(s) from and existing zone (multi-room). - - Zone must already exist and slaves array can not be empty. - Note: If removing last slave, the zone will be deleted and you'll have to - create a new one. You will not be able to add a new slave anymore - - :param service: Home Assistant service with 'master' and 'slaves' data set - - :Example: - - - service: media_player.soundtouch_remove_zone_slave - data: - master: media_player.soundtouch_living_room - slaves: - - media_player.soundtouch_room - - """ - master_device_id = service.data.get('master') - slaves_ids = service.data.get('slaves') - slaves = [device for device in DEVICES if device.entity_id in slaves_ids] - master = next([device for device in DEVICES if - device.entity_id == master_device_id].__iter__(), None) - if master is None: - _LOGGER.warning( - "Unable to find master with entity_id:" + master_device_id) - elif not slaves: - _LOGGER.warning("Unable to find slaves to remove") - else: - _LOGGER.info("Removing slaves from zone with master " + - str(master.device.config.name)) - master.device.remove_zone_slave([slave.device for slave in slaves]) - - class SoundTouchDevice(MediaPlayerDevice): """Representation of a SoundTouch Bose device.""" def __init__(self, name, config): """Create Soundtouch Entity.""" from libsoundtouch import soundtouch_device - self._name = name self._device = soundtouch_device(config['host'], config['port']) + if name is None: + self._name = self._device.config.name + else: + self._name = name self._status = self._device.status() self._volume = self._device.volume() self._config = config @@ -297,7 +216,7 @@ class SoundTouchDevice(MediaPlayerDevice): self._status = self._device.status() def turn_on(self): - """Turn the media player on.""" + """Turn on media player.""" self._device.power_on() self._status = self._device.status() @@ -392,3 +311,52 @@ class SoundTouchDevice(MediaPlayerDevice): self._device.select_preset(preset) else: _LOGGER.warning("Unable to find preset with id " + str(media_id)) + + def create_zone(self, slaves): + """ + Create a zone (multi-room) and play on selected devices. + + :param slaves: slaves on which to play + + """ + if not slaves: + _LOGGER.warning("Unable to create zone without slaves") + else: + _LOGGER.info( + "Creating zone with master " + str(self.device.config.name)) + self.device.create_zone([slave.device for slave in slaves]) + + def remove_zone_slave(self, slaves): + """ + Remove slave(s) from and existing zone (multi-room). + + Zone must already exist and slaves array can not be empty. + Note: If removing last slave, the zone will be deleted and you'll have + to create a new one. You will not be able to add a new slave anymore + + :param slaves: slaves to remove from the zone + + """ + if not slaves: + _LOGGER.warning("Unable to find slaves to remove") + else: + _LOGGER.info("Removing slaves from zone with master " + + str(self.device.config.name)) + self.device.remove_zone_slave([slave.device for slave in slaves]) + + def add_zone_slave(self, slaves): + """ + Add slave(s) to and existing zone (multi-room). + + Zone must already exist and slaves array can not be empty. + + :param slaves:slaves to add + + """ + if not slaves: + _LOGGER.warning("Unable to find slaves to add") + else: + _LOGGER.info( + "Adding slaves to zone with master " + str( + self.device.config.name)) + self.device.add_zone_slave([slave.device for slave in slaves]) diff --git a/requirements_all.txt b/requirements_all.txt index 7ab7178cbfa..43ab2a051e4 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -358,7 +358,7 @@ knxip==0.3.3 libnacl==1.5.0 # homeassistant.components.media_player.soundtouch -libsoundtouch==0.1.0 +libsoundtouch==0.3.0 # homeassistant.components.light.lifx_legacy liffylights==0.9.4 diff --git a/tests/components/media_player/test_soundtouch.py b/tests/components/media_player/test_soundtouch.py index 84551241694..4958f5ee263 100644 --- a/tests/components/media_player/test_soundtouch.py +++ b/tests/components/media_player/test_soundtouch.py @@ -155,21 +155,67 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): def tearDown(self): # pylint: disable=invalid-name """Stop everything that was started.""" logging.disable(logging.NOTSET) - soundtouch.DEVICES = [] self.hass.stop() @mock.patch('libsoundtouch.soundtouch_device', side_effect=None) def test_ensure_setup_config(self, mocked_sountouch_device): - """Test setup OK.""" + """Test setup OK with custom config.""" soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) - # soundtouch.DEVICES[0].entity_id = 'entity_1' - self.assertEqual(len(soundtouch.DEVICES), 1) - self.assertEqual(soundtouch.DEVICES[0].name, 'soundtouch') - self.assertEqual(soundtouch.DEVICES[0].config['port'], 8090) + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] + self.assertEqual(len(all_devices), 1) + self.assertEqual(all_devices[0].name, 'soundtouch') + self.assertEqual(all_devices[0].config['port'], 8090) self.assertEqual(mocked_sountouch_device.call_count, 1) + @mock.patch('libsoundtouch.soundtouch_device', side_effect=None) + def test_ensure_setup_discovery(self, mocked_sountouch_device): + """Test setup with discovery.""" + new_device = {"port": "8090", + "host": "192.168.1.1", + "properties": {}, + "hostname": "hostname.local"} + soundtouch.setup_platform(self.hass, + None, + mock.MagicMock(), + new_device) + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] + self.assertEqual(len(all_devices), 1) + self.assertEqual(all_devices[0].config['port'], 8090) + self.assertEqual(all_devices[0].config['host'], '192.168.1.1') + self.assertEqual(mocked_sountouch_device.call_count, 1) + + @mock.patch('libsoundtouch.soundtouch_device', side_effect=None) + def test_ensure_setup_discovery_no_duplicate(self, + mocked_sountouch_device): + """Test setup OK if device already exists.""" + soundtouch.setup_platform(self.hass, + default_component(), + mock.MagicMock()) + self.assertEqual(len(self.hass.data[soundtouch.DATA_SOUNDTOUCH]), 1) + new_device = {"port": "8090", + "host": "192.168.1.1", + "properties": {}, + "hostname": "hostname.local"} + soundtouch.setup_platform(self.hass, + None, + mock.MagicMock(), + new_device # New device + ) + self.assertEqual(len(self.hass.data[soundtouch.DATA_SOUNDTOUCH]), 2) + existing_device = {"port": "8090", + "host": "192.168.0.1", + "properties": {}, + "hostname": "hostname.local"} + soundtouch.setup_platform(self.hass, + None, + mock.MagicMock(), + existing_device # Existing device + ) + self.assertEqual(mocked_sountouch_device.call_count, 2) + self.assertEqual(len(self.hass.data[soundtouch.DATA_SOUNDTOUCH]), 2) + @mock.patch('libsoundtouch.device.SoundTouchDevice.volume') @mock.patch('libsoundtouch.device.SoundTouchDevice.status') @mock.patch('libsoundtouch.soundtouch_device', @@ -183,7 +229,7 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): self.assertEqual(mocked_sountouch_device.call_count, 1) self.assertEqual(mocked_status.call_count, 1) self.assertEqual(mocked_volume.call_count, 1) - soundtouch.DEVICES[0].update() + self.hass.data[soundtouch.DATA_SOUNDTOUCH][0].update() self.assertEqual(mocked_status.call_count, 2) self.assertEqual(mocked_volume.call_count, 2) @@ -201,13 +247,14 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): self.assertEqual(mocked_sountouch_device.call_count, 1) self.assertEqual(mocked_status.call_count, 1) self.assertEqual(mocked_volume.call_count, 1) - self.assertEqual(soundtouch.DEVICES[0].state, STATE_PLAYING) - self.assertEqual(soundtouch.DEVICES[0].media_image_url, "image.url") - self.assertEqual(soundtouch.DEVICES[0].media_title, "artist - track") - self.assertEqual(soundtouch.DEVICES[0].media_track, "track") - self.assertEqual(soundtouch.DEVICES[0].media_artist, "artist") - self.assertEqual(soundtouch.DEVICES[0].media_album_name, "album") - self.assertEqual(soundtouch.DEVICES[0].media_duration, 1) + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] + self.assertEqual(all_devices[0].state, STATE_PLAYING) + self.assertEqual(all_devices[0].media_image_url, "image.url") + self.assertEqual(all_devices[0].media_title, "artist - track") + self.assertEqual(all_devices[0].media_track, "track") + self.assertEqual(all_devices[0].media_artist, "artist") + self.assertEqual(all_devices[0].media_album_name, "album") + self.assertEqual(all_devices[0].media_duration, 1) @mock.patch('libsoundtouch.device.SoundTouchDevice.volume') @mock.patch('libsoundtouch.device.SoundTouchDevice.status', @@ -223,7 +270,8 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): self.assertEqual(mocked_sountouch_device.call_count, 1) self.assertEqual(mocked_status.call_count, 1) self.assertEqual(mocked_volume.call_count, 1) - self.assertEqual(soundtouch.DEVICES[0].media_title, None) + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] + self.assertEqual(all_devices[0].media_title, None) @mock.patch('libsoundtouch.device.SoundTouchDevice.volume') @mock.patch('libsoundtouch.device.SoundTouchDevice.status', @@ -239,13 +287,14 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): self.assertEqual(mocked_sountouch_device.call_count, 1) self.assertEqual(mocked_status.call_count, 1) self.assertEqual(mocked_volume.call_count, 1) - self.assertEqual(soundtouch.DEVICES[0].state, STATE_PLAYING) - self.assertEqual(soundtouch.DEVICES[0].media_image_url, "image.url") - self.assertEqual(soundtouch.DEVICES[0].media_title, "station") - self.assertEqual(soundtouch.DEVICES[0].media_track, None) - self.assertEqual(soundtouch.DEVICES[0].media_artist, None) - self.assertEqual(soundtouch.DEVICES[0].media_album_name, None) - self.assertEqual(soundtouch.DEVICES[0].media_duration, None) + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] + self.assertEqual(all_devices[0].state, STATE_PLAYING) + self.assertEqual(all_devices[0].media_image_url, "image.url") + self.assertEqual(all_devices[0].media_title, "station") + self.assertEqual(all_devices[0].media_track, None) + self.assertEqual(all_devices[0].media_artist, None) + self.assertEqual(all_devices[0].media_album_name, None) + self.assertEqual(all_devices[0].media_duration, None) @mock.patch('libsoundtouch.device.SoundTouchDevice.volume', side_effect=MockVolume) @@ -261,7 +310,8 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): self.assertEqual(mocked_sountouch_device.call_count, 1) self.assertEqual(mocked_status.call_count, 1) self.assertEqual(mocked_volume.call_count, 1) - self.assertEqual(soundtouch.DEVICES[0].volume_level, 0.12) + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] + self.assertEqual(all_devices[0].volume_level, 0.12) @mock.patch('libsoundtouch.device.SoundTouchDevice.volume') @mock.patch('libsoundtouch.device.SoundTouchDevice.status', @@ -277,7 +327,8 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): self.assertEqual(mocked_sountouch_device.call_count, 1) self.assertEqual(mocked_status.call_count, 1) self.assertEqual(mocked_volume.call_count, 1) - self.assertEqual(soundtouch.DEVICES[0].state, STATE_OFF) + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] + self.assertEqual(all_devices[0].state, STATE_OFF) @mock.patch('libsoundtouch.device.SoundTouchDevice.volume') @mock.patch('libsoundtouch.device.SoundTouchDevice.status', @@ -293,7 +344,8 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): self.assertEqual(mocked_sountouch_device.call_count, 1) self.assertEqual(mocked_status.call_count, 1) self.assertEqual(mocked_volume.call_count, 1) - self.assertEqual(soundtouch.DEVICES[0].state, STATE_PAUSED) + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] + self.assertEqual(all_devices[0].state, STATE_PAUSED) @mock.patch('libsoundtouch.device.SoundTouchDevice.volume', side_effect=MockVolumeMuted) @@ -309,7 +361,8 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): self.assertEqual(mocked_sountouch_device.call_count, 1) self.assertEqual(mocked_status.call_count, 1) self.assertEqual(mocked_volume.call_count, 1) - self.assertEqual(soundtouch.DEVICES[0].is_volume_muted, True) + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] + self.assertEqual(all_devices[0].is_volume_muted, True) @mock.patch('libsoundtouch.soundtouch_device') def test_media_commands(self, mocked_sountouch_device): @@ -318,7 +371,8 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): default_component(), mock.MagicMock()) self.assertEqual(mocked_sountouch_device.call_count, 1) - self.assertEqual(soundtouch.DEVICES[0].supported_features, 17853) + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] + self.assertEqual(all_devices[0].supported_features, 17853) @mock.patch('libsoundtouch.device.SoundTouchDevice.power_off') @mock.patch('libsoundtouch.device.SoundTouchDevice.volume') @@ -331,7 +385,8 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) - soundtouch.DEVICES[0].turn_off() + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] + all_devices[0].turn_off() self.assertEqual(mocked_sountouch_device.call_count, 1) self.assertEqual(mocked_status.call_count, 2) self.assertEqual(mocked_volume.call_count, 1) @@ -348,7 +403,8 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) - soundtouch.DEVICES[0].turn_on() + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] + all_devices[0].turn_on() self.assertEqual(mocked_sountouch_device.call_count, 1) self.assertEqual(mocked_status.call_count, 2) self.assertEqual(mocked_volume.call_count, 1) @@ -365,7 +421,8 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) - soundtouch.DEVICES[0].volume_up() + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] + all_devices[0].volume_up() self.assertEqual(mocked_sountouch_device.call_count, 1) self.assertEqual(mocked_status.call_count, 1) self.assertEqual(mocked_volume.call_count, 2) @@ -382,7 +439,8 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) - soundtouch.DEVICES[0].volume_down() + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] + all_devices[0].volume_down() self.assertEqual(mocked_sountouch_device.call_count, 1) self.assertEqual(mocked_status.call_count, 1) self.assertEqual(mocked_volume.call_count, 2) @@ -399,7 +457,8 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) - soundtouch.DEVICES[0].set_volume_level(0.17) + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] + all_devices[0].set_volume_level(0.17) self.assertEqual(mocked_sountouch_device.call_count, 1) self.assertEqual(mocked_status.call_count, 1) self.assertEqual(mocked_volume.call_count, 2) @@ -416,7 +475,8 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) - soundtouch.DEVICES[0].mute_volume(None) + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] + all_devices[0].mute_volume(None) self.assertEqual(mocked_sountouch_device.call_count, 1) self.assertEqual(mocked_status.call_count, 1) self.assertEqual(mocked_volume.call_count, 2) @@ -433,7 +493,8 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) - soundtouch.DEVICES[0].media_play() + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] + all_devices[0].media_play() self.assertEqual(mocked_sountouch_device.call_count, 1) self.assertEqual(mocked_status.call_count, 2) self.assertEqual(mocked_volume.call_count, 1) @@ -450,7 +511,8 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) - soundtouch.DEVICES[0].media_pause() + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] + all_devices[0].media_pause() self.assertEqual(mocked_sountouch_device.call_count, 1) self.assertEqual(mocked_status.call_count, 2) self.assertEqual(mocked_volume.call_count, 1) @@ -467,7 +529,8 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) - soundtouch.DEVICES[0].media_play_pause() + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] + all_devices[0].media_play_pause() self.assertEqual(mocked_sountouch_device.call_count, 1) self.assertEqual(mocked_status.call_count, 2) self.assertEqual(mocked_volume.call_count, 1) @@ -486,13 +549,14 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] self.assertEqual(mocked_sountouch_device.call_count, 1) self.assertEqual(mocked_status.call_count, 1) self.assertEqual(mocked_volume.call_count, 1) - soundtouch.DEVICES[0].media_next_track() + all_devices[0].media_next_track() self.assertEqual(mocked_status.call_count, 2) self.assertEqual(mocked_next_track.call_count, 1) - soundtouch.DEVICES[0].media_previous_track() + all_devices[0].media_previous_track() self.assertEqual(mocked_status.call_count, 3) self.assertEqual(mocked_previous_track.call_count, 1) @@ -509,13 +573,14 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] self.assertEqual(mocked_sountouch_device.call_count, 1) self.assertEqual(mocked_status.call_count, 1) self.assertEqual(mocked_volume.call_count, 1) - soundtouch.DEVICES[0].play_media('PLAYLIST', 1) + all_devices[0].play_media('PLAYLIST', 1) self.assertEqual(mocked_presets.call_count, 1) self.assertEqual(mocked_select_preset.call_count, 1) - soundtouch.DEVICES[0].play_media('PLAYLIST', 2) + all_devices[0].play_media('PLAYLIST', 2) self.assertEqual(mocked_presets.call_count, 2) self.assertEqual(mocked_select_preset.call_count, 1) @@ -533,26 +598,30 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) - soundtouch.DEVICES[0].entity_id = "entity_1" - soundtouch.DEVICES[1].entity_id = "entity_2" + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] + all_devices[0].entity_id = "media_player.entity_1" + all_devices[1].entity_id = "media_player.entity_2" self.assertEqual(mocked_sountouch_device.call_count, 2) self.assertEqual(mocked_status.call_count, 2) self.assertEqual(mocked_volume.call_count, 2) # one master, one slave => create zone - service = MockService("entity_1", []) - soundtouch.play_everywhere_service(service) + self.hass.services.call(soundtouch.DOMAIN, + soundtouch.SERVICE_PLAY_EVERYWHERE, + {"master": "media_player.entity_1"}, True) self.assertEqual(mocked_create_zone.call_count, 1) # unknown master. create zone is must not be called - service = MockService("entity_X", []) - soundtouch.play_everywhere_service(service) + self.hass.services.call(soundtouch.DOMAIN, + soundtouch.SERVICE_PLAY_EVERYWHERE, + {"master": "media_player.entity_X"}, True) self.assertEqual(mocked_create_zone.call_count, 1) # no slaves, create zone must not be called - soundtouch.DEVICES.pop(1) - service = MockService("entity_1", []) - soundtouch.play_everywhere_service(service) + all_devices.pop(1) + self.hass.services.call(soundtouch.DOMAIN, + soundtouch.SERVICE_PLAY_EVERYWHERE, + {"master": "media_player.entity_1"}, True) self.assertEqual(mocked_create_zone.call_count, 1) @mock.patch('libsoundtouch.device.SoundTouchDevice.create_zone') @@ -569,63 +638,34 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) - soundtouch.DEVICES[0].entity_id = "entity_1" - soundtouch.DEVICES[1].entity_id = "entity_2" + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] + all_devices[0].entity_id = "media_player.entity_1" + all_devices[1].entity_id = "media_player.entity_2" self.assertEqual(mocked_sountouch_device.call_count, 2) self.assertEqual(mocked_status.call_count, 2) self.assertEqual(mocked_volume.call_count, 2) # one master, one slave => create zone - service = MockService("entity_1", ["entity_2"]) - soundtouch.create_zone_service(service) + self.hass.services.call(soundtouch.DOMAIN, + soundtouch.SERVICE_CREATE_ZONE, + {"master": "media_player.entity_1", + "slaves": ["media_player.entity_2"]}, True) self.assertEqual(mocked_create_zone.call_count, 1) # unknown master. create zone is must not be called - service = MockService("entity_X", []) - soundtouch.create_zone_service(service) + self.hass.services.call(soundtouch.DOMAIN, + soundtouch.SERVICE_CREATE_ZONE, + {"master": "media_player.entity_X", + "slaves": ["media_player.entity_2"]}, True) self.assertEqual(mocked_create_zone.call_count, 1) # no slaves, create zone must not be called - soundtouch.DEVICES.pop(1) - service = MockService("entity_1", []) - soundtouch.create_zone_service(service) + self.hass.services.call(soundtouch.DOMAIN, + soundtouch.SERVICE_CREATE_ZONE, + {"master": "media_player.entity_X", + "slaves": []}, True) self.assertEqual(mocked_create_zone.call_count, 1) - @mock.patch('libsoundtouch.device.SoundTouchDevice.add_zone_slave') - @mock.patch('libsoundtouch.device.SoundTouchDevice.volume') - @mock.patch('libsoundtouch.device.SoundTouchDevice.status') - @mock.patch('libsoundtouch.soundtouch_device', - side_effect=_mock_soundtouch_device) - def test_add_zone_slave(self, mocked_sountouch_device, mocked_status, - mocked_volume, mocked_add_zone_slave): - """Test adding a slave to an existing zone.""" - soundtouch.setup_platform(self.hass, - default_component(), - mock.MagicMock()) - soundtouch.setup_platform(self.hass, - default_component(), - mock.MagicMock()) - soundtouch.DEVICES[0].entity_id = "entity_1" - soundtouch.DEVICES[1].entity_id = "entity_2" - self.assertEqual(mocked_sountouch_device.call_count, 2) - self.assertEqual(mocked_status.call_count, 2) - self.assertEqual(mocked_volume.call_count, 2) - - # remove one slave - service = MockService("entity_1", ["entity_2"]) - soundtouch.add_zone_slave(service) - self.assertEqual(mocked_add_zone_slave.call_count, 1) - - # unknown master. add zone slave is not called - service = MockService("entity_X", ["entity_2"]) - soundtouch.add_zone_slave(service) - self.assertEqual(mocked_add_zone_slave.call_count, 1) - - # no slave to add, add zone slave is not called - service = MockService("entity_1", []) - soundtouch.add_zone_slave(service) - self.assertEqual(mocked_add_zone_slave.call_count, 1) - @mock.patch('libsoundtouch.device.SoundTouchDevice.remove_zone_slave') @mock.patch('libsoundtouch.device.SoundTouchDevice.volume') @mock.patch('libsoundtouch.device.SoundTouchDevice.status') @@ -633,6 +673,48 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): side_effect=_mock_soundtouch_device) def test_remove_zone_slave(self, mocked_sountouch_device, mocked_status, mocked_volume, mocked_remove_zone_slave): + """Test adding a slave to an existing zone.""" + soundtouch.setup_platform(self.hass, + default_component(), + mock.MagicMock()) + soundtouch.setup_platform(self.hass, + default_component(), + mock.MagicMock()) + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] + all_devices[0].entity_id = "media_player.entity_1" + all_devices[1].entity_id = "media_player.entity_2" + self.assertEqual(mocked_sountouch_device.call_count, 2) + self.assertEqual(mocked_status.call_count, 2) + self.assertEqual(mocked_volume.call_count, 2) + + # remove one slave + self.hass.services.call(soundtouch.DOMAIN, + soundtouch.SERVICE_REMOVE_ZONE_SLAVE, + {"master": "media_player.entity_1", + "slaves": ["media_player.entity_2"]}, True) + self.assertEqual(mocked_remove_zone_slave.call_count, 1) + + # unknown master. add zone slave is not called + self.hass.services.call(soundtouch.DOMAIN, + soundtouch.SERVICE_REMOVE_ZONE_SLAVE, + {"master": "media_player.entity_X", + "slaves": ["media_player.entity_2"]}, True) + self.assertEqual(mocked_remove_zone_slave.call_count, 1) + + # no slave to add, add zone slave is not called + self.hass.services.call(soundtouch.DOMAIN, + soundtouch.SERVICE_REMOVE_ZONE_SLAVE, + {"master": "media_player.entity_1", + "slaves": []}, True) + self.assertEqual(mocked_remove_zone_slave.call_count, 1) + + @mock.patch('libsoundtouch.device.SoundTouchDevice.add_zone_slave') + @mock.patch('libsoundtouch.device.SoundTouchDevice.volume') + @mock.patch('libsoundtouch.device.SoundTouchDevice.status') + @mock.patch('libsoundtouch.soundtouch_device', + side_effect=_mock_soundtouch_device) + def test_add_zone_slave(self, mocked_sountouch_device, mocked_status, + mocked_volume, mocked_add_zone_slave): """Test removing a slave from a zone.""" soundtouch.setup_platform(self.hass, default_component(), @@ -640,23 +722,30 @@ class TestSoundtouchMediaPlayer(unittest.TestCase): soundtouch.setup_platform(self.hass, default_component(), mock.MagicMock()) - soundtouch.DEVICES[0].entity_id = "entity_1" - soundtouch.DEVICES[1].entity_id = "entity_2" + all_devices = self.hass.data[soundtouch.DATA_SOUNDTOUCH] + all_devices[0].entity_id = "media_player.entity_1" + all_devices[1].entity_id = "media_player.entity_2" self.assertEqual(mocked_sountouch_device.call_count, 2) self.assertEqual(mocked_status.call_count, 2) self.assertEqual(mocked_volume.call_count, 2) - # remove one slave - service = MockService("entity_1", ["entity_2"]) - soundtouch.remove_zone_slave(service) - self.assertEqual(mocked_remove_zone_slave.call_count, 1) + # add one slave + self.hass.services.call(soundtouch.DOMAIN, + soundtouch.SERVICE_ADD_ZONE_SLAVE, + {"master": "media_player.entity_1", + "slaves": ["media_player.entity_2"]}, True) + self.assertEqual(mocked_add_zone_slave.call_count, 1) - # unknown master. remove zone slave is not called - service = MockService("entity_X", ["entity_2"]) - soundtouch.remove_zone_slave(service) - self.assertEqual(mocked_remove_zone_slave.call_count, 1) + # unknown master. add zone slave is not called + self.hass.services.call(soundtouch.DOMAIN, + soundtouch.SERVICE_ADD_ZONE_SLAVE, + {"master": "media_player.entity_X", + "slaves": ["media_player.entity_2"]}, True) + self.assertEqual(mocked_add_zone_slave.call_count, 1) # no slave to add, add zone slave is not called - service = MockService("entity_1", []) - soundtouch.remove_zone_slave(service) - self.assertEqual(mocked_remove_zone_slave.call_count, 1) + self.hass.services.call(soundtouch.DOMAIN, + soundtouch.SERVICE_ADD_ZONE_SLAVE, + {"master": "media_player.entity_1", + "slaves": ["media_player.entity_X"]}, True) + self.assertEqual(mocked_add_zone_slave.call_count, 1) From ce51866bd2e0967d03a071da1d05ec95344cac66 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 19 Apr 2017 22:03:48 -0700 Subject: [PATCH 125/146] Update frontend --- homeassistant/components/frontend/version.py | 2 +- .../frontend/www_static/frontend.html | 16 +++++++++++++++- .../frontend/www_static/frontend.html.gz | Bin 140243 -> 140446 bytes .../www_static/home-assistant-polymer | 2 +- .../frontend/www_static/service_worker.js | 2 +- .../frontend/www_static/service_worker.js.gz | Bin 2514 -> 2518 bytes 6 files changed, 18 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/frontend/version.py b/homeassistant/components/frontend/version.py index c060256408a..c3bf78c7711 100644 --- a/homeassistant/components/frontend/version.py +++ b/homeassistant/components/frontend/version.py @@ -3,7 +3,7 @@ FINGERPRINTS = { "compatibility.js": "83d9c77748dafa9db49ae77d7f3d8fb0", "core.js": "5d08475f03adb5969bd31855d5ca0cfd", - "frontend.html": "32bdf1e9eb7b2d73682a65cfc5ded063", + "frontend.html": "8264c0ee8dafb09785ec7b934795d3b1", "mdi.html": "d86ee142ae2476f49384bfe866a2885e", "micromarkdown-js.html": "93b5ec4016f0bba585521cf4d18dec1a", "panels/ha-panel-config.html": "0b42cb4e709ce35ad2666ffeca6f9b14", diff --git a/homeassistant/components/frontend/www_static/frontend.html b/homeassistant/components/frontend/www_static/frontend.html index 345f4e103d4..59d17b1c94b 100644 --- a/homeassistant/components/frontend/www_static/frontend.html +++ b/homeassistant/components/frontend/www_static/frontend.html @@ -43,6 +43,20 @@ window.hassUtil.attributeClassNames = function (stateObj, attributes) { ).join(' '); }; +// Expects featureClassNames to be an object mapping feature-bit -> className +window.hassUtil.featureClassNames = function (stateObj, featureClassNames) { + if (!stateObj || !stateObj.attributes.supported_features) return ''; + + var features = stateObj.attributes.supported_features; + + return Object.keys(featureClassNames).map( + function (feature) { + return (features & feature) !== 0 ? featureClassNames[feature] : ''; + } + ).join(' '); +}; + + window.hassUtil.canToggleState = function (hass, stateObj) { var domain = window.hassUtil.computeDomain(stateObj); if (domain === 'group') { @@ -729,4 +743,4 @@ return performance.now()};else var t=function(){return Date.now()};var e=functio this.hass.callService('media_player', service, serviceData); }, }); -}()); \ No newline at end of file +}()); \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/frontend.html.gz b/homeassistant/components/frontend/www_static/frontend.html.gz index 3b5d1597428325a6a9c511cf029b8f0912bf3606..ccc0ffb90ff26a46b8d031db862937cc9a68898f 100644 GIT binary patch delta 108813 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

YS)x6OFHi^xHacZN24w0hj0Gc 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

k2M^bBlYl@ULZG>Jmn^7h5%)3rj9byD^rzCONPa zPB5Qc&v5Saw{J|*0!h-D-&_|+O2+B*oGAHG^g|>zV_)mT!}I%pY99?dP~cl}&4nv4 zvb#H@QqDIuO;&fBugj`=M{^XeU$`-oLCWviT8D|-u5wP{^fgV^^!>}n<`o|Hz`*X* zCZ^uvd5pc~)xS4?HQkk7d++bbA3mpZQl{^--eULOenY*z{4L-6``_2xK6>@M`uBJ5 z-mhMN{JVSFy$lm0WB2m+rx%FqZA;iM@!(#7MfKId=mToc7IUe}47TtC=&r{r$an>^3)- zeCB+{qhg!+UZI&MTj$hY|NO{i|2%VB*&m6*6SOb%Y3R&mzOPckHBaULvh2u}w#o}U z6#O_3?%*-MAR`knWm41gW!y66>YX`hDvk*|{Ol`rT(eF1&R_acp>)Ul&s(Vv_jBs) z!)E*cl@%-4a_rLM#s!>-AGX}M$yOD(F_`y1=dPD3g_X-&J3F0)tkZP1*1ui)zs4-; zQvM?8s)LG5?sK0CdwbwJhR=+y%`o{NV3wlE{8CD1%>5Bifv4`il`m5NS zeH&}Ix+aE7I#r7$JFHyy zz{ox5w&5n8zLr+Uk~p&sHBYa)hJ;_%*?0KN4eO^RJ6F7)!_44!vG3>e-SH3hALP1b zCFFP|$)jVwOaJE=LLS?7{xymw>7AZgG+F6M_YT{grbau}+U{#JiMEM6TP+y8cwbE2 zzXM+Nxl81Po~-ATTd;ZK#xLtz-wJrY;$1Im>aypN`g@n9$IE~GHr(ptkg?~hQrE+^ zRUK>p{dg#p*`?l{pO^Bi>TS==V;4;g%%6UgUH?ni+E>>(a-8R1Xqa?Y z`iVA(--}sasQ*a){n6*i$8)#mG&#n-m%E*G%zr`Em#q4aH;jDwtJRG88n?c!epoC1 zs`pUǤ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

  • -=8P( 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%0D?paZ94*zRj4p^=RbX;F$7T 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 E09zjMLI3~& diff --git a/homeassistant/components/frontend/www_static/home-assistant-polymer b/homeassistant/components/frontend/www_static/home-assistant-polymer index 5469c425e76..3fdba359865 160000 --- a/homeassistant/components/frontend/www_static/home-assistant-polymer +++ b/homeassistant/components/frontend/www_static/home-assistant-polymer @@ -1 +1 @@ -Subproject commit 5469c425e7695352a8402edd1fa6d36f95f0e083 +Subproject commit 3fdba359865823805e8ea756c8500d3913976158 diff --git a/homeassistant/components/frontend/www_static/service_worker.js b/homeassistant/components/frontend/www_static/service_worker.js index cec17959a2e..a72ef49fd22 100644 --- a/homeassistant/components/frontend/www_static/service_worker.js +++ b/homeassistant/components/frontend/www_static/service_worker.js @@ -1 +1 @@ -"use strict";function setOfCachedUrls(e){return e.keys().then(function(e){return e.map(function(e){return e.url})}).then(function(e){return new Set(e)})}function notificationEventCallback(e,t){firePushCallback({action:t.action,data:t.notification.data,tag:t.notification.tag,type:e},t.notification.data.jwt)}function firePushCallback(e,t){delete e.data.jwt,0===Object.keys(e.data).length&&e.data.constructor===Object&&delete e.data,fetch("/api/notify.html5/callback",{method:"POST",headers:new Headers({"Content-Type":"application/json",Authorization:"Bearer "+t}),body:JSON.stringify(e)})}var precacheConfig=[["/","7e22d2422660188dd58de213fac2ea44"],["/frontend/panels/dev-event-2db9c218065ef0f61d8d08db8093cad2.html","b5b751e49b1bba55f633ae0d7a92677d"],["/frontend/panels/dev-info-61610e015a411cfc84edd2c4d489e71d.html","6568377ee31cbd78fedc003b317f7faf"],["/frontend/panels/dev-service-415552027cb083badeff5f16080410ed.html","a4b1ec9bfa5bc3529af7783ae56cb55c"],["/frontend/panels/dev-state-d70314913b8923d750932367b1099750.html","c61b5b1461959aac106400e122993e9e"],["/frontend/panels/dev-template-567fbf86735e1b891e40c2f4060fec9b.html","d2853ecf45de1dbadf49fe99a7424ef3"],["/frontend/panels/map-31c592c239636f91e07c7ac232a5ebc4.html","182580419ce2c935ae6ec65502b6db96"],["/static/compatibility-83d9c77748dafa9db49ae77d7f3d8fb0.js","5f05c83be2b028d577962f9625904806"],["/static/core-5d08475f03adb5969bd31855d5ca0cfd.js","1cd99ba798bfcff9768c9d2bb2f58a7c"],["/static/frontend-32bdf1e9eb7b2d73682a65cfc5ded063.html","24dd29d5af1bfd77d6df24a772742bdd"],["/static/mdi-989f02c51eba561dc32b9ecc628a84b3.html","ceace2dd01ba2127f138aed71ef71040"],["static/fonts/roboto/Roboto-Bold.ttf","d329cc8b34667f114a95422aaad1b063"],["static/fonts/roboto/Roboto-Light.ttf","7b5fb88f12bec8143f00e21bc3222124"],["static/fonts/roboto/Roboto-Medium.ttf","fe13e4170719c2fc586501e777bde143"],["static/fonts/roboto/Roboto-Regular.ttf","ac3f799d5bbaf5196fab15ab8de8431c"],["static/icons/favicon-192x192.png","419903b8422586a7e28021bbe9011175"],["static/icons/favicon.ico","04235bda7843ec2fceb1cbe2bc696cf4"],["static/images/card_media_player_bg.png","a34281d1c1835d338a642e90930e61aa"],["static/webcomponents-lite.min.js","32b5a9b7ada86304bec6b43d3f2194f0"]],cacheName="sw-precache-v3--"+(self.registration?self.registration.scope:""),ignoreUrlParametersMatching=[/^utm_/],addDirectoryIndex=function(e,t){var n=new URL(e);return"/"===n.pathname.slice(-1)&&(n.pathname+=t),n.toString()},cleanResponse=function(e){return e.redirected?("body"in e?Promise.resolve(e.body):e.blob()).then(function(t){return new Response(t,{headers:e.headers,status:e.status,statusText:e.statusText})}):Promise.resolve(e)},createCacheKey=function(e,t,n,a){var c=new URL(e);return a&&c.pathname.match(a)||(c.search+=(c.search?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(n)),c.toString()},isPathWhitelisted=function(e,t){if(0===e.length)return!0;var n=new URL(t).pathname;return e.some(function(e){return n.match(e)})},stripIgnoredUrlParameters=function(e,t){var n=new URL(e);return n.search=n.search.slice(1).split("&").map(function(e){return e.split("=")}).filter(function(e){return t.every(function(t){return!t.test(e[0])})}).map(function(e){return e.join("=")}).join("&"),n.toString()},hashParamName="_sw-precache",urlsToCacheKeys=new Map(precacheConfig.map(function(e){var t=e[0],n=e[1],a=new URL(t,self.location),c=createCacheKey(a,hashParamName,n,!1);return[a.toString(),c]}));self.addEventListener("install",function(e){e.waitUntil(caches.open(cacheName).then(function(e){return setOfCachedUrls(e).then(function(t){return Promise.all(Array.from(urlsToCacheKeys.values()).map(function(n){if(!t.has(n)){var a=new Request(n,{credentials:"same-origin"});return fetch(a).then(function(t){if(!t.ok)throw new Error("Request for "+n+" returned a response with status "+t.status);return cleanResponse(t).then(function(t){return e.put(n,t)})})}}))})}).then(function(){return self.skipWaiting()}))}),self.addEventListener("activate",function(e){var t=new Set(urlsToCacheKeys.values());e.waitUntil(caches.open(cacheName).then(function(e){return e.keys().then(function(n){return Promise.all(n.map(function(n){if(!t.has(n.url))return e.delete(n)}))})}).then(function(){return self.clients.claim()}))}),self.addEventListener("fetch",function(e){if("GET"===e.request.method){var t,n=stripIgnoredUrlParameters(e.request.url,ignoreUrlParametersMatching);t=urlsToCacheKeys.has(n);t||(n=addDirectoryIndex(n,"index.html"),t=urlsToCacheKeys.has(n));!t&&"navigate"===e.request.mode&&isPathWhitelisted(["^((?!(static|api|local|service_worker.js|manifest.json)).)*$"],e.request.url)&&(n=new URL("/",self.location).toString(),t=urlsToCacheKeys.has(n)),t&&e.respondWith(caches.open(cacheName).then(function(e){return e.match(urlsToCacheKeys.get(n)).then(function(e){if(e)return e;throw Error("The cached response that was expected is missing.")})}).catch(function(t){return console.warn('Couldn\'t serve response for "%s" from cache: %O',e.request.url,t),fetch(e.request)}))}}),self.addEventListener("push",function(e){var t;e.data&&(t=e.data.json(),e.waitUntil(self.registration.showNotification(t.title,t).then(function(e){firePushCallback({type:"received",tag:t.tag,data:t.data},t.data.jwt)})))}),self.addEventListener("notificationclick",function(e){var t;notificationEventCallback("clicked",e),e.notification.close(),e.notification.data&&e.notification.data.url&&(t=e.notification.data.url)&&e.waitUntil(clients.matchAll({type:"window"}).then(function(e){var n,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 JNfu*Z0019>??M0o From e020d5114a2de6e660a0d6e536793b7b86ef7e96 Mon Sep 17 00:00:00 2001 From: happyleavesaoc Date: Thu, 20 Apr 2017 01:45:12 -0400 Subject: [PATCH 126/146] spotify media player (#6980) * spotify media player * fix refresh token * spotify improvements * add checks for idle * import STATE_IDLE * support more media_ids, limit updates * move spotify device update * Remove schedule_update_ha_state because should_poll is true --- .coveragerc | 1 + .../components/media_player/spotify.py | 286 ++++++++++++++++++ requirements_all.txt | 3 + 3 files changed, 290 insertions(+) create mode 100644 homeassistant/components/media_player/spotify.py diff --git a/.coveragerc b/.coveragerc index 4c3d883cae4..9cc8101cc7c 100644 --- a/.coveragerc +++ b/.coveragerc @@ -281,6 +281,7 @@ omit = homeassistant/components/media_player/samsungtv.py homeassistant/components/media_player/snapcast.py homeassistant/components/media_player/sonos.py + homeassistant/components/media_player/spotify.py homeassistant/components/media_player/squeezebox.py homeassistant/components/media_player/vlc.py homeassistant/components/media_player/volumio.py diff --git a/homeassistant/components/media_player/spotify.py b/homeassistant/components/media_player/spotify.py new file mode 100644 index 00000000000..ce4230bf92c --- /dev/null +++ b/homeassistant/components/media_player/spotify.py @@ -0,0 +1,286 @@ +""" +Support for interacting with Spotify Connect. + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/media_player.spotify/ +""" + +import logging +from datetime import timedelta + +import voluptuous as vol + +from homeassistant.core import callback +from homeassistant.loader import get_component +from homeassistant.components.http import HomeAssistantView +from homeassistant.components.media_player import ( + MEDIA_TYPE_MUSIC, MEDIA_TYPE_PLAYLIST, SUPPORT_VOLUME_SET, + SUPPORT_PLAY, SUPPORT_PAUSE, SUPPORT_PLAY_MEDIA, SUPPORT_NEXT_TRACK, + SUPPORT_PREVIOUS_TRACK, SUPPORT_SELECT_SOURCE, PLATFORM_SCHEMA, + MediaPlayerDevice) +from homeassistant.const import ( + CONF_NAME, STATE_PLAYING, STATE_PAUSED, STATE_IDLE, STATE_UNKNOWN) +import homeassistant.helpers.config_validation as cv + + +COMMIT = '544614f4b1d508201d363e84e871f86c90aa26b2' +REQUIREMENTS = ['https://github.com/happyleavesaoc/spotipy/' + 'archive/%s.zip#spotipy==2.4.4' % COMMIT] + +DEPENDENCIES = ['http'] + +_LOGGER = logging.getLogger(__name__) + +SUPPORT_SPOTIFY = SUPPORT_VOLUME_SET | SUPPORT_PAUSE | SUPPORT_PLAY |\ + SUPPORT_NEXT_TRACK | SUPPORT_PREVIOUS_TRACK | SUPPORT_SELECT_SOURCE |\ + SUPPORT_PLAY_MEDIA + +SCOPE = 'user-read-playback-state user-modify-playback-state' +DEFAULT_CACHE_PATH = '.spotify-token-cache' +AUTH_CALLBACK_PATH = '/api/spotify' +AUTH_CALLBACK_NAME = 'api:spotify' +ICON = 'mdi:spotify' +DEFAULT_NAME = 'Spotify' +DOMAIN = 'spotify' +CONF_CLIENT_ID = 'client_id' +CONF_CLIENT_SECRET = 'client_secret' +CONF_CACHE_PATH = 'cache_path' +CONFIGURATOR_LINK_NAME = 'Link Spotify account' +CONFIGURATOR_SUBMIT_CAPTION = 'I authorized successfully' +CONFIGURATOR_DESCRIPTION = 'To link your Spotify account, ' \ + 'click the link, login, and authorize:' + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ + vol.Required(CONF_CLIENT_ID): cv.string, + vol.Required(CONF_CLIENT_SECRET): cv.string, + vol.Optional(CONF_NAME): cv.string, + vol.Optional(CONF_CACHE_PATH): cv.string +}) + +SCAN_INTERVAL = timedelta(seconds=30) + + +def request_configuration(hass, config, add_devices, oauth): + """Request Spotify authorization.""" + configurator = get_component('configurator') + hass.data[DOMAIN] = configurator.request_config( + hass, DEFAULT_NAME, lambda _: None, + link_name=CONFIGURATOR_LINK_NAME, + link_url=oauth.get_authorize_url(), + description=CONFIGURATOR_DESCRIPTION, + submit_caption=CONFIGURATOR_SUBMIT_CAPTION) + + +def setup_platform(hass, config, add_devices, discovery_info=None): + """Setup the Spotify platform.""" + import spotipy.oauth2 + callback_url = '{}{}'.format(hass.config.api.base_url, AUTH_CALLBACK_PATH) + cache = config.get(CONF_CACHE_PATH, hass.config.path(DEFAULT_CACHE_PATH)) + oauth = spotipy.oauth2.SpotifyOAuth( + config.get(CONF_CLIENT_ID), config.get(CONF_CLIENT_SECRET), + callback_url, scope=SCOPE, + cache_path=cache) + token_info = oauth.get_cached_token() + if not token_info: + _LOGGER.info('no token; requesting authorization') + hass.http.register_view(SpotifyAuthCallbackView( + config, add_devices, oauth)) + request_configuration(hass, config, add_devices, oauth) + return + if hass.data.get(DOMAIN): + configurator = get_component('configurator') + configurator.request_done(hass.data.get(DOMAIN)) + del hass.data[DOMAIN] + player = SpotifyMediaPlayer(oauth, config.get(CONF_NAME, DEFAULT_NAME)) + add_devices([player], True) + + +class SpotifyAuthCallbackView(HomeAssistantView): + """Spotify Authorization Callback View.""" + + requires_auth = False + url = AUTH_CALLBACK_PATH + name = AUTH_CALLBACK_NAME + + def __init__(self, config, add_devices, oauth): + """Initialize.""" + self.config = config + self.add_devices = add_devices + self.oauth = oauth + + @callback + def get(self, request): + """Receive authorization token.""" + hass = request.app['hass'] + self.oauth.get_access_token(request.GET['code']) + hass.async_add_job(setup_platform, hass, self.config, self.add_devices) + + +class SpotifyMediaPlayer(MediaPlayerDevice): + """Representation of a Spotify controller.""" + + def __init__(self, oauth, name): + """Initialize.""" + self._name = name + self._oauth = oauth + self._album = None + self._title = None + self._artist = None + self._uri = None + self._image_url = None + self._state = STATE_UNKNOWN + self._current_device = None + self._devices = None + self._volume = None + self._player = None + self._token_info = self._oauth.get_cached_token() + + def refresh_spotify_instance(self): + """Fetch a new spotify instance.""" + import spotipy + token_refreshed = False + need_token = (self._token_info is None or + self._oauth.is_token_expired(self._token_info)) + if need_token: + new_token = \ + self._oauth.refresh_access_token( + self._token_info['refresh_token']) + self._token_info = new_token + token_refreshed = True + if self._player is None or token_refreshed: + self._player = \ + spotipy.Spotify(auth=self._token_info.get('access_token')) + + def update(self): + """Update state and attributes.""" + self.refresh_spotify_instance() + # Available devices + devices = self._player.devices().get('devices') + if devices is not None: + self._devices = {device.get('name'): device.get('id') + for device in devices} + # Current playback state + current = self._player.current_playback() + if current is None: + self._state = STATE_IDLE + return + # Track metadata + item = current.get('item') + if item: + self._album = item.get('album').get('name') + self._title = item.get('name') + self._artist = ', '.join([artist.get('name') + for artist in item.get('artists')]) + self._uri = current.get('uri') + self._image_url = item.get('album').get('images')[0].get('url') + # Playing state + self._state = STATE_PAUSED + if current.get('is_playing'): + self._state = STATE_PLAYING + device = current.get('device') + if device is None: + self._state = STATE_IDLE + else: + if device.get('volume_percent'): + self._volume = device.get('volume_percent') / 100 + if device.get('name'): + self._current_device = device.get('name') + + def set_volume_level(self, volume): + """Set the volume level.""" + self._player.volume(int(volume * 100)) + + def media_next_track(self): + """Skip to next track.""" + self._player.next_track() + + def media_previous_track(self): + """Skip to previous track.""" + self._player.previous_track() + + def media_play(self): + """Start or resume playback.""" + self._player.start_playback() + + def media_pause(self): + """Pause playback.""" + self._player.pause_playback() + + def select_source(self, source): + """Select playback device.""" + self._player.transfer_playback(self._devices[source]) + + def play_media(self, media_type, media_id, **kwargs): + """Play media.""" + kwargs = {} + if media_type == MEDIA_TYPE_MUSIC: + kwargs['uris'] = [media_id] + elif media_type == MEDIA_TYPE_PLAYLIST: + kwargs['context_uri'] = media_id + else: + _LOGGER.error('media type %s is not supported', media_type) + return + if not media_id.startswith('spotify:'): + _LOGGER.error('media id must be spotify uri') + return + self._player.start_playback(**kwargs) + + @property + def name(self): + """Name.""" + return self._name + + @property + def icon(self): + """Icon.""" + return ICON + + @property + def state(self): + """Playback state.""" + return self._state + + @property + def volume_level(self): + """Device volume.""" + return self._volume + + @property + def source_list(self): + """Playback devices.""" + return list(self._devices.keys()) + + @property + def source(self): + """Current playback device.""" + return self._current_device + + @property + def media_content_id(self): + """Media URL.""" + return self._uri + + @property + def media_image_url(self): + """Media image url.""" + return self._image_url + + @property + def media_artist(self): + """Media artist.""" + return self._artist + + @property + def media_album_name(self): + """Media album.""" + return self._album + + @property + def media_title(self): + """Media title.""" + return self._title + + @property + def supported_features(self): + """Media player features that are supported.""" + return SUPPORT_SPOTIFY diff --git a/requirements_all.txt b/requirements_all.txt index 43ab2a051e4..b737eb5e10b 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -264,6 +264,9 @@ https://github.com/bashwork/pymodbus/archive/d7fc4f1cc975631e0a9011390e8017f64b6 # homeassistant.components.lutron_caseta https://github.com/gurumitts/pylutron-caseta/archive/v0.2.6.zip#pylutron-caseta==v0.2.6 +# homeassistant.components.media_player.spotify +https://github.com/happyleavesaoc/spotipy/archive/544614f4b1d508201d363e84e871f86c90aa26b2.zip#spotipy==2.4.4 + # homeassistant.components.netatmo https://github.com/jabesq/netatmo-api-python/archive/v0.9.1.zip#lnetatmo==0.9.1 From f59b3da5fe823e4d6c06742c6d43890092b5b883 Mon Sep 17 00:00:00 2001 From: Gianluca Barbaro Date: Thu, 20 Apr 2017 07:53:07 +0200 Subject: [PATCH 127/146] JSON MQTT Device tracker (#7055) * ready for PR * minor fix * another minor fix * new platform mqtt_json * using ATTR constants * voluptuous check on JSON payload * voluptuous check on JSON payload --- .../components/device_tracker/mqtt_json.py | 85 ++++++++++++ .../device_tracker/test_mqtt_json.py | 128 ++++++++++++++++++ 2 files changed, 213 insertions(+) create mode 100644 homeassistant/components/device_tracker/mqtt_json.py create mode 100644 tests/components/device_tracker/test_mqtt_json.py diff --git a/homeassistant/components/device_tracker/mqtt_json.py b/homeassistant/components/device_tracker/mqtt_json.py new file mode 100644 index 00000000000..da85055ba96 --- /dev/null +++ b/homeassistant/components/device_tracker/mqtt_json.py @@ -0,0 +1,85 @@ +""" +Support for GPS tracking MQTT enabled devices. + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/device_tracker.mqtt_json/ +""" +import asyncio +import json +import logging + +import voluptuous as vol + +import homeassistant.components.mqtt as mqtt +from homeassistant.core import callback +from homeassistant.components.mqtt import CONF_QOS +from homeassistant.components.device_tracker import PLATFORM_SCHEMA +import homeassistant.helpers.config_validation as cv +from homeassistant.const import ( + CONF_DEVICES, ATTR_GPS_ACCURACY, ATTR_LATITUDE, + ATTR_LONGITUDE, ATTR_BATTERY_LEVEL) + +DEPENDENCIES = ['mqtt'] + +_LOGGER = logging.getLogger(__name__) + +GPS_JSON_PAYLOAD_SCHEMA = vol.Schema({ + vol.Required(ATTR_LATITUDE): vol.Coerce(float), + vol.Required(ATTR_LONGITUDE): vol.Coerce(float), + vol.Optional(ATTR_GPS_ACCURACY, default=None): vol.Coerce(int), + vol.Optional(ATTR_BATTERY_LEVEL, default=None): vol.Coerce(str), +}, extra=vol.ALLOW_EXTRA) + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(mqtt.SCHEMA_BASE).extend({ + vol.Required(CONF_DEVICES): {cv.string: mqtt.valid_subscribe_topic}, +}) + + +@asyncio.coroutine +def async_setup_scanner(hass, config, async_see, discovery_info=None): + """Setup the MQTT tracker.""" + devices = config[CONF_DEVICES] + qos = config[CONF_QOS] + + dev_id_lookup = {} + + @callback + def async_tracker_message_received(topic, payload, qos): + """MQTT message received.""" + dev_id = dev_id_lookup[topic] + + try: + data = GPS_JSON_PAYLOAD_SCHEMA(json.loads(payload)) + except vol.MultipleInvalid: + _LOGGER.error('Skipping update for following data ' + 'because of missing or malformatted data: %s', + payload) + return + except ValueError: + _LOGGER.error('Error parsing JSON payload: %s', payload) + return + + kwargs = _parse_see_args(dev_id, data) + hass.async_add_job( + async_see(**kwargs)) + + for dev_id, topic in devices.items(): + dev_id_lookup[topic] = dev_id + yield from mqtt.async_subscribe( + hass, topic, async_tracker_message_received, qos) + + return True + + +def _parse_see_args(dev_id, data): + """Parse the payload location parameters, into the format see expects.""" + kwargs = { + 'gps': (data[ATTR_LATITUDE], data[ATTR_LONGITUDE]), + 'dev_id': dev_id + } + + if ATTR_GPS_ACCURACY in data: + kwargs[ATTR_GPS_ACCURACY] = data[ATTR_GPS_ACCURACY] + if ATTR_BATTERY_LEVEL in data: + kwargs['battery'] = data[ATTR_BATTERY_LEVEL] + return kwargs diff --git a/tests/components/device_tracker/test_mqtt_json.py b/tests/components/device_tracker/test_mqtt_json.py new file mode 100644 index 00000000000..fdca113a7ff --- /dev/null +++ b/tests/components/device_tracker/test_mqtt_json.py @@ -0,0 +1,128 @@ +"""The tests for the JSON MQTT device tracker platform.""" +import asyncio +import json +import unittest +from unittest.mock import patch +import logging +import os + +from homeassistant.setup import setup_component +from homeassistant.components import device_tracker +from homeassistant.const import CONF_PLATFORM + +from tests.common import ( + get_test_home_assistant, mock_mqtt_component, fire_mqtt_message) + +_LOGGER = logging.getLogger(__name__) + +LOCATION_MESSAGE = { + 'longitude': 1.0, + 'gps_accuracy': 60, + 'latitude': 2.0, + 'battery_level': 99.9} + +LOCATION_MESSAGE_INCOMPLETE = { + 'longitude': 2.0} + + +class TestComponentsDeviceTrackerJSONMQTT(unittest.TestCase): + """Test JSON MQTT device tracker platform.""" + + def setUp(self): # pylint: disable=invalid-name + """Setup things to be run when tests are started.""" + self.hass = get_test_home_assistant() + mock_mqtt_component(self.hass) + + def tearDown(self): # pylint: disable=invalid-name + """Stop everything that was started.""" + self.hass.stop() + try: + os.remove(self.hass.config.path(device_tracker.YAML_DEVICES)) + except FileNotFoundError: + pass + + def test_ensure_device_tracker_platform_validation(self): \ + # pylint: disable=invalid-name + """Test if platform validation was done.""" + @asyncio.coroutine + def mock_setup_scanner(hass, config, see, discovery_info=None): + """Check that Qos was added by validation.""" + self.assertTrue('qos' in config) + + with patch('homeassistant.components.device_tracker.mqtt_json.' + 'async_setup_scanner', autospec=True, + side_effect=mock_setup_scanner) as mock_sp: + + dev_id = 'paulus' + topic = 'location/paulus' + assert setup_component(self.hass, device_tracker.DOMAIN, { + device_tracker.DOMAIN: { + CONF_PLATFORM: 'mqtt_json', + 'devices': {dev_id: topic} + } + }) + assert mock_sp.call_count == 1 + + def test_json_message(self): + """Test json location message.""" + dev_id = 'zanzito' + topic = 'location/zanzito' + location = json.dumps(LOCATION_MESSAGE) + + self.hass.config.components = set(['mqtt_json', 'zone']) + assert setup_component(self.hass, device_tracker.DOMAIN, { + device_tracker.DOMAIN: { + CONF_PLATFORM: 'mqtt_json', + 'devices': {dev_id: topic} + } + }) + fire_mqtt_message(self.hass, topic, location) + self.hass.block_till_done() + state = self.hass.states.get('device_tracker.zanzito') + self.assertEqual(state.attributes.get('latitude'), 2.0) + self.assertEqual(state.attributes.get('longitude'), 1.0) + + def test_non_json_message(self): + """Test receiving a non JSON message.""" + dev_id = 'zanzito' + topic = 'location/zanzito' + location = 'home' + + self.hass.config.components = set(['mqtt_json']) + assert setup_component(self.hass, device_tracker.DOMAIN, { + device_tracker.DOMAIN: { + CONF_PLATFORM: 'mqtt_json', + 'devices': {dev_id: topic} + } + }) + + with self.assertLogs(level='ERROR') as test_handle: + fire_mqtt_message(self.hass, topic, location) + self.hass.block_till_done() + self.assertIn( + "ERROR:homeassistant.components.device_tracker.mqtt_json:" + "Error parsing JSON payload: home", + test_handle.output[0]) + + def test_incomplete_message(self): + """Test receiving an incomplete message.""" + dev_id = 'zanzito' + topic = 'location/zanzito' + location = json.dumps(LOCATION_MESSAGE_INCOMPLETE) + + self.hass.config.components = set(['mqtt_json']) + assert setup_component(self.hass, device_tracker.DOMAIN, { + device_tracker.DOMAIN: { + CONF_PLATFORM: 'mqtt_json', + 'devices': {dev_id: topic} + } + }) + + with self.assertLogs(level='ERROR') as test_handle: + fire_mqtt_message(self.hass, topic, location) + self.hass.block_till_done() + self.assertIn( + "ERROR:homeassistant.components.device_tracker.mqtt_json:" + "Skipping update for following data because of missing " + "or malformatted data: {\"longitude\": 2.0}", + test_handle.output[0]) From 1860b6c52161a935d0a822d8ef415c5f9ee64baa Mon Sep 17 00:00:00 2001 From: happyleavesaoc Date: Thu, 20 Apr 2017 01:56:20 -0400 Subject: [PATCH 128/146] opensky sensor (#7061) * opensky sensor * address opensky review comments * update opensky distance calc --- .coveragerc | 1 + homeassistant/components/sensor/opensky.py | 141 +++++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 homeassistant/components/sensor/opensky.py diff --git a/.coveragerc b/.coveragerc index 9cc8101cc7c..ff081214ec7 100644 --- a/.coveragerc +++ b/.coveragerc @@ -384,6 +384,7 @@ omit = homeassistant/components/sensor/onewire.py homeassistant/components/sensor/openevse.py homeassistant/components/sensor/openexchangerates.py + homeassistant/components/sensor/opensky.py homeassistant/components/sensor/openweathermap.py homeassistant/components/sensor/pi_hole.py homeassistant/components/sensor/plex.py diff --git a/homeassistant/components/sensor/opensky.py b/homeassistant/components/sensor/opensky.py new file mode 100644 index 00000000000..17e5f1f351c --- /dev/null +++ b/homeassistant/components/sensor/opensky.py @@ -0,0 +1,141 @@ +""" +Sensor for the Open Sky Network. + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/sensor.opensky/ +""" +import logging +from datetime import timedelta + +import requests +import voluptuous as vol + +from homeassistant.components.sensor import PLATFORM_SCHEMA +from homeassistant.const import ( + CONF_NAME, CONF_LATITUDE, CONF_LONGITUDE, + ATTR_ATTRIBUTION, ATTR_LATITUDE, ATTR_LONGITUDE, + LENGTH_KILOMETERS, LENGTH_METERS) +from homeassistant.helpers.entity import Entity +from homeassistant.util import distance as util_distance +from homeassistant.util import location as util_location +import homeassistant.helpers.config_validation as cv + + +_LOGGER = logging.getLogger(__name__) + +SCAN_INTERVAL = timedelta(seconds=12) # opensky public limit is 10 seconds +DOMAIN = 'opensky' +EVENT_OPENSKY_ENTRY = '{}_entry'.format(DOMAIN) +EVENT_OPENSKY_EXIT = '{}_exit'.format(DOMAIN) +CONF_RADIUS = 'radius' +ATTR_SENSOR = 'sensor' +ATTR_STATES = 'states' +ATTR_ON_GROUND = 'on_ground' +ATTR_CALLSIGN = 'callsign' +OPENSKY_ATTRIBUTION = "Information provided by the OpenSky Network "\ + "(https://opensky-network.org)" +OPENSKY_API_URL = 'https://opensky-network.org/api/states/all' +OPENSKY_API_FIELDS = [ + 'icao24', ATTR_CALLSIGN, 'origin_country', 'time_position', + 'time_velocity', ATTR_LONGITUDE, ATTR_LATITUDE, 'altitude', + ATTR_ON_GROUND, 'velocity', 'heading', 'vertical_rate', 'sensors'] + + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ + vol.Required(CONF_RADIUS): vol.Coerce(float), + vol.Optional(CONF_NAME): cv.string, + vol.Inclusive(CONF_LATITUDE, 'coordinates'): cv.latitude, + vol.Inclusive(CONF_LONGITUDE, 'coordinates'): cv.longitude +}) + + +# pylint: disable=unused-argument +def setup_platform(hass, config, add_devices, discovery_info=None): + """Setup the Open Sky platform.""" + latitude = config.get(CONF_LATITUDE, hass.config.latitude) + longitude = config.get(CONF_LONGITUDE, hass.config.longitude) + add_devices([OpenSkySensor( + hass, config.get(CONF_NAME, DOMAIN), latitude, longitude, + config.get(CONF_RADIUS))], True) + + +class OpenSkySensor(Entity): + """Open Sky Network Sensor.""" + + def __init__(self, hass, name, latitude, longitude, radius): + """Initialize the sensor.""" + self._session = requests.Session() + self._latitude = latitude + self._longitude = longitude + self._radius = util_distance.convert( + radius, LENGTH_KILOMETERS, LENGTH_METERS) + self._state = 0 + self._hass = hass + self._name = name + self._previously_tracked = None + + @property + def name(self): + """Return the name of the sensor.""" + return self._name + + @property + def state(self): + """Return the state of the sensor.""" + return self._state + + def _handle_boundary(self, callsigns, event): + """Handle flights crossing region boundary.""" + for callsign in callsigns: + data = { + ATTR_CALLSIGN: callsign, + ATTR_SENSOR: self._name + } + self._hass.bus.fire(event, data) + + def update(self): + """Update device state.""" + currently_tracked = set() + states = self._session.get(OPENSKY_API_URL).json().get(ATTR_STATES) + for state in states: + data = dict(zip(OPENSKY_API_FIELDS, state)) + missing_location = ( + data.get(ATTR_LONGITUDE) is None or + data.get(ATTR_LATITUDE) is None) + if missing_location: + continue + if data.get(ATTR_ON_GROUND): + continue + distance = util_location.distance( + self._latitude, self._longitude, + data.get(ATTR_LATITUDE), data.get(ATTR_LONGITUDE)) + if distance is None or distance > self._radius: + continue + callsign = data[ATTR_CALLSIGN].strip() + if callsign == '': + continue + currently_tracked.add(callsign) + if self._previously_tracked is not None: + entries = currently_tracked - self._previously_tracked + exits = self._previously_tracked - currently_tracked + self._handle_boundary(entries, EVENT_OPENSKY_ENTRY) + self._handle_boundary(exits, EVENT_OPENSKY_EXIT) + self._state = len(currently_tracked) + self._previously_tracked = currently_tracked + + @property + def device_state_attributes(self): + """Return the state attributes.""" + return { + ATTR_ATTRIBUTION: OPENSKY_ATTRIBUTION + } + + @property + def unit_of_measurement(self): + """Unit of measurement.""" + return 'flights' + + @property + def icon(self): + """Icon.""" + return 'mdi:airplane' From b1621d4175e5e2676d9e948407ede778faa36e42 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 20 Apr 2017 08:15:26 +0200 Subject: [PATCH 129/146] Add ping binary sensor (#7052) * Add ping binary sensor * Fix typo and lint issues * Use SCAN_INTERVAL --- .coveragerc | 1 + .../components/binary_sensor/ping.py | 130 ++++++++++++++++++ 2 files changed, 131 insertions(+) create mode 100644 homeassistant/components/binary_sensor/ping.py diff --git a/.coveragerc b/.coveragerc index ff081214ec7..3cd614e1503 100644 --- a/.coveragerc +++ b/.coveragerc @@ -165,6 +165,7 @@ omit = homeassistant/components/binary_sensor/flic.py homeassistant/components/binary_sensor/hikvision.py homeassistant/components/binary_sensor/iss.py + homeassistant/components/binary_sensor/ping.py homeassistant/components/binary_sensor/rest.py homeassistant/components/browser.py homeassistant/components/camera/amcrest.py diff --git a/homeassistant/components/binary_sensor/ping.py b/homeassistant/components/binary_sensor/ping.py new file mode 100644 index 00000000000..cee5b81f00d --- /dev/null +++ b/homeassistant/components/binary_sensor/ping.py @@ -0,0 +1,130 @@ +""" +Tracks the latency of a host by sending ICMP echo requests (ping). + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/binary_sensor.ping/ +""" +import logging +import subprocess +import re +import sys +from datetime import timedelta + +import voluptuous as vol + +import homeassistant.helpers.config_validation as cv +from homeassistant.components.binary_sensor import ( + BinarySensorDevice, PLATFORM_SCHEMA) +from homeassistant.const import CONF_NAME, CONF_HOST + +_LOGGER = logging.getLogger(__name__) + +ATTR_ROUND_TRIP_TIME_AVG = 'round_trip_time_avg' +ATTR_ROUND_TRIP_TIME_MAX = 'round_trip_time_max' +ATTR_ROUND_TRIP_TIME_MDEV = 'round_trip_time_mdev' +ATTR_ROUND_TRIP_TIME_MIN = 'round_trip_time_min' + +CONF_PING_COUNT = 'count' + +DEFAULT_NAME = 'Ping Binary sensor' +DEFAULT_PING_COUNT = 5 +DEFAULT_SENSOR_CLASS = 'connectivity' + +SCAN_INTERVAL = timedelta(minutes=5) + +PING_MATCHER = re.compile( + r'(?P\d+.\d+)\/(?P\d+.\d+)\/(?P\d+.\d+)\/(?P\d+.\d+)') + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ + vol.Required(CONF_HOST): cv.string, + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, + vol.Optional(CONF_PING_COUNT, default=DEFAULT_PING_COUNT): cv.positive_int, +}) + + +def setup_platform(hass, config, add_devices, discovery_info=None): + """Set up the Ping Binary sensor.""" + name = config.get(CONF_NAME) + host = config.get(CONF_HOST) + count = config.get(CONF_PING_COUNT) + + add_devices([PingBinarySensor(name, PingData(host, count))], True) + + +class PingBinarySensor(BinarySensorDevice): + """Representation of a Ping Binary sensor.""" + + def __init__(self, name, ping): + """Initialize the Ping Binary sensor.""" + self._name = name + self.ping = ping + + @property + def name(self): + """Return the name of the device.""" + return self._name + + @property + def device_class(self): + """Return the class of this sensor.""" + return DEFAULT_SENSOR_CLASS + + @property + def is_on(self): + """Return true if the binary sensor is on.""" + return self.ping.available + + @property + def device_state_attributes(self): + """Return the state attributes of the ICMP checo request.""" + if self.ping.data is not False: + return { + ATTR_ROUND_TRIP_TIME_AVG: self.ping.data['avg'], + ATTR_ROUND_TRIP_TIME_MAX: self.ping.data['max'], + ATTR_ROUND_TRIP_TIME_MDEV: self.ping.data['mdev'], + ATTR_ROUND_TRIP_TIME_MIN: self.ping.data['min'], + } + + def update(self): + """Get the latest data.""" + self.ping.update() + + +class PingData(object): + """The Class for handling the data retrieval.""" + + def __init__(self, host, count): + """Initialize the data object.""" + self._ip_address = host + self._count = count + self.data = {} + self.available = False + + if sys.platform == 'win32': + self._ping_cmd = [ + 'ping', '-n', str(self._count), '-w 1000', self._ip_address] + else: + self._ping_cmd = [ + 'ping', '-n', '-q', '-c', str(self._count), '-W1', + self._ip_address] + + def ping(self): + """Send ICMP echo request and return details if success.""" + pinger = subprocess.Popen( + self._ping_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + try: + out = pinger.communicate() + match = PING_MATCHER.search(str(out).split('\n')[-1]) + rtt_min, rtt_avg, rtt_max, rtt_mdev = match.groups() + return { + 'min': rtt_min, + 'avg': rtt_avg, + 'max': rtt_max, + 'mdev': rtt_mdev} + except (subprocess.CalledProcessError, AttributeError): + return False + + def update(self): + """Retrieve the latest details from the host.""" + self.data = self.ping() + self.available = bool(self.data) From 0c14c66fbc64ed8d2730204437e29f3410ec0493 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6ren=20Oldag?= Date: Thu, 20 Apr 2017 02:32:20 -0400 Subject: [PATCH 130/146] Added light.pwm component. (#7009) * Added light.pwm component. * Renamed pwm platform to rpi_gpio_pwm. * Update requirements_all.txt --- .coveragerc | 1 + .../components/light/rpi_gpio_pwm.py | 213 ++++++++++++++++++ requirements_all.txt | 3 + 3 files changed, 217 insertions(+) create mode 100644 homeassistant/components/light/rpi_gpio_pwm.py diff --git a/.coveragerc b/.coveragerc index 3cd614e1503..623e985c8f5 100644 --- a/.coveragerc +++ b/.coveragerc @@ -236,6 +236,7 @@ omit = homeassistant/components/light/limitlessled.py homeassistant/components/light/mystrom.py homeassistant/components/light/osramlightify.py + homeassistant/components/light/rpi_gpio_pwm.py homeassistant/components/light/piglow.py homeassistant/components/light/tikteck.py homeassistant/components/light/tradfri.py diff --git a/homeassistant/components/light/rpi_gpio_pwm.py b/homeassistant/components/light/rpi_gpio_pwm.py new file mode 100644 index 00000000000..c8ba110c58a --- /dev/null +++ b/homeassistant/components/light/rpi_gpio_pwm.py @@ -0,0 +1,213 @@ +""" +Support for LED lights that can be controlled using PWM. + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/light.pwm/ +""" + +import logging + +import voluptuous as vol + +from homeassistant.const import CONF_NAME, CONF_TYPE +from homeassistant.components.light import ( + Light, ATTR_BRIGHTNESS, ATTR_RGB_COLOR, ATTR_TRANSITION, + SUPPORT_BRIGHTNESS, SUPPORT_RGB_COLOR, SUPPORT_TRANSITION, PLATFORM_SCHEMA) +import homeassistant.helpers.config_validation as cv + +REQUIREMENTS = ['pwmled==1.1.1'] + +_LOGGER = logging.getLogger(__name__) + +CONF_LEDS = 'leds' +CONF_DRIVER = 'driver' +CONF_PINS = 'pins' +CONF_FREQUENCY = 'frequency' +CONF_ADDRESS = 'address' + +CONF_DRIVER_GPIO = 'gpio' +CONF_DRIVER_PCA9685 = 'pca9685' +CONF_DRIVER_TYPES = [CONF_DRIVER_GPIO, CONF_DRIVER_PCA9685] + +CONF_LED_TYPE_SIMPLE = 'simple' +CONF_LED_TYPE_RGB = 'rgb' +CONF_LED_TYPE_RGBW = 'rgbw' +CONF_LED_TYPES = [CONF_LED_TYPE_SIMPLE, CONF_LED_TYPE_RGB, CONF_LED_TYPE_RGBW] + +DEFAULT_COLOR = [255, 255, 255] + +SUPPORT_SIMPLE_LED = (SUPPORT_BRIGHTNESS | SUPPORT_TRANSITION) +SUPPORT_RGB_LED = (SUPPORT_BRIGHTNESS | SUPPORT_RGB_COLOR | SUPPORT_TRANSITION) + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ + vol.Required(CONF_LEDS): vol.All(cv.ensure_list, [ + { + vol.Required(CONF_NAME): cv.string, + vol.Required(CONF_DRIVER): vol.In(CONF_DRIVER_TYPES), + vol.Required(CONF_PINS): vol.All(cv.ensure_list, + [cv.positive_int]), + vol.Required(CONF_TYPE): vol.In(CONF_LED_TYPES), + vol.Optional(CONF_FREQUENCY): cv.positive_int, + vol.Optional(CONF_ADDRESS): cv.byte + } + ]) +}) + + +def setup_platform(hass, config, add_devices, discovery_info=None): + """Setup the pwm lights.""" + from pwmled.led import SimpleLed + from pwmled.led.rgb import RgbLed + from pwmled.led.rgbw import RgbwLed + from pwmled.driver.gpio import GpioDriver + from pwmled.driver.pca9685 import Pca9685Driver + + leds = [] + for led_conf in config[CONF_LEDS]: + driver_type = led_conf[CONF_DRIVER] + pins = led_conf[CONF_PINS] + opt_args = {} + if CONF_FREQUENCY in led_conf: + opt_args['freq'] = led_conf[CONF_FREQUENCY] + if driver_type == CONF_DRIVER_GPIO: + driver = GpioDriver(pins, **opt_args) + elif driver_type == CONF_DRIVER_PCA9685: + if CONF_ADDRESS in led_conf: + opt_args['address'] = led_conf[CONF_ADDRESS] + driver = Pca9685Driver(pins, **opt_args) + else: + _LOGGER.error("Invalid driver type.") + return + + name = led_conf[CONF_NAME] + led_type = led_conf[CONF_TYPE] + if led_type == CONF_LED_TYPE_SIMPLE: + led = PwmSimpleLed(SimpleLed(driver), name) + elif led_type == CONF_LED_TYPE_RGB: + led = PwmRgbLed(RgbLed(driver), name) + elif led_type == CONF_LED_TYPE_RGBW: + led = PwmRgbLed(RgbwLed(driver), name) + else: + _LOGGER.error("Invalid led type.") + return + leds.append(led) + + add_devices(leds) + + +class PwmSimpleLed(Light): + """Representation of a simple on-color pwm led.""" + + def __init__(self, led, name): + """Initialize led.""" + self._led = led + self._name = name + self._is_on = False + self._brightness = 255 + + @property + def should_poll(self): + """No polling needed.""" + return False + + @property + def name(self): + """Return the name of the group.""" + return self._name + + @property + def is_on(self): + """Return true if device is on.""" + return self._is_on + + @property + def brightness(self): + """Return the brightness property.""" + return self._brightness + + @property + def supported_features(self): + """Flag supported features.""" + return SUPPORT_SIMPLE_LED + + def turn_on(self, **kwargs): + """Turn on a led.""" + if ATTR_BRIGHTNESS in kwargs: + self._brightness = kwargs[ATTR_BRIGHTNESS] + + if ATTR_TRANSITION in kwargs: + transition_time = kwargs[ATTR_TRANSITION] + self._led.transition( + transition_time, + is_on=True, + brightness=_from_hass_brightness(self._brightness)) + else: + self._led.set(is_on=True, + brightness=_from_hass_brightness(self._brightness)) + + self._is_on = True + self.schedule_update_ha_state() + + def turn_off(self, **kwargs): + """Turn off a led.""" + if self.is_on: + if ATTR_TRANSITION in kwargs: + transition_time = kwargs[ATTR_TRANSITION] + self._led.transition(transition_time, is_on=False) + else: + self._led.off() + + self._is_on = False + self.schedule_update_ha_state() + + +class PwmRgbLed(PwmSimpleLed): + """Representation of a rgb(w) pwm led.""" + + def __init__(self, led, name): + """Initialize led.""" + super().__init__(led, name) + self._color = DEFAULT_COLOR + + @property + def rgb_color(self): + """Return the color property.""" + return self._color + + @property + def supported_features(self): + """Flag supported features.""" + return SUPPORT_RGB_LED + + def turn_on(self, **kwargs): + """Turn on a led.""" + if ATTR_RGB_COLOR in kwargs: + self._color = kwargs[ATTR_RGB_COLOR] + if ATTR_BRIGHTNESS in kwargs: + self._brightness = kwargs[ATTR_BRIGHTNESS] + + if ATTR_TRANSITION in kwargs: + transition_time = kwargs[ATTR_TRANSITION] + self._led.transition( + transition_time, + is_on=True, + brightness=_from_hass_brightness(self._brightness), + color=_from_hass_color(self._color)) + else: + self._led.set(is_on=True, + brightness=_from_hass_brightness(self._brightness), + color=_from_hass_color(self._color)) + + self._is_on = True + self.schedule_update_ha_state() + + +def _from_hass_brightness(brightness): + """Convert Home Assistant brightness units to percentage.""" + return brightness / 255 + + +def _from_hass_color(color): + """Convert Home Assistant RGB list to Color tuple.""" + from pwmled import Color + return Color(*tuple(color)) diff --git a/requirements_all.txt b/requirements_all.txt index b737eb5e10b..59178bb5df1 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -468,6 +468,9 @@ pushetta==1.0.15 # homeassistant.components.sensor.waqi pwaqi==3.0 +# homeassistant.components.light.rpi_gpio_pwm +pwmled==1.1.1 + # homeassistant.components.sensor.cpuspeed py-cpuinfo==3.0.0 From 2d5ab520ef8752835f172a37ee07f67d957a007a Mon Sep 17 00:00:00 2001 From: Mitko Masarliev Date: Thu, 20 Apr 2017 10:08:53 +0300 Subject: [PATCH 131/146] Fix for errors on missing preview on LG webos TV (#6755) * fix for missing image preview on LG webos TV * fix to use largeIcon if it start with http --- homeassistant/components/media_player/webostv.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/media_player/webostv.py b/homeassistant/components/media_player/webostv.py index 7fa4fd697c5..b8f43486db1 100644 --- a/homeassistant/components/media_player/webostv.py +++ b/homeassistant/components/media_player/webostv.py @@ -238,7 +238,10 @@ class LgWebOSDevice(MediaPlayerDevice): def media_image_url(self): """Image url of current playing media.""" if self._current_source_id in self._app_list: - return self._app_list[self._current_source_id]['largeIcon'] + icon = self._app_list[self._current_source_id]['largeIcon'] + if not icon.startswith('http'): + icon = self._app_list[self._current_source_id]['icon'] + return icon return None @property From 2e11d49af3003e0fce14937a2d2367ed1dfccab3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre=20St=C3=A5hl?= Date: Thu, 20 Apr 2017 09:09:27 +0200 Subject: [PATCH 132/146] Fix auto discovery for Apple TV (#7188) --- homeassistant/components/media_player/apple_tv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/media_player/apple_tv.py b/homeassistant/components/media_player/apple_tv.py index 4059d81a671..3833d3f50bd 100644 --- a/homeassistant/components/media_player/apple_tv.py +++ b/homeassistant/components/media_player/apple_tv.py @@ -51,7 +51,7 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None): if discovery_info is not None: name = discovery_info['name'] host = discovery_info['host'] - login_id = discovery_info['properties']['hsgid'] + login_id = discovery_info['properties']['hG'] start_off = False else: name = config.get(CONF_NAME) From 93820d5124cb043e2f4373735f7c94ba48e689cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre=20St=C3=A5hl?= Date: Thu, 20 Apr 2017 09:10:06 +0200 Subject: [PATCH 133/146] Do not request artwork if not available (#7189) This should fix the "dancing media player" issue where the media player requests artwork when it's not really available, making the UI "dance". --- homeassistant/components/media_player/apple_tv.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/media_player/apple_tv.py b/homeassistant/components/media_player/apple_tv.py index 3833d3f50bd..580870cf375 100644 --- a/homeassistant/components/media_player/apple_tv.py +++ b/homeassistant/components/media_player/apple_tv.py @@ -145,6 +145,8 @@ class AppleTvDevice(MediaPlayerDevice): @callback def playstatus_update(self, updater, playing): """Print what is currently playing when it changes.""" + self._playing = playing + if self.state == STATE_IDLE: self._artwork_hash = None elif self._has_playing_media_changed(playing): @@ -153,7 +155,6 @@ class AppleTvDevice(MediaPlayerDevice): self._artwork_hash = hashlib.md5( base.encode('utf-8')).hexdigest() - self._playing = playing self.hass.async_add_job(self.async_update_ha_state()) def _has_playing_media_changed(self, new_playing): From 920d298c7e117cb9b83e3489df5d40860b5d334b Mon Sep 17 00:00:00 2001 From: mountainsandcode Date: Thu, 20 Apr 2017 09:11:55 +0200 Subject: [PATCH 134/146] mvglive bug fixes and improvements (#6953) * Refactored mvglive.py This pull requests builds on the first work with the mvglive sensor: - Refactoring the code so that multiple sensors for departures can be added - Rewrites the transport mode restrictions ("products") to be more modular - Fixes bugs, such as missing implementation of line restriction - Other improvements, such as including data attribution * Further improvements to mvglive sensor - The API returns the property 'direction', which can be used to filter U-Bahn trains by direction without having to enter all final destinations - The sensor icon now corresponds to the mode of transport of the next departure * UBahnDirection refactored U-Bahn SEV (bus replacement services) have unexpected direction values, fixed resulting bug and hound issues --- homeassistant/components/sensor/mvglive.py | 175 ++++++++++++--------- 1 file changed, 98 insertions(+), 77 deletions(-) diff --git a/homeassistant/components/sensor/mvglive.py b/homeassistant/components/sensor/mvglive.py index b8bab2a6b5d..c2f8c2be71f 100644 --- a/homeassistant/components/sensor/mvglive.py +++ b/homeassistant/components/sensor/mvglive.py @@ -10,149 +10,170 @@ from datetime import timedelta import voluptuous as vol import homeassistant.helpers.config_validation as cv -from homeassistant.util import Throttle from homeassistant.helpers.entity import Entity from homeassistant.components.sensor import PLATFORM_SCHEMA -from homeassistant.const import STATE_UNKNOWN +from homeassistant.const import ( + CONF_NAME, ATTR_ATTRIBUTION, STATE_UNKNOWN + ) REQUIREMENTS = ['PyMVGLive==1.1.3'] _LOGGER = logging.getLogger(__name__) -CONF_BUS = 'bus' -CONF_DEST = 'destination' -CONF_LINE = 'line' -CONF_OFFSET = 'offset' -CONF_SBAHN = 'sbahn' +CONF_NEXT_DEPARTURE = 'nextdeparture' + CONF_STATION = 'station' -CONF_TRAM = 'tram' -CONF_UBAHN = 'ubahn' +CONF_DESTINATIONS = 'destinations' +CONF_DIRECTIONS = 'directions' +CONF_LINES = 'lines' +CONF_PRODUCTS = 'products' +CONF_TIMEOFFSET = 'timeoffset' -ICON = 'mdi:bus' +ICONS = { + 'U-Bahn': 'mdi:subway', + 'Tram': 'mdi:tram', + 'Bus': 'mdi:bus', + 'S-Bahn': 'mdi:train', + 'SEV': 'mdi:checkbox-blank-circle-outline', + '-': 'mdi:clock' +} +ATTRIBUTION = "Data provided by MVG-live.de" -MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=15) +SCAN_INTERVAL = timedelta(seconds=30) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_STATION): cv.string, - vol.Optional(CONF_DEST, default=None): cv.string, - vol.Optional(CONF_LINE, default=None): cv.string, - vol.Optional(CONF_OFFSET, default=0): cv.positive_int, - vol.Optional(CONF_UBAHN, default=True): cv.boolean, - vol.Optional(CONF_TRAM, default=True): cv.boolean, - vol.Optional(CONF_BUS, default=True): cv.boolean, - vol.Optional(CONF_SBAHN, default=True): cv.boolean, + vol.Optional(CONF_NEXT_DEPARTURE): [{ + vol.Required(CONF_STATION): cv.string, + vol.Optional(CONF_DESTINATIONS, default=['']): cv.ensure_list_csv, + vol.Optional(CONF_DIRECTIONS, default=['']): cv.ensure_list_csv, + vol.Optional(CONF_LINES, default=['']): cv.ensure_list_csv, + vol.Optional(CONF_PRODUCTS, + default=['U-Bahn', 'Tram', + 'Bus', 'S-Bahn']): cv.ensure_list_csv, + vol.Optional(CONF_TIMEOFFSET, default=0): cv.positive_int, + vol.Optional(CONF_NAME): cv.string}] }) def setup_platform(hass, config, add_devices, discovery_info=None): - """Set up the MVG Live Sensor.""" - station = config.get(CONF_STATION) - destination = config.get(CONF_DEST) - line = config.get(CONF_LINE) - offset = config.get(CONF_OFFSET) - ubahn = config.get(CONF_UBAHN) - tram = config.get(CONF_TRAM) - bus = config.get(CONF_BUS) - sbahn = config.get(CONF_SBAHN) - - add_devices([MVGLiveSensor( - station, destination, line, offset, ubahn, tram, bus, sbahn)], True) + """Get the MVGLive sensor.""" + sensors = [] + for nextdeparture in config.get(CONF_NEXT_DEPARTURE): + sensors.append( + MVGLiveSensor( + nextdeparture.get(CONF_STATION), + nextdeparture.get(CONF_DESTINATIONS), + nextdeparture.get(CONF_DIRECTIONS), + nextdeparture.get(CONF_LINES), + nextdeparture.get(CONF_PRODUCTS), + nextdeparture.get(CONF_TIMEOFFSET), + nextdeparture.get(CONF_NAME))) + add_devices(sensors, True) +# pylint: disable=too-few-public-methods class MVGLiveSensor(Entity): """Implementation of an MVG Live sensor.""" - def __init__(self, station, destination, line, - offset, ubahn, tram, bus, sbahn): + def __init__(self, station, destinations, directions, + lines, products, timeoffset, name): """Initialize the sensor.""" self._station = station - self._destination = destination - self._line = line - self.data = MVGLiveData(station, destination, line, - offset, ubahn, tram, bus, sbahn) + self._name = name + self.data = MVGLiveData(station, destinations, directions, + lines, products, timeoffset) self._state = STATE_UNKNOWN + self._icon = ICONS['-'] @property def name(self): """Return the name of the sensor.""" - # e.g. - # 'Hauptbahnhof (S1)' - # 'Hauptbahnhof-Marienplatz' - # 'Hauptbahnhof-Marienplatz (S1)' - namestr = self._station - if self._destination: - namestr = '{}-{}'.format(namestr, self._destination) - if self._line: - namestr = '{} ({})'.format(namestr, self._line) - return namestr - - @property - def icon(self): - """Return the icon for the frontend.""" - return ICON + if self._name: + return self._name + else: + return self._station @property def state(self): - """Return the departure time of the next train.""" + """Return the next departure time.""" return self._state @property def state_attributes(self): """Return the state attributes.""" - return self.data.nextdeparture + return self.data.departures + + @property + def icon(self): + """Icon to use in the frontend, if any.""" + return self._icon + + @property + def unit_of_measurement(self): + """Return the unit this state is expressed in.""" + return "min" def update(self): """Get the latest data and update the state.""" self.data.update() - if not self.data.nextdeparture: + if not self.data.departures: self._state = '-' + self._icon = ICONS['-'] else: - self._state = self.data.nextdeparture.get('time', '-') + self._state = self.data.departures.get('time', '-') + self._icon = ICONS[self.data.departures.get('product', '-')] class MVGLiveData(object): """Pull data from the mvg-live.de web page.""" - def __init__(self, station, destination, line, - offset, ubahn, tram, bus, sbahn): + def __init__(self, station, destinations, directions, + lines, products, timeoffset): """Initialize the sensor.""" import MVGLive self._station = station - self._destination = destination - self._line = line - self._offset = offset - self._ubahn = ubahn - self._tram = tram - self._bus = bus - self._sbahn = sbahn + self._destinations = destinations + self._directions = directions + self._lines = lines + self._products = products + self._timeoffset = timeoffset + self._include_ubahn = True if 'U-Bahn' in self._products else False + self._include_tram = True if 'Tram' in self._products else False + self._include_bus = True if 'Bus' in self._products else False + self._include_sbahn = True if 'S-Bahn' in self._products else False self.mvg = MVGLive.MVGLive() - self.nextdeparture = {} + self.departures = {} - @Throttle(MIN_TIME_BETWEEN_UPDATES) def update(self): """Update the connection data.""" try: - _departures = self.mvg.getlivedata( - station=self._station, ubahn=self._ubahn, tram=self._tram, - bus=self._bus, sbahn=self._sbahn) + _departures = self.mvg.getlivedata(station=self._station, + ubahn=self._include_ubahn, + tram=self._include_tram, + bus=self._include_bus, + sbahn=self._include_sbahn) except ValueError: - self.nextdeparture = {} + self.departures = {} _LOGGER.warning("Returned data not understood.") return for _departure in _departures: # find the first departure meeting the criteria - if not _departure['destination'].startswith(self._destination): + if ('' not in self._destinations[:1] and + _departure['destination'] not in self._destinations): continue - elif (self._line is not None - and _departure['linename'] != self._line): + elif ('' not in self._directions[:1] and + _departure['direction'] not in self._directions): continue - elif _departure['time'] < self._offset: + elif ('' not in self._lines[:1] and + _departure['linename'] not in self._lines): + continue + elif _departure['time'] < self._timeoffset: continue # now select the relevant data - _nextdep = {} + _nextdep = {ATTR_ATTRIBUTION: ATTRIBUTION} for k in ['destination', 'linename', 'time', 'direction', 'product']: _nextdep[k] = _departure.get(k, '') _nextdep['time'] = int(_nextdep['time']) - self.nextdeparture = _nextdep + self.departures = _nextdep break From eb2e5e5b9da3129e97ab80868b0fb91bbd365982 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 20 Apr 2017 12:07:56 +0200 Subject: [PATCH 135/146] Upgrade py-cpuinfo to 3.2.0 (#7190) --- homeassistant/components/sensor/cpuspeed.py | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/sensor/cpuspeed.py b/homeassistant/components/sensor/cpuspeed.py index eeb52b8e35b..e26d12469d8 100644 --- a/homeassistant/components/sensor/cpuspeed.py +++ b/homeassistant/components/sensor/cpuspeed.py @@ -13,7 +13,7 @@ from homeassistant.const import CONF_NAME import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity -REQUIREMENTS = ['py-cpuinfo==3.0.0'] +REQUIREMENTS = ['py-cpuinfo==3.2.0'] _LOGGER = logging.getLogger(__name__) diff --git a/requirements_all.txt b/requirements_all.txt index 59178bb5df1..7775d07fb63 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -472,7 +472,7 @@ pwaqi==3.0 pwmled==1.1.1 # homeassistant.components.sensor.cpuspeed -py-cpuinfo==3.0.0 +py-cpuinfo==3.2.0 # homeassistant.components.hdmi_cec pyCEC==0.4.13 From bbeb64eb242079530446fd025241097d2b13d88f Mon Sep 17 00:00:00 2001 From: LvivEchoes Date: Fri, 21 Apr 2017 04:28:49 +0300 Subject: [PATCH 136/146] Add support of input registers while querying modbus sensor. (#7082) * Add support of input registers while querying modbus sensor. * Changed config option. Refactoring. --- homeassistant/components/modbus.py | 9 +++++ homeassistant/components/sensor/modbus.py | 46 +++++++++++++++++++---- 2 files changed, 47 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/modbus.py b/homeassistant/components/modbus.py index 1f1363f2060..3ed9fff9cf0 100644 --- a/homeassistant/components/modbus.py +++ b/homeassistant/components/modbus.py @@ -158,6 +158,15 @@ class ModbusHub(object): count, **kwargs) + def read_input_registers(self, unit, address, count): + """Read input registers.""" + with self._lock: + kwargs = {'unit': unit} if unit else {} + return self._client.read_input_registers( + address, + count, + **kwargs) + def read_holding_registers(self, unit, address, count): """Read holding registers.""" with self._lock: diff --git a/homeassistant/components/sensor/modbus.py b/homeassistant/components/sensor/modbus.py index 5b30f52d926..f1449e5df06 100644 --- a/homeassistant/components/sensor/modbus.py +++ b/homeassistant/components/sensor/modbus.py @@ -5,6 +5,7 @@ For more details about this platform, please refer to the documentation at https://home-assistant.io/components/sensor.modbus/ """ import logging +import struct import voluptuous as vol @@ -24,16 +25,28 @@ CONF_REGISTER = 'register' CONF_REGISTERS = 'registers' CONF_SCALE = 'scale' CONF_SLAVE = 'slave' +CONF_DATA_TYPE = 'data_type' +CONF_REGISTER_TYPE = 'register_type' + +REGISTER_TYPE_HOLDING = 'holding' +REGISTER_TYPE_INPUT = 'input' + +DATA_TYPE_INT = 'int' +DATA_TYPE_FLOAT = 'float' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_REGISTERS): [{ vol.Required(CONF_NAME): cv.string, vol.Required(CONF_REGISTER): cv.positive_int, + vol.Optional(CONF_REGISTER_TYPE, default=REGISTER_TYPE_HOLDING): + vol.In([REGISTER_TYPE_HOLDING, REGISTER_TYPE_INPUT]), vol.Optional(CONF_COUNT, default=1): cv.positive_int, vol.Optional(CONF_OFFSET, default=0): vol.Coerce(float), vol.Optional(CONF_PRECISION, default=0): cv.positive_int, vol.Optional(CONF_SCALE, default=1): vol.Coerce(float), vol.Optional(CONF_SLAVE): cv.positive_int, + vol.Optional(CONF_DATA_TYPE, default=DATA_TYPE_INT): + vol.In([DATA_TYPE_INT, DATA_TYPE_FLOAT]), vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string }] }) @@ -47,10 +60,12 @@ def setup_platform(hass, config, add_devices, discovery_info=None): register.get(CONF_NAME), register.get(CONF_SLAVE), register.get(CONF_REGISTER), + register.get(CONF_REGISTER_TYPE), register.get(CONF_UNIT_OF_MEASUREMENT), register.get(CONF_COUNT), register.get(CONF_SCALE), register.get(CONF_OFFSET), + register.get(CONF_DATA_TYPE), register.get(CONF_PRECISION))) add_devices(sensors) @@ -58,17 +73,20 @@ def setup_platform(hass, config, add_devices, discovery_info=None): class ModbusRegisterSensor(Entity): """Modbus resgister sensor.""" - def __init__(self, name, slave, register, unit_of_measurement, count, - scale, offset, precision): + def __init__(self, name, slave, register, register_type, + unit_of_measurement, count, scale, offset, data_type, + precision): """Initialize the modbus register sensor.""" self._name = name self._slave = int(slave) if slave else None self._register = int(register) + self._register_type = register_type self._unit_of_measurement = unit_of_measurement self._count = int(count) self._scale = scale self._offset = offset self._precision = precision + self._data_type = data_type self._value = None @property @@ -88,16 +106,28 @@ class ModbusRegisterSensor(Entity): def update(self): """Update the state of the sensor.""" - result = modbus.HUB.read_holding_registers( - self._slave, - self._register, - self._count) + if self._register_type == REGISTER_TYPE_INPUT: + result = modbus.HUB.read_input_registers( + self._slave, + self._register, + self._count) + else: + result = modbus.HUB.read_holding_registers( + self._slave, + self._register, + self._count) val = 0 if not result: _LOGGER.error("No response from modbus slave %s register %s", self._slave, self._register) return - for i, res in enumerate(result.registers): - val += res * (2**(i*16)) + if self._data_type == DATA_TYPE_FLOAT: + byte_string = b''.join( + [x.to_bytes(2, byteorder='big') for x in result.registers] + ) + val = struct.unpack(">f", byte_string)[0] + elif self._data_type == DATA_TYPE_INT: + for i, res in enumerate(result.registers): + val += res * (2**(i*16)) self._value = format( self._scale * val + self._offset, '.{}f'.format(self._precision)) From f641287aa24ab2ee142d8c35cc4ec7b806931cd4 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Fri, 21 Apr 2017 03:45:15 +0200 Subject: [PATCH 137/146] Add HassIO to discovery component (#7195) * Add HassIO to autodiscovery * Fix tests * fix tests * fix test v2 * fix mock test * call --- homeassistant/components/discovery.py | 7 +++++++ tests/components/test_discovery.py | 16 ++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/homeassistant/components/discovery.py b/homeassistant/components/discovery.py index ea8710158d1..01b25cf0a87 100644 --- a/homeassistant/components/discovery.py +++ b/homeassistant/components/discovery.py @@ -10,6 +10,7 @@ import asyncio import json from datetime import timedelta import logging +import os import voluptuous as vol @@ -29,12 +30,14 @@ SERVICE_NETGEAR = 'netgear_router' SERVICE_WEMO = 'belkin_wemo' SERVICE_HASS_IOS_APP = 'hass_ios' SERVICE_IKEA_TRADFRI = 'ikea_tradfri' +SERVICE_HASSIO = 'hassio' SERVICE_HANDLERS = { SERVICE_HASS_IOS_APP: ('ios', None), SERVICE_NETGEAR: ('device_tracker', None), SERVICE_WEMO: ('wemo', None), SERVICE_IKEA_TRADFRI: ('tradfri', None), + SERVICE_HASSIO: ('hassio', None), 'philips_hue': ('light', 'hue'), 'google_cast': ('media_player', 'cast'), 'panasonic_viera': ('media_player', 'panasonic_viera'), @@ -124,6 +127,10 @@ def async_setup(hass, config): """Schedule the first discovery when Home Assistant starts up.""" async_track_point_in_utc_time(hass, scan_devices, dt_util.utcnow()) + # discovery local services + if 'HASSIO' in os.environ: + hass.async_add_job(new_service_found(SERVICE_HASSIO, {})) + hass.bus.async_listen_once(EVENT_HOMEASSISTANT_START, schedule_first) return True diff --git a/tests/components/test_discovery.py b/tests/components/test_discovery.py index 6b03ffa34e7..7073c420341 100644 --- a/tests/components/test_discovery.py +++ b/tests/components/test_discovery.py @@ -1,5 +1,6 @@ """The tests for the discovery component.""" import asyncio +import os from unittest.mock import patch @@ -128,3 +129,18 @@ def test_discover_duplicates(hass): mock_discover.assert_called_with( hass, SERVICE_NO_PLATFORM, SERVICE_INFO, SERVICE_NO_PLATFORM_COMPONENT, BASE_CONFIG) + + +@asyncio.coroutine +def test_load_component_hassio(hass): + """Test load hassio component.""" + def discover(netdisco): + """Fake discovery.""" + return [] + + with patch.dict(os.environ, {'HASSIO': "FAKE_HASSIO"}), \ + patch('homeassistant.components.hassio.async_setup', + return_value=mock_coro(return_value=True)) as mock_hassio: + yield from mock_discovery(hass, discover) + + assert mock_hassio.called From e3f682c7d3bb67d57187e50b1f22583bd5e39a75 Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Fri, 21 Apr 2017 07:46:12 +0200 Subject: [PATCH 138/146] LIFX light effects (#7145) * Refactor into find_hsbk This will be useful for new methods that also have to find passed in colors. * Add AwaitAioLIFX This encapsulates the callback and Event that aiolifx needs and thus avoids an explosion of those when new calls are added. The refresh_state is now generally useful, so move it into its own method. * Initial effects support for LIFX These effects are useful as notifications. They mimic the breathe and pulse effects from the LIFX HTTP API: https://api.developer.lifx.com/docs/breathe-effect https://api.developer.lifx.com/docs/pulse-effect However, this implementation runs locally with the LIFX LAN protocol. * Saturate LIFX no color value Now the color is "full saturation, no brightness". This avoids a lot of temporary white when fading from the "no color" value and into a real color. * Organize LIFX effects in classes This is to move the setup/restore away from the actual effect, making it quite simple to add additional effects. * Stop running LIFX effects on conflicting service calls Turning the light on/off or starting a new effect will now stop the running effect. * Present default LIFX effects as light.turn_on effects This makes the effects (with default parameters) easily accessible from the UI. * Add LIFX colorloop effect This cycles the HSV colors, so that is added as an internal way to set a color. * Move lifx to its own package and split effects into a separate file * Always show LIFX light name in logs The name is actually the easiest way to identify a bulb so just using it as a fallback was a bit odd. * Compact effect getter * Always use full brightness for random flash color This is a stopgap. When a bit more infrastructure is in place, the intention is to turn the current hue some degrees. This will guarantee a flash color that is both unlike the current color and unlike white. * Clear effects concurrently We have to wait for the bulbs, so let us wait for all of them at once. * Add lifx_effect_stop The colorloop effect is most impressive if run on many lights. Testing this has revealed the need for an easy way to stop effects on all lights and return to the initial state of each bulb. This new call does just that. Calling turn_on/turn_off could also stop the effect but that would not restore the initial state. * Always calculate the initial effect color To fade nicely from power off, the breathe effect needs to keep an unchanging hue. So give up on using a static start color and just find the correct hue from the target color. The colorloop effect can start from anything but we use a random color just to keep things a little interesting during power on. * Fix lint * Update .coveragerc --- .coveragerc | 2 +- .../light/{lifx.py => lifx/__init__.py} | 190 +++++++--- .../components/light/lifx/effects.py | 338 ++++++++++++++++++ .../components/light/lifx/services.yaml | 99 +++++ 4 files changed, 571 insertions(+), 58 deletions(-) rename homeassistant/components/light/{lifx.py => lifx/__init__.py} (74%) create mode 100644 homeassistant/components/light/lifx/effects.py create mode 100644 homeassistant/components/light/lifx/services.yaml diff --git a/.coveragerc b/.coveragerc index 623e985c8f5..c8e59e55357 100644 --- a/.coveragerc +++ b/.coveragerc @@ -231,7 +231,7 @@ omit = homeassistant/components/light/flux_led.py homeassistant/components/light/hue.py homeassistant/components/light/hyperion.py - homeassistant/components/light/lifx.py + homeassistant/components/light/lifx/*.py homeassistant/components/light/lifx_legacy.py homeassistant/components/light/limitlessled.py homeassistant/components/light/mystrom.py diff --git a/homeassistant/components/light/lifx.py b/homeassistant/components/light/lifx/__init__.py similarity index 74% rename from homeassistant/components/light/lifx.py rename to homeassistant/components/light/lifx/__init__.py index 945c163435b..7c7bdd4eeea 100644 --- a/homeassistant/components/light/lifx.py +++ b/homeassistant/components/light/lifx/__init__.py @@ -10,19 +10,24 @@ import asyncio import sys from functools import partial from datetime import timedelta +import async_timeout import voluptuous as vol from homeassistant.components.light import ( - ATTR_BRIGHTNESS, ATTR_COLOR_TEMP, ATTR_RGB_COLOR, ATTR_TRANSITION, + Light, PLATFORM_SCHEMA, ATTR_BRIGHTNESS, ATTR_COLOR_NAME, ATTR_RGB_COLOR, + ATTR_COLOR_TEMP, ATTR_TRANSITION, ATTR_EFFECT, SUPPORT_BRIGHTNESS, SUPPORT_COLOR_TEMP, SUPPORT_RGB_COLOR, - SUPPORT_TRANSITION, Light, PLATFORM_SCHEMA) + SUPPORT_TRANSITION, SUPPORT_EFFECT) from homeassistant.util.color import ( color_temperature_mired_to_kelvin, color_temperature_kelvin_to_mired) from homeassistant import util from homeassistant.core import callback from homeassistant.helpers.event import async_track_point_in_utc_time import homeassistant.helpers.config_validation as cv +import homeassistant.util.color as color_util + +from . import effects as lifx_effects _LOGGER = logging.getLogger(__name__) @@ -35,18 +40,19 @@ BULB_LATENCY = 500 CONF_SERVER = 'server' +ATTR_HSBK = 'hsbk' + BYTE_MAX = 255 SHORT_MAX = 65535 SUPPORT_LIFX = (SUPPORT_BRIGHTNESS | SUPPORT_COLOR_TEMP | SUPPORT_RGB_COLOR | - SUPPORT_TRANSITION) + SUPPORT_TRANSITION | SUPPORT_EFFECT) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_SERVER, default='0.0.0.0'): cv.string, }) -# pylint: disable=unused-argument @asyncio.coroutine def async_setup_platform(hass, config, async_add_devices, discovery_info=None): """Setup the LIFX platform.""" @@ -65,6 +71,9 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None): local_addr=(server_addr, UDP_BROADCAST_PORT)) hass.async_add_job(coro) + + lifx_effects.setup(hass, lifx_manager) + return True @@ -104,10 +113,42 @@ class LIFXManager(object): entity = self.entities[device.mac_addr] _LOGGER.debug("%s unregister", entity.who) entity.device = None - entity.updated_event.set() self.hass.async_add_job(entity.async_update_ha_state()) +class AwaitAioLIFX: + """Wait for an aiolifx callback and return the message.""" + + def __init__(self, light): + """Initialize the wrapper.""" + self.light = light + self.device = None + self.message = None + self.event = asyncio.Event() + + @callback + def callback(self, device, message): + """Callback that aiolifx invokes when the response is received.""" + self.device = device + self.message = message + self.event.set() + + @asyncio.coroutine + def wait(self, method): + """Call an aiolifx method and wait for its response or a timeout.""" + self.event.clear() + method(self.callback) + + while self.light.available and not self.event.is_set(): + try: + with async_timeout.timeout(1.0, loop=self.light.hass.loop): + yield from self.event.wait() + except asyncio.TimeoutError: + pass + + return self.message + + def convert_rgb_to_hsv(rgb): """Convert Home Assistant RGB values to HSV values.""" red, green, blue = [_ / BYTE_MAX for _ in rgb] @@ -125,8 +166,8 @@ class LIFXLight(Light): def __init__(self, device): """Initialize the light.""" self.device = device - self.updated_event = asyncio.Event() self.blocker = None + self.effect_data = None self.postponed_update = None self._name = device.label self.set_power(device.power_level) @@ -145,10 +186,10 @@ class LIFXLight(Light): @property def who(self): """Return a string identifying the device.""" + ip_addr = '-' if self.device: - return self.device.ip_addr[0] - else: - return "(%s)" % self.name + ip_addr = self.device.ip_addr[0] + return "%s (%s)" % (ip_addr, self.name) @property def rgb_color(self): @@ -178,11 +219,21 @@ class LIFXLight(Light): _LOGGER.debug("is_on: %d", self._power) return self._power != 0 + @property + def effect(self): + """Return the currently running effect.""" + return self.effect_data.effect.name if self.effect_data else None + @property def supported_features(self): """Flag supported features.""" return SUPPORT_LIFX + @property + def effect_list(self): + """Return the list of supported effects.""" + return lifx_effects.effect_list() + @callback def update_after_transition(self, now): """Request new status after completion of the last transition.""" @@ -213,13 +264,85 @@ class LIFXLight(Light): @asyncio.coroutine def async_turn_on(self, **kwargs): """Turn the device on.""" + yield from self.stop_effect() + + if ATTR_EFFECT in kwargs: + yield from lifx_effects.default_effect(self, **kwargs) + return + if ATTR_TRANSITION in kwargs: fade = int(kwargs[ATTR_TRANSITION] * 1000) else: fade = 0 + hsbk, changed_color = self.find_hsbk(**kwargs) + _LOGGER.debug("turn_on: %s (%d) %d %d %d %d %d", + self.who, self._power, fade, *hsbk) + + if self._power == 0: + if changed_color: + self.device.set_color(hsbk, None, 0) + self.device.set_power(True, None, fade) + else: + self.device.set_power(True, None, 0) # racing for power status + if changed_color: + self.device.set_color(hsbk, None, fade) + + self.update_later(0) + if fade < BULB_LATENCY: + self.set_power(1) + self.set_color(*hsbk) + + @asyncio.coroutine + def async_turn_off(self, **kwargs): + """Turn the device off.""" + yield from self.stop_effect() + + if ATTR_TRANSITION in kwargs: + fade = int(kwargs[ATTR_TRANSITION] * 1000) + else: + fade = 0 + + self.device.set_power(False, None, fade) + + self.update_later(fade) + if fade < BULB_LATENCY: + self.set_power(0) + + @asyncio.coroutine + def async_update(self): + """Update bulb status (if it is available).""" + _LOGGER.debug("%s async_update", self.who) + if self.available and self.blocker is None: + yield from self.refresh_state() + + @asyncio.coroutine + def stop_effect(self): + """Stop the currently running effect (if any).""" + if self.effect_data: + yield from self.effect_data.effect.async_restore(self) + + @asyncio.coroutine + def refresh_state(self): + """Ask the device about its current state and update our copy.""" + msg = yield from AwaitAioLIFX(self).wait(self.device.get_color) + if msg is not None: + self.set_power(self.device.power_level) + self.set_color(*self.device.color) + self._name = self.device.label + + def find_hsbk(self, **kwargs): + """Find the desired color from a number of possible inputs.""" changed_color = False + hsbk = kwargs.pop(ATTR_HSBK, None) + if hsbk is not None: + return [hsbk, True] + + color_name = kwargs.pop(ATTR_COLOR_NAME, None) + if color_name is not None: + kwargs[ATTR_RGB_COLOR] = color_util.color_name_to_rgb(color_name) + if ATTR_RGB_COLOR in kwargs: hue, saturation, brightness = \ convert_rgb_to_hsv(kwargs[ATTR_RGB_COLOR]) @@ -242,54 +365,7 @@ class LIFXLight(Light): else: kelvin = self._kel - hsbk = [hue, saturation, brightness, kelvin] - _LOGGER.debug("turn_on: %s (%d) %d %d %d %d %d", - self.who, self._power, fade, *hsbk) - - if self._power == 0: - if changed_color: - self.device.set_color(hsbk, None, 0) - self.device.set_power(True, None, fade) - else: - self.device.set_power(True, None, 0) # racing for power status - if changed_color: - self.device.set_color(hsbk, None, fade) - - self.update_later(0) - if fade < BULB_LATENCY: - self.set_power(1) - self.set_color(*hsbk) - - @asyncio.coroutine - def async_turn_off(self, **kwargs): - """Turn the device off.""" - if ATTR_TRANSITION in kwargs: - fade = int(kwargs[ATTR_TRANSITION] * 1000) - else: - fade = 0 - - self.device.set_power(False, None, fade) - - self.update_later(fade) - if fade < BULB_LATENCY: - self.set_power(0) - - @callback - def got_color(self, device, msg): - """Callback that gets current power/color status.""" - self.set_power(device.power_level) - self.set_color(*device.color) - self._name = device.label - self.updated_event.set() - - @asyncio.coroutine - def async_update(self): - """Update bulb status (if it is available).""" - _LOGGER.debug("%s async_update", self.who) - if self.available and self.blocker is None: - self.updated_event.clear() - self.device.get_color(self.got_color) - yield from self.updated_event.wait() + return [[hue, saturation, brightness, kelvin], changed_color] def set_power(self, power): """Set power state value.""" diff --git a/homeassistant/components/light/lifx/effects.py b/homeassistant/components/light/lifx/effects.py new file mode 100644 index 00000000000..e2ba0a73534 --- /dev/null +++ b/homeassistant/components/light/lifx/effects.py @@ -0,0 +1,338 @@ +"""Support for light effects for the LIFX light platform.""" +import logging +import asyncio +import random +from os import path + +import voluptuous as vol + +from homeassistant.components.light import ( + DOMAIN, ATTR_BRIGHTNESS, ATTR_COLOR_NAME, ATTR_RGB_COLOR, ATTR_EFFECT) +from homeassistant.config import load_yaml_config_file +from homeassistant.const import (ATTR_ENTITY_ID) +from homeassistant.helpers.service import extract_entity_ids +import homeassistant.helpers.config_validation as cv + +_LOGGER = logging.getLogger(__name__) + +SERVICE_EFFECT_BREATHE = 'lifx_effect_breathe' +SERVICE_EFFECT_PULSE = 'lifx_effect_pulse' +SERVICE_EFFECT_COLORLOOP = 'lifx_effect_colorloop' +SERVICE_EFFECT_STOP = 'lifx_effect_stop' + +ATTR_POWER_ON = 'power_on' +ATTR_PERIOD = 'period' +ATTR_CYCLES = 'cycles' +ATTR_SPREAD = 'spread' +ATTR_CHANGE = 'change' + +# aiolifx waveform modes +WAVEFORM_SINE = 1 +WAVEFORM_PULSE = 4 + +LIFX_EFFECT_SCHEMA = vol.Schema({ + vol.Optional(ATTR_ENTITY_ID): cv.entity_ids, + vol.Optional(ATTR_POWER_ON, default=True): cv.boolean, +}) + +LIFX_EFFECT_BREATHE_SCHEMA = LIFX_EFFECT_SCHEMA.extend({ + ATTR_BRIGHTNESS: vol.All(vol.Coerce(int), vol.Clamp(min=0, max=255)), + ATTR_COLOR_NAME: cv.string, + ATTR_RGB_COLOR: vol.All(vol.ExactSequence((cv.byte, cv.byte, cv.byte)), + vol.Coerce(tuple)), + vol.Optional(ATTR_PERIOD, default=1.0): vol.All(vol.Coerce(float), + vol.Range(min=0.05)), + vol.Optional(ATTR_CYCLES, default=1.0): vol.All(vol.Coerce(float), + vol.Range(min=1)), +}) + +LIFX_EFFECT_PULSE_SCHEMA = LIFX_EFFECT_BREATHE_SCHEMA + +LIFX_EFFECT_COLORLOOP_SCHEMA = LIFX_EFFECT_SCHEMA.extend({ + ATTR_BRIGHTNESS: vol.All(vol.Coerce(int), vol.Clamp(min=0, max=255)), + vol.Optional(ATTR_PERIOD, default=60): vol.All(vol.Coerce(float), + vol.Clamp(min=1)), + vol.Optional(ATTR_CHANGE, default=20): vol.All(vol.Coerce(float), + vol.Clamp(min=0, max=360)), + vol.Optional(ATTR_SPREAD, default=30): vol.All(vol.Coerce(float), + vol.Clamp(min=0, max=360)), +}) + +LIFX_EFFECT_STOP_SCHEMA = vol.Schema({ + vol.Optional(ATTR_ENTITY_ID): cv.entity_ids, + vol.Optional(ATTR_POWER_ON, default=False): cv.boolean, +}) + + +def setup(hass, lifx_manager): + """Register the LIFX effects as hass service calls.""" + @asyncio.coroutine + def async_service_handle(service): + """Internal func for applying a service.""" + entity_ids = extract_entity_ids(hass, service) + if entity_ids: + devices = [entity for entity in lifx_manager.entities.values() + if entity.entity_id in entity_ids] + else: + devices = list(lifx_manager.entities.values()) + + if devices: + yield from start_effect(hass, devices, + service.service, **service.data) + + descriptions = load_yaml_config_file( + path.join(path.dirname(__file__), 'services.yaml')) + + hass.services.async_register( + DOMAIN, SERVICE_EFFECT_BREATHE, async_service_handle, + descriptions.get(SERVICE_EFFECT_BREATHE), + schema=LIFX_EFFECT_BREATHE_SCHEMA) + + hass.services.async_register( + DOMAIN, SERVICE_EFFECT_PULSE, async_service_handle, + descriptions.get(SERVICE_EFFECT_PULSE), + schema=LIFX_EFFECT_PULSE_SCHEMA) + + hass.services.async_register( + DOMAIN, SERVICE_EFFECT_COLORLOOP, async_service_handle, + descriptions.get(SERVICE_EFFECT_COLORLOOP), + schema=LIFX_EFFECT_COLORLOOP_SCHEMA) + + hass.services.async_register( + DOMAIN, SERVICE_EFFECT_STOP, async_service_handle, + descriptions.get(SERVICE_EFFECT_STOP), + schema=LIFX_EFFECT_STOP_SCHEMA) + + +@asyncio.coroutine +def start_effect(hass, devices, service, **data): + """Start a light effect.""" + tasks = [] + for light in devices: + tasks.append(hass.async_add_job(light.stop_effect())) + yield from asyncio.wait(tasks, loop=hass.loop) + + if service in SERVICE_EFFECT_BREATHE: + effect = LIFXEffectBreathe(hass, devices) + elif service in SERVICE_EFFECT_PULSE: + effect = LIFXEffectPulse(hass, devices) + elif service == SERVICE_EFFECT_COLORLOOP: + effect = LIFXEffectColorloop(hass, devices) + elif service == SERVICE_EFFECT_STOP: + effect = LIFXEffectStop(hass, devices) + + hass.async_add_job(effect.async_perform(**data)) + + +@asyncio.coroutine +def default_effect(light, **kwargs): + """Start an effect with default parameters.""" + service = kwargs[ATTR_EFFECT] + data = { + ATTR_ENTITY_ID: light.entity_id, + } + if service in (SERVICE_EFFECT_BREATHE, SERVICE_EFFECT_PULSE): + data[ATTR_RGB_COLOR] = [ + random.randint(1, 127), + random.randint(1, 127), + random.randint(1, 127), + ] + data[ATTR_BRIGHTNESS] = 255 + yield from light.hass.services.async_call(DOMAIN, service, data) + + +def effect_list(): + """Return the list of supported effects.""" + return [ + SERVICE_EFFECT_COLORLOOP, + SERVICE_EFFECT_BREATHE, + SERVICE_EFFECT_PULSE, + SERVICE_EFFECT_STOP, + ] + + +class LIFXEffectData(object): + """Structure describing a running effect.""" + + def __init__(self, effect, power, color): + """Initialize data structure.""" + self.effect = effect + self.power = power + self.color = color + + +class LIFXEffect(object): + """Representation of a light effect running on a number of lights.""" + + def __init__(self, hass, lights): + """Initialize the effect.""" + self.hass = hass + self.lights = lights + + @asyncio.coroutine + def async_perform(self, **kwargs): + """Do common setup and play the effect.""" + yield from self.async_setup(**kwargs) + yield from self.async_play(**kwargs) + + @asyncio.coroutine + def async_setup(self, **kwargs): + """Prepare all lights for the effect.""" + for light in self.lights: + yield from light.refresh_state() + if not light.device: + self.lights.remove(light) + else: + light.effect_data = LIFXEffectData( + self, light.is_on, light.device.color) + + # Temporarily turn on power for the effect to be visible + if kwargs[ATTR_POWER_ON] and not light.is_on: + hsbk = self.from_poweroff_hsbk(light, **kwargs) + light.device.set_color(hsbk) + light.device.set_power(True) + + # pylint: disable=no-self-use + @asyncio.coroutine + def async_play(self, **kwargs): + """Play the effect.""" + yield None + + @asyncio.coroutine + def async_restore(self, light): + """Restore to the original state (if we are still running).""" + if light.effect_data: + if light.effect_data.effect == self: + if light.device and not light.effect_data.power: + light.device.set_power(False) + yield from asyncio.sleep(0.5) + if light.device: + light.device.set_color(light.effect_data.color) + yield from asyncio.sleep(0.5) + light.effect_data = None + self.lights.remove(light) + + def from_poweroff_hsbk(self, light, **kwargs): + """The initial color when starting from a powered off state.""" + return None + + +class LIFXEffectBreathe(LIFXEffect): + """Representation of a breathe effect.""" + + def __init__(self, hass, lights): + """Initialize the breathe effect.""" + super(LIFXEffectBreathe, self).__init__(hass, lights) + self.name = SERVICE_EFFECT_BREATHE + self.waveform = WAVEFORM_SINE + + @asyncio.coroutine + def async_play(self, **kwargs): + """Play the effect on all lights.""" + for light in self.lights: + self.hass.async_add_job(self.async_light_play(light, **kwargs)) + + @asyncio.coroutine + def async_light_play(self, light, **kwargs): + """Play a light effect on the bulb.""" + period = kwargs[ATTR_PERIOD] + cycles = kwargs[ATTR_CYCLES] + hsbk, _ = light.find_hsbk(**kwargs) + + # Start the effect + args = { + 'transient': 1, + 'color': hsbk, + 'period': int(period*1000), + 'cycles': cycles, + 'duty_cycle': 0, + 'waveform': self.waveform, + } + light.device.set_waveform(args) + + # Wait for completion and restore the initial state + yield from asyncio.sleep(period*cycles) + yield from self.async_restore(light) + + def from_poweroff_hsbk(self, light, **kwargs): + """Initial color is the target color, but no brightness.""" + hsbk, _ = light.find_hsbk(**kwargs) + return [hsbk[0], hsbk[1], 0, hsbk[2]] + + +class LIFXEffectPulse(LIFXEffectBreathe): + """Representation of a pulse effect.""" + + def __init__(self, hass, lights): + """Initialize the pulse effect.""" + super(LIFXEffectPulse, self).__init__(hass, lights) + self.name = SERVICE_EFFECT_PULSE + self.waveform = WAVEFORM_PULSE + + +class LIFXEffectColorloop(LIFXEffect): + """Representation of a colorloop effect.""" + + def __init__(self, hass, lights): + """Initialize the colorloop effect.""" + super(LIFXEffectColorloop, self).__init__(hass, lights) + self.name = SERVICE_EFFECT_COLORLOOP + + @asyncio.coroutine + def async_play(self, **kwargs): + """Play the effect on all lights.""" + period = kwargs[ATTR_PERIOD] + spread = kwargs[ATTR_SPREAD] + change = kwargs[ATTR_CHANGE] + direction = 1 if random.randint(0, 1) else -1 + + # Random start + hue = random.randint(0, 359) + + while self.lights: + hue = (hue + direction*change) % 360 + + random.shuffle(self.lights) + lhue = hue + + transition = int(1000 * random.uniform(period/2, period)) + for light in self.lights: + if spread > 0: + transition = int(1000 * random.uniform(period/2, period)) + + if ATTR_BRIGHTNESS in kwargs: + brightness = int(65535/255*kwargs[ATTR_BRIGHTNESS]) + else: + brightness = light.effect_data.color[2] + + hsbk = [ + int(65535/359*lhue), + int(random.uniform(0.8, 1.0)*65535), + brightness, + 4000, + ] + light.device.set_color(hsbk, None, transition) + + # Adjust the next light so the full spread is used + if len(self.lights) > 1: + lhue = (lhue + spread/(len(self.lights)-1)) % 360 + + yield from asyncio.sleep(period) + + def from_poweroff_hsbk(self, light, **kwargs): + """Start from a random hue.""" + return [random.randint(0, 65535), 65535, 0, 4000] + + +class LIFXEffectStop(LIFXEffect): + """A no-op effect, but starting it will stop an existing effect.""" + + def __init__(self, hass, lights): + """Initialize the stop effect.""" + super(LIFXEffectStop, self).__init__(hass, lights) + self.name = SERVICE_EFFECT_STOP + + @asyncio.coroutine + def async_perform(self, **kwargs): + """Do nothing.""" + yield None diff --git a/homeassistant/components/light/lifx/services.yaml b/homeassistant/components/light/lifx/services.yaml new file mode 100644 index 00000000000..1b34c54f253 --- /dev/null +++ b/homeassistant/components/light/lifx/services.yaml @@ -0,0 +1,99 @@ +lifx_effect_breathe: + description: Run a breathe effect by fading to a color and back. + + fields: + entity_id: + description: Name(s) of entities to run the effect on + example: 'light.kitchen' + + brightness: + description: Number between 0..255 indicating brightness when the effect peaks + example: 120 + + color_name: + description: A human readable color name + example: 'red' + + rgb_color: + description: Color for the fade in RGB-format + example: '[255, 100, 100]' + + period: + description: Duration of the effect in seconds (default 1.0) + example: 3 + + cycles: + description: Number of times the effect should run (default 1.0) + example: 2 + + power_on: + description: Powered off lights are temporarily turned on during the effect (default True) + example: False + +lifx_effect_pulse: + description: Run a flash effect by changing to a color and back. + + fields: + entity_id: + description: Name(s) of entities to run the effect on + example: 'light.kitchen' + + brightness: + description: Number between 0..255 indicating brightness of the temporary color + example: 120 + + color_name: + description: A human readable color name + example: 'red' + + rgb_color: + description: The temporary color in RGB-format + example: '[255, 100, 100]' + + period: + description: Duration of the effect in seconds (default 1.0) + example: 3 + + cycles: + description: Number of times the effect should run (default 1.0) + example: 2 + + power_on: + description: Powered off lights are temporarily turned on during the effect (default True) + example: False + +lifx_effect_colorloop: + description: Run an effect with looping colors. + + fields: + entity_id: + description: Name(s) of entities to run the effect on + example: 'light.disco1, light.disco2, light.disco3' + + brightness: + description: Number between 0..255 indicating brightness of the effect. Leave this out to maintain the current brightness of each participating light + example: 120 + + period: + description: Duration between color changes (deafult 60) + example: 180 + + change: + description: Hue movement per period, in degrees on a color wheel (default 20) + example: 45 + + spread: + description: Maximum hue difference between participating lights, in degrees on a color wheel (default 30) + example: 0 + + power_on: + description: Powered off lights are temporarily turned on during the effect (default True) + example: False + +lifx_effect_stop: + description: Stop a running effect. + + fields: + entity_id: + description: Name(s) of entities to stop effects on. Leave out to stop effects everywhere. + example: 'light.bedroom' From 5c737cfa6ee5aa7e5367da6f6b90daacd40eba72 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Fri, 21 Apr 2017 12:20:19 +0200 Subject: [PATCH 139/146] HassIO API v2 (#7201) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add an optional extended description… --- homeassistant/components/hassio.py | 10 ++++++++-- homeassistant/components/services.yaml | 3 +++ tests/components/test_hassio.py | 18 ++++++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/hassio.py b/homeassistant/components/hassio.py index 25da7a67f4b..c74918dbfa0 100644 --- a/homeassistant/components/hassio.py +++ b/homeassistant/components/hassio.py @@ -31,9 +31,11 @@ SERVICE_HOST_SHUTDOWN = 'host_shutdown' SERVICE_HOST_REBOOT = 'host_reboot' SERVICE_HOST_UPDATE = 'host_update' -SERVICE_SUPERVISOR_UPDATE = 'supervisor_update' SERVICE_HOMEASSISTANT_UPDATE = 'homeassistant_update' +SERVICE_SUPERVISOR_UPDATE = 'supervisor_update' +SERVICE_SUPERVISOR_RELOAD = 'supervisor_reload' + SERVICE_ADDON_INSTALL = 'addon_install' SERVICE_ADDON_UNINSTALL = 'addon_uninstall' SERVICE_ADDON_UPDATE = 'addon_update' @@ -61,8 +63,9 @@ SERVICE_MAP = { SERVICE_HOST_SHUTDOWN: None, SERVICE_HOST_REBOOT: None, SERVICE_HOST_UPDATE: SCHEMA_SERVICE_UPDATE, - SERVICE_SUPERVISOR_UPDATE: SCHEMA_SERVICE_UPDATE, SERVICE_HOMEASSISTANT_UPDATE: SCHEMA_SERVICE_UPDATE, + SERVICE_SUPERVISOR_UPDATE: SCHEMA_SERVICE_UPDATE, + SERVICE_SUPERVISOR_RELOAD: None, SERVICE_ADDON_INSTALL: SCHEMA_SERVICE_ADDONS_VERSION, SERVICE_ADDON_UNINSTALL: SCHEMA_SERVICE_ADDONS, SERVICE_ADDON_START: SCHEMA_SERVICE_ADDONS, @@ -117,6 +120,9 @@ def async_setup(hass, config): elif service.service == SERVICE_SUPERVISOR_UPDATE: yield from hassio.send_command( "/supervisor/update", payload=version) + elif service.service == SERVICE_SUPERVISOR_RELOAD: + yield from hassio.send_command( + "/supervisor/reload", timeout=LONG_TASK_TIMEOUT) elif service.service == SERVICE_HOMEASSISTANT_UPDATE: yield from hassio.send_command( "/homeassistant/update", payload=version, diff --git a/homeassistant/components/services.yaml b/homeassistant/components/services.yaml index cf5999200d8..6cff6d5f4f4 100644 --- a/homeassistant/components/services.yaml +++ b/homeassistant/components/services.yaml @@ -338,6 +338,9 @@ hassio: description: Optional or it will be use the latest version. example: '0.3' + supervisor_reload: + description: Reload HassIO supervisor addons/updates/configs. + homeassistant_update: description: Update HomeAssistant docker image. fields: diff --git a/tests/components/test_hassio.py b/tests/components/test_hassio.py index bde419c4104..2574e7fa9f3 100644 --- a/tests/components/test_hassio.py +++ b/tests/components/test_hassio.py @@ -53,6 +53,8 @@ class TestHassIOSetup(object): assert self.hass.services.has_service( ho.DOMAIN, ho.SERVICE_SUPERVISOR_UPDATE) + assert self.hass.services.has_service( + ho.DOMAIN, ho.SERVICE_SUPERVISOR_RELOAD) assert self.hass.services.has_service( ho.DOMAIN, ho.SERVICE_ADDON_INSTALL) @@ -216,6 +218,22 @@ class TestHassIOComponent(object): assert len(aioclient_mock.mock_calls) == 2 assert aioclient_mock.mock_calls[-1][2]['version'] == '0.4' + def test_rest_command_http_supervisor_reload(self, aioclient_mock): + """Call a hassio for supervisor reload.""" + aioclient_mock.get( + "http://127.0.0.1/supervisor/ping", json=self.ok_msg) + with assert_setup_component(0, ho.DOMAIN): + setup_component(self.hass, ho.DOMAIN, self.config) + + aioclient_mock.get( + self.url.format("supervisor/reload"), json=self.ok_msg) + + self.hass.services.call( + ho.DOMAIN, ho.SERVICE_SUPERVISOR_RELOAD, {}) + self.hass.block_till_done() + + assert len(aioclient_mock.mock_calls) == 2 + def test_rest_command_http_homeassistant_update(self, aioclient_mock): """Call a hassio for homeassistant update.""" aioclient_mock.get( From 2d57c6a1c78626d369cf0c9d3efd8aded4213020 Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Sat, 22 Apr 2017 05:16:36 +0200 Subject: [PATCH 140/146] Support xy_color with LIFX lights (#7208) --- homeassistant/components/light/lifx/__init__.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/light/lifx/__init__.py b/homeassistant/components/light/lifx/__init__.py index 7c7bdd4eeea..4d3cd0d4931 100644 --- a/homeassistant/components/light/lifx/__init__.py +++ b/homeassistant/components/light/lifx/__init__.py @@ -16,9 +16,9 @@ import voluptuous as vol from homeassistant.components.light import ( Light, PLATFORM_SCHEMA, ATTR_BRIGHTNESS, ATTR_COLOR_NAME, ATTR_RGB_COLOR, - ATTR_COLOR_TEMP, ATTR_TRANSITION, ATTR_EFFECT, + ATTR_XY_COLOR, ATTR_COLOR_TEMP, ATTR_TRANSITION, ATTR_EFFECT, SUPPORT_BRIGHTNESS, SUPPORT_COLOR_TEMP, SUPPORT_RGB_COLOR, - SUPPORT_TRANSITION, SUPPORT_EFFECT) + SUPPORT_XY_COLOR, SUPPORT_TRANSITION, SUPPORT_EFFECT) from homeassistant.util.color import ( color_temperature_mired_to_kelvin, color_temperature_kelvin_to_mired) from homeassistant import util @@ -46,7 +46,7 @@ BYTE_MAX = 255 SHORT_MAX = 65535 SUPPORT_LIFX = (SUPPORT_BRIGHTNESS | SUPPORT_COLOR_TEMP | SUPPORT_RGB_COLOR | - SUPPORT_TRANSITION | SUPPORT_EFFECT) + SUPPORT_XY_COLOR | SUPPORT_TRANSITION | SUPPORT_EFFECT) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_SERVER, default='0.0.0.0'): cv.string, @@ -358,6 +358,14 @@ class LIFXLight(Light): else: brightness = self._bri + if ATTR_XY_COLOR in kwargs: + hue, saturation, _ = \ + color_util.color_xy_brightness_to_hsv( + *kwargs[ATTR_XY_COLOR], + ibrightness=(brightness // (BYTE_MAX + 1))) + saturation = saturation * (BYTE_MAX + 1) + changed_color = True + if ATTR_COLOR_TEMP in kwargs: kelvin = int(color_temperature_mired_to_kelvin( kwargs[ATTR_COLOR_TEMP])) From 07fcf22aebca2f579056caecf4a63dbfbb963bdb Mon Sep 17 00:00:00 2001 From: Nikolas Beutler Date: Sat, 22 Apr 2017 05:16:59 +0200 Subject: [PATCH 141/146] Update ios.py (#7160) * Update ios.py as discussed. the part: if battery_state == ios.ATTR_BATTERY_STATE_FULL: returning_icon_level = DEFAULT_ICON_LEVEL kinda screws up the charging icon. i might just miss a logical solution for that though. let me know what you think. it might not be beautiful but i think its an overall improve over the current "double battery" solution * Update ios.py chound fix and full_battery_charge fix * Update ios.py removed new line * Update ios.py * Update ios.py * Update ios.py * Update ios.py * Update ios.py * Update ios.py * merged request from robbie * Update ios.py * Update ios.py * Update ios.py --- homeassistant/components/sensor/ios.py | 42 ++++++++++++++++++-------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/homeassistant/components/sensor/ios.py b/homeassistant/components/sensor/ios.py index 35f03d7a1c1..3173eec4285 100644 --- a/homeassistant/components/sensor/ios.py +++ b/homeassistant/components/sensor/ios.py @@ -14,7 +14,8 @@ SENSOR_TYPES = { "state": ["Battery State", None] } -DEFAULT_ICON = "mdi:battery" +DEFAULT_ICON_LEVEL = "mdi:battery" +DEFAULT_ICON_STATE = "mdi:power-plug" def setup_platform(hass, config, add_devices, discovery_info=None): @@ -62,7 +63,6 @@ class IOSSensor(Entity): @property def unit_of_measurement(self): """Return the unit of measurement this sensor expresses itself in.""" - return self._unit_of_measurement @property def device_state_attributes(self): @@ -84,28 +84,44 @@ class IOSSensor(Entity): battery_state = device_battery[ios.ATTR_BATTERY_STATE] battery_level = device_battery[ios.ATTR_BATTERY_LEVEL] rounded_level = round(battery_level, -1) - returning_icon = DEFAULT_ICON + returning_icon_level = DEFAULT_ICON_LEVEL if battery_state == ios.ATTR_BATTERY_STATE_FULL: - returning_icon = DEFAULT_ICON + returning_icon_level = DEFAULT_ICON_LEVEL + if battery_state == ios.ATTR_BATTERY_STATE_CHARGING: + returning_icon_state = DEFAULT_ICON_STATE + else: + returning_icon_state = "{}-off".format(DEFAULT_ICON_STATE) elif battery_state == ios.ATTR_BATTERY_STATE_CHARGING: # Why is MDI missing 10, 50, 70? if rounded_level in (20, 30, 40, 60, 80, 90, 100): - returning_icon = "{}-charging-{}".format(DEFAULT_ICON, - str(rounded_level)) + returning_icon_level = "{}-charging-{}".format( + DEFAULT_ICON_LEVEL, str(rounded_level)) + returning_icon_state = DEFAULT_ICON_STATE else: - returning_icon = "{}-charging".format(DEFAULT_ICON) + returning_icon_level = "{}-charging".format( + DEFAULT_ICON_LEVEL) + returning_icon_state = DEFAULT_ICON_STATE elif battery_state == ios.ATTR_BATTERY_STATE_UNPLUGGED: if rounded_level < 10: - returning_icon = "{}-outline".format(DEFAULT_ICON) + returning_icon_level = "{}-outline".format( + DEFAULT_ICON_LEVEL) + returning_icon_state = "{}-off".format(DEFAULT_ICON_STATE) elif battery_level > 95: - returning_icon = DEFAULT_ICON + returning_icon_state = "{}-off".format(DEFAULT_ICON_STATE) + returning_icon_level = "{}-outline".format( + DEFAULT_ICON_LEVEL) else: - returning_icon = "{}-{}".format(DEFAULT_ICON, - str(rounded_level)) + returning_icon_level = "{}-{}".format(DEFAULT_ICON_LEVEL, + str(rounded_level)) + returning_icon_state = "{}-off".format(DEFAULT_ICON_STATE) elif battery_state == ios.ATTR_BATTERY_STATE_UNKNOWN: - returning_icon = "{}-unknown".format(DEFAULT_ICON) + returning_icon_level = "{}-unknown".format(DEFAULT_ICON_LEVEL) + returning_icon_state = "{}-unknown".format(DEFAULT_ICON_LEVEL) - return returning_icon + if self.type == "state": + return returning_icon_state + else: + return returning_icon_level def update(self): """Get the latest state of the sensor.""" From b641f6863cfc0779d598c903cda5479822cd5e82 Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Fri, 21 Apr 2017 23:22:36 -0400 Subject: [PATCH 142/146] Fix arwn platform to update hass state when events are received (#7202) The arwn platform was refactored to be asyncio friendly, however in doing so one thing was missed which was explicitly telling hass when something interesting has happened. This led to the very interesting to debug issue that the state cards were all out of date, even though the graphs were not. --- homeassistant/components/sensor/arwn.py | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/sensor/arwn.py b/homeassistant/components/sensor/arwn.py index 0bf68e68b0d..d2e148b8204 100644 --- a/homeassistant/components/sensor/arwn.py +++ b/homeassistant/components/sensor/arwn.py @@ -116,6 +116,7 @@ class ArwnSensor(Entity): """Update the sensor with the most recent event.""" self.event = {} self.event.update(event) + self.hass.async_add_job(self.async_update_ha_state()) @property def state(self): From dafbdbd2d028faad0ca0ada3dab24a2ef6b6c50f Mon Sep 17 00:00:00 2001 From: Henrik Nicolaisen Date: Sat, 22 Apr 2017 05:24:21 +0200 Subject: [PATCH 143/146] Issue 6749 updated pylgtv to 0.1.6 to fix thread leak in asyncio loop (#7199) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * updated pylgtv module to fix problems with timeouts * - update pylgtv to 0.1.6 - handle new TimeoutError exception from pylgtv * used full name for exception handling of concurrent.futures._base.TimeoutError * the exception handling should now follow the rules * float typecasting should not be necessary * use asyncio for TimeoutError it’s an alias for concurrent.futures.TimeoutError --- homeassistant/components/media_player/webostv.py | 12 ++++++++---- homeassistant/components/notify/webostv.py | 2 +- requirements_all.txt | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/media_player/webostv.py b/homeassistant/components/media_player/webostv.py index b8f43486db1..c1b51e2d32a 100644 --- a/homeassistant/components/media_player/webostv.py +++ b/homeassistant/components/media_player/webostv.py @@ -5,6 +5,7 @@ For more details about this platform, please refer to the documentation at https://home-assistant.io/components/media_player.webostv/ """ import logging +import asyncio from datetime import timedelta from urllib.parse import urlparse @@ -24,7 +25,7 @@ from homeassistant.const import ( from homeassistant.loader import get_component import homeassistant.helpers.config_validation as cv -REQUIREMENTS = ['pylgtv==0.1.5', +REQUIREMENTS = ['pylgtv==0.1.6', 'websockets==3.2', 'wakeonlan==0.2.2'] @@ -99,7 +100,8 @@ def setup_tv(host, mac, name, customize, config, hass, add_devices): _LOGGER.warning( "Connected to LG webOS TV %s but not paired", host) return - except (OSError, ConnectionClosed): + except (OSError, ConnectionClosed, TypeError, + asyncio.TimeoutError): _LOGGER.error("Unable to connect to host %s", host) return else: @@ -196,7 +198,8 @@ class LgWebOSDevice(MediaPlayerDevice): app = self._app_list[source['appId']] self._source_list[app['title']] = app - except (OSError, ConnectionClosed): + except (OSError, ConnectionClosed, TypeError, + asyncio.TimeoutError): self._state = STATE_OFF @property @@ -257,7 +260,8 @@ class LgWebOSDevice(MediaPlayerDevice): self._state = STATE_OFF try: self._client.power_off() - except (OSError, ConnectionClosed): + except (OSError, ConnectionClosed, TypeError, + asyncio.TimeoutError): pass def turn_on(self): diff --git a/homeassistant/components/notify/webostv.py b/homeassistant/components/notify/webostv.py index 50788b8cccf..0e91fc8698a 100644 --- a/homeassistant/components/notify/webostv.py +++ b/homeassistant/components/notify/webostv.py @@ -14,7 +14,7 @@ from homeassistant.components.notify import ( ATTR_DATA, BaseNotificationService, PLATFORM_SCHEMA) from homeassistant.const import (CONF_FILENAME, CONF_HOST, CONF_ICON) -REQUIREMENTS = ['pylgtv==0.1.5'] +REQUIREMENTS = ['pylgtv==0.1.6'] _LOGGER = logging.getLogger(__name__) diff --git a/requirements_all.txt b/requirements_all.txt index 7775d07fb63..e98df3bf99b 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -564,7 +564,7 @@ pylast==1.8.0 # homeassistant.components.media_player.webostv # homeassistant.components.notify.webostv -pylgtv==0.1.5 +pylgtv==0.1.6 # homeassistant.components.litejet pylitejet==0.1 From 80e9e9bfda49f28d254e004e4e80af396b9752dd Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 21 Apr 2017 23:32:51 -0700 Subject: [PATCH 144/146] tradfri: Improve color temp support detection (#7211) --- homeassistant/components/light/tradfri.py | 32 ++++++++++++++--------- script/dev_docker | 1 + virtualization/Docker/Dockerfile.dev | 3 ++- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/homeassistant/components/light/tradfri.py b/homeassistant/components/light/tradfri.py index 542f8dae8ef..ee4aa273224 100644 --- a/homeassistant/components/light/tradfri.py +++ b/homeassistant/components/light/tradfri.py @@ -13,13 +13,11 @@ from homeassistant.util import slugify _LOGGER = logging.getLogger(__name__) DEPENDENCIES = ['tradfri'] -SUPPORTED_FEATURES = (SUPPORT_BRIGHTNESS | SUPPORT_RGB_COLOR) -SUPPORTED_FEATURES_IKEA = (SUPPORT_BRIGHTNESS | SUPPORT_COLOR_TEMP) PLATFORM_SCHEMA = LIGHT_PLATFORM_SCHEMA -IKEA = 'ikea_of_sweden' - -ALLOWED_TEMPERATURES = {IKEA: {2200: 'efd275', 2700: 'f1e0b5', 4000: 'f5faf6'}} -ALLOWED_FEATURES = {IKEA: SUPPORTED_FEATURES_IKEA} +IKEA = 'IKEA of Sweden' +ALLOWED_TEMPERATURES = { + IKEA: {2200: 'efd275', 2700: 'f1e0b5', 4000: 'f5faf6'} +} def setup_platform(hass, config, add_devices, discovery_info=None): @@ -46,8 +44,14 @@ class Tradfri(Light): self._light_data = light.light_control.lights[0] self._name = light.name self._rgb_color = None - self._features = ALLOWED_FEATURES.get( - slugify(self._light.device_info.manufacturer), SUPPORTED_FEATURES) + self._features = SUPPORT_BRIGHTNESS + + if self._light_data.hex_color is not None: + if self._light.device_info.manufacturer == IKEA: + self._features &= SUPPORT_COLOR_TEMP + else: + self._features &= SUPPORT_RGB_COLOR + self._ok_temps = ALLOWED_TEMPERATURES.get( slugify(self._light.device_info.manufacturer)) @@ -74,16 +78,18 @@ class Tradfri(Light): @property def color_temp(self): """Return the CT color value in mireds.""" - if not self.supported_features & SUPPORT_COLOR_TEMP or \ - not self._ok_temps: - return + if (self._light_data.hex_color is None or + self.supported_features & SUPPORT_COLOR_TEMP == 0 or + not self._ok_temps): + return None + kelvin = next(( kelvin for kelvin, hex_color in self._ok_temps.items() if hex_color == self._light_data.hex_color), None) if kelvin is None: _LOGGER.error( - 'unexpected color temperature found %s', - self._light_data.hex_color) + 'unexpected color temperature found for %s: %s', + self.name, self._light_data.hex_color) return return color_util.color_temperature_kelvin_to_mired(kelvin) diff --git a/script/dev_docker b/script/dev_docker index 73c4ee60d0a..514fce73477 100755 --- a/script/dev_docker +++ b/script/dev_docker @@ -27,6 +27,7 @@ else -v /etc/localtime:/etc/localtime:ro \ -v `pwd`:/usr/src/app \ -v `pwd`/config:/config \ + --rm \ -t -i home-assistant-dev fi diff --git a/virtualization/Docker/Dockerfile.dev b/virtualization/Docker/Dockerfile.dev index 62c9f9f6596..5d16e9400ef 100644 --- a/virtualization/Docker/Dockerfile.dev +++ b/virtualization/Docker/Dockerfile.dev @@ -12,6 +12,7 @@ MAINTAINER Paulus Schoutsen #ENV INSTALL_OPENZWAVE no #ENV INSTALL_LIBCEC no #ENV INSTALL_PHANTOMJS no +#ENV INSTALL_COAP_CLIENT no VOLUME /config @@ -25,7 +26,7 @@ RUN virtualization/Docker/setup_docker_prereqs # Install hass component dependencies COPY requirements_all.txt requirements_all.txt RUN pip3 install --no-cache-dir -r requirements_all.txt && \ - pip3 install --no-cache-dir mysqlclient psycopg2 uvloop + pip3 install --no-cache-dir mysqlclient psycopg2 uvloop cchardet # BEGIN: Development additions From 093c7f0e44082e2d3e4ff4abb646755af9defa45 Mon Sep 17 00:00:00 2001 From: Martin Hjelmare Date: Sat, 22 Apr 2017 09:31:23 +0200 Subject: [PATCH 145/146] Fix tradfri lights (#7212) * Remove leftover use of slugify * The IKEA manufacturer key is now exactly as found in device info. * Fix bitwise addition of supported features --- homeassistant/components/light/tradfri.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/light/tradfri.py b/homeassistant/components/light/tradfri.py index ee4aa273224..9c0284c22f6 100644 --- a/homeassistant/components/light/tradfri.py +++ b/homeassistant/components/light/tradfri.py @@ -8,7 +8,6 @@ from homeassistant.components.light import \ PLATFORM_SCHEMA as LIGHT_PLATFORM_SCHEMA from homeassistant.components.tradfri import KEY_GATEWAY from homeassistant.util import color as color_util -from homeassistant.util import slugify _LOGGER = logging.getLogger(__name__) @@ -48,12 +47,12 @@ class Tradfri(Light): if self._light_data.hex_color is not None: if self._light.device_info.manufacturer == IKEA: - self._features &= SUPPORT_COLOR_TEMP + self._features |= SUPPORT_COLOR_TEMP else: - self._features &= SUPPORT_RGB_COLOR + self._features |= SUPPORT_RGB_COLOR self._ok_temps = ALLOWED_TEMPERATURES.get( - slugify(self._light.device_info.manufacturer)) + self._light.device_info.manufacturer) @property def supported_features(self): @@ -123,7 +122,7 @@ class Tradfri(Light): kelvin = color_util.color_temperature_mired_to_kelvin( kwargs[ATTR_COLOR_TEMP]) # find closest allowed kelvin temp from user input - kelvin = min(self._ok_temps.keys(), key=lambda x: abs(x-kelvin)) + kelvin = min(self._ok_temps.keys(), key=lambda x: abs(x - kelvin)) self._light_control.set_hex_color(self._ok_temps[kelvin]) def update(self): From 477ebd99b47484ddaade572298b56a4f8cc1218f Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 22 Apr 2017 00:32:27 -0700 Subject: [PATCH 146/146] Version bump to 0.43 --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index a65b721625c..5cc08642299 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -2,7 +2,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 43 -PATCH_VERSION = '0.dev0' +PATCH_VERSION = '0' __short_version__ = '{}.{}'.format(MAJOR_VERSION, MINOR_VERSION) __version__ = '{}.{}'.format(__short_version__, PATCH_VERSION) REQUIRED_PYTHON_VER = (3, 4, 2)
  • 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%0D_iD(v@?Gx`pACt~C-fnG=-kK>jw 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 diff --git a/homeassistant/components/frontend/www_static/home-assistant-polymer b/homeassistant/components/frontend/www_static/home-assistant-polymer index 10d09a9408f..5469c425e76 160000 --- a/homeassistant/components/frontend/www_static/home-assistant-polymer +++ b/homeassistant/components/frontend/www_static/home-assistant-polymer @@ -1 +1 @@ -Subproject commit 10d09a9408fccf03e989e071ac626e6a06bd125a +Subproject commit 5469c425e7695352a8402edd1fa6d36f95f0e083 diff --git a/homeassistant/components/frontend/www_static/mdi.html b/homeassistant/components/frontend/www_static/mdi.html index afb3f013acf..8a4662d482f 100644 --- a/homeassistant/components/frontend/www_static/mdi.html +++ b/homeassistant/components/frontend/www_static/mdi.html @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/mdi.html.gz b/homeassistant/components/frontend/www_static/mdi.html.gz index 638f13140e4bdc1d4d3df02c5aa0193a959c0130..78f55cb811ff9790e1f3dcf44cd6abd83cc786dd 100644 GIT binary patch delta 191974 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
    wOan01c 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 v*-i@}DzP73$*QlT;Z=LsM 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