From 2c202690d8db4e6ccdfaf09b5935e8d47057a778 Mon Sep 17 00:00:00 2001 From: Otto Winter Date: Mon, 12 Feb 2018 22:15:28 +0100 Subject: [PATCH] Fix WUnderground names (#12346) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 📝 Fix WUnderground names * 👻 Fix using event loop callback --- .../components/sensor/wunderground.py | 19 +++++++------- tests/components/sensor/test_wunderground.py | 26 +++++++++++++------ 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/homeassistant/components/sensor/wunderground.py b/homeassistant/components/sensor/wunderground.py index d0d9758c13a..aa5d431a7b0 100644 --- a/homeassistant/components/sensor/wunderground.py +++ b/homeassistant/components/sensor/wunderground.py @@ -11,14 +11,14 @@ import re import requests import voluptuous as vol -from homeassistant.components.sensor import PLATFORM_SCHEMA +from homeassistant.helpers.typing import HomeAssistantType +from homeassistant.components.sensor import PLATFORM_SCHEMA, ENTITY_ID_FORMAT from homeassistant.const import ( CONF_MONITORED_CONDITIONS, CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE, TEMP_FAHRENHEIT, TEMP_CELSIUS, LENGTH_INCHES, LENGTH_KILOMETERS, - LENGTH_MILES, LENGTH_FEET, STATE_UNKNOWN, ATTR_ATTRIBUTION, - ATTR_FRIENDLY_NAME) + LENGTH_MILES, LENGTH_FEET, STATE_UNKNOWN, ATTR_ATTRIBUTION) from homeassistant.exceptions import PlatformNotReady -from homeassistant.helpers.entity import Entity +from homeassistant.helpers.entity import Entity, generate_entity_id from homeassistant.util import Throttle import homeassistant.helpers.config_validation as cv @@ -637,7 +637,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): config.get(CONF_LANG), latitude, longitude) sensors = [] for variable in config[CONF_MONITORED_CONDITIONS]: - sensors.append(WUndergroundSensor(rest, variable)) + sensors.append(WUndergroundSensor(hass, rest, variable)) rest.update() if not rest.data: @@ -651,7 +651,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): class WUndergroundSensor(Entity): """Implementing the WUnderground sensor.""" - def __init__(self, rest, condition): + def __init__(self, hass: HomeAssistantType, rest, condition): """Initialize the sensor.""" self.rest = rest self._condition = condition @@ -663,6 +663,8 @@ class WUndergroundSensor(Entity): self._entity_picture = None self._unit_of_measurement = self._cfg_expand("unit_of_measurement") self.rest.request_feature(SENSOR_TYPES[condition].feature) + self.entity_id = generate_entity_id( + ENTITY_ID_FORMAT, "pws_" + condition, hass=hass) def _cfg_expand(self, what, default=None): """Parse and return sensor data.""" @@ -684,9 +686,6 @@ class WUndergroundSensor(Entity): """Parse and update device state attributes.""" attrs = self._cfg_expand("device_state_attributes", {}) - self._attributes[ATTR_FRIENDLY_NAME] = self._cfg_expand( - "friendly_name") - for (attr, callback) in attrs.items(): if callable(callback): try: @@ -701,7 +700,7 @@ class WUndergroundSensor(Entity): @property def name(self): """Return the name of the sensor.""" - return "PWS_" + self._condition + return self._cfg_expand("friendly_name") @property def state(self): diff --git a/tests/components/sensor/test_wunderground.py b/tests/components/sensor/test_wunderground.py index 5f6028b1a14..c1508f49851 100644 --- a/tests/components/sensor/test_wunderground.py +++ b/tests/components/sensor/test_wunderground.py @@ -249,31 +249,41 @@ class TestWundergroundSetup(unittest.TestCase): None) for device in self.DEVICES: device.update() - self.assertTrue(str(device.name).startswith('PWS_')) - if device.name == 'PWS_weather': + entity_id = device.entity_id + friendly_name = device.name + self.assertTrue(entity_id.startswith('sensor.pws_')) + if entity_id == 'sensor.pws_weather': self.assertEqual(HTTPS_ICON_URL, device.entity_picture) self.assertEqual(WEATHER, device.state) self.assertIsNone(device.unit_of_measurement) - elif device.name == 'PWS_alerts': + self.assertEqual("Weather Summary", friendly_name) + elif entity_id == 'sensor.pws_alerts': self.assertEqual(1, device.state) self.assertEqual(ALERT_MESSAGE, device.device_state_attributes['Message']) self.assertEqual(ALERT_ICON, device.icon) self.assertIsNone(device.entity_picture) - elif device.name == 'PWS_location': + self.assertEqual('Alerts', friendly_name) + elif entity_id == 'sensor.pws_location': self.assertEqual('Holly Springs, NC', device.state) - elif device.name == 'PWS_elevation': + self.assertEqual('Location', friendly_name) + elif entity_id == 'sensor.pws_elevation': self.assertEqual('413', device.state) - elif device.name == 'PWS_feelslike_c': + self.assertEqual('Elevation', friendly_name) + elif entity_id == 'sensor.pws_feelslike_c': self.assertIsNone(device.entity_picture) self.assertEqual(FEELS_LIKE, device.state) self.assertEqual(TEMP_CELSIUS, device.unit_of_measurement) - elif device.name == 'PWS_weather_1d_metric': + self.assertEqual("Feels Like", friendly_name) + elif entity_id == 'sensor.pws_weather_1d_metric': self.assertEqual(FORECAST_TEXT, device.state) + self.assertEqual('Tuesday', friendly_name) else: - self.assertEqual(device.name, 'PWS_precip_1d_in') + self.assertEqual(entity_id, 'sensor.pws_precip_1d_in') self.assertEqual(PRECIP_IN, device.state) self.assertEqual(LENGTH_INCHES, device.unit_of_measurement) + self.assertEqual('Precipitation Intensity Today', + friendly_name) @unittest.mock.patch('requests.get', side_effect=ConnectionError('test exception'))