Adds indoor and channel 2 battery sensors

Adds support for displaying indoor console and channel 2 battery levels as sensors.

Updates sensor logic to use a common list to determine icon representation

Fixes #74
74-additional-sensors
schizza 2025-10-26 20:59:57 +01:00
parent 5022cb7767
commit 80909e88c0
No known key found for this signature in database
5 changed files with 67 additions and 9 deletions

View File

@ -23,12 +23,8 @@ WSLINK: Final = "wslink"
WINDY_API_KEY = "WINDY_API_KEY" WINDY_API_KEY = "WINDY_API_KEY"
WINDY_ENABLED: Final = "windy_enabled_checkbox" WINDY_ENABLED: Final = "windy_enabled_checkbox"
WINDY_LOGGER_ENABLED: Final = "windy_logger_checkbox" WINDY_LOGGER_ENABLED: Final = "windy_logger_checkbox"
WINDY_NOT_INSERTED: Final = ( WINDY_NOT_INSERTED: Final = "Data was succefuly sent to Windy, but not inserted by Windy API. Does anyone else sent data to Windy?"
"Data was succefuly sent to Windy, but not inserted by Windy API. Does anyone else sent data to Windy?" WINDY_INVALID_KEY: Final = "Windy API KEY is invalid. Send data to Windy is now disabled. Check your API KEY and try again."
)
WINDY_INVALID_KEY: Final = (
"Windy API KEY is invalid. Send data to Windy is now disabled. Check your API KEY and try again."
)
WINDY_SUCCESS: Final = ( WINDY_SUCCESS: Final = (
"Windy successfully sent data and data was successfully inserted by Windy API" "Windy successfully sent data and data was successfully inserted by Windy API"
) )
@ -81,10 +77,12 @@ DAILY_RAIN: Final = "daily_rain"
SOLAR_RADIATION: Final = "solar_radiation" SOLAR_RADIATION: Final = "solar_radiation"
INDOOR_TEMP: Final = "indoor_temp" INDOOR_TEMP: Final = "indoor_temp"
INDOOR_HUMIDITY: Final = "indoor_humidity" INDOOR_HUMIDITY: Final = "indoor_humidity"
INDOOR_BATTERY: Final = "indoor_battery"
UV: Final = "uv" UV: Final = "uv"
CH2_TEMP: Final = "ch2_temp" CH2_TEMP: Final = "ch2_temp"
CH2_HUMIDITY: Final = "ch2_humidity" CH2_HUMIDITY: Final = "ch2_humidity"
CH2_CONNECTION: Final = "ch2_connection" CH2_CONNECTION: Final = "ch2_connection"
CH2_BATTERY: Final = "ch2_battery"
CH3_TEMP: Final = "ch3_temp" CH3_TEMP: Final = "ch3_temp"
CH3_HUMIDITY: Final = "ch3_humidity" CH3_HUMIDITY: Final = "ch3_humidity"
CH3_CONNECTION: Final = "ch3_connection" CH3_CONNECTION: Final = "ch3_connection"
@ -95,7 +93,7 @@ HEAT_INDEX: Final = "heat_index"
CHILL_INDEX: Final = "chill_index" CHILL_INDEX: Final = "chill_index"
REMAP_ITEMS: dict = { REMAP_ITEMS: dict[str, str] = {
"baromin": BARO_PRESSURE, "baromin": BARO_PRESSURE,
"tempf": OUTSIDE_TEMP, "tempf": OUTSIDE_TEMP,
"dewptf": DEW_POINT, "dewptf": DEW_POINT,
@ -117,7 +115,7 @@ REMAP_ITEMS: dict = {
"soilmoisture3": CH4_HUMIDITY, "soilmoisture3": CH4_HUMIDITY,
} }
REMAP_WSLINK_ITEMS: dict = { REMAP_WSLINK_ITEMS: dict[str, str] = {
"intem": INDOOR_TEMP, "intem": INDOOR_TEMP,
"inhum": INDOOR_HUMIDITY, "inhum": INDOOR_HUMIDITY,
"t1tem": OUTSIDE_TEMP, "t1tem": OUTSIDE_TEMP,
@ -145,6 +143,8 @@ REMAP_WSLINK_ITEMS: dict = {
"t234c2tem": CH3_TEMP, "t234c2tem": CH3_TEMP,
"t234c2hum": CH3_HUMIDITY, "t234c2hum": CH3_HUMIDITY,
"t1bat": OUTSIDE_BATTERY, "t1bat": OUTSIDE_BATTERY,
"inbat": INDOOR_BATTERY,
"t234c1bat": CH2_BATTERY,
} }
# TODO: Add more sensors # TODO: Add more sensors
@ -157,6 +157,7 @@ REMAP_WSLINK_ITEMS: dict = {
DISABLED_BY_DEFAULT: Final = [ DISABLED_BY_DEFAULT: Final = [
CH2_TEMP, CH2_TEMP,
CH2_HUMIDITY, CH2_HUMIDITY,
CH2_BATTERY,
CH3_TEMP, CH3_TEMP,
CH3_HUMIDITY, CH3_HUMIDITY,
CH4_TEMP, CH4_TEMP,
@ -164,6 +165,12 @@ DISABLED_BY_DEFAULT: Final = [
OUTSIDE_BATTERY, OUTSIDE_BATTERY,
] ]
BATTERY_LIST = [
OUTSIDE_BATTERY,
INDOOR_BATTERY,
CH2_BATTERY,
]
class UnitOfDir(StrEnum): class UnitOfDir(StrEnum):
"""Wind direrction azimut.""" """Wind direrction azimut."""

View File

@ -23,6 +23,7 @@ from .const import (
WIND_DIR, WIND_DIR,
WIND_SPEED, WIND_SPEED,
WSLINK, WSLINK,
BATTERY_LIST,
) )
from .sensors_common import WeatherSensorEntityDescription from .sensors_common import WeatherSensorEntityDescription
from .sensors_weather import SENSOR_TYPES_WEATHER_API from .sensors_weather import SENSOR_TYPES_WEATHER_API
@ -144,7 +145,7 @@ class WeatherSensor(
def icon(self) -> str | None: def icon(self) -> str | None:
"""Return the dynamic icon for battery representation.""" """Return the dynamic icon for battery representation."""
if self.entity_description.key == OUTSIDE_BATTERY: if self.entity_description.key in BATTERY_LIST:
try: try:
return battery_level_to_icon(self.native_value) return battery_level_to_icon(self.native_value)
except Exception: except Exception:

View File

@ -19,6 +19,8 @@ from .const import (
BARO_PRESSURE, BARO_PRESSURE,
CH2_HUMIDITY, CH2_HUMIDITY,
CH2_TEMP, CH2_TEMP,
CH2_BATTERY,
INDOOR_BATTERY,
CH3_HUMIDITY, CH3_HUMIDITY,
CH3_TEMP, CH3_TEMP,
CH4_HUMIDITY, CH4_HUMIDITY,
@ -28,8 +30,10 @@ from .const import (
DEW_POINT, DEW_POINT,
HEAT_INDEX, HEAT_INDEX,
HOURLY_RAIN, HOURLY_RAIN,
INDOOR_BATTERY,
INDOOR_HUMIDITY, INDOOR_HUMIDITY,
INDOOR_TEMP, INDOOR_TEMP,
INDOOR_BATTERY,
MONTHLY_RAIN, MONTHLY_RAIN,
OUTSIDE_BATTERY, OUTSIDE_BATTERY,
OUTSIDE_HUMIDITY, OUTSIDE_HUMIDITY,
@ -312,4 +316,18 @@ SENSOR_TYPES_WSLINK: tuple[WeatherSensorEntityDescription, ...] = (
device_class=SensorDeviceClass.ENUM, device_class=SensorDeviceClass.ENUM,
value_fn=lambda data: battery_level_to_text(data), value_fn=lambda data: battery_level_to_text(data),
), ),
WeatherSensorEntityDescription(
key=CH2_BATTERY,
translation_key=CH2_BATTERY,
icon="mdi:battery-unknown",
device_class=SensorDeviceClass.ENUM,
value_fn=lambda data: battery_level_to_text(data),
),
WeatherSensorEntityDescription(
key=INDOOR_BATTERY,
translation_key=INDOOR_BATTERY,
icon="mdi:battery-unknown",
device_class=SensorDeviceClass.ENUM,
value_fn=lambda data: battery_level_to_text(data),
),
) )

View File

@ -144,6 +144,22 @@
"normal": "Normální", "normal": "Normální",
"unknown": "Neznámá / zcela vybitá" "unknown": "Neznámá / zcela vybitá"
} }
},
"indoor_battery": {
"name": "Stav nabití baterie kozole",
"state": {
"low": "Nízká",
"normal": "Normální",
"unknown": "Neznámá / zcela vybitá"
}
},
"ch2_battery": {
"name": "Stav nabití baterie kanálu 2",
"state": {
"low": "Nízká",
"normal": "Normální",
"unknown": "Neznámá / zcela vybitá"
}
} }
} }
}, },

View File

@ -144,6 +144,22 @@
"low": "Low", "low": "Low",
"unknown": "Unknown / drained out" "unknown": "Unknown / drained out"
} }
},
"ch2_battery": {
"name": "Channel 2 battery level",
"state": {
"normal": "OK",
"low": "Low",
"unknown": "Unknown / drained out"
}
},
"indoor_battery": {
"name": "Console battery level",
"state": {
"normal": "OK",
"low": "Low",
"unknown": "Unknown / drained out"
}
} }
} }
}, },