diff --git a/homeassistant/components/ecobee.py b/homeassistant/components/ecobee.py index 825e7b700a5..f6aa0c33e0f 100644 --- a/homeassistant/components/ecobee.py +++ b/homeassistant/components/ecobee.py @@ -18,7 +18,7 @@ from homeassistant.util import Throttle REQUIREMENTS = [ 'https://github.com/nkgilley/python-ecobee-api/archive/' - '4856a704670c53afe1882178a89c209b5f98533d.zip#python-ecobee==0.0.6'] + 'a4496b293956b2eac285305136a62ac78bef510d.zip#python-ecobee==0.0.7'] _CONFIGURING = {} _LOGGER = logging.getLogger(__name__) diff --git a/homeassistant/components/light/lutron.py b/homeassistant/components/light/lutron.py index 7bc6fb50571..36742950b9c 100644 --- a/homeassistant/components/light/lutron.py +++ b/homeassistant/components/light/lutron.py @@ -2,9 +2,9 @@ import logging from homeassistant.components.light import ( - ATTR_BRIGHTNESS, DOMAIN, SUPPORT_BRIGHTNESS, Light) + ATTR_BRIGHTNESS, SUPPORT_BRIGHTNESS, Light) from homeassistant.components.lutron import ( - LutronDevice, LUTRON_DEVICES, LUTRON_GROUPS, LUTRON_CONTROLLER) + LutronDevice, LUTRON_DEVICES, LUTRON_CONTROLLER) DEPENDENCIES = ['lutron'] @@ -21,15 +21,8 @@ def setup_platform(hass, config, add_devices, discovery_info=None): hass.data[LUTRON_CONTROLLER]) area_devs.setdefault(area_name, []).append(dev) devs.append(dev) + add_devices(devs, True) - - for area in area_devs: - if area not in hass.data[LUTRON_GROUPS]: - continue - grp = hass.data[LUTRON_GROUPS][area] - ids = list(grp.tracking) + [dev.entity_id for dev in area_devs[area]] - grp.update_tracked_entity_ids(ids) - return True @@ -49,8 +42,7 @@ class LutronLight(LutronDevice, Light): def __init__(self, hass, area_name, lutron_device, controller): """Initialize the light.""" self._prev_brightness = None - LutronDevice.__init__(self, hass, DOMAIN, area_name, lutron_device, - controller) + LutronDevice.__init__(self, hass, area_name, lutron_device, controller) @property def supported_features(self): diff --git a/homeassistant/components/light/osramlightify.py b/homeassistant/components/light/osramlightify.py index b460ff52a9b..1ddfe1baa53 100644 --- a/homeassistant/components/light/osramlightify.py +++ b/homeassistant/components/light/osramlightify.py @@ -215,5 +215,8 @@ class OsramLightifyLight(Light): self._name = self._light.name() self._rgb = self._light.rgb() o_temp = self._light.temp() - self._temperature = color_temperature_kelvin_to_mired(o_temp) + if o_temp == 0: + self._temperature = None + else: + self._temperature = color_temperature_kelvin_to_mired(o_temp) self._state = self._light.on() diff --git a/homeassistant/components/light/rflink.py b/homeassistant/components/light/rflink.py index 4d49186398a..386ced1ee88 100644 --- a/homeassistant/components/light/rflink.py +++ b/homeassistant/components/light/rflink.py @@ -7,13 +7,12 @@ https://home-assistant.io/components/light.rflink/ import asyncio import logging -from homeassistant.components import group from homeassistant.components.light import ( ATTR_BRIGHTNESS, SUPPORT_BRIGHTNESS, Light) from homeassistant.components.rflink import ( CONF_ALIASSES, CONF_DEVICE_DEFAULTS, CONF_DEVICES, CONF_FIRE_EVENT, - CONF_IGNORE_DEVICES, CONF_NEW_DEVICES_GROUP, CONF_SIGNAL_REPETITIONS, - DATA_DEVICE_REGISTER, DATA_ENTITY_LOOKUP, DEVICE_DEFAULTS_SCHEMA, DOMAIN, + CONF_IGNORE_DEVICES, CONF_SIGNAL_REPETITIONS, DATA_DEVICE_REGISTER, + DATA_ENTITY_LOOKUP, DEVICE_DEFAULTS_SCHEMA, DOMAIN, EVENT_KEY_COMMAND, EVENT_KEY_ID, SwitchableRflinkDevice, cv, vol) from homeassistant.const import CONF_NAME, CONF_PLATFORM, CONF_TYPE @@ -27,7 +26,6 @@ TYPE_HYBRID = 'hybrid' PLATFORM_SCHEMA = vol.Schema({ vol.Required(CONF_PLATFORM): DOMAIN, - vol.Optional(CONF_NEW_DEVICES_GROUP, default=None): cv.string, vol.Optional(CONF_IGNORE_DEVICES): vol.All(cv.ensure_list, [cv.string]), vol.Optional(CONF_DEVICE_DEFAULTS, default=DEVICE_DEFAULTS_SCHEMA({})): DEVICE_DEFAULTS_SCHEMA, @@ -119,13 +117,6 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None): """Set up the Rflink light platform.""" async_add_devices(devices_from_config(config, hass)) - # Add new (unconfigured) devices to user desired group - if config[CONF_NEW_DEVICES_GROUP]: - new_devices_group = yield from group.Group.async_create_group( - hass, config[CONF_NEW_DEVICES_GROUP], [], True) - else: - new_devices_group = None - @asyncio.coroutine def add_new_device(event): """Check if device is known, otherwise add to list of known devices.""" @@ -145,21 +136,13 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None): # Make sure the event is processed by the new entity device.handle_event(event) - # Maybe add to new devices group - if new_devices_group: - yield from new_devices_group.async_update_tracked_entity_ids( - list(new_devices_group.tracking) + [device.entity_id]) - hass.data[DATA_DEVICE_REGISTER][EVENT_KEY_COMMAND] = add_new_device class RflinkLight(SwitchableRflinkDevice, Light): """Representation of a Rflink light.""" - @property - def entity_id(self): - """Return entity id.""" - return "light.{}".format(self.name) + pass class DimmableRflinkLight(SwitchableRflinkDevice, Light): @@ -167,11 +150,6 @@ class DimmableRflinkLight(SwitchableRflinkDevice, Light): _brightness = 255 - @property - def entity_id(self): - """Return entity id.""" - return "light.{}".format(self.name) - @asyncio.coroutine def async_turn_on(self, **kwargs): """Turn the device on.""" @@ -210,11 +188,6 @@ class HybridRflinkLight(SwitchableRflinkDevice, Light): _brightness = 255 - @property - def entity_id(self): - """Return entity id.""" - return "light.{}".format(self.name) - @asyncio.coroutine def async_turn_on(self, **kwargs): """Turn the device on and set dim level.""" diff --git a/homeassistant/components/lutron.py b/homeassistant/components/lutron.py index d5512e9e5b6..a428ea10cfa 100644 --- a/homeassistant/components/lutron.py +++ b/homeassistant/components/lutron.py @@ -7,8 +7,7 @@ https://home-assistant.io/components/lutron/ import logging from homeassistant.helpers import discovery -from homeassistant.helpers.entity import (Entity, generate_entity_id) -from homeassistant.loader import get_component +from homeassistant.helpers.entity import Entity REQUIREMENTS = ['https://github.com/thecynic/pylutron/archive/v0.1.0.zip#' 'pylutron==0.1.0'] @@ -19,7 +18,6 @@ _LOGGER = logging.getLogger(__name__) LUTRON_CONTROLLER = 'lutron_controller' LUTRON_DEVICES = 'lutron_devices' -LUTRON_GROUPS = 'lutron_groups' def setup(hass, base_config): @@ -28,7 +26,6 @@ def setup(hass, base_config): hass.data[LUTRON_CONTROLLER] = None hass.data[LUTRON_DEVICES] = {'light': []} - hass.data[LUTRON_GROUPS] = {} config = base_config.get(DOMAIN) hass.data[LUTRON_CONTROLLER] = Lutron( @@ -40,13 +37,8 @@ def setup(hass, base_config): hass.data[LUTRON_CONTROLLER].connect() _LOGGER.info("Connected to Main Repeater at %s", config['lutron_host']) - group = get_component('group') - # Sort our devices into types for area in hass.data[LUTRON_CONTROLLER].areas: - if area.name not in hass.data[LUTRON_GROUPS]: - grp = group.Group.create_group(hass, area.name, []) - hass.data[LUTRON_GROUPS][area.name] = grp for output in area.outputs: hass.data[LUTRON_DEVICES]['light'].append((area.name, output)) @@ -58,16 +50,14 @@ def setup(hass, base_config): class LutronDevice(Entity): """Representation of a Lutron device entity.""" - def __init__(self, hass, domain, area_name, lutron_device, controller): + def __init__(self, hass, area_name, lutron_device, controller): """Initialize the device.""" self._lutron_device = lutron_device self._controller = controller self._area_name = area_name self.hass = hass - object_id = '{} {}'.format(area_name, lutron_device.name) - self.entity_id = generate_entity_id(domain + '.{}', object_id, - hass=hass) + self.object_id = '{} {}'.format(area_name, lutron_device.name) self._controller.subscribe(self._lutron_device, self._update_callback) diff --git a/homeassistant/components/media_player/apple_tv.py b/homeassistant/components/media_player/apple_tv.py index 436730b7041..7a865cd2d8a 100644 --- a/homeassistant/components/media_player/apple_tv.py +++ b/homeassistant/components/media_player/apple_tv.py @@ -96,7 +96,8 @@ class AppleTvDevice(MediaPlayerDevice): @asyncio.coroutine def async_added_to_hass(self): """Called when entity is about to be added to HASS.""" - self._atv.push_updater.start() + if not self._is_off: + self._atv.push_updater.start() @callback def _set_power_off(self, is_off): diff --git a/homeassistant/components/rflink.py b/homeassistant/components/rflink.py index 5999957066f..8abad005bf8 100644 --- a/homeassistant/components/rflink.py +++ b/homeassistant/components/rflink.py @@ -32,7 +32,6 @@ CONF_DEVICE_DEFAULTS = 'device_defaults' CONF_DEVICES = 'devices' CONF_FIRE_EVENT = 'fire_event' CONF_IGNORE_DEVICES = 'ignore_devices' -CONF_NEW_DEVICES_GROUP = 'new_devices_group' CONF_RECONNECT_INTERVAL = 'reconnect_interval' CONF_SIGNAL_REPETITIONS = 'signal_repetitions' CONF_WAIT_FOR_ACK = 'wait_for_ack' diff --git a/homeassistant/components/sensor/hydroquebec.py b/homeassistant/components/sensor/hydroquebec.py index 7ec2b17af2d..aa35d5d7659 100644 --- a/homeassistant/components/sensor/hydroquebec.py +++ b/homeassistant/components/sensor/hydroquebec.py @@ -149,7 +149,8 @@ class HydroQuebecSensor(Entity): def update(self): """Get the latest data from Hydroquebec and update the state.""" self.hydroquebec_data.update() - self._state = round(self.hydroquebec_data.data[self.type], 2) + if self.type in self.hydroquebec_data.data: + self._state = round(self.hydroquebec_data.data[self.type], 2) class HydroquebecData(object): diff --git a/homeassistant/components/sensor/knx.py b/homeassistant/components/sensor/knx.py index 3dce95f7688..fef02710b9e 100644 --- a/homeassistant/components/sensor/knx.py +++ b/homeassistant/components/sensor/knx.py @@ -129,6 +129,6 @@ class KNXSensorFloatClass(KNXGroupAddress, KNXSensorBaseClass): self._value = None if self._data: - value = knx2_to_float(self._data) + value = 0 if self._data == 0 else knx2_to_float(self._data) if self._minimum_value <= value <= self._maximum_value: self._value = value diff --git a/homeassistant/components/sensor/rflink.py b/homeassistant/components/sensor/rflink.py index 575b2daf674..8f8ae769d0e 100644 --- a/homeassistant/components/sensor/rflink.py +++ b/homeassistant/components/sensor/rflink.py @@ -8,11 +8,10 @@ import asyncio from functools import partial import logging -from homeassistant.components import group from homeassistant.components.rflink import ( - CONF_ALIASSES, CONF_DEVICES, CONF_NEW_DEVICES_GROUP, DATA_DEVICE_REGISTER, - DATA_ENTITY_LOOKUP, DOMAIN, EVENT_KEY_ID, EVENT_KEY_SENSOR, EVENT_KEY_UNIT, - RflinkDevice, cv, vol) + CONF_ALIASSES, CONF_DEVICES, DATA_DEVICE_REGISTER, DATA_ENTITY_LOOKUP, + DOMAIN, EVENT_KEY_ID, EVENT_KEY_SENSOR, EVENT_KEY_UNIT, RflinkDevice, + cv, vol) from homeassistant.const import ( ATTR_UNIT_OF_MEASUREMENT, CONF_NAME, CONF_PLATFORM, CONF_UNIT_OF_MEASUREMENT) @@ -31,7 +30,6 @@ CONF_SENSOR_TYPE = 'sensor_type' PLATFORM_SCHEMA = vol.Schema({ vol.Required(CONF_PLATFORM): DOMAIN, - vol.Optional(CONF_NEW_DEVICES_GROUP, default=None): cv.string, vol.Optional(CONF_DEVICES, default={}): vol.Schema({ cv.string: { vol.Optional(CONF_NAME): cv.string, @@ -76,13 +74,6 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None): """Set up the Rflink platform.""" async_add_devices(devices_from_config(config, hass)) - # Add new (unconfigured) devices to user desired group - if config[CONF_NEW_DEVICES_GROUP]: - new_devices_group = yield from group.Group.async_create_group( - hass, config[CONF_NEW_DEVICES_GROUP], [], True) - else: - new_devices_group = None - @asyncio.coroutine def add_new_device(event): """Check if device is known, otherwise create device entity.""" @@ -100,11 +91,6 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None): # Make sure the event is processed by the new entity device.handle_event(event) - # Maybe add to new devices group - if new_devices_group: - yield from new_devices_group.async_update_tracked_entity_ids( - list(new_devices_group.tracking) + [device.entity_id]) - hass.data[DATA_DEVICE_REGISTER][EVENT_KEY_SENSOR] = add_new_device @@ -122,11 +108,6 @@ class RflinkSensor(RflinkDevice): """Domain specific event handler.""" self._state = event['value'] - @property - def entity_id(self): - """Return entity id.""" - return "sensor.{}".format(self.name) - @property def unit_of_measurement(self): """Return measurement unit.""" diff --git a/homeassistant/components/sensor/sma.py b/homeassistant/components/sensor/sma.py index bbd0d92018f..27ab20ab67d 100644 --- a/homeassistant/components/sensor/sma.py +++ b/homeassistant/components/sensor/sma.py @@ -60,7 +60,8 @@ PLATFORM_SCHEMA = vol.All(PLATFORM_SCHEMA.extend({ }, extra=vol.PREVENT_EXTRA), _check_sensor_schema) -def async_setup_platform(hass, config, add_devices, discovery_info=None): +@asyncio.coroutine +def async_setup_platform(hass, config, async_add_devices, discovery_info=None): """Set up SMA WebConnect sensor.""" import pysma @@ -89,7 +90,7 @@ def async_setup_platform(hass, config, add_devices, discovery_info=None): sensor_defs = {name: val for name, val in sensor_defs.items() if name in used_sensors} - yield from add_devices(hass_sensors) + async_add_devices(hass_sensors) # Init the SMA interface session = async_get_clientsession(hass) diff --git a/homeassistant/components/switch/wake_on_lan.py b/homeassistant/components/switch/wake_on_lan.py index d9f7d0ad637..ba3439dc951 100644 --- a/homeassistant/components/switch/wake_on_lan.py +++ b/homeassistant/components/switch/wake_on_lan.py @@ -86,10 +86,10 @@ class WOLSwitch(SwitchDevice): """Check if device is on and update the state.""" if platform.system().lower() == 'windows': ping_cmd = ['ping', '-n', '1', '-w', - str(DEFAULT_PING_TIMEOUT * 1000), self._host] + str(DEFAULT_PING_TIMEOUT * 1000), str(self._host)] else: ping_cmd = ['ping', '-c', '1', '-W', - str(DEFAULT_PING_TIMEOUT), self._host] + str(DEFAULT_PING_TIMEOUT), str(self._host)] status = sp.call(ping_cmd, stdout=sp.DEVNULL) self._state = not bool(status) diff --git a/homeassistant/components/zwave/__init__.py b/homeassistant/components/zwave/__init__.py index 2d249146ea4..5eadd086289 100755 --- a/homeassistant/components/zwave/__init__.py +++ b/homeassistant/components/zwave/__init__.py @@ -434,7 +434,7 @@ def setup(hass, config): node=node, value=value, node_config=node_config, hass=hass) if not device: continue - dict_id = value.value_id + dict_id = "{}.{}".format(component, value.value_id) @asyncio.coroutine def discover_device(component, device, dict_id): diff --git a/homeassistant/const.py b/homeassistant/const.py index fae55cc9ea5..e33869f15e6 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -2,7 +2,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 40 -PATCH_VERSION = '0' +PATCH_VERSION = '1' __short_version__ = '{}.{}'.format(MAJOR_VERSION, MINOR_VERSION) __version__ = '{}.{}'.format(__short_version__, PATCH_VERSION) REQUIRED_PYTHON_VER = (3, 4, 2) diff --git a/requirements_all.txt b/requirements_all.txt index 0f87c998023..62ccd22d70e 100755 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -266,7 +266,7 @@ https://github.com/molobrakos/python-pocketcasts/archive/9f61ff00c77c7c98ffa0af9 https://github.com/mweinelt/anel-pwrctrl/archive/ed26e8830e28a2bfa4260a9002db23ce3e7e63d7.zip#anel_pwrctrl==0.0.1 # homeassistant.components.ecobee -https://github.com/nkgilley/python-ecobee-api/archive/4856a704670c53afe1882178a89c209b5f98533d.zip#python-ecobee==0.0.6 +https://github.com/nkgilley/python-ecobee-api/archive/a4496b293956b2eac285305136a62ac78bef510d.zip#python-ecobee==0.0.7 # homeassistant.components.joaoapps_join # homeassistant.components.notify.joaoapps_join diff --git a/tests/components/light/test_rflink.py b/tests/components/light/test_rflink.py index 2ecaa34d84d..02375f27fc0 100644 --- a/tests/components/light/test_rflink.py +++ b/tests/components/light/test_rflink.py @@ -154,35 +154,6 @@ def test_default_setup(hass, monkeypatch): assert protocol.send_command_ack.call_args_list[5][0][1] == '7' -@asyncio.coroutine -def test_new_light_group(hass, monkeypatch): - """New devices should be added to configured group.""" - config = { - 'rflink': { - 'port': '/dev/ttyABC0', - }, - DOMAIN: { - 'platform': 'rflink', - 'new_devices_group': 'new_rflink_lights', - }, - } - - # setup mocking rflink module - event_callback, _, _, _ = yield from mock_rflink( - hass, config, DOMAIN, monkeypatch) - - # test event for new unconfigured sensor - event_callback({ - 'id': 'protocol_0_0', - 'command': 'off', - }) - yield from hass.async_block_till_done() - - # make sure new device is added to correct group - group = hass.states.get('group.new_rflink_lights') - assert group.attributes.get('entity_id') == ('light.protocol_0_0',) - - @asyncio.coroutine def test_firing_bus_event(hass, monkeypatch): """Incoming Rflink command events should be put on the HA event bus.""" diff --git a/tests/components/sensor/test_rflink.py b/tests/components/sensor/test_rflink.py index 8d0c8180f1a..2925551ee06 100644 --- a/tests/components/sensor/test_rflink.py +++ b/tests/components/sensor/test_rflink.py @@ -70,34 +70,3 @@ def test_default_setup(hass, monkeypatch): assert new_sensor.state == '0' assert new_sensor.attributes['unit_of_measurement'] == '°C' assert new_sensor.attributes['icon'] == 'mdi:thermometer' - - -@asyncio.coroutine -def test_new_sensors_group(hass, monkeypatch): - """New devices should be added to configured group.""" - config = { - 'rflink': { - 'port': '/dev/ttyABC0', - }, - DOMAIN: { - 'platform': 'rflink', - 'new_devices_group': 'new_rflink_sensors', - }, - } - - # setup mocking rflink module - event_callback, _, _, _ = yield from mock_rflink( - hass, config, DOMAIN, monkeypatch) - - # test event for new unconfigured sensor - event_callback({ - 'id': 'test', - 'sensor': 'temperature', - 'value': 0, - 'unit': '°C', - }) - yield from hass.async_block_till_done() - - # make sure new device is added to correct group - group = hass.states.get('group.new_rflink_sensors') - assert group.attributes.get('entity_id') == ('sensor.test',)