Fix WUnderground names (#12346)
* 📝 Fix WUnderground names * 👻 Fix using event loop callback
This commit is contained in:
parent
04bde68db3
commit
2c202690d8
2 changed files with 27 additions and 18 deletions
|
@ -11,14 +11,14 @@ import re
|
||||||
import requests
|
import requests
|
||||||
import voluptuous as vol
|
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 (
|
from homeassistant.const import (
|
||||||
CONF_MONITORED_CONDITIONS, CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE,
|
CONF_MONITORED_CONDITIONS, CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE,
|
||||||
TEMP_FAHRENHEIT, TEMP_CELSIUS, LENGTH_INCHES, LENGTH_KILOMETERS,
|
TEMP_FAHRENHEIT, TEMP_CELSIUS, LENGTH_INCHES, LENGTH_KILOMETERS,
|
||||||
LENGTH_MILES, LENGTH_FEET, STATE_UNKNOWN, ATTR_ATTRIBUTION,
|
LENGTH_MILES, LENGTH_FEET, STATE_UNKNOWN, ATTR_ATTRIBUTION)
|
||||||
ATTR_FRIENDLY_NAME)
|
|
||||||
from homeassistant.exceptions import PlatformNotReady
|
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
|
from homeassistant.util import Throttle
|
||||||
import homeassistant.helpers.config_validation as cv
|
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)
|
config.get(CONF_LANG), latitude, longitude)
|
||||||
sensors = []
|
sensors = []
|
||||||
for variable in config[CONF_MONITORED_CONDITIONS]:
|
for variable in config[CONF_MONITORED_CONDITIONS]:
|
||||||
sensors.append(WUndergroundSensor(rest, variable))
|
sensors.append(WUndergroundSensor(hass, rest, variable))
|
||||||
|
|
||||||
rest.update()
|
rest.update()
|
||||||
if not rest.data:
|
if not rest.data:
|
||||||
|
@ -651,7 +651,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||||
class WUndergroundSensor(Entity):
|
class WUndergroundSensor(Entity):
|
||||||
"""Implementing the WUnderground sensor."""
|
"""Implementing the WUnderground sensor."""
|
||||||
|
|
||||||
def __init__(self, rest, condition):
|
def __init__(self, hass: HomeAssistantType, rest, condition):
|
||||||
"""Initialize the sensor."""
|
"""Initialize the sensor."""
|
||||||
self.rest = rest
|
self.rest = rest
|
||||||
self._condition = condition
|
self._condition = condition
|
||||||
|
@ -663,6 +663,8 @@ class WUndergroundSensor(Entity):
|
||||||
self._entity_picture = None
|
self._entity_picture = None
|
||||||
self._unit_of_measurement = self._cfg_expand("unit_of_measurement")
|
self._unit_of_measurement = self._cfg_expand("unit_of_measurement")
|
||||||
self.rest.request_feature(SENSOR_TYPES[condition].feature)
|
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):
|
def _cfg_expand(self, what, default=None):
|
||||||
"""Parse and return sensor data."""
|
"""Parse and return sensor data."""
|
||||||
|
@ -684,9 +686,6 @@ class WUndergroundSensor(Entity):
|
||||||
"""Parse and update device state attributes."""
|
"""Parse and update device state attributes."""
|
||||||
attrs = self._cfg_expand("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():
|
for (attr, callback) in attrs.items():
|
||||||
if callable(callback):
|
if callable(callback):
|
||||||
try:
|
try:
|
||||||
|
@ -701,7 +700,7 @@ class WUndergroundSensor(Entity):
|
||||||
@property
|
@property
|
||||||
def name(self):
|
def name(self):
|
||||||
"""Return the name of the sensor."""
|
"""Return the name of the sensor."""
|
||||||
return "PWS_" + self._condition
|
return self._cfg_expand("friendly_name")
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def state(self):
|
def state(self):
|
||||||
|
|
|
@ -249,31 +249,41 @@ class TestWundergroundSetup(unittest.TestCase):
|
||||||
None)
|
None)
|
||||||
for device in self.DEVICES:
|
for device in self.DEVICES:
|
||||||
device.update()
|
device.update()
|
||||||
self.assertTrue(str(device.name).startswith('PWS_'))
|
entity_id = device.entity_id
|
||||||
if device.name == 'PWS_weather':
|
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(HTTPS_ICON_URL, device.entity_picture)
|
||||||
self.assertEqual(WEATHER, device.state)
|
self.assertEqual(WEATHER, device.state)
|
||||||
self.assertIsNone(device.unit_of_measurement)
|
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(1, device.state)
|
||||||
self.assertEqual(ALERT_MESSAGE,
|
self.assertEqual(ALERT_MESSAGE,
|
||||||
device.device_state_attributes['Message'])
|
device.device_state_attributes['Message'])
|
||||||
self.assertEqual(ALERT_ICON, device.icon)
|
self.assertEqual(ALERT_ICON, device.icon)
|
||||||
self.assertIsNone(device.entity_picture)
|
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)
|
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)
|
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.assertIsNone(device.entity_picture)
|
||||||
self.assertEqual(FEELS_LIKE, device.state)
|
self.assertEqual(FEELS_LIKE, device.state)
|
||||||
self.assertEqual(TEMP_CELSIUS, device.unit_of_measurement)
|
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(FORECAST_TEXT, device.state)
|
||||||
|
self.assertEqual('Tuesday', friendly_name)
|
||||||
else:
|
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(PRECIP_IN, device.state)
|
||||||
self.assertEqual(LENGTH_INCHES, device.unit_of_measurement)
|
self.assertEqual(LENGTH_INCHES, device.unit_of_measurement)
|
||||||
|
self.assertEqual('Precipitation Intensity Today',
|
||||||
|
friendly_name)
|
||||||
|
|
||||||
@unittest.mock.patch('requests.get',
|
@unittest.mock.patch('requests.get',
|
||||||
side_effect=ConnectionError('test exception'))
|
side_effect=ConnectionError('test exception'))
|
||||||
|
|
Loading…
Add table
Reference in a new issue