Add entity translations to Environment Canada (#95295)

This commit is contained in:
Joost Lekkerkerker 2023-06-26 22:23:43 +02:00 committed by GitHub
parent 9b1b0937eb
commit 2872b6cf61
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 123 additions and 29 deletions

View File

@ -42,7 +42,7 @@ class ECCamera(CoordinatorEntity, Camera):
"""Implementation of an Environment Canada radar camera."""
_attr_has_entity_name = True
_attr_name = "Radar"
_attr_translation_key = "radar"
def __init__(self, coordinator):
"""Initialize the camera."""

View File

@ -52,12 +52,12 @@ class ECSensorEntityDescription(
SENSOR_TYPES: tuple[ECSensorEntityDescription, ...] = (
ECSensorEntityDescription(
key="condition",
name="Current condition",
translation_key="condition",
value_fn=lambda data: data.conditions.get("condition", {}).get("value"),
),
ECSensorEntityDescription(
key="dewpoint",
name="Dew point",
translation_key="dewpoint",
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
state_class=SensorStateClass.MEASUREMENT,
@ -65,7 +65,7 @@ SENSOR_TYPES: tuple[ECSensorEntityDescription, ...] = (
),
ECSensorEntityDescription(
key="high_temp",
name="High temperature",
translation_key="high_temp",
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
state_class=SensorStateClass.MEASUREMENT,
@ -73,7 +73,7 @@ SENSOR_TYPES: tuple[ECSensorEntityDescription, ...] = (
),
ECSensorEntityDescription(
key="humidex",
name="Humidex",
translation_key="humidex",
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
state_class=SensorStateClass.MEASUREMENT,
@ -81,7 +81,6 @@ SENSOR_TYPES: tuple[ECSensorEntityDescription, ...] = (
),
ECSensorEntityDescription(
key="humidity",
name="Humidity",
device_class=SensorDeviceClass.HUMIDITY,
native_unit_of_measurement=PERCENTAGE,
state_class=SensorStateClass.MEASUREMENT,
@ -89,11 +88,13 @@ SENSOR_TYPES: tuple[ECSensorEntityDescription, ...] = (
),
ECSensorEntityDescription(
key="icon_code",
translation_key="icon_code",
name="Icon code",
value_fn=lambda data: data.conditions.get("icon_code", {}).get("value"),
),
ECSensorEntityDescription(
key="low_temp",
translation_key="low_temp",
name="Low temperature",
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
@ -102,27 +103,27 @@ SENSOR_TYPES: tuple[ECSensorEntityDescription, ...] = (
),
ECSensorEntityDescription(
key="normal_high",
name="Normal high temperature",
translation_key="normal_high",
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
value_fn=lambda data: data.conditions.get("normal_high", {}).get("value"),
),
ECSensorEntityDescription(
key="normal_low",
name="Normal low temperature",
translation_key="normal_low",
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
value_fn=lambda data: data.conditions.get("normal_low", {}).get("value"),
),
ECSensorEntityDescription(
key="pop",
name="Chance of precipitation",
translation_key="pop",
native_unit_of_measurement=PERCENTAGE,
value_fn=lambda data: data.conditions.get("pop", {}).get("value"),
),
ECSensorEntityDescription(
key="precip_yesterday",
name="Precipitation yesterday",
translation_key="precip_yesterday",
device_class=SensorDeviceClass.PRECIPITATION,
native_unit_of_measurement=UnitOfPrecipitationDepth.MILLIMETERS,
state_class=SensorStateClass.MEASUREMENT,
@ -130,7 +131,7 @@ SENSOR_TYPES: tuple[ECSensorEntityDescription, ...] = (
),
ECSensorEntityDescription(
key="pressure",
name="Barometric pressure",
translation_key="pressure",
device_class=SensorDeviceClass.PRESSURE,
native_unit_of_measurement=UnitOfPressure.KPA,
state_class=SensorStateClass.MEASUREMENT,
@ -138,7 +139,6 @@ SENSOR_TYPES: tuple[ECSensorEntityDescription, ...] = (
),
ECSensorEntityDescription(
key="temperature",
name="Temperature",
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
state_class=SensorStateClass.MEASUREMENT,
@ -146,32 +146,32 @@ SENSOR_TYPES: tuple[ECSensorEntityDescription, ...] = (
),
ECSensorEntityDescription(
key="tendency",
name="Tendency",
translation_key="tendency",
value_fn=lambda data: data.conditions.get("tendency", {}).get("value"),
transform=lambda val: str(val).capitalize(),
),
ECSensorEntityDescription(
key="text_summary",
name="Summary",
translation_key="text_summary",
value_fn=lambda data: data.conditions.get("text_summary", {}).get("value"),
transform=lambda val: val[:255],
),
ECSensorEntityDescription(
key="timestamp",
name="Observation time",
translation_key="timestamp",
device_class=SensorDeviceClass.TIMESTAMP,
value_fn=lambda data: data.metadata.get("timestamp"),
),
ECSensorEntityDescription(
key="uv_index",
name="UV index",
translation_key="uv_index",
native_unit_of_measurement=UV_INDEX,
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda data: data.conditions.get("uv_index", {}).get("value"),
),
ECSensorEntityDescription(
key="visibility",
name="Visibility",
translation_key="visibility",
native_unit_of_measurement=UnitOfLength.KILOMETERS,
device_class=SensorDeviceClass.DISTANCE,
state_class=SensorStateClass.MEASUREMENT,
@ -179,13 +179,13 @@ SENSOR_TYPES: tuple[ECSensorEntityDescription, ...] = (
),
ECSensorEntityDescription(
key="wind_bearing",
name="Wind bearing",
translation_key="wind_bearing",
native_unit_of_measurement=DEGREE,
value_fn=lambda data: data.conditions.get("wind_bearing", {}).get("value"),
),
ECSensorEntityDescription(
key="wind_chill",
name="Wind chill",
translation_key="wind_chill",
device_class=SensorDeviceClass.TEMPERATURE,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
state_class=SensorStateClass.MEASUREMENT,
@ -193,12 +193,12 @@ SENSOR_TYPES: tuple[ECSensorEntityDescription, ...] = (
),
ECSensorEntityDescription(
key="wind_dir",
name="Wind direction",
translation_key="wind_dir",
value_fn=lambda data: data.conditions.get("wind_dir", {}).get("value"),
),
ECSensorEntityDescription(
key="wind_gust",
name="Wind gust",
translation_key="wind_gust",
native_unit_of_measurement=UnitOfSpeed.KILOMETERS_PER_HOUR,
device_class=SensorDeviceClass.WIND_SPEED,
state_class=SensorStateClass.MEASUREMENT,
@ -206,7 +206,6 @@ SENSOR_TYPES: tuple[ECSensorEntityDescription, ...] = (
),
ECSensorEntityDescription(
key="wind_speed",
name="Wind speed",
native_unit_of_measurement=UnitOfSpeed.KILOMETERS_PER_HOUR,
device_class=SensorDeviceClass.WIND_SPEED,
state_class=SensorStateClass.MEASUREMENT,
@ -226,7 +225,7 @@ def _get_aqhi_value(data):
AQHI_SENSOR = ECSensorEntityDescription(
key="aqhi",
name="AQHI",
translation_key="aqhi",
device_class=SensorDeviceClass.AQI,
state_class=SensorStateClass.MEASUREMENT,
value_fn=_get_aqhi_value,
@ -235,35 +234,35 @@ AQHI_SENSOR = ECSensorEntityDescription(
ALERT_TYPES: tuple[ECSensorEntityDescription, ...] = (
ECSensorEntityDescription(
key="advisories",
name="Advisory",
translation_key="advisories",
icon="mdi:bell-alert",
value_fn=lambda data: data.alerts.get("advisories", {}).get("value"),
transform=len,
),
ECSensorEntityDescription(
key="endings",
name="Endings",
translation_key="endings",
icon="mdi:alert-circle-check",
value_fn=lambda data: data.alerts.get("endings", {}).get("value"),
transform=len,
),
ECSensorEntityDescription(
key="statements",
name="Statements",
translation_key="statements",
icon="mdi:bell-alert",
value_fn=lambda data: data.alerts.get("statements", {}).get("value"),
transform=len,
),
ECSensorEntityDescription(
key="warnings",
name="Warnings",
translation_key="warnings",
icon="mdi:alert-octagon",
value_fn=lambda data: data.alerts.get("warnings", {}).get("value"),
transform=len,
),
ECSensorEntityDescription(
key="watches",
name="Watches",
translation_key="watches",
icon="mdi:alert",
value_fn=lambda data: data.alerts.get("watches", {}).get("value"),
transform=len,

View File

@ -22,5 +22,100 @@
"too_many_attempts": "Connections to Environment Canada are rate limited; Try again in 60 seconds",
"unknown": "[%key:common::config_flow::error::unknown%]"
}
},
"entity": {
"sensor": {
"condition": {
"name": "Current condition"
},
"dewpoint": {
"name": "Dew point"
},
"high_temp": {
"name": "High temperature"
},
"humidex": {
"name": "Humidex"
},
"icon_code": {
"name": "Icon code"
},
"low_temp": {
"name": "Low temperature"
},
"normal_high": {
"name": "Normal high temperature"
},
"normal_low": {
"name": "Normal low temperature"
},
"pop": {
"name": "Chance of precipitation"
},
"precip_yesterday": {
"name": "Precipitation yesterday"
},
"pressure": {
"name": "Barometric pressure"
},
"tendency": {
"name": "Tendency"
},
"text_summary": {
"name": "Summary"
},
"timestamp": {
"name": "Observation time"
},
"uv_index": {
"name": "UV index"
},
"visibility": {
"name": "Visibility"
},
"wind_bearing": {
"name": "Wind bearing"
},
"wind_chill": {
"name": "Wind chill"
},
"wind_dir": {
"name": "Wind direction"
},
"wind_gust": {
"name": "Wind gust"
},
"aqhi": {
"name": "AQHI"
},
"advisories": {
"name": "Advisory"
},
"endings": {
"name": "Endings"
},
"statements": {
"name": "Statements"
},
"warnings": {
"name": "Warnings"
},
"watches": {
"name": "Watches"
}
},
"camera": {
"radar": {
"name": "Radar"
}
},
"weather": {
"hourly_forecast": {
"name": "Hourly forecast"
},
"forecast": {
"name": "Forecast"
}
}
}
}

View File

@ -80,7 +80,7 @@ class ECWeather(CoordinatorEntity, WeatherEntity):
super().__init__(coordinator)
self.ec_data = coordinator.ec_data
self._attr_attribution = self.ec_data.metadata["attribution"]
self._attr_name = "Hourly forecast" if hourly else "Forecast"
self._attr_translation_key = "hourly_forecast" if hourly else "forecast"
self._attr_unique_id = (
f"{coordinator.config_entry.unique_id}{'-hourly' if hourly else '-daily'}"
)