Fix WUnderground names (#12346)
* 📝 Fix WUnderground names * 👻 Fix using event loop callback
This commit is contained in:
parent
e5f000f976
commit
9e4da37022
2 changed files with 27 additions and 18 deletions
|
@ -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):
|
||||
|
|
|
@ -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'))
|
||||
|
|
Loading…
Add table
Reference in a new issue