1
0
mirror of https://github.com/home-assistant/core.git synced 2026-05-08 17:49:37 +01:00

Add strict typing for BSB-Lan integration (#163236)

This commit is contained in:
Willem-Jan van Rootselaar
2026-02-19 14:19:10 +01:00
committed by GitHub
parent c336e58afc
commit 5794189f8d
5 changed files with 34 additions and 17 deletions
+1
View File
@@ -131,6 +131,7 @@ homeassistant.components.bring.*
homeassistant.components.brother.*
homeassistant.components.browser.*
homeassistant.components.bryant_evolution.*
homeassistant.components.bsblan.*
homeassistant.components.bthome.*
homeassistant.components.button.*
homeassistant.components.calendar.*
+4 -4
View File
@@ -101,16 +101,16 @@ class BSBLANClimate(BSBLanEntity, ClimateEntity):
@property
def current_temperature(self) -> float | None:
"""Return the current temperature."""
if self.coordinator.data.state.current_temperature is None:
if (current_temp := self.coordinator.data.state.current_temperature) is None:
return None
return self.coordinator.data.state.current_temperature.value
return current_temp.value
@property
def target_temperature(self) -> float | None:
"""Return the temperature we try to reach."""
if self.coordinator.data.state.target_temperature is None:
if (target_temp := self.coordinator.data.state.target_temperature) is None:
return None
return self.coordinator.data.state.target_temperature.value
return target_temp.value
@property
def _hvac_mode_value(self) -> int | str | None:
+10 -5
View File
@@ -1,7 +1,10 @@
"""DataUpdateCoordinator for the BSB-Lan integration."""
from __future__ import annotations
from dataclasses import dataclass
from datetime import timedelta
from typing import TYPE_CHECKING
from bsblan import (
BSBLAN,
@@ -14,7 +17,6 @@ from bsblan import (
State,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_HOST
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryAuthFailed
@@ -22,6 +24,9 @@ from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, Upda
from .const import DOMAIN, LOGGER, SCAN_INTERVAL_FAST, SCAN_INTERVAL_SLOW
if TYPE_CHECKING:
from . import BSBLanConfigEntry
# Filter lists for optimized API calls - only fetch parameters we actually use
# This significantly reduces response time (~0.2s per parameter saved)
STATE_INCLUDE = ["current_temperature", "target_temperature", "hvac_mode"]
@@ -54,12 +59,12 @@ class BSBLanSlowData:
class BSBLanCoordinator[T](DataUpdateCoordinator[T]):
"""Base BSB-Lan coordinator."""
config_entry: ConfigEntry
config_entry: BSBLanConfigEntry
def __init__(
self,
hass: HomeAssistant,
config_entry: ConfigEntry,
config_entry: BSBLanConfigEntry,
client: BSBLAN,
name: str,
update_interval: timedelta,
@@ -81,7 +86,7 @@ class BSBLanFastCoordinator(BSBLanCoordinator[BSBLanFastData]):
def __init__(
self,
hass: HomeAssistant,
config_entry: ConfigEntry,
config_entry: BSBLanConfigEntry,
client: BSBLAN,
) -> None:
"""Initialize the BSB-Lan fast coordinator."""
@@ -126,7 +131,7 @@ class BSBLanSlowCoordinator(BSBLanCoordinator[BSBLanSlowData]):
def __init__(
self,
hass: HomeAssistant,
config_entry: ConfigEntry,
config_entry: BSBLanConfigEntry,
client: BSBLAN,
) -> None:
"""Initialize the BSB-Lan slow coordinator."""
@@ -110,27 +110,28 @@ class BSBLANWaterHeater(BSBLanDualCoordinatorEntity, WaterHeaterEntity):
@property
def current_operation(self) -> str | None:
"""Return current operation."""
if self.coordinator.data.dhw.operating_mode is None:
if (operating_mode := self.coordinator.data.dhw.operating_mode) is None:
return None
# The operating_mode.value is an integer (0=Off, 1=On, 2=Eco)
current_mode_value = self.coordinator.data.dhw.operating_mode.value
if isinstance(current_mode_value, int):
return BSBLAN_TO_HA_OPERATION_MODE.get(current_mode_value)
if isinstance(operating_mode.value, int):
return BSBLAN_TO_HA_OPERATION_MODE.get(operating_mode.value)
return None
@property
def current_temperature(self) -> float | None:
"""Return the current temperature."""
if self.coordinator.data.dhw.dhw_actual_value_top_temperature is None:
if (
current_temp := self.coordinator.data.dhw.dhw_actual_value_top_temperature
) is None:
return None
return self.coordinator.data.dhw.dhw_actual_value_top_temperature.value
return current_temp.value
@property
def target_temperature(self) -> float | None:
"""Return the temperature we try to reach."""
if self.coordinator.data.dhw.nominal_setpoint is None:
if (target_temp := self.coordinator.data.dhw.nominal_setpoint) is None:
return None
return self.coordinator.data.dhw.nominal_setpoint.value
return target_temp.value
async def async_set_temperature(self, **kwargs: Any) -> None:
"""Set new target temperature."""
Generated
+10
View File
@@ -1065,6 +1065,16 @@ disallow_untyped_defs = true
warn_return_any = true
warn_unreachable = true
[mypy-homeassistant.components.bsblan.*]
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
warn_return_any = true
warn_unreachable = true
[mypy-homeassistant.components.bthome.*]
check_untyped_defs = true
disallow_incomplete_defs = true