1
0
mirror of https://github.com/home-assistant/core.git synced 2026-02-15 07:36:16 +00:00

Bump python-bsblan to version 4.1.0 (#160676)

This commit is contained in:
Willem-Jan van Rootselaar
2026-01-12 15:44:03 +01:00
committed by GitHub
parent a434760a80
commit 6c1bf31a3c
6 changed files with 41 additions and 8 deletions

View File

@@ -111,11 +111,17 @@ class BSBLANClimate(BSBLanEntity, ClimateEntity):
return None
return self.coordinator.data.state.target_temperature.value
@property
def _hvac_mode_value(self) -> int | str | None:
"""Return the raw hvac_mode value from the coordinator."""
if (hvac_mode := self.coordinator.data.state.hvac_mode) is None:
return None
return hvac_mode.value
@property
def hvac_mode(self) -> HVACMode | None:
"""Return hvac operation ie. heat, cool mode."""
hvac_mode_value = self.coordinator.data.state.hvac_mode.value
if hvac_mode_value is None:
if (hvac_mode_value := self._hvac_mode_value) is None:
return None
# BSB-Lan returns integer values: 0=off, 1=auto, 2=eco, 3=heat
if isinstance(hvac_mode_value, int):
@@ -125,9 +131,8 @@ class BSBLANClimate(BSBLanEntity, ClimateEntity):
@property
def preset_mode(self) -> str | None:
"""Return the current preset mode."""
hvac_mode_value = self.coordinator.data.state.hvac_mode.value
# BSB-Lan mode 2 is eco/reduced mode
if hvac_mode_value == 2:
if self._hvac_mode_value == 2:
return PRESET_ECO
return PRESET_NONE

View File

@@ -29,7 +29,11 @@ class BSBLanEntityBase[_T: BSBLanCoordinator](CoordinatorEntity[_T]):
connections={(CONNECTION_NETWORK_MAC, format_mac(mac))},
name=data.device.name,
manufacturer="BSBLAN Inc.",
model=data.info.device_identification.value,
model=(
data.info.device_identification.value
if data.info.device_identification
else None
),
sw_version=data.device.version,
configuration_url=f"http://{host}",
)

View File

@@ -7,7 +7,7 @@
"integration_type": "device",
"iot_class": "local_polling",
"loggers": ["bsblan"],
"requirements": ["python-bsblan==3.1.6"],
"requirements": ["python-bsblan==4.1.0"],
"zeroconf": [
{
"name": "bsb-lan*",

2
requirements_all.txt generated
View File

@@ -2481,7 +2481,7 @@ python-awair==0.2.5
python-blockchain-api==0.0.2
# homeassistant.components.bsblan
python-bsblan==3.1.6
python-bsblan==4.1.0
# homeassistant.components.citybikes
python-citybikes==0.3.3

View File

@@ -2098,7 +2098,7 @@ python-MotionMount==2.3.0
python-awair==0.2.5
# homeassistant.components.bsblan
python-bsblan==3.1.6
python-bsblan==4.1.0
# homeassistant.components.ecobee
python-ecobee-api==0.3.2

View File

@@ -159,6 +159,30 @@ async def test_climate_hvac_mode_none_value(
assert state.state == "unknown"
async def test_climate_hvac_mode_object_none(
hass: HomeAssistant,
mock_bsblan: AsyncMock,
mock_config_entry: MockConfigEntry,
freezer: FrozenDateTimeFactory,
) -> None:
"""Test climate entity when hvac_mode object itself is None."""
await setup_with_selected_platforms(hass, mock_config_entry, [Platform.CLIMATE])
# Set hvac_mode to None (the object itself, not just the value)
mock_bsblan.state.return_value.hvac_mode = None
freezer.tick(timedelta(minutes=1))
async_fire_time_changed(hass)
await hass.async_block_till_done()
# State should be unknown when hvac_mode object is None
state = hass.states.get(ENTITY_ID)
assert state is not None
assert state.state == "unknown"
# preset_mode should be "none" when hvac_mode object is None
assert state.attributes["preset_mode"] == PRESET_NONE
async def test_climate_hvac_mode_string_fallback(
hass: HomeAssistant,
mock_bsblan: AsyncMock,