Add outside battery sensor and related translations

pull/72/head^2
Ferron Nijland 2025-07-09 16:26:18 +02:00
parent 99d25bfd56
commit feed730818
6 changed files with 60 additions and 1 deletions

View File

@ -63,6 +63,7 @@ OUTSIDE_TEMP: Final = "outside_temp"
DEW_POINT: Final = "dew_point"
OUTSIDE_HUMIDITY: Final = "outside_humidity"
OUTSIDE_CONNECTION: Final = "outside_connection"
OUTSIDE_BATTERY: Final = "outside_battery"
WIND_SPEED: Final = "wind_speed"
WIND_GUST: Final = "wind_gust"
WIND_DIR: Final = "wind_dir"
@ -137,6 +138,7 @@ REMAP_WSLINK_ITEMS: dict = {
"t1rainwy": WEEKLY_RAIN,
"t1rainmth": MONTHLY_RAIN,
"t1rainyr": YEARLY_RAIN,
"t1bat": OUTSIDE_BATTERY,
}
# TODO: Add more sensors
@ -177,6 +179,26 @@ class UnitOfDir(StrEnum):
N = "n"
class UnitOfDir(StrEnum):
"""Wind direrction azimut."""
NNE = "nne"
NE = "ne"
ENE = "ene"
E = "e"
ESE = "ese"
SE = "se"
SSE = "sse"
S = "s"
SSW = "ssw"
SW = "sw"
WSW = "wsw"
W = "w"
WNW = "wnw"
NW = "nw"
NNW = "nnw"
N = "n"
AZIMUT: list[UnitOfDir] = [
UnitOfDir.NNE,
UnitOfDir.NE,
@ -195,3 +217,14 @@ AZIMUT: list[UnitOfDir] = [
UnitOfDir.NNW,
UnitOfDir.N,
]
class UnitOfBat(StrEnum):
"""Battery level unit of measure."""
LOW = "low"
NORMAL = "normal"
BATLEVEL: list[UnitOfBat] = [
UnitOfBat.LOW,
UnitOfBat.NORMAL,
]

View File

@ -29,6 +29,7 @@ from .const import (
HEAT_INDEX,
INDOOR_HUMIDITY,
INDOOR_TEMP,
OUTSIDE_BATTERY,
OUTSIDE_HUMIDITY,
OUTSIDE_TEMP,
RAIN,
@ -45,7 +46,7 @@ from .const import (
WEEKLY_RAIN,
)
from .sensors_common import WeatherSensorEntityDescription
from .utils import wind_dir_to_text
from .utils import battery_level_to_text, wind_dir_to_text
SENSOR_TYPES_WSLINK: tuple[WeatherSensorEntityDescription, ...] = (
WeatherSensorEntityDescription(
@ -303,4 +304,12 @@ SENSOR_TYPES_WSLINK: tuple[WeatherSensorEntityDescription, ...] = (
translation_key=CHILL_INDEX,
value_fn=lambda data: cast("int", data),
),
WeatherSensorEntityDescription(
key=OUTSIDE_BATTERY,
name="Outside Battery",
icon="mdi:battery",
device_class=SensorDeviceClass.ENUM,
value_fn=lambda data: cast("str", battery_level_to_text(data)),
translation_key=OUTSIDE_BATTERY,
),
)

View File

@ -135,6 +135,7 @@
}
}
},
"outside_battery": { "name": "Outside battery level" },
"notify": {
"added": {
"title": "New sensors for SWS 12500 found.",

View File

@ -139,6 +139,7 @@
}
}
},
"outside_battery": { "name": "Vnější úroveň nabití baterie" },
"notify": {
"added": {
"title": "Nalezeny nové senzory pro SWS 12500.",

View File

@ -136,6 +136,8 @@
"nw": "NW",
"nnw": "NNW"
}
},
"outside_battery": { "name": "Outside battery level" }
}
}
},

View File

@ -20,6 +20,7 @@ from homeassistant.helpers.translation import async_get_translations
from .const import (
AZIMUT,
BATLEVEL,
DATABASE_PATH,
DEV_DBG,
OUTSIDE_HUMIDITY,
@ -180,7 +181,19 @@ def wind_dir_to_text(deg: float) -> UnitOfDir | None:
return None
def battery_level_to_text(battery: int) -> str:
"""Return battery level in text representation.
Returns UnitOfBat or None
"""
if battery is None:
return "unknown"
if battery is 0:
return BATLEVEL[battery]
elif battery is 1:
return BATLEVEL[battery]
def fahrenheit_to_celsius(fahrenheit: float) -> float:
"""Convert Fahrenheit to Celsius."""
return (fahrenheit - 32) * 5.0 / 9.0