Compare commits

...

10 Commits

Author SHA1 Message Date
Franck Nijhof 35c90d9bde Bump version to 2025.5.0b8 2025-05-07 07:38:18 +00:00
Raphael Hehl a9632bd0ff Bump uiprotect to version 7.6.0 (#144369) 2025-05-07 07:38:12 +00:00
epenet 983e134ae9 Bump renault-api to 0.3.1 (#144366)
* Bump renault-api to 0.3.1

* Adjust tests
2025-05-07 07:38:10 +00:00
Jan Bouwhuis e217532f9e Fix field validation for mqtt subentry options in sections (#144355) 2025-05-07 07:38:09 +00:00
Franck Nijhof 1eeab28eec Bump version to 2025.5.0b7 2025-05-06 19:30:08 +00:00
Bram Kragten 2a3bd45901 Update frontend to 20250506.0 (#144354) 2025-05-06 19:29:59 +00:00
Paulus Schoutsen d16453a465 Remove some media player intent checks for when paused (#144351) 2025-05-06 19:29:59 +00:00
Jan Bouwhuis de63dddc96 Ensure all default MQTT subentry option values are saved (#144347)
* Ensure all default MQTT subentry option values are saved

* Apply correct filter
2025-05-06 19:29:58 +00:00
J. Nick Koston ccffe19611 Bump bluemaestro-ble to 0.4.1 (#144345)
changelog: https://github.com/Bluetooth-Devices/bluemaestro-ble/compare/v0.4.0...v0.4.1

fixes #https://github.com/home-assistant/core/issues/144339
2025-05-06 19:29:57 +00:00
Martin Hjelmare 806bcf47d9 Fix Z-Wave migration flow to unload config entry before unplugging controller (#144343)
* Fix Z-Wave migration unload config entry before unplugging controller

* Remove typo
2025-05-06 19:29:56 +00:00
19 changed files with 56 additions and 822 deletions
@@ -12,5 +12,5 @@
"dependencies": ["bluetooth_adapters"],
"documentation": "https://www.home-assistant.io/integrations/bluemaestro",
"iot_class": "local_push",
"requirements": ["bluemaestro-ble==0.4.0"]
"requirements": ["bluemaestro-ble==0.4.1"]
}
@@ -20,5 +20,5 @@
"documentation": "https://www.home-assistant.io/integrations/frontend",
"integration_type": "system",
"quality_scale": "internal",
"requirements": ["home-assistant-frontend==20250502.1"]
"requirements": ["home-assistant-frontend==20250506.0"]
}
@@ -93,7 +93,6 @@ async def async_setup_intents(hass: HomeAssistant) -> None:
DOMAIN,
SERVICE_VOLUME_SET,
required_domains={DOMAIN},
required_states={MediaPlayerState.PLAYING},
required_features=MediaPlayerEntityFeature.VOLUME_SET,
required_slots={
ATTR_MEDIA_VOLUME_LEVEL: intent.IntentSlotInfo(
@@ -159,7 +158,6 @@ class MediaUnpauseHandler(intent.ServiceIntentHandler):
DOMAIN,
SERVICE_MEDIA_PLAY,
required_domains={DOMAIN},
required_states={MediaPlayerState.PAUSED},
description="Resumes a media player",
platforms={DOMAIN},
device_classes={MediaPlayerDeviceClass},
+14 -6
View File
@@ -498,8 +498,7 @@ def validate_light_platform_config(user_data: dict[str, Any]) -> dict[str, str]:
if user_data.get(CONF_MIN_KELVIN, DEFAULT_MIN_KELVIN) >= user_data.get(
CONF_MAX_KELVIN, DEFAULT_MAX_KELVIN
):
errors[CONF_MAX_KELVIN] = "max_below_min_kelvin"
errors[CONF_MIN_KELVIN] = "max_below_min_kelvin"
errors["advanced_settings"] = "max_below_min_kelvin"
return errors
@@ -1276,7 +1275,10 @@ def validate_user_input(
try:
validator(value)
except (ValueError, vol.Error, vol.Invalid):
errors[field] = data_schema_fields[field].error or "invalid_input"
data_schema_field = data_schema_fields[field]
errors[data_schema_field.section or field] = (
data_schema_field.error or "invalid_input"
)
if config_validator is not None:
if TYPE_CHECKING:
@@ -1385,8 +1387,11 @@ def subentry_schema_default_data_from_fields(
return {
key: field.default
for key, field in data_schema_fields.items()
if field.is_schema_default
or (field.default is not vol.UNDEFINED and key not in component_data)
if _check_conditions(field, component_data)
and (
field.is_schema_default
or (field.default is not vol.UNDEFINED and key not in component_data)
)
}
@@ -2212,7 +2217,10 @@ class MQTTSubentryFlowHandler(ConfigSubentryFlow):
for component_data in self._subentry_data["components"].values():
platform = component_data[CONF_PLATFORM]
subentry_default_data = subentry_schema_default_data_from_fields(
PLATFORM_ENTITY_FIELDS[platform] | COMMON_ENTITY_FIELDS, component_data
COMMON_ENTITY_FIELDS
| PLATFORM_ENTITY_FIELDS[platform]
| PLATFORM_MQTT_FIELDS[platform],
component_data,
)
component_data.update(subentry_default_data)
@@ -8,5 +8,5 @@
"iot_class": "cloud_polling",
"loggers": ["renault_api"],
"quality_scale": "silver",
"requirements": ["renault-api==0.3.0"]
"requirements": ["renault-api==0.3.1"]
}
@@ -40,7 +40,7 @@
"integration_type": "hub",
"iot_class": "local_push",
"loggers": ["uiprotect", "unifi_discovery"],
"requirements": ["uiprotect==7.5.5", "unifi-discovery==1.2.0"],
"requirements": ["uiprotect==7.6.0", "unifi-discovery==1.2.0"],
"ssdp": [
{
"manufacturer": "Ubiquiti Networks",
@@ -907,10 +907,6 @@ class ZWaveJSConfigFlow(ConfigFlow, domain=DOMAIN):
"""Reset the current controller, and instruct the user to unplug it."""
if user_input is not None:
config_entry = self._reconfigure_config_entry
assert config_entry is not None
# Unload the config entry before stopping the add-on.
await self.hass.config_entries.async_unload(config_entry.entry_id)
if self.usb_path:
# USB discovery was used, so the device is already known.
await self._async_set_addon_config({CONF_ADDON_DEVICE: self.usb_path})
@@ -925,6 +921,11 @@ class ZWaveJSConfigFlow(ConfigFlow, domain=DOMAIN):
_LOGGER.error("Failed to reset controller: %s", err)
return self.async_abort(reason="reset_failed")
config_entry = self._reconfigure_config_entry
assert config_entry is not None
# Unload the config entry before asking the user to unplug the controller.
await self.hass.config_entries.async_unload(config_entry.entry_id)
return self.async_show_form(
step_id="instruct_unplug",
description_placeholders={
+1 -1
View File
@@ -25,7 +25,7 @@ if TYPE_CHECKING:
APPLICATION_NAME: Final = "HomeAssistant"
MAJOR_VERSION: Final = 2025
MINOR_VERSION: Final = 5
PATCH_VERSION: Final = "0b6"
PATCH_VERSION: Final = "0b8"
__short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}"
__version__: Final = f"{__short_version__}.{PATCH_VERSION}"
REQUIRED_PYTHON_VER: Final[tuple[int, int, int]] = (3, 13, 2)
+1 -1
View File
@@ -38,7 +38,7 @@ habluetooth==3.48.2
hass-nabucasa==0.96.0
hassil==2.2.3
home-assistant-bluetooth==1.13.1
home-assistant-frontend==20250502.1
home-assistant-frontend==20250506.0
home-assistant-intents==2025.4.30
httpx==0.28.1
ifaddr==0.2.0
+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "homeassistant"
version = "2025.5.0b6"
version = "2025.5.0b8"
license = "Apache-2.0"
license-files = ["LICENSE*", "homeassistant/backports/LICENSE*"]
description = "Open-source home automation platform running on Python 3."
+4 -4
View File
@@ -628,7 +628,7 @@ blockchain==1.4.4
bluecurrent-api==1.2.3
# homeassistant.components.bluemaestro
bluemaestro-ble==0.4.0
bluemaestro-ble==0.4.1
# homeassistant.components.decora
# bluepy==1.3.0
@@ -1161,7 +1161,7 @@ hole==0.8.0
holidays==0.70
# homeassistant.components.frontend
home-assistant-frontend==20250502.1
home-assistant-frontend==20250506.0
# homeassistant.components.conversation
home-assistant-intents==2025.4.30
@@ -2631,7 +2631,7 @@ refoss-ha==1.2.5
regenmaschine==2024.03.0
# homeassistant.components.renault
renault-api==0.3.0
renault-api==0.3.1
# homeassistant.components.renson
renson-endura-delta==1.7.2
@@ -2975,7 +2975,7 @@ typedmonarchmoney==0.4.4
uasiren==0.0.1
# homeassistant.components.unifiprotect
uiprotect==7.5.5
uiprotect==7.6.0
# homeassistant.components.landisgyr_heat_meter
ultraheat-api==0.5.7
+4 -4
View File
@@ -556,7 +556,7 @@ blinkpy==0.23.0
bluecurrent-api==1.2.3
# homeassistant.components.bluemaestro
bluemaestro-ble==0.4.0
bluemaestro-ble==0.4.1
# homeassistant.components.bluetooth
bluetooth-adapters==0.21.4
@@ -991,7 +991,7 @@ hole==0.8.0
holidays==0.70
# homeassistant.components.frontend
home-assistant-frontend==20250502.1
home-assistant-frontend==20250506.0
# homeassistant.components.conversation
home-assistant-intents==2025.4.30
@@ -2138,7 +2138,7 @@ refoss-ha==1.2.5
regenmaschine==2024.03.0
# homeassistant.components.renault
renault-api==0.3.0
renault-api==0.3.1
# homeassistant.components.renson
renson-endura-delta==1.7.2
@@ -2404,7 +2404,7 @@ typedmonarchmoney==0.4.4
uasiren==0.0.1
# homeassistant.components.unifiprotect
uiprotect==7.5.5
uiprotect==7.6.0
# homeassistant.components.landisgyr_heat_meter
ultraheat-api==0.5.7
@@ -104,19 +104,6 @@ async def test_unpause_media_player_intent(hass: HomeAssistant) -> None:
assert call.service == SERVICE_MEDIA_PLAY
assert call.data == {"entity_id": entity_id}
# Test if not paused
hass.states.async_set(
entity_id,
STATE_PLAYING,
)
with pytest.raises(intent.MatchFailedError):
response = await intent.async_handle(
hass,
"test",
media_player_intent.INTENT_MEDIA_UNPAUSE,
)
async def test_next_media_player_intent(hass: HomeAssistant) -> None:
"""Test HassMediaNext intent for media players."""
@@ -245,17 +232,6 @@ async def test_volume_media_player_intent(hass: HomeAssistant) -> None:
assert call.service == SERVICE_VOLUME_SET
assert call.data == {"entity_id": entity_id, "volume_level": 0.5}
# Test if not playing
hass.states.async_set(entity_id, STATE_IDLE, attributes=attributes)
with pytest.raises(intent.MatchFailedError):
response = await intent.async_handle(
hass,
"test",
media_player_intent.INTENT_SET_VOLUME,
{"volume_level": {"value": 50}},
)
# Test feature not supported
hass.states.async_set(
entity_id,
+4
View File
@@ -153,6 +153,10 @@ MOCK_SUBENTRY_LIGHT_BASIC_KELVIN_COMPONENT = {
"state_topic": "test-topic",
"color_temp_kelvin": True,
"state_value_template": "{{ value_json.value }}",
"brightness_scale": 255,
"max_kelvin": 6535,
"min_kelvin": 2000,
"white_scale": 255,
"entity_picture": "https://example.com/8131babc5e8d4f44b82e0761d39091a2",
},
}
+10 -2
View File
@@ -2817,14 +2817,22 @@ async def test_migrate_of_incompatible_config_entry(
},
{"state_topic": "invalid_subscribe_topic"},
),
(
{
"command_topic": "test-topic",
"light_brightness_settings": {
"brightness_command_topic": "test-topic#invalid"
},
},
{"light_brightness_settings": "invalid_publish_topic"},
),
(
{
"command_topic": "test-topic",
"advanced_settings": {"max_kelvin": 2000, "min_kelvin": 2000},
},
{
"max_kelvin": "max_below_min_kelvin",
"min_kelvin": "max_below_min_kelvin",
"advanced_settings": "max_below_min_kelvin",
},
),
),
@@ -1005,102 +1005,6 @@
'state': 'off',
})
# ---
# name: test_binary_sensors[twingo_3_electric][binary_sensor.reg_twingo_iii_driver_door-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'binary_sensor',
'entity_category': None,
'entity_id': 'binary_sensor.reg_twingo_iii_driver_door',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <BinarySensorDeviceClass.DOOR: 'door'>,
'original_icon': None,
'original_name': 'Driver door',
'platform': 'renault',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'driver_door_status',
'unique_id': 'vf1twingoiiivin_driver_door_status',
'unit_of_measurement': None,
})
# ---
# name: test_binary_sensors[twingo_3_electric][binary_sensor.reg_twingo_iii_driver_door-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'door',
'friendly_name': 'REG-TWINGO-III Driver door',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.reg_twingo_iii_driver_door',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_binary_sensors[twingo_3_electric][binary_sensor.reg_twingo_iii_hatch-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'binary_sensor',
'entity_category': None,
'entity_id': 'binary_sensor.reg_twingo_iii_hatch',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <BinarySensorDeviceClass.DOOR: 'door'>,
'original_icon': None,
'original_name': 'Hatch',
'platform': 'renault',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'hatch_status',
'unique_id': 'vf1twingoiiivin_hatch_status',
'unit_of_measurement': None,
})
# ---
# name: test_binary_sensors[twingo_3_electric][binary_sensor.reg_twingo_iii_hatch-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'door',
'friendly_name': 'REG-TWINGO-III Hatch',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.reg_twingo_iii_hatch',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_binary_sensors[twingo_3_electric][binary_sensor.reg_twingo_iii_hvac-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
@@ -1148,102 +1052,6 @@
'state': 'off',
})
# ---
# name: test_binary_sensors[twingo_3_electric][binary_sensor.reg_twingo_iii_lock-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'binary_sensor',
'entity_category': None,
'entity_id': 'binary_sensor.reg_twingo_iii_lock',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <BinarySensorDeviceClass.LOCK: 'lock'>,
'original_icon': None,
'original_name': 'Lock',
'platform': 'renault',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': 'vf1twingoiiivin_lock_status',
'unit_of_measurement': None,
})
# ---
# name: test_binary_sensors[twingo_3_electric][binary_sensor.reg_twingo_iii_lock-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'lock',
'friendly_name': 'REG-TWINGO-III Lock',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.reg_twingo_iii_lock',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_binary_sensors[twingo_3_electric][binary_sensor.reg_twingo_iii_passenger_door-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'binary_sensor',
'entity_category': None,
'entity_id': 'binary_sensor.reg_twingo_iii_passenger_door',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <BinarySensorDeviceClass.DOOR: 'door'>,
'original_icon': None,
'original_name': 'Passenger door',
'platform': 'renault',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'passenger_door_status',
'unique_id': 'vf1twingoiiivin_passenger_door_status',
'unit_of_measurement': None,
})
# ---
# name: test_binary_sensors[twingo_3_electric][binary_sensor.reg_twingo_iii_passenger_door-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'door',
'friendly_name': 'REG-TWINGO-III Passenger door',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.reg_twingo_iii_passenger_door',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_binary_sensors[twingo_3_electric][binary_sensor.reg_twingo_iii_plug-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
@@ -1292,102 +1100,6 @@
'state': 'on',
})
# ---
# name: test_binary_sensors[twingo_3_electric][binary_sensor.reg_twingo_iii_rear_left_door-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'binary_sensor',
'entity_category': None,
'entity_id': 'binary_sensor.reg_twingo_iii_rear_left_door',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <BinarySensorDeviceClass.DOOR: 'door'>,
'original_icon': None,
'original_name': 'Rear left door',
'platform': 'renault',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'rear_left_door_status',
'unique_id': 'vf1twingoiiivin_rear_left_door_status',
'unit_of_measurement': None,
})
# ---
# name: test_binary_sensors[twingo_3_electric][binary_sensor.reg_twingo_iii_rear_left_door-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'door',
'friendly_name': 'REG-TWINGO-III Rear left door',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.reg_twingo_iii_rear_left_door',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_binary_sensors[twingo_3_electric][binary_sensor.reg_twingo_iii_rear_right_door-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'binary_sensor',
'entity_category': None,
'entity_id': 'binary_sensor.reg_twingo_iii_rear_right_door',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <BinarySensorDeviceClass.DOOR: 'door'>,
'original_icon': None,
'original_name': 'Rear right door',
'platform': 'renault',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'rear_right_door_status',
'unique_id': 'vf1twingoiiivin_rear_right_door_status',
'unit_of_measurement': None,
})
# ---
# name: test_binary_sensors[twingo_3_electric][binary_sensor.reg_twingo_iii_rear_right_door-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'door',
'friendly_name': 'REG-TWINGO-III Rear right door',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.reg_twingo_iii_rear_right_door',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_binary_sensors[zoe_40][binary_sensor.reg_zoe_40_charging-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
@@ -1579,102 +1291,6 @@
'state': 'off',
})
# ---
# name: test_binary_sensors[zoe_50][binary_sensor.reg_zoe_50_driver_door-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'binary_sensor',
'entity_category': None,
'entity_id': 'binary_sensor.reg_zoe_50_driver_door',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <BinarySensorDeviceClass.DOOR: 'door'>,
'original_icon': None,
'original_name': 'Driver door',
'platform': 'renault',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'driver_door_status',
'unique_id': 'vf1zoe50vin_driver_door_status',
'unit_of_measurement': None,
})
# ---
# name: test_binary_sensors[zoe_50][binary_sensor.reg_zoe_50_driver_door-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'door',
'friendly_name': 'REG-ZOE-50 Driver door',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.reg_zoe_50_driver_door',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'off',
})
# ---
# name: test_binary_sensors[zoe_50][binary_sensor.reg_zoe_50_hatch-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'binary_sensor',
'entity_category': None,
'entity_id': 'binary_sensor.reg_zoe_50_hatch',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <BinarySensorDeviceClass.DOOR: 'door'>,
'original_icon': None,
'original_name': 'Hatch',
'platform': 'renault',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'hatch_status',
'unique_id': 'vf1zoe50vin_hatch_status',
'unit_of_measurement': None,
})
# ---
# name: test_binary_sensors[zoe_50][binary_sensor.reg_zoe_50_hatch-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'door',
'friendly_name': 'REG-ZOE-50 Hatch',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.reg_zoe_50_hatch',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'off',
})
# ---
# name: test_binary_sensors[zoe_50][binary_sensor.reg_zoe_50_hvac-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
@@ -1722,102 +1338,6 @@
'state': 'off',
})
# ---
# name: test_binary_sensors[zoe_50][binary_sensor.reg_zoe_50_lock-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'binary_sensor',
'entity_category': None,
'entity_id': 'binary_sensor.reg_zoe_50_lock',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <BinarySensorDeviceClass.LOCK: 'lock'>,
'original_icon': None,
'original_name': 'Lock',
'platform': 'renault',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': 'vf1zoe50vin_lock_status',
'unit_of_measurement': None,
})
# ---
# name: test_binary_sensors[zoe_50][binary_sensor.reg_zoe_50_lock-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'lock',
'friendly_name': 'REG-ZOE-50 Lock',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.reg_zoe_50_lock',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'off',
})
# ---
# name: test_binary_sensors[zoe_50][binary_sensor.reg_zoe_50_passenger_door-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'binary_sensor',
'entity_category': None,
'entity_id': 'binary_sensor.reg_zoe_50_passenger_door',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <BinarySensorDeviceClass.DOOR: 'door'>,
'original_icon': None,
'original_name': 'Passenger door',
'platform': 'renault',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'passenger_door_status',
'unique_id': 'vf1zoe50vin_passenger_door_status',
'unit_of_measurement': None,
})
# ---
# name: test_binary_sensors[zoe_50][binary_sensor.reg_zoe_50_passenger_door-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'door',
'friendly_name': 'REG-ZOE-50 Passenger door',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.reg_zoe_50_passenger_door',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'off',
})
# ---
# name: test_binary_sensors[zoe_50][binary_sensor.reg_zoe_50_plug-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
@@ -1866,99 +1386,3 @@
'state': 'off',
})
# ---
# name: test_binary_sensors[zoe_50][binary_sensor.reg_zoe_50_rear_left_door-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'binary_sensor',
'entity_category': None,
'entity_id': 'binary_sensor.reg_zoe_50_rear_left_door',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <BinarySensorDeviceClass.DOOR: 'door'>,
'original_icon': None,
'original_name': 'Rear left door',
'platform': 'renault',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'rear_left_door_status',
'unique_id': 'vf1zoe50vin_rear_left_door_status',
'unit_of_measurement': None,
})
# ---
# name: test_binary_sensors[zoe_50][binary_sensor.reg_zoe_50_rear_left_door-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'door',
'friendly_name': 'REG-ZOE-50 Rear left door',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.reg_zoe_50_rear_left_door',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'off',
})
# ---
# name: test_binary_sensors[zoe_50][binary_sensor.reg_zoe_50_rear_right_door-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'binary_sensor',
'entity_category': None,
'entity_id': 'binary_sensor.reg_zoe_50_rear_right_door',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <BinarySensorDeviceClass.DOOR: 'door'>,
'original_icon': None,
'original_name': 'Rear right door',
'platform': 'renault',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'rear_right_door_status',
'unique_id': 'vf1zoe50vin_rear_right_door_status',
'unit_of_measurement': None,
})
# ---
# name: test_binary_sensors[zoe_50][binary_sensor.reg_zoe_50_rear_right_door-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'door',
'friendly_name': 'REG-ZOE-50 Rear right door',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.reg_zoe_50_rear_right_door',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'off',
})
# ---
@@ -3211,100 +3211,6 @@
'state': 'unknown',
})
# ---
# name: test_sensors[twingo_3_electric][sensor.reg_twingo_iii_remote_engine_start-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.reg_twingo_iii_remote_engine_start',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Remote engine start',
'platform': 'renault',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'res_state',
'unique_id': 'vf1twingoiiivin_res_state',
'unit_of_measurement': None,
})
# ---
# name: test_sensors[twingo_3_electric][sensor.reg_twingo_iii_remote_engine_start-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'REG-TWINGO-III Remote engine start',
}),
'context': <ANY>,
'entity_id': 'sensor.reg_twingo_iii_remote_engine_start',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_sensors[twingo_3_electric][sensor.reg_twingo_iii_remote_engine_start_code-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.reg_twingo_iii_remote_engine_start_code',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Remote engine start code',
'platform': 'renault',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'res_state_code',
'unique_id': 'vf1twingoiiivin_res_state_code',
'unit_of_measurement': None,
})
# ---
# name: test_sensors[twingo_3_electric][sensor.reg_twingo_iii_remote_engine_start_code-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'REG-TWINGO-III Remote engine start code',
}),
'context': <ANY>,
'entity_id': 'sensor.reg_twingo_iii_remote_engine_start_code',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_sensors[zoe_40][sensor.reg_zoe_40_battery-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
@@ -4737,97 +4643,3 @@
'state': 'unplugged',
})
# ---
# name: test_sensors[zoe_50][sensor.reg_zoe_50_remote_engine_start-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.reg_zoe_50_remote_engine_start',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Remote engine start',
'platform': 'renault',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'res_state',
'unique_id': 'vf1zoe50vin_res_state',
'unit_of_measurement': None,
})
# ---
# name: test_sensors[zoe_50][sensor.reg_zoe_50_remote_engine_start-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'REG-ZOE-50 Remote engine start',
}),
'context': <ANY>,
'entity_id': 'sensor.reg_zoe_50_remote_engine_start',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'Stopped, ready for RES',
})
# ---
# name: test_sensors[zoe_50][sensor.reg_zoe_50_remote_engine_start_code-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.reg_zoe_50_remote_engine_start_code',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Remote engine start code',
'platform': 'renault',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'res_state_code',
'unique_id': 'vf1zoe50vin_res_state_code',
'unit_of_measurement': None,
})
# ---
# name: test_sensors[zoe_50][sensor.reg_zoe_50_remote_engine_start_code-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'REG-ZOE-50 Remote engine start code',
}),
'context': <ANY>,
'entity_id': 'sensor.reg_zoe_50_remote_engine_start_code',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '10',
})
# ---
+2 -2
View File
@@ -197,7 +197,7 @@ async def test_sensor_throttling_after_init(
@pytest.mark.parametrize(
("vehicle_type", "vehicle_count", "scan_interval"),
[
("zoe_50", 1, 420), # 7 coordinators => 7 minutes interval
("zoe_50", 1, 300), # 5 coordinators => 5 minutes interval
("captur_fuel", 1, 240), # 4 coordinators => 4 minutes interval
("multi", 2, 480), # 8 coordinators => 8 minutes interval
],
@@ -236,7 +236,7 @@ async def test_dynamic_scan_interval(
@pytest.mark.parametrize(
("vehicle_type", "vehicle_count", "scan_interval"),
[
("zoe_50", 1, 300), # (7-2) coordinators => 5 minutes interval
("zoe_50", 1, 240), # (6-2) coordinators => 4 minutes interval
("captur_fuel", 1, 180), # (4-1) coordinators => 3 minutes interval
("multi", 2, 360), # (8-2) coordinators => 6 minutes interval
],
@@ -1109,10 +1109,10 @@ async def test_usb_discovery_migration_driver_ready_timeout(
assert result["type"] == FlowResultType.FORM
assert result["step_id"] == "instruct_unplug"
assert entry.state is config_entries.ConfigEntryState.NOT_LOADED
result = await hass.config_entries.flow.async_configure(result["flow_id"], {})
assert entry.state is config_entries.ConfigEntryState.NOT_LOADED
assert result["type"] == FlowResultType.SHOW_PROGRESS
assert result["step_id"] == "start_addon"
assert set_addon_options.call_args == call(
@@ -3776,6 +3776,7 @@ async def test_reconfigure_migrate_with_addon(
assert result["type"] == FlowResultType.FORM
assert result["step_id"] == "instruct_unplug"
assert entry.state is config_entries.ConfigEntryState.NOT_LOADED
result = await hass.config_entries.flow.async_configure(result["flow_id"], {})
@@ -3790,7 +3791,6 @@ async def test_reconfigure_migrate_with_addon(
},
)
assert entry.state is config_entries.ConfigEntryState.NOT_LOADED
assert result["type"] == FlowResultType.SHOW_PROGRESS
assert result["step_id"] == "start_addon"
assert set_addon_options.call_args == call(
@@ -3918,6 +3918,7 @@ async def test_reconfigure_migrate_driver_ready_timeout(
assert result["type"] == FlowResultType.FORM
assert result["step_id"] == "instruct_unplug"
assert entry.state is config_entries.ConfigEntryState.NOT_LOADED
result = await hass.config_entries.flow.async_configure(result["flow_id"], {})
@@ -3932,7 +3933,6 @@ async def test_reconfigure_migrate_driver_ready_timeout(
},
)
assert entry.state is config_entries.ConfigEntryState.NOT_LOADED
assert result["type"] == FlowResultType.SHOW_PROGRESS
assert result["step_id"] == "start_addon"
assert set_addon_options.call_args == call(
@@ -4108,6 +4108,7 @@ async def test_reconfigure_migrate_start_addon_failure(
assert result["type"] == FlowResultType.FORM
assert result["step_id"] == "instruct_unplug"
assert entry.state is config_entries.ConfigEntryState.NOT_LOADED
result = await hass.config_entries.flow.async_configure(result["flow_id"], {})
@@ -4202,6 +4203,7 @@ async def test_reconfigure_migrate_restore_failure(
assert result["type"] == FlowResultType.FORM
assert result["step_id"] == "instruct_unplug"
assert entry.state is config_entries.ConfigEntryState.NOT_LOADED
result = await hass.config_entries.flow.async_configure(result["flow_id"], {})
@@ -4367,6 +4369,7 @@ async def test_choose_serial_port_usb_ports_failure(
assert result["type"] == FlowResultType.FORM
assert result["step_id"] == "instruct_unplug"
assert entry.state is config_entries.ConfigEntryState.NOT_LOADED
with patch(
"homeassistant.components.zwave_js.config_flow.async_get_usb_ports",