mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 21:27:38 +00:00
Add sensor platform to Meteoclimatic integration (#51467)
* Add meteoclimatic sensor platform Signed-off-by: Adrian Moreno <adrian@morenomartinez.com> * Add sensor.py to coverage file Signed-off-by: Adrian Moreno <adrian@morenomartinez.com> * Add explicit return type None Signed-off-by: Adrian Moreno <adrian@morenomartinez.com> * Fix sample station code Signed-off-by: Adrian Moreno <adrian@morenomartinez.com> * Apply frenck suggestions Signed-off-by: Adrian Moreno <adrian@morenomartinez.com> * Remove extra attributes Signed-off-by: Adrian Moreno <adrian@morenomartinez.com> * Revert translations Signed-off-by: Adrian Moreno <adrian@morenomartinez.com> * Remove None icons and classes Signed-off-by: Adrian Moreno <adrian@morenomartinez.com>
This commit is contained in:
parent
198b664409
commit
a639cb7ba7
@ -611,6 +611,7 @@ omit =
|
|||||||
homeassistant/components/meteoalarm/*
|
homeassistant/components/meteoalarm/*
|
||||||
homeassistant/components/meteoclimatic/__init__.py
|
homeassistant/components/meteoclimatic/__init__.py
|
||||||
homeassistant/components/meteoclimatic/const.py
|
homeassistant/components/meteoclimatic/const.py
|
||||||
|
homeassistant/components/meteoclimatic/sensor.py
|
||||||
homeassistant/components/meteoclimatic/weather.py
|
homeassistant/components/meteoclimatic/weather.py
|
||||||
homeassistant/components/metoffice/sensor.py
|
homeassistant/components/metoffice/sensor.py
|
||||||
homeassistant/components/metoffice/weather.py
|
homeassistant/components/metoffice/weather.py
|
||||||
|
@ -31,7 +31,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|||||||
coordinator = DataUpdateCoordinator(
|
coordinator = DataUpdateCoordinator(
|
||||||
hass,
|
hass,
|
||||||
_LOGGER,
|
_LOGGER,
|
||||||
name=f"Meteoclimatic Coordinator for {station_code}",
|
name=f"Meteoclimatic weather for {entry.title} ({station_code})",
|
||||||
update_method=async_update_data,
|
update_method=async_update_data,
|
||||||
update_interval=SCAN_INTERVAL,
|
update_interval=SCAN_INTERVAL,
|
||||||
)
|
)
|
||||||
|
@ -34,8 +34,10 @@ from homeassistant.const import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
DOMAIN = "meteoclimatic"
|
DOMAIN = "meteoclimatic"
|
||||||
PLATFORMS = ["weather"]
|
PLATFORMS = ["sensor", "weather"]
|
||||||
ATTRIBUTION = "Data provided by Meteoclimatic"
|
ATTRIBUTION = "Data provided by Meteoclimatic"
|
||||||
|
MODEL = "Meteoclimatic RSS feed"
|
||||||
|
MANUFACTURER = "Meteoclimatic"
|
||||||
|
|
||||||
SCAN_INTERVAL = timedelta(minutes=10)
|
SCAN_INTERVAL = timedelta(minutes=10)
|
||||||
|
|
||||||
@ -54,12 +56,12 @@ SENSOR_TYPES = {
|
|||||||
SENSOR_TYPE_CLASS: DEVICE_CLASS_TEMPERATURE,
|
SENSOR_TYPE_CLASS: DEVICE_CLASS_TEMPERATURE,
|
||||||
},
|
},
|
||||||
"temp_max": {
|
"temp_max": {
|
||||||
SENSOR_TYPE_NAME: "Max Temp.",
|
SENSOR_TYPE_NAME: "Daily Max Temperature",
|
||||||
SENSOR_TYPE_UNIT: TEMP_CELSIUS,
|
SENSOR_TYPE_UNIT: TEMP_CELSIUS,
|
||||||
SENSOR_TYPE_CLASS: DEVICE_CLASS_TEMPERATURE,
|
SENSOR_TYPE_CLASS: DEVICE_CLASS_TEMPERATURE,
|
||||||
},
|
},
|
||||||
"temp_min": {
|
"temp_min": {
|
||||||
SENSOR_TYPE_NAME: "Min Temp.",
|
SENSOR_TYPE_NAME: "Daily Min Temperature",
|
||||||
SENSOR_TYPE_UNIT: TEMP_CELSIUS,
|
SENSOR_TYPE_UNIT: TEMP_CELSIUS,
|
||||||
SENSOR_TYPE_CLASS: DEVICE_CLASS_TEMPERATURE,
|
SENSOR_TYPE_CLASS: DEVICE_CLASS_TEMPERATURE,
|
||||||
},
|
},
|
||||||
@ -69,12 +71,12 @@ SENSOR_TYPES = {
|
|||||||
SENSOR_TYPE_CLASS: DEVICE_CLASS_HUMIDITY,
|
SENSOR_TYPE_CLASS: DEVICE_CLASS_HUMIDITY,
|
||||||
},
|
},
|
||||||
"humidity_max": {
|
"humidity_max": {
|
||||||
SENSOR_TYPE_NAME: "Max Humidity",
|
SENSOR_TYPE_NAME: "Daily Max Humidity",
|
||||||
SENSOR_TYPE_UNIT: PERCENTAGE,
|
SENSOR_TYPE_UNIT: PERCENTAGE,
|
||||||
SENSOR_TYPE_CLASS: DEVICE_CLASS_HUMIDITY,
|
SENSOR_TYPE_CLASS: DEVICE_CLASS_HUMIDITY,
|
||||||
},
|
},
|
||||||
"humidity_min": {
|
"humidity_min": {
|
||||||
SENSOR_TYPE_NAME: "Min Humidity",
|
SENSOR_TYPE_NAME: "Daily Min Humidity",
|
||||||
SENSOR_TYPE_UNIT: PERCENTAGE,
|
SENSOR_TYPE_UNIT: PERCENTAGE,
|
||||||
SENSOR_TYPE_CLASS: DEVICE_CLASS_HUMIDITY,
|
SENSOR_TYPE_CLASS: DEVICE_CLASS_HUMIDITY,
|
||||||
},
|
},
|
||||||
@ -84,12 +86,12 @@ SENSOR_TYPES = {
|
|||||||
SENSOR_TYPE_CLASS: DEVICE_CLASS_PRESSURE,
|
SENSOR_TYPE_CLASS: DEVICE_CLASS_PRESSURE,
|
||||||
},
|
},
|
||||||
"pressure_max": {
|
"pressure_max": {
|
||||||
SENSOR_TYPE_NAME: "Max Pressure",
|
SENSOR_TYPE_NAME: "Daily Max Pressure",
|
||||||
SENSOR_TYPE_UNIT: PRESSURE_HPA,
|
SENSOR_TYPE_UNIT: PRESSURE_HPA,
|
||||||
SENSOR_TYPE_CLASS: DEVICE_CLASS_PRESSURE,
|
SENSOR_TYPE_CLASS: DEVICE_CLASS_PRESSURE,
|
||||||
},
|
},
|
||||||
"pressure_min": {
|
"pressure_min": {
|
||||||
SENSOR_TYPE_NAME: "Min Pressure",
|
SENSOR_TYPE_NAME: "Daily Min Pressure",
|
||||||
SENSOR_TYPE_UNIT: PRESSURE_HPA,
|
SENSOR_TYPE_UNIT: PRESSURE_HPA,
|
||||||
SENSOR_TYPE_CLASS: DEVICE_CLASS_PRESSURE,
|
SENSOR_TYPE_CLASS: DEVICE_CLASS_PRESSURE,
|
||||||
},
|
},
|
||||||
@ -99,7 +101,7 @@ SENSOR_TYPES = {
|
|||||||
SENSOR_TYPE_ICON: "mdi:weather-windy",
|
SENSOR_TYPE_ICON: "mdi:weather-windy",
|
||||||
},
|
},
|
||||||
"wind_max": {
|
"wind_max": {
|
||||||
SENSOR_TYPE_NAME: "Max Wind Speed",
|
SENSOR_TYPE_NAME: "Daily Max Wind Speed",
|
||||||
SENSOR_TYPE_UNIT: SPEED_KILOMETERS_PER_HOUR,
|
SENSOR_TYPE_UNIT: SPEED_KILOMETERS_PER_HOUR,
|
||||||
SENSOR_TYPE_ICON: "mdi:weather-windy",
|
SENSOR_TYPE_ICON: "mdi:weather-windy",
|
||||||
},
|
},
|
||||||
@ -109,9 +111,9 @@ SENSOR_TYPES = {
|
|||||||
SENSOR_TYPE_ICON: "mdi:weather-windy",
|
SENSOR_TYPE_ICON: "mdi:weather-windy",
|
||||||
},
|
},
|
||||||
"rain": {
|
"rain": {
|
||||||
SENSOR_TYPE_NAME: "Rain",
|
SENSOR_TYPE_NAME: "Daily Precipitation",
|
||||||
SENSOR_TYPE_UNIT: LENGTH_MILLIMETERS,
|
SENSOR_TYPE_UNIT: LENGTH_MILLIMETERS,
|
||||||
SENSOR_TYPE_ICON: "mdi:weather-rainy",
|
SENSOR_TYPE_ICON: "mdi:cup-water",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
79
homeassistant/components/meteoclimatic/sensor.py
Normal file
79
homeassistant/components/meteoclimatic/sensor.py
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
"""Support for Meteoclimatic sensor."""
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from homeassistant.components.sensor import SensorEntity
|
||||||
|
from homeassistant.config_entries import ConfigEntry
|
||||||
|
from homeassistant.const import ATTR_ATTRIBUTION
|
||||||
|
from homeassistant.helpers.typing import HomeAssistantType
|
||||||
|
from homeassistant.helpers.update_coordinator import (
|
||||||
|
CoordinatorEntity,
|
||||||
|
DataUpdateCoordinator,
|
||||||
|
)
|
||||||
|
|
||||||
|
from .const import (
|
||||||
|
ATTRIBUTION,
|
||||||
|
DOMAIN,
|
||||||
|
MANUFACTURER,
|
||||||
|
MODEL,
|
||||||
|
SENSOR_TYPE_CLASS,
|
||||||
|
SENSOR_TYPE_ICON,
|
||||||
|
SENSOR_TYPE_NAME,
|
||||||
|
SENSOR_TYPE_UNIT,
|
||||||
|
SENSOR_TYPES,
|
||||||
|
)
|
||||||
|
|
||||||
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
async def async_setup_entry(
|
||||||
|
hass: HomeAssistantType, entry: ConfigEntry, async_add_entities
|
||||||
|
) -> None:
|
||||||
|
"""Set up the Meteoclimatic sensor platform."""
|
||||||
|
coordinator = hass.data[DOMAIN][entry.entry_id]
|
||||||
|
|
||||||
|
async_add_entities(
|
||||||
|
[MeteoclimaticSensor(sensor_type, coordinator) for sensor_type in SENSOR_TYPES],
|
||||||
|
False,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class MeteoclimaticSensor(CoordinatorEntity, SensorEntity):
|
||||||
|
"""Representation of a Meteoclimatic sensor."""
|
||||||
|
|
||||||
|
def __init__(self, sensor_type: str, coordinator: DataUpdateCoordinator) -> None:
|
||||||
|
"""Initialize the Meteoclimatic sensor."""
|
||||||
|
super().__init__(coordinator)
|
||||||
|
self._type = sensor_type
|
||||||
|
station = self.coordinator.data["station"]
|
||||||
|
self._attr_device_class = SENSOR_TYPES[sensor_type].get(SENSOR_TYPE_CLASS)
|
||||||
|
self._attr_icon = SENSOR_TYPES[sensor_type].get(SENSOR_TYPE_ICON)
|
||||||
|
self._attr_name = (
|
||||||
|
f"{station.name} {SENSOR_TYPES[sensor_type][SENSOR_TYPE_NAME]}"
|
||||||
|
)
|
||||||
|
self._attr_unique_id = f"{station.code}_{sensor_type}"
|
||||||
|
self._attr_unit_of_measurement = SENSOR_TYPES[sensor_type].get(SENSOR_TYPE_UNIT)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def device_info(self):
|
||||||
|
"""Return the device info."""
|
||||||
|
return {
|
||||||
|
"identifiers": {(DOMAIN, self.platform.config_entry.unique_id)},
|
||||||
|
"name": self.coordinator.name,
|
||||||
|
"manufacturer": MANUFACTURER,
|
||||||
|
"model": MODEL,
|
||||||
|
"entry_type": "service",
|
||||||
|
}
|
||||||
|
|
||||||
|
@property
|
||||||
|
def state(self):
|
||||||
|
"""Return the state of the sensor."""
|
||||||
|
return (
|
||||||
|
getattr(self.coordinator.data["weather"], self._type)
|
||||||
|
if self.coordinator.data
|
||||||
|
else None
|
||||||
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def extra_state_attributes(self):
|
||||||
|
"""Return the state attributes."""
|
||||||
|
return {ATTR_ATTRIBUTION: ATTRIBUTION}
|
@ -11,7 +11,7 @@ from homeassistant.helpers.update_coordinator import (
|
|||||||
DataUpdateCoordinator,
|
DataUpdateCoordinator,
|
||||||
)
|
)
|
||||||
|
|
||||||
from .const import ATTRIBUTION, CONDITION_CLASSES, DOMAIN
|
from .const import ATTRIBUTION, CONDITION_CLASSES, DOMAIN, MANUFACTURER, MODEL
|
||||||
|
|
||||||
|
|
||||||
def format_condition(condition):
|
def format_condition(condition):
|
||||||
@ -52,6 +52,17 @@ class MeteoclimaticWeather(CoordinatorEntity, WeatherEntity):
|
|||||||
"""Return the unique id of the sensor."""
|
"""Return the unique id of the sensor."""
|
||||||
return self._unique_id
|
return self._unique_id
|
||||||
|
|
||||||
|
@property
|
||||||
|
def device_info(self):
|
||||||
|
"""Return the device info."""
|
||||||
|
return {
|
||||||
|
"identifiers": {(DOMAIN, self.platform.config_entry.unique_id)},
|
||||||
|
"name": self.coordinator.name,
|
||||||
|
"manufacturer": MANUFACTURER,
|
||||||
|
"model": MODEL,
|
||||||
|
"entry_type": "service",
|
||||||
|
}
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def condition(self):
|
def condition(self):
|
||||||
"""Return the current condition."""
|
"""Return the current condition."""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user