From b9417fe4ec5f00b1ec8b5a954c24e49cce0c330f Mon Sep 17 00:00:00 2001 From: Martin Hjelmare Date: Mon, 7 Sep 2026 11:41:42 +0200 Subject: [PATCH 01/26] Bump aiortm to 0.20.1 (#181524) --- homeassistant/components/remember_the_milk/manifest.json | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/remember_the_milk/manifest.json b/homeassistant/components/remember_the_milk/manifest.json index fa78b17300e5b..b9d7d0768338d 100644 --- a/homeassistant/components/remember_the_milk/manifest.json +++ b/homeassistant/components/remember_the_milk/manifest.json @@ -8,5 +8,5 @@ "iot_class": "cloud_polling", "loggers": ["aiortm"], "quality_scale": "legacy", - "requirements": ["aiortm==0.20.0"] + "requirements": ["aiortm==0.20.1"] } diff --git a/requirements_all.txt b/requirements_all.txt index f62cb7fd4a093..e13735809bb3f 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -416,7 +416,7 @@ aiorecollect==2023.09.0 aioridwell==2025.09.0 # homeassistant.components.remember_the_milk -aiortm==0.20.0 +aiortm==0.20.1 # homeassistant.components.ruckus_unleashed aioruckus==0.46.3 From b37f49658ab6447f73fb9be6187b4ca963254983 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Mon, 7 Sep 2026 11:43:03 +0200 Subject: [PATCH 02/26] Handle errors in easyEnergy price actions (#181434) --- .../components/easyenergy/services.py | 37 ++++++---- .../components/easyenergy/strings.json | 3 + tests/components/easyenergy/test_services.py | 68 ++++++++++++++++++- 3 files changed, 94 insertions(+), 14 deletions(-) diff --git a/homeassistant/components/easyenergy/services.py b/homeassistant/components/easyenergy/services.py index 19a2eb1235e11..ad7cb7f5cea0b 100644 --- a/homeassistant/components/easyenergy/services.py +++ b/homeassistant/components/easyenergy/services.py @@ -6,6 +6,7 @@ from typing import Final from easyenergy import ( + EasyEnergyError, Electricity, ElectricityGranularity, ElectricityPriceType, @@ -23,7 +24,7 @@ SupportsResponse, callback, ) -from homeassistant.exceptions import ServiceValidationError +from homeassistant.exceptions import HomeAssistantError, ServiceValidationError from homeassistant.helpers import selector, service from homeassistant.util import dt as dt_util @@ -192,21 +193,33 @@ async def __get_prices( prices: list[dict[str, float | datetime]] if service_price_type == ServicePriceType.GAS: - data = await coordinator.easyenergy.gas_prices( - start_date=start_date, - end_date=end_date, - vat=vat, - ) + try: + data = await coordinator.easyenergy.gas_prices( + start_date=start_date, + end_date=end_date, + vat=vat, + ) + except EasyEnergyError as err: + raise HomeAssistantError( + translation_domain=DOMAIN, + translation_key="fetch_prices_error", + ) from err prices = __select_prices( data, call.data[ATTR_PRICE_TYPE] == ElectricityPriceType.INVOICE.value ) else: - data = await coordinator.easyenergy.energy_prices( - start_date=start_date, - end_date=end_date, - granularity=ElectricityGranularity(call.data[ATTR_GRANULARITY]), - vat=vat, - ) + try: + data = await coordinator.easyenergy.energy_prices( + start_date=start_date, + end_date=end_date, + granularity=ElectricityGranularity(call.data[ATTR_GRANULARITY]), + vat=vat, + ) + except EasyEnergyError as err: + raise HomeAssistantError( + translation_domain=DOMAIN, + translation_key="fetch_prices_error", + ) from err if service_price_type == ServicePriceType.ENERGY_USAGE: prices = __select_prices( diff --git a/homeassistant/components/easyenergy/strings.json b/homeassistant/components/easyenergy/strings.json index 06d6ab25da822..cab60617ea966 100644 --- a/homeassistant/components/easyenergy/strings.json +++ b/homeassistant/components/easyenergy/strings.json @@ -50,6 +50,9 @@ "connection_error": { "message": "Error communicating with the easyEnergy API." }, + "fetch_prices_error": { + "message": "Error fetching prices from the easyEnergy API." + }, "invalid_date": { "message": "Invalid date provided. Got {date}" } diff --git a/tests/components/easyenergy/test_services.py b/tests/components/easyenergy/test_services.py index d2121a600a9f5..652fe384cc9ad 100644 --- a/tests/components/easyenergy/test_services.py +++ b/tests/components/easyenergy/test_services.py @@ -3,7 +3,13 @@ from datetime import date from unittest.mock import MagicMock -from easyenergy import ElectricityGranularity, VatOption +from easyenergy import ( + EasyEnergyConnectionError, + EasyEnergyError, + EasyEnergyNoDataError, + ElectricityGranularity, + VatOption, +) import pytest from syrupy.assertion import SnapshotAssertion import voluptuous as vol @@ -18,7 +24,7 @@ GAS_SERVICE_NAME, ) from homeassistant.core import HomeAssistant -from homeassistant.exceptions import ServiceValidationError +from homeassistant.exceptions import HomeAssistantError, ServiceValidationError from tests.common import MockConfigEntry @@ -459,6 +465,7 @@ async def test_service_validation_config_entry_not_found( async def test_service_validation_invalid_date( hass: HomeAssistant, mock_config_entry: MockConfigEntry, + mock_easyenergy: MagicMock, service: str, date_field: str, date_value: str, @@ -471,6 +478,8 @@ async def test_service_validation_invalid_date( if service != ENERGY_RETURN_SERVICE_NAME: service_data["incl_vat"] = True + mock_easyenergy.reset_mock() + with pytest.raises(ServiceValidationError) as err: await hass.services.async_call( DOMAIN, @@ -483,3 +492,58 @@ async def test_service_validation_invalid_date( assert str(err.value) == f"Invalid date provided. Got {date_value}" assert err.value.translation_key == "invalid_date" assert err.value.translation_placeholders == {"date": date_value} + mock_easyenergy.gas_prices.assert_not_awaited() + mock_easyenergy.energy_prices.assert_not_awaited() + + +@pytest.mark.usefixtures("init_integration") +@pytest.mark.parametrize( + ("service", "method", "service_data"), + [ + (GAS_SERVICE_NAME, "gas_prices", {"incl_vat": True}), + (ENERGY_USAGE_SERVICE_NAME, "energy_prices", {"incl_vat": True}), + (ENERGY_RETURN_SERVICE_NAME, "energy_prices", {}), + ], +) +@pytest.mark.parametrize( + "exception", + [ + pytest.param( + EasyEnergyError("Unexpected response", {"response": "raw API data"}), + id="api_error", + ), + pytest.param( + EasyEnergyConnectionError("Connection failed"), id="connection_error" + ), + pytest.param(EasyEnergyNoDataError("No prices found"), id="no_data"), + ], +) +async def test_service_api_error( + hass: HomeAssistant, + mock_config_entry: MockConfigEntry, + mock_easyenergy: MagicMock, + service: str, + method: str, + service_data: dict[str, bool], + exception: EasyEnergyError, +) -> None: + """Test API failures raise translated execution errors for every action.""" + mock_method = getattr(mock_easyenergy, method) + mock_method.reset_mock() + mock_method.side_effect = exception + + with pytest.raises(HomeAssistantError) as err: + await hass.services.async_call( + DOMAIN, + service, + {ATTR_CONFIG_ENTRY: mock_config_entry.entry_id} | service_data, + blocking=True, + return_response=True, + ) + + assert not isinstance(err.value, ServiceValidationError) + assert err.value.translation_domain == DOMAIN + assert err.value.translation_key == "fetch_prices_error" + assert str(err.value) == "Error fetching prices from the easyEnergy API" + assert err.value.__cause__ is exception + mock_method.assert_awaited_once() From 139de5c5fd1d2b143023be658d0641d49368e0c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20=C4=8Cerm=C3=A1k?= Date: Mon, 7 Sep 2026 11:47:16 +0200 Subject: [PATCH 03/26] Add specific gravity velocity sensor to rapt_ble (#181518) --- homeassistant/components/rapt_ble/icons.json | 9 +++++ homeassistant/components/rapt_ble/sensor.py | 10 ++++++ tests/components/rapt_ble/test_sensor.py | 38 +++++++++++++++----- 3 files changed, 49 insertions(+), 8 deletions(-) create mode 100644 homeassistant/components/rapt_ble/icons.json diff --git a/homeassistant/components/rapt_ble/icons.json b/homeassistant/components/rapt_ble/icons.json new file mode 100644 index 0000000000000..dcb6c6066eab8 --- /dev/null +++ b/homeassistant/components/rapt_ble/icons.json @@ -0,0 +1,9 @@ +{ + "entity": { + "sensor": { + "specific_gravity_velocity": { + "default": "mdi:trending-down" + } + } + } +} diff --git a/homeassistant/components/rapt_ble/sensor.py b/homeassistant/components/rapt_ble/sensor.py index 675e0fe212dbe..dd3a62fdd239a 100644 --- a/homeassistant/components/rapt_ble/sensor.py +++ b/homeassistant/components/rapt_ble/sensor.py @@ -39,6 +39,16 @@ key=f"{DeviceClass.SPECIFIC_GRAVITY}_{Units.SPECIFIC_GRAVITY}", state_class=SensorStateClass.MEASUREMENT, ), + ( + DeviceClass.SPECIFIC_GRAVITY_VELOCITY, + Units.SPECIFIC_GRAVITY_POINTS_PER_DAY, + ): SensorEntityDescription( + key=f"{DeviceClass.SPECIFIC_GRAVITY_VELOCITY}_{Units.SPECIFIC_GRAVITY_POINTS_PER_DAY}", + translation_key="specific_gravity_velocity", + native_unit_of_measurement=Units.SPECIFIC_GRAVITY_POINTS_PER_DAY, + state_class=SensorStateClass.MEASUREMENT, + suggested_display_precision=1, + ), (DeviceClass.BATTERY, Units.PERCENTAGE): SensorEntityDescription( key=f"{DeviceClass.BATTERY}_{Units.PERCENTAGE}", device_class=SensorDeviceClass.BATTERY, diff --git a/tests/components/rapt_ble/test_sensor.py b/tests/components/rapt_ble/test_sensor.py index d28b854533ff7..40069052aab67 100644 --- a/tests/components/rapt_ble/test_sensor.py +++ b/tests/components/rapt_ble/test_sensor.py @@ -8,9 +8,11 @@ ATTR_FRIENDLY_NAME, ATTR_UNIT_OF_MEASUREMENT, PERCENTAGE, + STATE_UNKNOWN, UnitOfTemperature, ) from homeassistant.core import HomeAssistant +from homeassistant.helpers import entity_registry as er from homeassistant.helpers.service_info.bluetooth import BluetoothServiceInfo from . import ( @@ -23,6 +25,8 @@ from tests.common import MockConfigEntry from tests.components.bluetooth import inject_bluetooth_service_info +VELOCITY_ENTITY_ID = "sensor.rapt_pill_0666_specific_gravity_velocity" + async def test_sensors(hass: HomeAssistant) -> None: """Test setting up creates the sensors.""" @@ -39,6 +43,7 @@ async def test_sensors(hass: HomeAssistant) -> None: inject_bluetooth_service_info(hass, COMPLETE_SERVICE_INFO) await hass.async_block_till_done() assert len(hass.states.async_all()) == 3 + assert hass.states.get(VELOCITY_ENTITY_ID) is None temp_sensor = hass.states.get("sensor.rapt_pill_0666_battery") assert temp_sensor is not None @@ -73,16 +78,19 @@ async def test_sensors(hass: HomeAssistant) -> None: @pytest.mark.parametrize( - "service_info", + ("service_info", "expected_state"), [ - pytest.param(V2_SERVICE_INFO, id="valid_velocity"), - pytest.param(V2_NO_VELOCITY_SERVICE_INFO, id="invalid_velocity"), + pytest.param(V2_SERVICE_INFO, "-14.8217964172363", id="valid_velocity"), + pytest.param(V2_NO_VELOCITY_SERVICE_INFO, STATE_UNKNOWN, id="invalid_velocity"), ], ) -async def test_sensors_v2_payload( - hass: HomeAssistant, service_info: BluetoothServiceInfo +async def test_specific_gravity_velocity_sensor( + hass: HomeAssistant, + entity_registry: er.EntityRegistry, + service_info: BluetoothServiceInfo, + expected_state: str, ) -> None: - """Test a version 2 advertisement sets up the known sensors.""" + """Test the specific gravity velocity sensor from a v2 payload.""" entry = MockConfigEntry( domain=DOMAIN, unique_id=RAPT_MAC, @@ -94,8 +102,22 @@ async def test_sensors_v2_payload( inject_bluetooth_service_info(hass, service_info) await hass.async_block_till_done() - assert len(hass.states.async_all()) == 3 - assert hass.states.get("sensor.rapt_pill_0666_specific_gravity") is not None + assert len(hass.states.async_all()) == 4 + + velocity_sensor = hass.states.get(VELOCITY_ENTITY_ID) + assert velocity_sensor is not None + assert velocity_sensor.state == expected_state + assert ( + velocity_sensor.attributes[ATTR_FRIENDLY_NAME] + == "RAPT Pill 0666 Specific Gravity Velocity" + ) + assert velocity_sensor.attributes[ATTR_STATE_CLASS] == SensorStateClass.MEASUREMENT + assert velocity_sensor.attributes[ATTR_UNIT_OF_MEASUREMENT] == "SG points/day" + + entity_entry = entity_registry.async_get(VELOCITY_ENTITY_ID) + assert entity_entry is not None + assert entity_entry.translation_key == "specific_gravity_velocity" + assert entity_entry.options["sensor"]["suggested_display_precision"] == 1 assert await hass.config_entries.async_unload(entry.entry_id) await hass.async_block_till_done() From 31af4273aa2bbfa72f206edcad5a6d51a5cc04ff Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Mon, 7 Sep 2026 11:56:30 +0200 Subject: [PATCH 04/26] Fix easyEnergy price period count sensor semantics (#181431) --- homeassistant/components/easyenergy/sensor.py | 10 +-- .../components/easyenergy/strings.json | 4 +- tests/components/easyenergy/test_sensor.py | 72 +++++++++++++++++-- 3 files changed, 69 insertions(+), 17 deletions(-) diff --git a/homeassistant/components/easyenergy/sensor.py b/homeassistant/components/easyenergy/sensor.py index e1a1aa4f300b3..4d812104a1d97 100644 --- a/homeassistant/components/easyenergy/sensor.py +++ b/homeassistant/components/easyenergy/sensor.py @@ -12,13 +12,7 @@ SensorEntityDescription, SensorStateClass, ) -from homeassistant.const import ( - CURRENCY_EURO, - PERCENTAGE, - UnitOfEnergy, - UnitOfTime, - UnitOfVolume, -) +from homeassistant.const import CURRENCY_EURO, PERCENTAGE, UnitOfEnergy, UnitOfVolume from homeassistant.core import HomeAssistant from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback @@ -182,14 +176,12 @@ class EasyEnergySensorEntityDescription(SensorEntityDescription): key="hours_priced_equal_or_lower", translation_key="hours_priced_equal_or_lower", service_type="today_energy_usage", - native_unit_of_measurement=UnitOfTime.HOURS, value_fn=lambda data: data.energy_today.periods_priced_equal_or_lower, ), EasyEnergySensorEntityDescription( key="hours_priced_equal_or_higher", translation_key="hours_priced_equal_or_higher", service_type="today_energy_return", - native_unit_of_measurement=UnitOfTime.HOURS, value_fn=lambda data: data.energy_today.return_periods_priced_equal_or_higher, ), ) diff --git a/homeassistant/components/easyenergy/strings.json b/homeassistant/components/easyenergy/strings.json index cab60617ea966..24d820b2c5144 100644 --- a/homeassistant/components/easyenergy/strings.json +++ b/homeassistant/components/easyenergy/strings.json @@ -24,10 +24,10 @@ "name": "Time of highest price - today" }, "hours_priced_equal_or_higher": { - "name": "Hours priced equal or higher than current - today" + "name": "Periods priced equal or higher than current - today" }, "hours_priced_equal_or_lower": { - "name": "Hours priced equal or lower than current - today" + "name": "Periods priced equal or lower than current - today" }, "lowest_price_time": { "name": "Time of lowest price - today" diff --git a/tests/components/easyenergy/test_sensor.py b/tests/components/easyenergy/test_sensor.py index 8964ffa143ad2..790f682426558 100644 --- a/tests/components/easyenergy/test_sensor.py +++ b/tests/components/easyenergy/test_sensor.py @@ -1,8 +1,9 @@ """Tests for the sensors provided by the easyEnergy integration.""" +from datetime import timedelta from unittest.mock import MagicMock -from easyenergy import EasyEnergyNoDataError +from easyenergy import EasyEnergyNoDataError, Electricity import pytest from homeassistant.components.easyenergy.const import DOMAIN @@ -29,8 +30,9 @@ from homeassistant.core import HomeAssistant from homeassistant.helpers import device_registry as dr, entity_registry as er from homeassistant.setup import async_setup_component +from homeassistant.util import dt as dt_util -from tests.common import MockConfigEntry +from tests.common import MockConfigEntry, async_load_json_object_fixture @pytest.mark.freeze_time("2026-04-19 13:00:00+00:00") @@ -128,7 +130,7 @@ async def test_energy_usage_today( assert not device_entry.model assert not device_entry.sw_version - # Usage hours priced equal or lower sensor + # Usage periods priced equal or lower sensor state = hass.states.get( "sensor.easyenergy_today_energy_usage_hours_priced_equal_or_lower" ) @@ -141,9 +143,10 @@ async def test_energy_usage_today( entry.unique_id == f"{entry_id}_today_energy_usage_hours_priced_equal_or_lower" ) assert state.state == "2" + assert ATTR_UNIT_OF_MEASUREMENT not in state.attributes assert ( state.attributes.get(ATTR_FRIENDLY_NAME) == "Energy market price" - " - Usage Hours priced equal or lower than current - today" + " - Usage Periods priced equal or lower than current - today" ) assert ATTR_DEVICE_CLASS not in state.attributes @@ -243,7 +246,7 @@ async def test_energy_return_today( assert not device_entry.model assert not device_entry.sw_version - # Return hours priced equal or higher sensor + # Return periods priced equal or higher sensor state = hass.states.get( "sensor.easyenergy_today_energy_return_hours_priced_equal_or_higher" ) @@ -257,9 +260,10 @@ async def test_energy_return_today( == f"{entry_id}_today_energy_return_hours_priced_equal_or_higher" ) assert state.state == "23" + assert ATTR_UNIT_OF_MEASUREMENT not in state.attributes assert ( state.attributes.get(ATTR_FRIENDLY_NAME) == "Energy market price" - " - Return Hours priced equal or higher than current - today" + " - Return Periods priced equal or higher than current - today" ) assert ATTR_DEVICE_CLASS not in state.attributes @@ -321,3 +325,59 @@ async def test_no_gas_today( state = hass.states.get("sensor.easyenergy_today_gas_current_hour_price") assert state assert state.state == STATE_UNKNOWN + + +@pytest.mark.freeze_time("2026-04-19 00:00:00+00:00") +@pytest.mark.parametrize( + ("minutes", "granularity"), + [ + pytest.param(60, "hour", id="hourly"), + pytest.param(15, "quarter", id="quarter-hourly"), + ], +) +@pytest.mark.parametrize( + ("sensor", "expected_state"), + [ + pytest.param("usage_hours_priced_equal_or_lower", "3", id="usage"), + pytest.param("return_hours_priced_equal_or_higher", "2", id="return"), + ], +) +async def test_price_period_counts( + hass: HomeAssistant, + mock_easyenergy: MagicMock, + mock_config_entry: MockConfigEntry, + minutes: int, + granularity: str, + sensor: str, + expected_state: str, +) -> None: + """Test inclusive counts for distinct usage and return prices at any interval size.""" + data = await async_load_json_object_fixture(hass, "today_energy.json", DOMAIN) + start = dt_util.utcnow() + interval = timedelta(minutes=minutes) + prices = [ + { + **data["prices"][0], + "from": (start + index * interval).isoformat(), + "until": (start + (index + 1) * interval).isoformat(), + "granularity": granularity, + "priceIncVat": usage_price, + "invoicePrice": return_price, + } + for index, (usage_price, return_price) in enumerate( + [(0.2, 0.3), (-0.1, 0.1), (0.2, 0.3), (0.4, 0.2)] + ) + ] + mock_easyenergy.energy_prices.return_value = Electricity.from_dict( + prices, price_key="priceIncVat", return_price_key="invoicePrice" + ) + mock_config_entry.add_to_hass(hass) + await hass.config_entries.async_setup(mock_config_entry.entry_id) + await hass.async_block_till_done() + + state = hass.states.get(f"sensor.easyenergy_today_energy_{sensor}") + assert state + assert state.state == expected_state + assert ATTR_UNIT_OF_MEASUREMENT not in state.attributes + assert ATTR_DEVICE_CLASS not in state.attributes + assert ATTR_STATE_CLASS not in state.attributes From 9c0d3609ab8f3f1ccdf6ffd141ec87688f60d407 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Mon, 7 Sep 2026 12:01:54 +0200 Subject: [PATCH 05/26] Make EnergyZero electricity sensor semantics interval-neutral (#181492) --- homeassistant/components/energyzero/sensor.py | 13 +++---------- .../components/energyzero/strings.json | 8 +++++++- .../energyzero/snapshots/test_sensor.ambr | 19 +++++++++---------- 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/homeassistant/components/energyzero/sensor.py b/homeassistant/components/energyzero/sensor.py index 9db9d78c9bbec..1d65a43406566 100644 --- a/homeassistant/components/energyzero/sensor.py +++ b/homeassistant/components/energyzero/sensor.py @@ -12,13 +12,7 @@ SensorEntityDescription, SensorStateClass, ) -from homeassistant.const import ( - CURRENCY_EURO, - PERCENTAGE, - UnitOfEnergy, - UnitOfTime, - UnitOfVolume, -) +from homeassistant.const import CURRENCY_EURO, PERCENTAGE, UnitOfEnergy, UnitOfVolume from homeassistant.core import HomeAssistant from homeassistant.helpers.device_registry import DeviceEntryType, DeviceInfo from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback @@ -60,7 +54,7 @@ class EnergyZeroSensorEntityDescription(SensorEntityDescription): ), EnergyZeroSensorEntityDescription( key="current_hour_price", - translation_key="current_hour_price", + translation_key="current_price", service_type="today_energy", state_class=SensorStateClass.MEASUREMENT, native_unit_of_measurement=f"{CURRENCY_EURO}/{UnitOfEnergy.KILO_WATT_HOUR}", @@ -69,7 +63,7 @@ class EnergyZeroSensorEntityDescription(SensorEntityDescription): ), EnergyZeroSensorEntityDescription( key="next_hour_price", - translation_key="next_hour_price", + translation_key="next_price", service_type="today_energy", native_unit_of_measurement=f"{CURRENCY_EURO}/{UnitOfEnergy.KILO_WATT_HOUR}", suggested_display_precision=3, @@ -128,7 +122,6 @@ class EnergyZeroSensorEntityDescription(SensorEntityDescription): key="hours_priced_equal_or_lower", translation_key="hours_priced_equal_or_lower", service_type="today_energy", - native_unit_of_measurement=UnitOfTime.HOURS, value_fn=lambda data: data.energy_today.time_ranges_priced_equal_or_lower, ), ) diff --git a/homeassistant/components/energyzero/strings.json b/homeassistant/components/energyzero/strings.json index 6731ac588204b..8232cc62e01d4 100644 --- a/homeassistant/components/energyzero/strings.json +++ b/homeassistant/components/energyzero/strings.json @@ -17,11 +17,14 @@ "current_hour_price": { "name": "Current hour" }, + "current_price": { + "name": "Current price" + }, "highest_price_time": { "name": "Time of highest price - today" }, "hours_priced_equal_or_lower": { - "name": "Hours priced equal or lower than current - today" + "name": "Periods priced equal or lower" }, "lowest_price_time": { "name": "Time of lowest price - today" @@ -35,6 +38,9 @@ "next_hour_price": { "name": "Next hour" }, + "next_price": { + "name": "Next price" + }, "percentage_of_max": { "name": "Current percentage of highest price - today" } diff --git a/tests/components/energyzero/snapshots/test_sensor.ambr b/tests/components/energyzero/snapshots/test_sensor.ambr index cf33cc9dac121..9b5389ed5437c 100644 --- a/tests/components/energyzero/snapshots/test_sensor.ambr +++ b/tests/components/energyzero/snapshots/test_sensor.ambr @@ -86,12 +86,12 @@ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Current hour', + 'original_name': 'Current price', 'platform': 'energyzero', 'previous_unique_id': None, 'suggested_object_id': 'energyzero_today_energy_current_hour_price', 'supported_features': 0, - 'translation_key': 'current_hour_price', + 'translation_key': 'current_price', 'unique_id': '12345_today_energy_current_hour_price', 'unit_of_measurement': '€/kWh', }) @@ -100,7 +100,7 @@ StateSnapshot({ 'attributes': ReadOnlyDict({ : 'Data provided by EnergyZero', - : 'Energy market price Current hour', + : 'Energy market price Current price', : , : '€/kWh', }), @@ -191,22 +191,21 @@ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Hours priced equal or lower than current - today', + 'original_name': 'Periods priced equal or lower', 'platform': 'energyzero', 'previous_unique_id': None, 'suggested_object_id': 'energyzero_today_energy_hours_priced_equal_or_lower', 'supported_features': 0, 'translation_key': 'hours_priced_equal_or_lower', 'unique_id': '12345_today_energy_hours_priced_equal_or_lower', - 'unit_of_measurement': , + 'unit_of_measurement': None, }) # --- # name: test_sensor[sensor.energyzero_today_energy_hours_priced_equal_or_lower-state] StateSnapshot({ 'attributes': ReadOnlyDict({ : 'Data provided by EnergyZero', - : 'Energy market price Hours priced equal or lower than current - today', - : , + : 'Energy market price Periods priced equal or lower', }), 'context': , 'entity_id': 'sensor.energyzero_today_energy_hours_priced_equal_or_lower', @@ -408,12 +407,12 @@ }), 'original_device_class': None, 'original_icon': None, - 'original_name': 'Next hour', + 'original_name': 'Next price', 'platform': 'energyzero', 'previous_unique_id': None, 'suggested_object_id': 'energyzero_today_energy_next_hour_price', 'supported_features': 0, - 'translation_key': 'next_hour_price', + 'translation_key': 'next_price', 'unique_id': '12345_today_energy_next_hour_price', 'unit_of_measurement': '€/kWh', }) @@ -422,7 +421,7 @@ StateSnapshot({ 'attributes': ReadOnlyDict({ : 'Data provided by EnergyZero', - : 'Energy market price Next hour', + : 'Energy market price Next price', : '€/kWh', }), 'context': , From c9678e447bd002885fe42a823325198aa6fafb40 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Mon, 7 Sep 2026 12:13:54 +0200 Subject: [PATCH 06/26] Speed up orjson buffer trimming (#181522) --- homeassistant/helpers/json.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/homeassistant/helpers/json.py b/homeassistant/helpers/json.py index 0589490d27485..6a0792383cb69 100644 --- a/homeassistant/helpers/json.py +++ b/homeassistant/helpers/json.py @@ -122,10 +122,11 @@ def cached_json_bytes(data: Any) -> bytes: orjson over-allocates the returned bytes buffer and does not shrink it: the logical length is set but the capacity is rounded up to a power of two (at least a few KiB), so bytes cached for the lifetime of a long-lived object - retain several KiB of unused buffer. + retain several KiB of unused buffer. Copy them into a right-sized buffer. """ - # Drop orjson's over-allocated slack with help of a memoryview. - return bytes(memoryview(json_bytes(data))) + # The empty second join item is load-bearing: it forces a copy into a + # right-sized buffer; a single-item join returns the input unchanged. + return b"".join((json_bytes(data), b"")) def cached_json_fragment(data: Any) -> orjson.Fragment: @@ -134,8 +135,9 @@ def cached_json_fragment(data: Any) -> orjson.Fragment: Wraps the same right-sized bytes as cached_json_bytes; the body is inlined rather than calling it to avoid an extra function call on this hot path. """ - # Drop orjson's over-allocated slack with help of a memoryview. - return orjson.Fragment(bytes(memoryview(json_bytes(data)))) + # The empty second join item is load-bearing: it forces a copy into a + # right-sized buffer; a single-item join returns the input unchanged. + return orjson.Fragment(b"".join((json_bytes(data), b""))) def json_dumps(data: Any) -> str: From 7368c94792b3d854accfa2d5423c4a1838ec2901 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Hjelseth=20H=C3=B8yer?= Date: Mon, 7 Sep 2026 12:25:11 +0200 Subject: [PATCH 07/26] Add Homevolt battery mode select (#181465) --- homeassistant/components/homevolt/__init__.py | 2 +- homeassistant/components/homevolt/select.py | 72 ++++++++ .../components/homevolt/strings.json | 12 ++ tests/components/homevolt/conftest.py | 1 + .../homevolt/snapshots/test_select.ambr | 66 +++++++ tests/components/homevolt/test_select.py | 171 ++++++++++++++++++ 6 files changed, 323 insertions(+), 1 deletion(-) create mode 100644 homeassistant/components/homevolt/select.py create mode 100644 tests/components/homevolt/snapshots/test_select.ambr create mode 100644 tests/components/homevolt/test_select.py diff --git a/homeassistant/components/homevolt/__init__.py b/homeassistant/components/homevolt/__init__.py index 7a999b51084f2..1826be7a0fc4e 100644 --- a/homeassistant/components/homevolt/__init__.py +++ b/homeassistant/components/homevolt/__init__.py @@ -8,7 +8,7 @@ from .coordinator import HomevoltConfigEntry, HomevoltDataUpdateCoordinator -PLATFORMS: list[Platform] = [Platform.SENSOR, Platform.SWITCH] +PLATFORMS: list[Platform] = [Platform.SELECT, Platform.SENSOR, Platform.SWITCH] async def async_setup_entry(hass: HomeAssistant, entry: HomevoltConfigEntry) -> bool: diff --git a/homeassistant/components/homevolt/select.py b/homeassistant/components/homevolt/select.py new file mode 100644 index 0000000000000..0b10cb83bbbdd --- /dev/null +++ b/homeassistant/components/homevolt/select.py @@ -0,0 +1,72 @@ +"""Support for Homevolt select entities.""" + +from typing import override + +from homevolt.const import CONTROLLABLE_SCHEDULE_TYPE + +from homeassistant.components.select import SelectEntity, SelectEntityDescription +from homeassistant.const import EntityCategory +from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback + +from .coordinator import HomevoltConfigEntry, HomevoltDataUpdateCoordinator +from .entity import HomevoltEntity, homevolt_exception_handler + +PARALLEL_UPDATES = 0 # Coordinator-based updates + + +SELECT_DESCRIPTION = SelectEntityDescription( + key="battery_mode", + translation_key="battery_mode", + entity_category=EntityCategory.CONFIG, + has_entity_name=True, + options=list(CONTROLLABLE_SCHEDULE_TYPE.values()), +) + + +async def async_setup_entry( + hass: HomeAssistant, + entry: HomevoltConfigEntry, + async_add_entities: AddConfigEntryEntitiesCallback, +) -> None: + """Set up Homevolt select entities.""" + coordinator = entry.runtime_data + async_add_entities([HomevoltModeSelect(coordinator, SELECT_DESCRIPTION)]) + + +class HomevoltModeSelect(HomevoltEntity, SelectEntity): + """Select entity for battery operational mode.""" + + entity_description: SelectEntityDescription + + def __init__( + self, + coordinator: HomevoltDataUpdateCoordinator, + description: SelectEntityDescription, + ) -> None: + """Initialize the select entity.""" + super().__init__(coordinator, f"ems_{coordinator.data.unique_id}") + self.entity_description = description + self._attr_unique_id = f"{coordinator.data.unique_id}_{description.key}" + + @property + @override + def available(self) -> bool: + """Return whether local battery control is enabled.""" + return super().available and self.coordinator.client.local_mode_enabled + + @property + @override + def current_option(self) -> str | None: + """Return the current selected mode.""" + mode_int = self.coordinator.client.schedule.get("mode") + if mode_int is None: + return None + return CONTROLLABLE_SCHEDULE_TYPE.get(mode_int) + + @homevolt_exception_handler + @override + async def async_select_option(self, option: str) -> None: + """Change the selected mode.""" + await self.coordinator.client.set_battery_mode(mode=option) + self.coordinator.async_update_listeners() diff --git a/homeassistant/components/homevolt/strings.json b/homeassistant/components/homevolt/strings.json index 6561c757a3db4..c0eecc970f897 100644 --- a/homeassistant/components/homevolt/strings.json +++ b/homeassistant/components/homevolt/strings.json @@ -53,6 +53,18 @@ } }, "entity": { + "select": { + "battery_mode": { + "name": "Battery mode", + "state": { + "frequency_reserve": "Frequency reserve", + "idle": "Idle", + "inverter_charge": "Inverter charge", + "inverter_discharge": "Inverter discharge", + "solar_charge": "Solar charge" + } + } + }, "sensor": { "available_charging_energy": { "name": "Available charging energy" diff --git a/tests/components/homevolt/conftest.py b/tests/components/homevolt/conftest.py index 016291e461d77..11ea6bca232bd 100644 --- a/tests/components/homevolt/conftest.py +++ b/tests/components/homevolt/conftest.py @@ -81,6 +81,7 @@ def mock_homevolt_client() -> Generator[MagicMock]: # Load schedule data from fixture client.current_schedule = load_json_object_fixture("schedule.json", DOMAIN) + client.schedule = {"mode": client.current_schedule["schedule"][0]["type"]} # Switch (local mode) support client.local_mode_enabled = False diff --git a/tests/components/homevolt/snapshots/test_select.ambr b/tests/components/homevolt/snapshots/test_select.ambr new file mode 100644 index 0000000000000..a842d42414fe3 --- /dev/null +++ b/tests/components/homevolt/snapshots/test_select.ambr @@ -0,0 +1,66 @@ +# serializer version: 1 +# name: test_select_entity[select.homevolt_ems_battery_mode-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + : list([ + 'idle', + 'inverter_charge', + 'inverter_discharge', + 'frequency_reserve', + 'solar_charge', + ]), + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'select', + 'entity_category': , + 'entity_id': 'select.homevolt_ems_battery_mode', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Battery mode', + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Battery mode', + 'platform': 'homevolt', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'battery_mode', + 'unique_id': '40580137858664_battery_mode', + 'unit_of_measurement': None, + }) +# --- +# name: test_select_entity[select.homevolt_ems_battery_mode-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'Homevolt EMS Battery mode', + : list([ + 'idle', + 'inverter_charge', + 'inverter_discharge', + 'frequency_reserve', + 'solar_charge', + ]), + }), + 'context': , + 'entity_id': 'select.homevolt_ems_battery_mode', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'inverter_charge', + }) +# --- diff --git a/tests/components/homevolt/test_select.py b/tests/components/homevolt/test_select.py new file mode 100644 index 0000000000000..26ad52dc2836a --- /dev/null +++ b/tests/components/homevolt/test_select.py @@ -0,0 +1,171 @@ +"""Tests for the Homevolt select platform.""" + +from unittest.mock import MagicMock + +from homevolt import ( + HomevoltAuthenticationError, + HomevoltCommandOutcomeUnknownError, + HomevoltCommandRejectedError, + HomevoltCommandVerificationError, + HomevoltConnectionError, + HomevoltError, +) +import pytest +from syrupy.assertion import SnapshotAssertion + +from homeassistant.components.select import ( + ATTR_OPTION, + DOMAIN as SELECT_DOMAIN, + SERVICE_SELECT_OPTION, +) +from homeassistant.const import ( + ATTR_ENTITY_ID, + STATE_UNAVAILABLE, + STATE_UNKNOWN, + Platform, +) +from homeassistant.core import HomeAssistant +from homeassistant.exceptions import HomeAssistantError +from homeassistant.helpers import entity_registry as er + +from tests.common import MockConfigEntry, snapshot_platform + +ENTITY_ID = "select.homevolt_ems_battery_mode" + + +@pytest.fixture +def platforms(mock_homevolt_client: MagicMock) -> list[Platform]: + """Load the select platform with manual control enabled.""" + mock_homevolt_client.local_mode_enabled = True + return [Platform.SELECT] + + +async def test_select_entity( + hass: HomeAssistant, + entity_registry: er.EntityRegistry, + init_integration: MockConfigEntry, + snapshot: SnapshotAssertion, +) -> None: + """Test the battery mode select.""" + await snapshot_platform(hass, entity_registry, snapshot, init_integration.entry_id) + + +@pytest.mark.usefixtures("init_integration") +async def test_select_option( + hass: HomeAssistant, + mock_homevolt_client: MagicMock, +) -> None: + """Test a command publishes the verified mode before returning.""" + + async def set_battery_mode(*, mode: str) -> None: + mock_homevolt_client.schedule["mode"] = 0 + + mock_homevolt_client.set_battery_mode.side_effect = set_battery_mode + mock_homevolt_client.update_info.reset_mock() + + await hass.services.async_call( + SELECT_DOMAIN, + SERVICE_SELECT_OPTION, + {ATTR_ENTITY_ID: ENTITY_ID, ATTR_OPTION: "idle"}, + blocking=True, + ) + + mock_homevolt_client.set_battery_mode.assert_awaited_once_with(mode="idle") + mock_homevolt_client.update_info.assert_not_awaited() + state = hass.states.get(ENTITY_ID) + assert state is not None + assert state.state == "idle" + + +@pytest.mark.parametrize( + "mode", + [ + pytest.param(None, id="missing"), + pytest.param(3, id="unsupported"), + ], +) +async def test_select_unknown_mode( + hass: HomeAssistant, + init_integration: MockConfigEntry, + mock_homevolt_client: MagicMock, + mode: int | None, +) -> None: + """Test missing and unsupported modes are unknown.""" + mock_homevolt_client.schedule["mode"] = mode + + await init_integration.runtime_data.async_request_refresh() + + state = hass.states.get(ENTITY_ID) + assert state is not None + assert state.state == STATE_UNKNOWN + + +async def test_select_unavailable_without_local_mode( + hass: HomeAssistant, + init_integration: MockConfigEntry, + mock_homevolt_client: MagicMock, +) -> None: + """Test mode changes are unavailable until local mode is enabled.""" + mock_homevolt_client.local_mode_enabled = False + + await init_integration.runtime_data.async_request_refresh() + + state = hass.states.get(ENTITY_ID) + assert state is not None + assert state.state == STATE_UNAVAILABLE + + +@pytest.mark.usefixtures("init_integration") +@pytest.mark.parametrize( + ("error", "translation_key"), + [ + pytest.param( + HomevoltAuthenticationError("authentication failed"), + "auth_failed", + id="authentication", + ), + pytest.param( + HomevoltCommandRejectedError("command rejected"), + "command_rejected", + id="command-rejected", + ), + pytest.param( + HomevoltCommandVerificationError("command verification failed"), + "command_verification_failed", + id="command-verification", + ), + pytest.param( + HomevoltCommandOutcomeUnknownError("command outcome unknown"), + "command_outcome_unknown", + id="command-outcome-unknown", + ), + pytest.param( + HomevoltConnectionError("connection failed"), + "communication_error", + id="connection", + ), + pytest.param( + HomevoltError("unknown error"), + "unknown_error", + id="unknown", + ), + ], +) +async def test_select_option_error( + hass: HomeAssistant, + mock_homevolt_client: MagicMock, + error: HomevoltError, + translation_key: str, +) -> None: + """Test select actions use the shared exception handler.""" + mock_homevolt_client.set_battery_mode.side_effect = error + + with pytest.raises(HomeAssistantError) as exc_info: + await hass.services.async_call( + SELECT_DOMAIN, + SERVICE_SELECT_OPTION, + {ATTR_ENTITY_ID: ENTITY_ID, ATTR_OPTION: "solar_charge"}, + blocking=True, + ) + + assert exc_info.value.translation_key == translation_key From 0021571592e72064eb6c19e352254117086e38c8 Mon Sep 17 00:00:00 2001 From: Thomas Munzer Date: Mon, 7 Sep 2026 12:32:18 +0200 Subject: [PATCH 08/26] Add sensor platform to Tuya ZNJDQ (circuit breaker) (#181520) Co-authored-by: Thomas Munzer --- homeassistant/components/tuya/sensor.py | 30 +++ .../tuya/snapshots/test_sensor.ambr | 241 ++++++++++++++++++ 2 files changed, 271 insertions(+) diff --git a/homeassistant/components/tuya/sensor.py b/homeassistant/components/tuya/sensor.py index 0268d3e0b6048..9931d01ff49a5 100644 --- a/homeassistant/components/tuya/sensor.py +++ b/homeassistant/components/tuya/sensor.py @@ -1727,6 +1727,36 @@ class TuyaSensorEntityDescription(SensorEntityDescription): wrapper_class=VOLTAGE_WRAPPER, ), ), + DeviceCategory.ZNJDQ: ( + TuyaSensorEntityDescription( + key=DPCode.CUR_CURRENT, + translation_key="current", + device_class=SensorDeviceClass.CURRENT, + state_class=SensorStateClass.MEASUREMENT, + suggested_unit_of_measurement=UnitOfElectricCurrent.AMPERE, + ), + TuyaSensorEntityDescription( + key=DPCode.CUR_POWER, + translation_key="power", + device_class=SensorDeviceClass.POWER, + state_class=SensorStateClass.MEASUREMENT, + ), + TuyaSensorEntityDescription( + key=DPCode.CUR_VOLTAGE, + translation_key="voltage", + device_class=SensorDeviceClass.VOLTAGE, + state_class=SensorStateClass.MEASUREMENT, + suggested_unit_of_measurement=UnitOfElectricPotential.VOLT, + ), + TuyaSensorEntityDescription( + key=DPCode.ADD_ELE, + translation_key="total_energy", + device_class=SensorDeviceClass.ENERGY, + state_class=SensorStateClass.TOTAL_INCREASING, + native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR, + suggested_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR, + ), + ), DeviceCategory.ZNNBQ: ( TuyaSensorEntityDescription( key=DPCode.REVERSE_ENERGY_TOTAL, diff --git a/tests/components/tuya/snapshots/test_sensor.ambr b/tests/components/tuya/snapshots/test_sensor.ambr index 20bd10d7cbcb5..185c13e152447 100644 --- a/tests/components/tuya/snapshots/test_sensor.ambr +++ b/tests/components/tuya/snapshots/test_sensor.ambr @@ -20209,6 +20209,247 @@ 'state': 'unavailable', }) # --- +# name: test_platform_setup_and_discovery[sensor.smart_circuit_breaker_current-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + : , + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.smart_circuit_breaker_current', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Current', + 'options': dict({ + 'sensor': dict({ + 'suggested_display_precision': 2, + }), + 'sensor.private': dict({ + 'suggested_unit_of_measurement': , + }), + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Current', + 'platform': 'tuya', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'current', + 'unique_id': 'tuya.kaapnqxkvzaqd6uaqdjnzcur_current', + 'unit_of_measurement': , + }) +# --- +# name: test_platform_setup_and_discovery[sensor.smart_circuit_breaker_current-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'current', + : 'Smart Circuit Breaker Current', + : , + : , + }), + 'context': , + 'entity_id': 'sensor.smart_circuit_breaker_current', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.258', + }) +# --- +# name: test_platform_setup_and_discovery[sensor.smart_circuit_breaker_power-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + : , + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.smart_circuit_breaker_power', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Power', + 'options': dict({ + 'sensor': dict({ + 'suggested_display_precision': 0, + }), + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Power', + 'platform': 'tuya', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'power', + 'unique_id': 'tuya.kaapnqxkvzaqd6uaqdjnzcur_power', + 'unit_of_measurement': 'W', + }) +# --- +# name: test_platform_setup_and_discovery[sensor.smart_circuit_breaker_power-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'power', + : 'Smart Circuit Breaker Power', + : , + : 'W', + }), + 'context': , + 'entity_id': 'sensor.smart_circuit_breaker_power', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '14.3', + }) +# --- +# name: test_platform_setup_and_discovery[sensor.smart_circuit_breaker_total_energy-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + : , + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.smart_circuit_breaker_total_energy', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Total energy', + 'options': dict({ + 'sensor': dict({ + 'suggested_display_precision': 2, + }), + 'sensor.private': dict({ + 'suggested_unit_of_measurement': , + }), + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Total energy', + 'platform': 'tuya', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'total_energy', + 'unique_id': 'tuya.kaapnqxkvzaqd6uaqdjnzadd_ele', + 'unit_of_measurement': , + }) +# --- +# name: test_platform_setup_and_discovery[sensor.smart_circuit_breaker_total_energy-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'energy', + : 'Smart Circuit Breaker Total energy', + : , + : , + }), + 'context': , + 'entity_id': 'sensor.smart_circuit_breaker_total_energy', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0', + }) +# --- +# name: test_platform_setup_and_discovery[sensor.smart_circuit_breaker_voltage-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + : , + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.smart_circuit_breaker_voltage', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Voltage', + 'options': dict({ + 'sensor': dict({ + 'suggested_display_precision': 0, + }), + 'sensor.private': dict({ + 'suggested_unit_of_measurement': , + }), + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Voltage', + 'platform': 'tuya', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'voltage', + 'unique_id': 'tuya.kaapnqxkvzaqd6uaqdjnzcur_voltage', + 'unit_of_measurement': , + }) +# --- +# name: test_platform_setup_and_discovery[sensor.smart_circuit_breaker_voltage-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'voltage', + : 'Smart Circuit Breaker Voltage', + : , + : , + }), + 'context': , + 'entity_id': 'sensor.smart_circuit_breaker_voltage', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '228.6', + }) +# --- # name: test_platform_setup_and_discovery[sensor.smart_kettle_current_temperature-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ From 9a884be32a8079069b0b3a81cd834eba0f627f44 Mon Sep 17 00:00:00 2001 From: Thomas Munzer Date: Mon, 7 Sep 2026 13:11:53 +0200 Subject: [PATCH 09/26] Add select platform to Tuya ZNJDQ (circuit breaker) (#181531) Co-authored-by: Thomas Munzer --- homeassistant/components/tuya/select.py | 12 ++ .../tuya/snapshots/test_select.ambr | 124 ++++++++++++++++++ 2 files changed, 136 insertions(+) diff --git a/homeassistant/components/tuya/select.py b/homeassistant/components/tuya/select.py index 99e0da47c69df..dc6ff7bef2749 100644 --- a/homeassistant/components/tuya/select.py +++ b/homeassistant/components/tuya/select.py @@ -352,6 +352,18 @@ entity_category=EntityCategory.CONFIG, ), ), + DeviceCategory.ZNJDQ: ( + SelectEntityDescription( + key=DPCode.RELAY_STATUS, + translation_key="relay_status", + entity_category=EntityCategory.CONFIG, + ), + SelectEntityDescription( + key=DPCode.LIGHT_MODE, + translation_key="light_mode", + entity_category=EntityCategory.CONFIG, + ), + ), } # Socket (duplicate of `kg`) diff --git a/tests/components/tuya/snapshots/test_select.ambr b/tests/components/tuya/snapshots/test_select.ambr index 3fe3d784b7935..acb322b43021e 100644 --- a/tests/components/tuya/snapshots/test_select.ambr +++ b/tests/components/tuya/snapshots/test_select.ambr @@ -5637,6 +5637,130 @@ 'state': 'low', }) # --- +# name: test_platform_setup_and_discovery[select.smart_circuit_breaker_indicator_light_mode-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + : list([ + 'relay', + 'pos', + 'none', + 'on', + ]), + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'select', + 'entity_category': , + 'entity_id': 'select.smart_circuit_breaker_indicator_light_mode', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Indicator light mode', + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Indicator light mode', + 'platform': 'tuya', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'light_mode', + 'unique_id': 'tuya.kaapnqxkvzaqd6uaqdjnzlight_mode', + 'unit_of_measurement': None, + }) +# --- +# name: test_platform_setup_and_discovery[select.smart_circuit_breaker_indicator_light_mode-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'Smart Circuit Breaker Indicator light mode', + : list([ + 'relay', + 'pos', + 'none', + 'on', + ]), + }), + 'context': , + 'entity_id': 'select.smart_circuit_breaker_indicator_light_mode', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'relay', + }) +# --- +# name: test_platform_setup_and_discovery[select.smart_circuit_breaker_power_on_behavior-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + : list([ + 'off', + 'on', + 'memory', + ]), + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'select', + 'entity_category': , + 'entity_id': 'select.smart_circuit_breaker_power_on_behavior', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Power-on behavior', + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Power-on behavior', + 'platform': 'tuya', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'relay_status', + 'unique_id': 'tuya.kaapnqxkvzaqd6uaqdjnzrelay_status', + 'unit_of_measurement': None, + }) +# --- +# name: test_platform_setup_and_discovery[select.smart_circuit_breaker_power_on_behavior-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'Smart Circuit Breaker Power-on behavior', + : list([ + 'off', + 'on', + 'memory', + ]), + }), + 'context': , + 'entity_id': 'select.smart_circuit_breaker_power_on_behavior', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'memory', + }) +# --- # name: test_platform_setup_and_discovery[select.smart_kettle_quick_heat_temperature-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ From 6f02b27a2ea079dfaf3369306d8beb9e7b735e35 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 7 Sep 2026 13:12:05 +0200 Subject: [PATCH 10/26] Bump modbus-connection to 4.11.0 (#181533) Co-authored-by: Claude --- homeassistant/components/modbus/manifest.json | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/modbus/manifest.json b/homeassistant/components/modbus/manifest.json index 784d3149d2271..746b924ce31be 100644 --- a/homeassistant/components/modbus/manifest.json +++ b/homeassistant/components/modbus/manifest.json @@ -7,7 +7,7 @@ "loggers": ["pymodbus"], "requirements": [ "pymodbus==3.13.1", - "modbus-connection[tmodbus]==4.10.0", + "modbus-connection[tmodbus]==4.11.0", "tmodbus==0.6.2" ] } diff --git a/requirements_all.txt b/requirements_all.txt index e13735809bb3f..37cf3e69c1e3f 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1638,7 +1638,7 @@ mitsubishi-comfort==0.5.2 moat-ble==0.1.1 # homeassistant.components.modbus -modbus-connection[tmodbus]==4.10.0 +modbus-connection[tmodbus]==4.11.0 # homeassistant.components.moehlenhoff_alpha2 moehlenhoff-alpha2==1.4.0 From 17f1e6349a133112019ad8d7c651409862341558 Mon Sep 17 00:00:00 2001 From: Martin <32802427+mstu01@users.noreply.github.com> Date: Mon, 7 Sep 2026 13:15:24 +0200 Subject: [PATCH 11/26] Fix swallowed exceptions in action handlers for NETGEAR LTE (#181539) --- .../components/netgear_lte/notify.py | 12 ++++--- .../components/netgear_lte/strings.json | 3 ++ tests/components/netgear_lte/test_notify.py | 33 ++++++++++++++++++- 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/netgear_lte/notify.py b/homeassistant/components/netgear_lte/notify.py index 56b173288d908..06e7e36c4a481 100644 --- a/homeassistant/components/netgear_lte/notify.py +++ b/homeassistant/components/netgear_lte/notify.py @@ -8,9 +8,10 @@ from homeassistant.components.notify import ATTR_TARGET, BaseNotificationService from homeassistant.const import CONF_RECIPIENT from homeassistant.core import HomeAssistant +from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType -from .const import CONF_NOTIFY, LOGGER +from .const import CONF_NOTIFY, DOMAIN, LOGGER async def async_get_service( @@ -57,6 +58,9 @@ async def async_send_message(self, message: str = "", **kwargs: Any) -> None: for target in targets: try: await self.modem.sms(target, message) - # pylint: disable-next=home-assistant-action-swallowed-exception - except eternalegypt.Error: - LOGGER.error("Unable to send to %s", target) + except eternalegypt.Error as err: + raise HomeAssistantError( + translation_domain=DOMAIN, + translation_key="send_message_failed", + translation_placeholders={"target": target}, + ) from err diff --git a/homeassistant/components/netgear_lte/strings.json b/homeassistant/components/netgear_lte/strings.json index 37042e268a1e0..4edb99929e140 100644 --- a/homeassistant/components/netgear_lte/strings.json +++ b/homeassistant/components/netgear_lte/strings.json @@ -74,6 +74,9 @@ "exceptions": { "config_entry_not_found": { "message": "Failed to perform action \"{service}\". Config entry for target not found" + }, + "send_message_failed": { + "message": "Failed to send SMS to {target}." } }, "services": { diff --git a/tests/components/netgear_lte/test_notify.py b/tests/components/netgear_lte/test_notify.py index 9a55e7a7ad6fd..f8f3eb2a450b3 100644 --- a/tests/components/netgear_lte/test_notify.py +++ b/tests/components/netgear_lte/test_notify.py @@ -2,15 +2,21 @@ from unittest.mock import patch +import eternalegypt +import pytest + +from homeassistant.components.netgear_lte.const import DOMAIN from homeassistant.components.notify import ( ATTR_MESSAGE, ATTR_TARGET, DOMAIN as NOTIFY_DOMAIN, ) from homeassistant.core import HomeAssistant +from homeassistant.exceptions import HomeAssistantError ICON_PATH = "/some/path" MESSAGE = "one, two, testing, testing" +TARGET = "5555555556" async def test_notify(hass: HomeAssistant, setup_integration: None) -> None: @@ -23,8 +29,33 @@ async def test_notify(hass: HomeAssistant, setup_integration: None) -> None: "netgear_lm1200", { ATTR_MESSAGE: MESSAGE, - ATTR_TARGET: "5555555556", + ATTR_TARGET: TARGET, }, blocking=True, ) assert len(mock.mock_calls) == 1 + + +@pytest.mark.usefixtures("setup_integration") +async def test_notify_error(hass: HomeAssistant) -> None: + """Test that a failed send raises an error with a translation key.""" + with ( + patch( + "homeassistant.components.netgear_lte.eternalegypt.Modem.sms", + side_effect=eternalegypt.Error, + ), + pytest.raises(HomeAssistantError) as exc_info, + ): + await hass.services.async_call( + NOTIFY_DOMAIN, + "netgear_lm1200", + { + ATTR_MESSAGE: MESSAGE, + ATTR_TARGET: TARGET, + }, + blocking=True, + ) + + assert exc_info.value.translation_domain == DOMAIN + assert exc_info.value.translation_key == "send_message_failed" + assert exc_info.value.translation_placeholders == {"target": TARGET} From 9709cccda91e6e7ed32cec03bbaaefb1956dcbc5 Mon Sep 17 00:00:00 2001 From: huangrenwei79 Date: Mon, 7 Sep 2026 20:06:45 +0800 Subject: [PATCH 12/26] Bump tuya-device-handlers to 0.0.28 (#181525) --- homeassistant/components/tuya/manifest.json | 2 +- requirements_all.txt | 2 +- tests/components/tuya/snapshots/test_light.ambr | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/tuya/manifest.json b/homeassistant/components/tuya/manifest.json index a51234a2fc922..8056c35490bdc 100644 --- a/homeassistant/components/tuya/manifest.json +++ b/homeassistant/components/tuya/manifest.json @@ -44,7 +44,7 @@ "iot_class": "cloud_push", "loggers": ["tuya_sharing"], "requirements": [ - "tuya-device-handlers==0.0.27", + "tuya-device-handlers==0.0.28", "tuya-device-sharing-sdk==0.2.15" ] } diff --git a/requirements_all.txt b/requirements_all.txt index 37cf3e69c1e3f..3b048595e6074 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -3308,7 +3308,7 @@ ttls==1.11.1 ttn_client==1.3.0 # homeassistant.components.tuya -tuya-device-handlers==0.0.27 +tuya-device-handlers==0.0.28 # homeassistant.components.tuya tuya-device-sharing-sdk==0.2.15 diff --git a/tests/components/tuya/snapshots/test_light.ambr b/tests/components/tuya/snapshots/test_light.ambr index a4c70cd5c273d..4c134de5cba53 100644 --- a/tests/components/tuya/snapshots/test_light.ambr +++ b/tests/components/tuya/snapshots/test_light.ambr @@ -819,6 +819,7 @@ : 2000, : list([ , + , ]), }), 'config_entry_id': , @@ -871,6 +872,7 @@ ), : list([ , + , ]), : , : tuple( From be2e14f4273335fb5ef02b7f636cd01800e1491a Mon Sep 17 00:00:00 2001 From: Doug Rathbone Date: Mon, 7 Sep 2026 22:08:46 +1000 Subject: [PATCH 13/26] Add quality scale file for Coolmaster (#178361) Co-authored-by: Cursor Agent Co-authored-by: Doug Rathbone Co-authored-by: Markus Tuominen <3738613+Markus98@users.noreply.github.com> --- .../components/coolmaster/quality_scale.yaml | 120 ++++++++++++++++++ script/hassfest/quality_scale.py | 1 - 2 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 homeassistant/components/coolmaster/quality_scale.yaml diff --git a/homeassistant/components/coolmaster/quality_scale.yaml b/homeassistant/components/coolmaster/quality_scale.yaml new file mode 100644 index 0000000000000..3d975017925ad --- /dev/null +++ b/homeassistant/components/coolmaster/quality_scale.yaml @@ -0,0 +1,120 @@ +rules: + # Bronze + action-setup: + status: exempt + comment: This integration does not provide additional actions. + appropriate-polling: done + brands: done + common-modules: done + config-flow-test-coverage: + status: todo + comment: >- + All config flow tests should end in CREATE_ENTRY to prove the flow recovers + from errors. + config-flow: done + dependency-transparency: done + docs-actions: + status: exempt + comment: This integration does not provide additional actions. + docs-conditions: + status: exempt + comment: This integration does not provide additional conditions. + docs-high-level-description: done + docs-installation-instructions: done + docs-removal-instructions: done + docs-triggers: + status: exempt + comment: This integration does not provide additional triggers. + entity-event-setup: + status: exempt + comment: Entities of this integration do not subscribe to events. + entity-unique-id: + status: todo + comment: >- + CoolmasterEntity assigns _attr_unique_id only when a subclass defines an + entity_description (via hasattr). Split that into CoolmasterDescriptionEntity + so described entities get an unconditional unique ID, then claim bronze. + has-entity-name: done + runtime-data: done + test-before-configure: done + test-before-setup: done + unique-config-entry: done + + # Silver + action-exceptions: + status: todo + comment: >- + Turning a climate entity on or off is an action, so the exemption does not + apply. Failures need to raise HomeAssistantError. + config-entry-unloading: done + docs-configuration-parameters: + status: exempt + comment: This integration does not have an options flow. + docs-installation-parameters: todo + entity-unavailable: + status: todo + comment: >- + CoolmasterEntity._handle_coordinator_update indexes + coordinator.data[self._unit_id] directly, so a unit that disappears from an + otherwise successful poll raises KeyError instead of going unavailable. The + unit should become a property and available should check that the unit id is + still in the coordinator data. + integration-owner: done + log-when-unavailable: todo + parallel-updates: todo + reauthentication-flow: + status: exempt + comment: This integration does not require authentication. + test-coverage: + status: todo + comment: >- + The platform tests should use snapshot_platform. The sensor tests should not + touch the coordinator directly or call async_update_entity, but advance time + to trigger an update naturally. + + # Gold + devices: done + diagnostics: todo + discovery-update-info: + status: todo + comment: Blocked on the discovery rule. + discovery: + status: todo + comment: >- + The CoolMasterNet supports SSDP, but it is off by default and enabling it is + harder than just adding the device. DHCP discovery on the Cool Control Ltd + OUI 28:3B:96 is the more promising route. + docs-data-update: todo + docs-examples: todo + docs-known-limitations: todo + docs-supported-devices: todo + docs-supported-functions: todo + docs-troubleshooting: todo + docs-use-cases: todo + dynamic-devices: todo + entity-category: todo + entity-device-class: + status: todo + comment: >- + The error code sensor should become an enum device class exposing translated + error states instead of the raw error code string. + entity-disabled-by-default: todo + entity-translations: done + exception-translations: todo + icon-translations: done + reconfiguration-flow: done + repair-issues: todo + stale-devices: + status: todo + comment: >- + Devices can only be removed manually through + async_remove_config_entry_device. Automatic removal of units missing from a + poll is not implemented. A unit change in a VRF system is rare, so this has + been low priority. + + # Platinum + async-dependency: done + inject-websession: + status: exempt + comment: This integration does not use a web session. + strict-typing: todo diff --git a/script/hassfest/quality_scale.py b/script/hassfest/quality_scale.py index ce03ea24afa61..3fb4753e427e3 100644 --- a/script/hassfest/quality_scale.py +++ b/script/hassfest/quality_scale.py @@ -232,7 +232,6 @@ class Rule: "compensation", "concord232", "control4", - "coolmaster", "cppm_tracker", "cpuspeed", "crownstone", From 416550848e1ba0a9b12e3acd16cdb8b834683194 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 7 Sep 2026 14:31:31 +0200 Subject: [PATCH 14/26] Bump modbus-connection to 4.11.1 (#181544) Co-authored-by: Claude --- homeassistant/components/modbus/manifest.json | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/modbus/manifest.json b/homeassistant/components/modbus/manifest.json index 746b924ce31be..3ece80593cff6 100644 --- a/homeassistant/components/modbus/manifest.json +++ b/homeassistant/components/modbus/manifest.json @@ -7,7 +7,7 @@ "loggers": ["pymodbus"], "requirements": [ "pymodbus==3.13.1", - "modbus-connection[tmodbus]==4.11.0", + "modbus-connection[tmodbus]==4.11.1", "tmodbus==0.6.2" ] } diff --git a/requirements_all.txt b/requirements_all.txt index 3b048595e6074..744fffedc1ede 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1638,7 +1638,7 @@ mitsubishi-comfort==0.5.2 moat-ble==0.1.1 # homeassistant.components.modbus -modbus-connection[tmodbus]==4.11.0 +modbus-connection[tmodbus]==4.11.1 # homeassistant.components.moehlenhoff_alpha2 moehlenhoff-alpha2==1.4.0 From 443ef838c7ceac1d1c267def6e1fd43e1460f924 Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Mon, 7 Sep 2026 14:32:00 +0200 Subject: [PATCH 15/26] Fix unique_id for service entities in Alexa Devices (#181526) --- .../components/alexa_devices/select.py | 30 ++++++++++--------- tests/components/alexa_devices/test_select.py | 4 +++ 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/homeassistant/components/alexa_devices/select.py b/homeassistant/components/alexa_devices/select.py index d93ed6bc623d2..49c559c1583d0 100644 --- a/homeassistant/components/alexa_devices/select.py +++ b/homeassistant/components/alexa_devices/select.py @@ -66,24 +66,26 @@ def _check_device() -> None: new_devices = current_devices - known_devices if new_devices: known_devices.update(new_devices) - select_entities = [ - AmazonSelectEntity(coordinator, serial_num, select_desc) - for select_desc in SELECTS - for serial_num in new_devices - if select_desc.is_available_fn(coordinator.data[serial_num]) - ] - select_service_entites = [ - AmazonSelectServiceEntity(coordinator, select_desc) - for select_desc in SERVICE_SELECTS - for serial_num in new_devices - if select_desc.is_available_fn(coordinator.data[serial_num]) - ] - async_add_entities(select_entities) - async_add_entities(select_service_entites) + async_add_entities( + [ + AmazonSelectEntity(coordinator, serial_num, select_desc) + for select_desc in SELECTS + for serial_num in new_devices + if select_desc.is_available_fn(coordinator.data[serial_num]) + ] + ) _check_device() entry.async_on_unload(coordinator.async_add_listener(_check_device)) + # Service entities + async_add_entities( + [ + AmazonSelectServiceEntity(coordinator, select_desc) + for select_desc in SERVICE_SELECTS + ] + ) + class AmazonSelectEntity(AmazonEntity, SelectEntity): """Representation of a select entity.""" diff --git a/tests/components/alexa_devices/test_select.py b/tests/components/alexa_devices/test_select.py index 998218e871414..55dc4b2ccb053 100644 --- a/tests/components/alexa_devices/test_select.py +++ b/tests/components/alexa_devices/test_select.py @@ -108,6 +108,7 @@ async def test_offline_device( async def test_service_select_option( hass: HomeAssistant, + caplog: pytest.LogCaptureFixture, mock_amazon_devices_client: AsyncMock, mock_config_entry: MockConfigEntry, ) -> None: @@ -119,6 +120,9 @@ async def test_service_select_option( await setup_integration(hass, mock_config_entry) + # A single account-wide entity is created regardless of the number of devices + assert "does not generate unique IDs" not in caplog.text + assert (state := hass.states.get(ENTITY_ID_2)) assert state.state == TEST_DEVICE_1.account_name From c4bb96f5793c23be2467c49091fb3289313ab954 Mon Sep 17 00:00:00 2001 From: Josef Zweck Date: Mon, 7 Sep 2026 14:52:19 +0200 Subject: [PATCH 16/26] Handle reconfigure_successful centrally (#180723) Co-authored-by: Markus Tuominen <3738613+Markus98@users.noreply.github.com> --- .../components/actron_air/strings.json | 1 - .../components/airgradient/strings.json | 1 - homeassistant/components/airobot/strings.json | 1 - homeassistant/components/airos/strings.json | 1 - .../components/alexa_devices/strings.json | 1 - .../components/androidtv_remote/strings.json | 1 - homeassistant/components/apcupsd/strings.json | 1 - homeassistant/components/aqvify/strings.json | 1 - .../components/arcam_fmj/strings.json | 1 - homeassistant/components/axis/strings.json | 1 - .../components/azure_storage/strings.json | 3 +- .../components/backblaze_b2/strings.json | 3 +- homeassistant/components/blebox/strings.json | 1 - .../components/bosch_alarm/strings.json | 3 +- homeassistant/components/bring/strings.json | 1 - homeassistant/components/brother/strings.json | 1 - .../components/bryant_evolution/strings.json | 3 +- .../components/cambridge_audio/strings.json | 1 - .../components/centriconnect/strings.json | 1 - .../components/cert_expiry/strings.json | 3 +- homeassistant/components/comelit/strings.json | 1 - .../components/cookidoo/strings.json | 1 - .../components/coolmaster/strings.json | 3 +- .../components/data_grand_lyon/strings.json | 3 +- homeassistant/components/dropbox/strings.json | 1 - homeassistant/components/duckdns/strings.json | 3 +- homeassistant/components/duco/strings.json | 1 - .../components/eheimdigital/strings.json | 1 - homeassistant/components/elgato/strings.json | 3 +- homeassistant/components/emoncms/strings.json | 1 - .../components/energieleser/strings.json | 1 - .../components/enphase_envoy/strings.json | 1 - homeassistant/components/esphome/strings.json | 1 - .../eurotronic_cometblue/strings.json | 3 +- .../components/feedreader/strings.json | 3 +- .../components/filesize/strings.json | 3 +- .../components/firefly_iii/strings.json | 3 +- homeassistant/components/flexit/strings.json | 3 +- homeassistant/components/freshr/strings.json | 3 +- .../components/fressnapf_tracker/strings.json | 3 +- homeassistant/components/fritz/strings.json | 3 +- .../components/fritzbox/strings.json | 3 +- homeassistant/components/fronius/strings.json | 1 - .../components/fully_kiosk/strings.json | 1 - homeassistant/components/fumis/strings.json | 3 +- homeassistant/components/gatus/strings.json | 3 +- homeassistant/components/ghost/strings.json | 1 - .../google_assistant_sdk/strings.json | 3 +- .../components/google_drive/strings.json | 1 - .../components/google_health/strings.json | 1 - .../google_travel_time/strings.json | 3 +- .../components/google_weather/strings.json | 3 +- .../components/growatt_server/strings.json | 3 +- .../components/habitica/strings.json | 1 - homeassistant/components/hdfury/strings.json | 3 +- .../components/here_travel_time/strings.json | 3 +- homeassistant/components/holiday/strings.json | 3 +- .../components/homeassistant/strings.json | 1 + homeassistant/components/homee/strings.json | 1 - .../components/homewizard/strings.json | 1 - .../components/homeworks/strings.json | 3 - .../components/hotspring/strings.json | 1 - homeassistant/components/huum/strings.json | 3 +- .../components/iaqualink/strings.json | 3 +- homeassistant/components/immich/strings.json | 1 - .../components/incomfort/strings.json | 3 +- .../components/indevolt/strings.json | 3 +- .../components/influxdb/strings.json | 3 - .../components/ista_ecotrend/strings.json | 1 - .../components/jewish_calendar/strings.json | 3 +- .../components/keenetic_ndms2/strings.json | 3 +- homeassistant/components/knx/strings.json | 3 - .../components/kostal_plenticore/strings.json | 3 +- .../components/lamarzocco/strings.json | 3 +- homeassistant/components/lcn/strings.json | 3 +- .../components/led_infrared/strings.json | 3 +- .../components/litterrobot/strings.json | 1 - .../components/lunatone/strings.json | 1 - .../components/lyngdorf/strings.json | 1 - homeassistant/components/madvr/strings.json | 1 - .../components/mastodon/strings.json | 1 - homeassistant/components/mealie/strings.json | 1 - .../components/melcloud/strings.json | 3 +- .../components/melcloud_home/strings.json | 1 - homeassistant/components/midea/strings.json | 3 +- homeassistant/components/miele/strings.json | 3 +- homeassistant/components/mqtt/strings.json | 3 +- .../components/myuplink/strings.json | 3 +- homeassistant/components/nam/strings.json | 3 +- .../components/namecheapdns/strings.json | 3 +- .../nederlandse_spoorwegen/strings.json | 3 +- homeassistant/components/neopool/strings.json | 1 - .../components/nextcloud/strings.json | 3 +- homeassistant/components/nextdns/strings.json | 3 +- .../components/nfandroidtv/strings.json | 3 +- .../components/niko_home_control/strings.json | 3 +- .../components/nordpool/strings.json | 3 - .../components/novy_cooker_hood/strings.json | 3 +- homeassistant/components/nrgkick/strings.json | 1 - homeassistant/components/ntfy/strings.json | 3 +- homeassistant/components/nut/strings.json | 1 - homeassistant/components/ohme/strings.json | 3 +- .../components/onedrive/strings.json | 1 - .../onedrive_for_business/strings.json | 1 - homeassistant/components/onewire/strings.json | 3 +- homeassistant/components/onkyo/strings.json | 1 - .../components/openevse/strings.json | 1 - homeassistant/components/openrgb/strings.json | 3 +- .../components/ouman_eh_800/strings.json | 3 +- homeassistant/components/overkiz/strings.json | 1 - .../components/overseerr/strings.json | 3 +- .../ovhcloud_ai_endpoints/strings.json | 3 +- .../components/paperless_ngx/strings.json | 3 +- homeassistant/components/peblar/strings.json | 3 +- .../playstation_network/strings.json | 1 - .../components/plugwise/strings.json | 3 +- .../components/pooldose/strings.json | 1 - .../components/portainer/strings.json | 1 - .../components/powerfox/strings.json | 3 +- .../components/powerfox_local/strings.json | 1 - .../components/proxmoxve/strings.json | 3 +- .../components/pvoutput/strings.json | 3 +- homeassistant/components/pyload/strings.json | 3 +- homeassistant/components/qnap/strings.json | 1 - homeassistant/components/renault/strings.json | 1 - homeassistant/components/reolink/strings.json | 1 - homeassistant/components/ring/strings.json | 3 +- homeassistant/components/roku/strings.json | 1 - homeassistant/components/sabnzbd/strings.json | 3 +- .../components/samsungtv/strings.json | 3 +- .../components/satel_integra/strings.json | 3 +- homeassistant/components/saunum/strings.json | 3 +- homeassistant/components/sensibo/strings.json | 3 +- homeassistant/components/senz/strings.json | 3 +- homeassistant/components/sfr_box/strings.json | 1 - homeassistant/components/shelly/strings.json | 1 - .../components/slide_local/strings.json | 1 - homeassistant/components/sma/strings.json | 1 - homeassistant/components/smhi/strings.json | 3 +- homeassistant/components/smlight/strings.json | 1 - homeassistant/components/smtp/strings.json | 3 +- homeassistant/components/sofar/strings.json | 1 - .../components/solaredge/strings.json | 3 +- .../components/solaredge_modbus/strings.json | 1 - .../components/solarlog/strings.json | 3 +- .../components/specialized_turbo/strings.json | 3 +- homeassistant/components/splunk/strings.json | 1 - .../components/srp_energy/strings.json | 1 - .../components/steam_online/strings.json | 3 +- .../components/stiebel_eltron/strings.json | 1 - .../components/systemnexa2/strings.json | 1 - homeassistant/components/tado/strings.json | 3 +- .../components/tailwind/strings.json | 1 - .../components/technove/strings.json | 1 - homeassistant/components/tedee/strings.json | 1 - .../components/telegram_bot/strings.json | 3 +- .../components/teslemetry/strings.json | 3 +- homeassistant/components/tolo/strings.json | 3 +- .../components/tonewinner/strings.json | 1 - homeassistant/components/tplink/strings.json | 3 +- .../trafikverket_camera/strings.json | 3 +- .../trafikverket_train/strings.json | 3 +- .../trafikverket_weatherstation/strings.json | 3 +- homeassistant/components/trmnl/strings.json | 1 - .../components/unifi_access/strings.json | 3 +- .../components/unifiprotect/strings.json | 1 - .../components/uptime_kuma/strings.json | 3 +- .../components/uptimerobot/strings.json | 1 - homeassistant/components/vallox/strings.json | 1 - homeassistant/components/velbus/strings.json | 3 +- .../components/victron_gx/strings.json | 1 - .../components/vistapool/strings.json | 3 +- homeassistant/components/vivotek/strings.json | 3 +- homeassistant/components/vizio/strings.json | 1 - .../components/vodafone_station/strings.json | 1 - homeassistant/components/volvo/strings.json | 3 +- homeassistant/components/watts/strings.json | 3 +- .../components/wattwaechter/strings.json | 1 - .../components/waze_travel_time/strings.json | 3 +- homeassistant/components/webostv/strings.json | 1 - homeassistant/components/wiim/strings.json | 1 - homeassistant/components/wled/strings.json | 1 - .../components/yale_smart_alarm/strings.json | 3 +- .../components/zonneplan/strings.json | 1 - homeassistant/config_entries.py | 20 +++-- .../components/config/test_config_entries.py | 1 + tests/test_config_entries.py | 85 +++++++++++++++++-- 187 files changed, 189 insertions(+), 297 deletions(-) diff --git a/homeassistant/components/actron_air/strings.json b/homeassistant/components/actron_air/strings.json index 451126a9c3e2c..b062a3f6c042b 100644 --- a/homeassistant/components/actron_air/strings.json +++ b/homeassistant/components/actron_air/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "oauth2_error": "Failed to start authentication flow", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "wrong_account": "You must authenticate with the same Actron Air account that was originally configured." }, "error": { diff --git a/homeassistant/components/airgradient/strings.json b/homeassistant/components/airgradient/strings.json index 94cb3b94793c2..f1343f974e940 100644 --- a/homeassistant/components/airgradient/strings.json +++ b/homeassistant/components/airgradient/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "invalid_version": "This firmware version is unsupported. Please upgrade the firmware of the device to at least version 3.1.1.", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "Please ensure you reconfigure against the same device." }, "error": { diff --git a/homeassistant/components/airobot/strings.json b/homeassistant/components/airobot/strings.json index e12b5c333bb40..f7e3374eb4aa6 100644 --- a/homeassistant/components/airobot/strings.json +++ b/homeassistant/components/airobot/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "wrong_device": "Device ID does not match the existing configuration. Please use the correct device credentials." }, "error": { diff --git a/homeassistant/components/airos/strings.json b/homeassistant/components/airos/strings.json index e976317f1c837..3fbd598f3679f 100644 --- a/homeassistant/components/airos/strings.json +++ b/homeassistant/components/airos/strings.json @@ -7,7 +7,6 @@ "listen_error": "Unable to start listening for devices", "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "Re-authentication should be used for the same device not a new one" }, "error": { diff --git a/homeassistant/components/alexa_devices/strings.json b/homeassistant/components/alexa_devices/strings.json index 6bd73cbead790..1b64778c5345b 100644 --- a/homeassistant/components/alexa_devices/strings.json +++ b/homeassistant/components/alexa_devices/strings.json @@ -12,7 +12,6 @@ "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/androidtv_remote/strings.json b/homeassistant/components/androidtv_remote/strings.json index 8f27e64ca2998..5c67cf0a2cd45 100644 --- a/homeassistant/components/androidtv_remote/strings.json +++ b/homeassistant/components/androidtv_remote/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "Please ensure you reconfigure against the same device." }, "error": { diff --git a/homeassistant/components/apcupsd/strings.json b/homeassistant/components/apcupsd/strings.json index 07ea917b54fcd..40d36e2fc570d 100644 --- a/homeassistant/components/apcupsd/strings.json +++ b/homeassistant/components/apcupsd/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "wrong_apcupsd_daemon": "The reconfigured APC UPS Daemon is not the same as the one already configured." }, "error": { diff --git a/homeassistant/components/aqvify/strings.json b/homeassistant/components/aqvify/strings.json index 198fdaf133c1a..5bc97b1b2e51d 100644 --- a/homeassistant/components/aqvify/strings.json +++ b/homeassistant/components/aqvify/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The entered API key corresponds to a different account." }, "error": { diff --git a/homeassistant/components/arcam_fmj/strings.json b/homeassistant/components/arcam_fmj/strings.json index fd752b6d3083a..0f1ca863d3d0f 100644 --- a/homeassistant/components/arcam_fmj/strings.json +++ b/homeassistant/components/arcam_fmj/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "Please ensure you reconfigure against the same device." }, "error": { diff --git a/homeassistant/components/axis/strings.json b/homeassistant/components/axis/strings.json index 67dc5ab7002de..1431b050d8866 100644 --- a/homeassistant/components/axis/strings.json +++ b/homeassistant/components/axis/strings.json @@ -6,7 +6,6 @@ "no_serial_number": "Could not retrieve a serial number from the device. Please check device connectivity and try again.", "not_axis_device": "Discovered device not an Axis device", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The serial number of the device does not match the previous serial number" }, "error": { diff --git a/homeassistant/components/azure_storage/strings.json b/homeassistant/components/azure_storage/strings.json index 68853ecd6055c..cc57ae400b671 100644 --- a/homeassistant/components/azure_storage/strings.json +++ b/homeassistant/components/azure_storage/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/backblaze_b2/strings.json b/homeassistant/components/backblaze_b2/strings.json index 6cf0c7daed5d2..521217a449274 100644 --- a/homeassistant/components/backblaze_b2/strings.json +++ b/homeassistant/components/backblaze_b2/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "bad_request": "The Backblaze B2 API rejected the request: {error_message}", diff --git a/homeassistant/components/blebox/strings.json b/homeassistant/components/blebox/strings.json index 70c49a6f98b20..d2f79a0803281 100644 --- a/homeassistant/components/blebox/strings.json +++ b/homeassistant/components/blebox/strings.json @@ -6,7 +6,6 @@ "authorization_required": "The BleBox device requires authentication.", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The device identifier does not match the previously configured device.", "unsupported_device_response": "The BleBox device returned an unrecognized response.", "unsupported_device_version": "[%key:component::blebox::config::error::unsupported_version%]" diff --git a/homeassistant/components/bosch_alarm/strings.json b/homeassistant/components/bosch_alarm/strings.json index 3f97840ed7aa4..3d34143c4bbed 100644 --- a/homeassistant/components/bosch_alarm/strings.json +++ b/homeassistant/components/bosch_alarm/strings.json @@ -4,8 +4,7 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "already_in_progress": "[%key:common::config_flow::abort::already_in_progress%]", "device_mismatch": "Please ensure you reconfigure against the same device.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/bring/strings.json b/homeassistant/components/bring/strings.json index a5b488e8ef537..cc6e938c956e2 100644 --- a/homeassistant/components/bring/strings.json +++ b/homeassistant/components/bring/strings.json @@ -6,7 +6,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The login details correspond to a different account. Please re-authenticate to the previously configured account." }, "error": { diff --git a/homeassistant/components/brother/strings.json b/homeassistant/components/brother/strings.json index 183d57da40abf..f52615d0242fb 100644 --- a/homeassistant/components/brother/strings.json +++ b/homeassistant/components/brother/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unsupported_model": "This printer model is not supported." }, "error": { diff --git a/homeassistant/components/bryant_evolution/strings.json b/homeassistant/components/bryant_evolution/strings.json index cab575baf7f78..abae3170bdd99 100644 --- a/homeassistant/components/bryant_evolution/strings.json +++ b/homeassistant/components/bryant_evolution/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/cambridge_audio/strings.json b/homeassistant/components/cambridge_audio/strings.json index be63f200fc77c..7b231f97ab25f 100644 --- a/homeassistant/components/cambridge_audio/strings.json +++ b/homeassistant/components/cambridge_audio/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "wrong_device": "This Cambridge Audio device does not match the existing device ID. Please make sure you entered the correct IP address." }, "error": { diff --git a/homeassistant/components/centriconnect/strings.json b/homeassistant/components/centriconnect/strings.json index 754582ee035f1..48498e771dbd0 100644 --- a/homeassistant/components/centriconnect/strings.json +++ b/homeassistant/components/centriconnect/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "wrong_device": "This CentriConnect/MyPropane device does not match the existing device ID. Please make sure you entered the credentials correctly." }, "error": { diff --git a/homeassistant/components/cert_expiry/strings.json b/homeassistant/components/cert_expiry/strings.json index 89fa04cd244e5..d0523eb280424 100644 --- a/homeassistant/components/cert_expiry/strings.json +++ b/homeassistant/components/cert_expiry/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "connection_refused": "Connection refused when connecting to host", diff --git a/homeassistant/components/comelit/strings.json b/homeassistant/components/comelit/strings.json index accc0ccdcdb31..2aee4049acdfe 100644 --- a/homeassistant/components/comelit/strings.json +++ b/homeassistant/components/comelit/strings.json @@ -8,7 +8,6 @@ "invalid_vedo_auth": "The provided VEDO PIN is incorrect or VEDO alarm is not enabled on this device.", "invalid_vedo_pin": "The provided VEDO PIN is invalid. It must be a 4-10 digit number.", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/cookidoo/strings.json b/homeassistant/components/cookidoo/strings.json index 5de0703dd235e..4a1ecc438776f 100644 --- a/homeassistant/components/cookidoo/strings.json +++ b/homeassistant/components/cookidoo/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The user identifier does not match the previous identifier" }, "error": { diff --git a/homeassistant/components/coolmaster/strings.json b/homeassistant/components/coolmaster/strings.json index 062213474e545..ba8f8a021a85f 100644 --- a/homeassistant/components/coolmaster/strings.json +++ b/homeassistant/components/coolmaster/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/data_grand_lyon/strings.json b/homeassistant/components/data_grand_lyon/strings.json index eb08a461a352d..0954ab472656c 100644 --- a/homeassistant/components/data_grand_lyon/strings.json +++ b/homeassistant/components/data_grand_lyon/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/dropbox/strings.json b/homeassistant/components/dropbox/strings.json index 7026ec0ba11f0..9e28a5deb6bf3 100644 --- a/homeassistant/components/dropbox/strings.json +++ b/homeassistant/components/dropbox/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "wrong_account": "Wrong account: Please authenticate with the correct account." }, "create_entry": { diff --git a/homeassistant/components/duckdns/strings.json b/homeassistant/components/duckdns/strings.json index 31042f4563cbe..2f3a5da1a08c9 100644 --- a/homeassistant/components/duckdns/strings.json +++ b/homeassistant/components/duckdns/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "unknown": "[%key:common::config_flow::error::unknown%]", diff --git a/homeassistant/components/duco/strings.json b/homeassistant/components/duco/strings.json index aa402ba0e1c69..0ae0f33bc4bdf 100644 --- a/homeassistant/components/duco/strings.json +++ b/homeassistant/components/duco/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The device you entered belongs to a different Duco box.", "unknown": "[%key:common::config_flow::error::unknown%]", "unsupported_board": "This Duco system is not supported by this integration. The integration requires a Duco Connectivity Board running public API 2.1 or newer." diff --git a/homeassistant/components/eheimdigital/strings.json b/homeassistant/components/eheimdigital/strings.json index ea9b0e2f6bca8..ce09090099a71 100644 --- a/homeassistant/components/eheimdigital/strings.json +++ b/homeassistant/components/eheimdigital/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The identifier does not match the previous identifier" }, "error": { diff --git a/homeassistant/components/elgato/strings.json b/homeassistant/components/elgato/strings.json index 25de84d5c025c..da22bb042a39c 100644 --- a/homeassistant/components/elgato/strings.json +++ b/homeassistant/components/elgato/strings.json @@ -4,8 +4,7 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "different_device": "The configured Elgato device is not the same as the one at this address.", - "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]" diff --git a/homeassistant/components/emoncms/strings.json b/homeassistant/components/emoncms/strings.json index 70d774562707c..9079683c522c3 100644 --- a/homeassistant/components/emoncms/strings.json +++ b/homeassistant/components/emoncms/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "This server is already configured", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "This emoncms serial number does not match the previous serial number" }, "error": { diff --git a/homeassistant/components/energieleser/strings.json b/homeassistant/components/energieleser/strings.json index 370ec96f4b9b1..f52a1b50e344d 100755 --- a/homeassistant/components/energieleser/strings.json +++ b/homeassistant/components/energieleser/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]", "unknown_device_type": "This isn't a supported energieleser product. Please check that the device is a stromleser, gasleser, wasserleser, or wärmeleser.", "wrong_device": "The device at this IP address does not match the originally configured device." diff --git a/homeassistant/components/enphase_envoy/strings.json b/homeassistant/components/enphase_envoy/strings.json index 5791f3bbf66df..39eeed537ea6f 100644 --- a/homeassistant/components/enphase_envoy/strings.json +++ b/homeassistant/components/enphase_envoy/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The serial number of the device does not match the previous serial number" }, "error": { diff --git a/homeassistant/components/esphome/strings.json b/homeassistant/components/esphome/strings.json index 6bfc1c20925ff..8ab9afbc45c5f 100644 --- a/homeassistant/components/esphome/strings.json +++ b/homeassistant/components/esphome/strings.json @@ -14,7 +14,6 @@ "reauth_unique_id_changed": "**Re-authentication of `{name}` was aborted** because the address `{host}` points to a different device: `{unexpected_device_name}` (MAC: `{unexpected_mac}`) instead of the expected one (MAC: `{expected_mac}`).", "reconfigure_already_configured": "A device `{name}` with MAC address `{mac}` is already configured as `{title}`. Reconfiguration was aborted because the new configuration appears to refer to a different device.", "reconfigure_name_conflict": "**Reconfiguration of `{name}` was aborted** because the address `{host}` points to a device named `{name}` (MAC: `{expected_mac}`), which is already in use by another configuration entry: `{existing_title}`.", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "reconfigure_unique_id_changed": "**Reconfiguration of `{name}` was aborted** because the address `{host}` points to a different device: `{unexpected_device_name}` (MAC: `{unexpected_mac}`) instead of the expected one (MAC: `{expected_mac}`).", "service_received": "Action received" }, diff --git a/homeassistant/components/eurotronic_cometblue/strings.json b/homeassistant/components/eurotronic_cometblue/strings.json index f7ddc18c29f92..0bc7ae1d89abd 100644 --- a/homeassistant/components/eurotronic_cometblue/strings.json +++ b/homeassistant/components/eurotronic_cometblue/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "no_devices_found": "No Comet Blue Bluetooth TRVs discovered.", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "no_devices_found": "No Comet Blue Bluetooth TRVs discovered." }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/feedreader/strings.json b/homeassistant/components/feedreader/strings.json index d4e49f29a4134..6c1105a18603e 100644 --- a/homeassistant/components/feedreader/strings.json +++ b/homeassistant/components/feedreader/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "url_error": "The URL could not be opened." diff --git a/homeassistant/components/filesize/strings.json b/homeassistant/components/filesize/strings.json index 122cc3621c275..5ea957f1c53a0 100644 --- a/homeassistant/components/filesize/strings.json +++ b/homeassistant/components/filesize/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "not_allowed": "Path is not allowed", diff --git a/homeassistant/components/firefly_iii/strings.json b/homeassistant/components/firefly_iii/strings.json index 9c595e36a89f5..8f3d21e7e664f 100644 --- a/homeassistant/components/firefly_iii/strings.json +++ b/homeassistant/components/firefly_iii/strings.json @@ -7,8 +7,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/flexit/strings.json b/homeassistant/components/flexit/strings.json index 787df090dc1be..732ccbeeda052 100644 --- a/homeassistant/components/flexit/strings.json +++ b/homeassistant/components/flexit/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/freshr/strings.json b/homeassistant/components/freshr/strings.json index f7627054914f4..8afab1eeb6597 100644 --- a/homeassistant/components/freshr/strings.json +++ b/homeassistant/components/freshr/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/fressnapf_tracker/strings.json b/homeassistant/components/fressnapf_tracker/strings.json index 1e9787496c803..f8949158cc20d 100644 --- a/homeassistant/components/fressnapf_tracker/strings.json +++ b/homeassistant/components/fressnapf_tracker/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "account_change_not_allowed": "Reconfiguring to a different account is not allowed. Please create a new entry instead.", diff --git a/homeassistant/components/fritz/strings.json b/homeassistant/components/fritz/strings.json index a9b15a6af2a7d..9fb08402a5e6c 100644 --- a/homeassistant/components/fritz/strings.json +++ b/homeassistant/components/fritz/strings.json @@ -13,8 +13,7 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "already_in_progress": "[%key:common::config_flow::abort::already_in_progress%]", "ignore_ip6_link_local": "IPv6 link local address is not supported.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", diff --git a/homeassistant/components/fritzbox/strings.json b/homeassistant/components/fritzbox/strings.json index e504dab50ad9d..1fe7e9b3b0c2b 100644 --- a/homeassistant/components/fritzbox/strings.json +++ b/homeassistant/components/fritzbox/strings.json @@ -11,8 +11,7 @@ "ignore_ip6_link_local": "IPv6 link local address is not supported.", "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]", "not_supported": "Connected to FRITZ!Box but it's unable to control Smart Home devices.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", diff --git a/homeassistant/components/fronius/strings.json b/homeassistant/components/fronius/strings.json index f2ff3db4400b7..7e0e5303553fb 100644 --- a/homeassistant/components/fronius/strings.json +++ b/homeassistant/components/fronius/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "invalid_host": "[%key:common::config_flow::error::invalid_host%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The identifier does not match the previous identifier" }, "error": { diff --git a/homeassistant/components/fully_kiosk/strings.json b/homeassistant/components/fully_kiosk/strings.json index 986478ac1c091..a97a4ebfc94b3 100644 --- a/homeassistant/components/fully_kiosk/strings.json +++ b/homeassistant/components/fully_kiosk/strings.json @@ -7,7 +7,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "Please ensure you reconfigure the same device." }, "error": { diff --git a/homeassistant/components/fumis/strings.json b/homeassistant/components/fumis/strings.json index 54d615ad9a496..8d4d991b4df5e 100644 --- a/homeassistant/components/fumis/strings.json +++ b/homeassistant/components/fumis/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/gatus/strings.json b/homeassistant/components/gatus/strings.json index b4f0ba34e3198..31af273f0748c 100644 --- a/homeassistant/components/gatus/strings.json +++ b/homeassistant/components/gatus/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/ghost/strings.json b/homeassistant/components/ghost/strings.json index ea7ba971f787e..49bdb27bc6c91 100644 --- a/homeassistant/components/ghost/strings.json +++ b/homeassistant/components/ghost/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "This Ghost site is already configured.", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The provided credentials belong to a different Ghost site." }, "error": { diff --git a/homeassistant/components/google_assistant_sdk/strings.json b/homeassistant/components/google_assistant_sdk/strings.json index 4abb3dd100923..96ec044fa801c 100644 --- a/homeassistant/components/google_assistant_sdk/strings.json +++ b/homeassistant/components/google_assistant_sdk/strings.json @@ -6,8 +6,7 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "create_entry": { "default": "[%key:common::config_flow::create_entry::authenticated%]" diff --git a/homeassistant/components/google_drive/strings.json b/homeassistant/components/google_drive/strings.json index 28851734744fb..95032cb096e21 100644 --- a/homeassistant/components/google_drive/strings.json +++ b/homeassistant/components/google_drive/strings.json @@ -9,7 +9,6 @@ "create_folder_failure": "Error while creating Google Drive folder:\n\n{message}", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]", "wrong_account": "Wrong account: Please authenticate with {email}." }, diff --git a/homeassistant/components/google_health/strings.json b/homeassistant/components/google_health/strings.json index a6525b8351969..d383a4f118be3 100644 --- a/homeassistant/components/google_health/strings.json +++ b/homeassistant/components/google_health/strings.json @@ -10,7 +10,6 @@ "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", "missing_profile_scope": "Missing required Google Health profile read permission. Please try again and select the right permission.", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "wrong_account": "Wrong account: Please authenticate with the right account." }, "create_entry": { diff --git a/homeassistant/components/google_travel_time/strings.json b/homeassistant/components/google_travel_time/strings.json index ea01c8f56d51c..eeb1c85e11425 100644 --- a/homeassistant/components/google_travel_time/strings.json +++ b/homeassistant/components/google_travel_time/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_location%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_location%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/google_weather/strings.json b/homeassistant/components/google_weather/strings.json index 7b8ab5b060cc0..fd0831217f611 100644 --- a/homeassistant/components/google_weather/strings.json +++ b/homeassistant/components/google_weather/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "Unable to connect to the Google Weather API:\n\n{error_message}", diff --git a/homeassistant/components/growatt_server/strings.json b/homeassistant/components/growatt_server/strings.json index 9a5648e56bd53..ab617e0f25cd1 100644 --- a/homeassistant/components/growatt_server/strings.json +++ b/homeassistant/components/growatt_server/strings.json @@ -4,8 +4,7 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "no_plants": "No plants have been found on this account", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "Cannot connect to Growatt servers. Please check your internet connection and try again.", diff --git a/homeassistant/components/habitica/strings.json b/homeassistant/components/habitica/strings.json index cb26691dd817e..d854c56a482f4 100644 --- a/homeassistant/components/habitica/strings.json +++ b/homeassistant/components/habitica/strings.json @@ -74,7 +74,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "Hmm, those login details are correct, but they're not for this adventurer. Got another account to try?" }, "error": { diff --git a/homeassistant/components/hdfury/strings.json b/homeassistant/components/hdfury/strings.json index e7ade56c93713..c7a8271c5d207 100644 --- a/homeassistant/components/hdfury/strings.json +++ b/homeassistant/components/hdfury/strings.json @@ -3,8 +3,7 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "incorrect_device": "The configured device is not the same found on this IP address.", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "incorrect_device": "The configured device is not the same found on this IP address." }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]" diff --git a/homeassistant/components/here_travel_time/strings.json b/homeassistant/components/here_travel_time/strings.json index 6bd36113481aa..f16f5360aa14d 100644 --- a/homeassistant/components/here_travel_time/strings.json +++ b/homeassistant/components/here_travel_time/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", diff --git a/homeassistant/components/holiday/strings.json b/homeassistant/components/holiday/strings.json index 7bb66015e5f0b..a2c29e27ffeb6 100644 --- a/homeassistant/components/holiday/strings.json +++ b/homeassistant/components/holiday/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "Already configured. Only a single configuration for country/province/categories combination is possible.", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "Already configured. Only a single configuration for country/province/categories combination is possible." }, "step": { "options": { diff --git a/homeassistant/components/homeassistant/strings.json b/homeassistant/components/homeassistant/strings.json index dd07fc622bed8..e18c4e3cd0902 100644 --- a/homeassistant/components/homeassistant/strings.json +++ b/homeassistant/components/homeassistant/strings.json @@ -12,6 +12,7 @@ "oauth_implementation_unavailable": "[%key:common::config_flow::abort::oauth2_implementation_unavailable%]", "oauth_timeout": "[%key:common::config_flow::abort::oauth2_timeout%]", "oauth_unauthorized": "[%key:common::config_flow::abort::oauth2_unauthorized%]", + "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]", "user_rejected_authorize": "[%key:common::config_flow::abort::oauth2_user_rejected_authorize%]" }, diff --git a/homeassistant/components/homee/strings.json b/homeassistant/components/homee/strings.json index b74e62b9f4859..37f569a2dc58f 100644 --- a/homeassistant/components/homee/strings.json +++ b/homeassistant/components/homee/strings.json @@ -4,7 +4,6 @@ "2nd_ip_address": "Your homee is already connected using another IP address", "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "wrong_hub": "IP address belongs to a different homee than the configured one." }, "error": { diff --git a/homeassistant/components/homewizard/strings.json b/homeassistant/components/homewizard/strings.json index 475bff8640fc1..cf7efba2f2625 100644 --- a/homeassistant/components/homewizard/strings.json +++ b/homeassistant/components/homewizard/strings.json @@ -6,7 +6,6 @@ "invalid_discovery_parameters": "Invalid discovery parameters", "reauth_enable_api_successful": "Enabling API was successful", "reauth_successful": "Authorization successful", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unknown_error": "[%key:common::config_flow::error::unknown%]", "unsupported_api_version": "Detected unsupported API version", "wrong_device": "The configured device is not the same found on this IP address." diff --git a/homeassistant/components/homeworks/strings.json b/homeassistant/components/homeworks/strings.json index 73a11631643e4..a77cc071d001d 100644 --- a/homeassistant/components/homeworks/strings.json +++ b/homeassistant/components/homeworks/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" - }, "error": { "connection_error": "Could not connect to the controller.", "credentials_needed": "The controller needs credentials.", diff --git a/homeassistant/components/hotspring/strings.json b/homeassistant/components/hotspring/strings.json index 8d06bab200b54..b845d4fd4942e 100644 --- a/homeassistant/components/hotspring/strings.json +++ b/homeassistant/components/hotspring/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "sna_device": "The discovered device is a Spa Network Adapter (SNA). Only the Home Network Adapter (HNA) can be configured.", "unique_id_mismatch": "The MAC address does not match the configured device. Please ensure you reconfigure against the same device." }, diff --git a/homeassistant/components/huum/strings.json b/homeassistant/components/huum/strings.json index e7c597838071a..d14d0ec4a4bc3 100644 --- a/homeassistant/components/huum/strings.json +++ b/homeassistant/components/huum/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/iaqualink/strings.json b/homeassistant/components/iaqualink/strings.json index a9f1dac6db6a7..f540b293526d2 100644 --- a/homeassistant/components/iaqualink/strings.json +++ b/homeassistant/components/iaqualink/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/immich/strings.json b/homeassistant/components/immich/strings.json index 3a1e61f89759c..1c0ed21e6f08a 100644 --- a/homeassistant/components/immich/strings.json +++ b/homeassistant/components/immich/strings.json @@ -8,7 +8,6 @@ "abort": { "already_configured": "This user is already configured for this Immich instance.", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The provided API key does not match the configured user." }, "error": { diff --git a/homeassistant/components/incomfort/strings.json b/homeassistant/components/incomfort/strings.json index 99aa18e5d3aaf..917077b341469 100644 --- a/homeassistant/components/incomfort/strings.json +++ b/homeassistant/components/incomfort/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "auth_error": "Invalid credentials.", diff --git a/homeassistant/components/indevolt/strings.json b/homeassistant/components/indevolt/strings.json index fcbdaa2da8739..b2f2842c4a677 100644 --- a/homeassistant/components/indevolt/strings.json +++ b/homeassistant/components/indevolt/strings.json @@ -3,8 +3,7 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "Failed to connect (aborted)", - "different_device": "The device at the new host has a different serial number. Please ensure the new host is the same device.", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "different_device": "The device at the new host has a different serial number. Please ensure the new host is the same device." }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/influxdb/strings.json b/homeassistant/components/influxdb/strings.json index 18a7966fb51cf..6e962b9cbe0da 100644 --- a/homeassistant/components/influxdb/strings.json +++ b/homeassistant/components/influxdb/strings.json @@ -3,9 +3,6 @@ "ssl_ca_cert": "SSL CA certificate (Optional)" }, "config": { - "abort": { - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" - }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", diff --git a/homeassistant/components/ista_ecotrend/strings.json b/homeassistant/components/ista_ecotrend/strings.json index 6343b73651c40..5b1cfefd2dd12 100644 --- a/homeassistant/components/ista_ecotrend/strings.json +++ b/homeassistant/components/ista_ecotrend/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The login details correspond to a different account. Please re-authenticate to the previously configured account." }, "error": { diff --git a/homeassistant/components/jewish_calendar/strings.json b/homeassistant/components/jewish_calendar/strings.json index e2a5cb7b2e532..40b7f7e14cf22 100644 --- a/homeassistant/components/jewish_calendar/strings.json +++ b/homeassistant/components/jewish_calendar/strings.json @@ -10,8 +10,7 @@ }, "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "step": { "reconfigure": { diff --git a/homeassistant/components/keenetic_ndms2/strings.json b/homeassistant/components/keenetic_ndms2/strings.json index f36ec8b59feaf..a97c886fac9dd 100644 --- a/homeassistant/components/keenetic_ndms2/strings.json +++ b/homeassistant/components/keenetic_ndms2/strings.json @@ -3,8 +3,7 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "no_udn": "SSDP discovery info has no UDN", - "not_keenetic_ndms2": "Discovered device is not a Keenetic router", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "not_keenetic_ndms2": "Discovered device is not a Keenetic router" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]" diff --git a/homeassistant/components/knx/strings.json b/homeassistant/components/knx/strings.json index be9609ee3e86c..fac33704de72a 100644 --- a/homeassistant/components/knx/strings.json +++ b/homeassistant/components/knx/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" - }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "invalid_backbone_key": "Invalid backbone key. 32 hexadecimal digits expected.", diff --git a/homeassistant/components/kostal_plenticore/strings.json b/homeassistant/components/kostal_plenticore/strings.json index 6c702bc6e22cb..c04b0e94a101e 100644 --- a/homeassistant/components/kostal_plenticore/strings.json +++ b/homeassistant/components/kostal_plenticore/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/lamarzocco/strings.json b/homeassistant/components/lamarzocco/strings.json index 38fec7fd3db56..ceff2038c3c5d 100644 --- a/homeassistant/components/lamarzocco/strings.json +++ b/homeassistant/components/lamarzocco/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/lcn/strings.json b/homeassistant/components/lcn/strings.json index cb0139d644067..e02a2bd7e56be 100644 --- a/homeassistant/components/lcn/strings.json +++ b/homeassistant/components/lcn/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "PCHK connection using the same IP address/port is already configured.", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "PCHK connection using the same IP address/port is already configured." }, "error": { "authentication_error": "Authentication failed. Wrong username or password.", diff --git a/homeassistant/components/led_infrared/strings.json b/homeassistant/components/led_infrared/strings.json index 725a3c877dc62..1245da5b84bbd 100644 --- a/homeassistant/components/led_infrared/strings.json +++ b/homeassistant/components/led_infrared/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "This device has already been configured with this infrared entity.", - "no_infrared_entities": "[%key:common::config_flow::abort::no_infrared_entities%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "no_infrared_entities": "[%key:common::config_flow::abort::no_infrared_entities%]" }, "error": { "missing_infrared_entity": "Select an infrared emitter or receiver." diff --git a/homeassistant/components/litterrobot/strings.json b/homeassistant/components/litterrobot/strings.json index f2d386001c4d4..91c71c4c2552b 100644 --- a/homeassistant/components/litterrobot/strings.json +++ b/homeassistant/components/litterrobot/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The Whisker account does not match the previously configured account. Please re-authenticate using the same account, or remove this integration and set it up again if you want to use a different account." }, "error": { diff --git a/homeassistant/components/lunatone/strings.json b/homeassistant/components/lunatone/strings.json index 5ccc46d2e93d7..b8bd08bf68ecf 100644 --- a/homeassistant/components/lunatone/strings.json +++ b/homeassistant/components/lunatone/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "Please ensure you reconfigure against the same device." }, "error": { diff --git a/homeassistant/components/lyngdorf/strings.json b/homeassistant/components/lyngdorf/strings.json index 0750ad7ae39a2..7536d54871131 100644 --- a/homeassistant/components/lyngdorf/strings.json +++ b/homeassistant/components/lyngdorf/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "cannot_determine_id": "[%key:component::lyngdorf::config::error::cannot_determine_id%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The device at this address is a different Lyngdorf device from the one this entry was set up with.", "unsupported_model": "This Lyngdorf model is not supported" }, diff --git a/homeassistant/components/madvr/strings.json b/homeassistant/components/madvr/strings.json index f61259d8ac750..4e2474aae3d87 100644 --- a/homeassistant/components/madvr/strings.json +++ b/homeassistant/components/madvr/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "set_up_new_device": "A new device was detected. Please set it up as a new entity instead of reconfiguring." }, "error": { diff --git a/homeassistant/components/mastodon/strings.json b/homeassistant/components/mastodon/strings.json index ca34a55df285d..205fa8ac17d56 100644 --- a/homeassistant/components/mastodon/strings.json +++ b/homeassistant/components/mastodon/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "wrong_account": "You have to use the same account that was used to configure the integration." }, "error": { diff --git a/homeassistant/components/mealie/strings.json b/homeassistant/components/mealie/strings.json index 28671b7a5b609..4bacefbb1eab5 100644 --- a/homeassistant/components/mealie/strings.json +++ b/homeassistant/components/mealie/strings.json @@ -8,7 +8,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "wrong_account": "You have to use the same account that was used to configure the integration." }, "error": { diff --git a/homeassistant/components/melcloud/strings.json b/homeassistant/components/melcloud/strings.json index b50c92746f78a..3affefd9f4dec 100644 --- a/homeassistant/components/melcloud/strings.json +++ b/homeassistant/components/melcloud/strings.json @@ -4,8 +4,7 @@ "already_configured": "MELCloud integration already configured for this email. Access token has been refreshed.", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/melcloud_home/strings.json b/homeassistant/components/melcloud_home/strings.json index 330bfd52224a8..ad16e1c87d604 100644 --- a/homeassistant/components/melcloud_home/strings.json +++ b/homeassistant/components/melcloud_home/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The login details correspond to a different account. Please re-authenticate to the previously configured account." }, "error": { diff --git a/homeassistant/components/midea/strings.json b/homeassistant/components/midea/strings.json index 5d2b52ca4eb7d..795333c290f31 100644 --- a/homeassistant/components/midea/strings.json +++ b/homeassistant/components/midea/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "device_auth_failed": "Could not connect with the provided configuration", diff --git a/homeassistant/components/miele/strings.json b/homeassistant/components/miele/strings.json index 4b7f81a54da0e..9bf830b401ac1 100644 --- a/homeassistant/components/miele/strings.json +++ b/homeassistant/components/miele/strings.json @@ -8,8 +8,7 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "create_entry": { "default": "[%key:common::config_flow::create_entry::authenticated%]" diff --git a/homeassistant/components/mqtt/strings.json b/homeassistant/components/mqtt/strings.json index 1d7f6af31dca9..30df5368e7dac 100644 --- a/homeassistant/components/mqtt/strings.json +++ b/homeassistant/components/mqtt/strings.json @@ -6,8 +6,7 @@ "addon_install_failed": "Failed to install the {addon} app.", "addon_start_failed": "Failed to start the {addon} app.", "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "bad_birth": "Invalid birth topic", diff --git a/homeassistant/components/myuplink/strings.json b/homeassistant/components/myuplink/strings.json index 4a1243757f2be..4b2d3d5a2fa45 100644 --- a/homeassistant/components/myuplink/strings.json +++ b/homeassistant/components/myuplink/strings.json @@ -7,8 +7,7 @@ "account_mismatch": "The used account does not match the original account", "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "create_entry": { "default": "[%key:common::config_flow::create_entry::authenticated%]" diff --git a/homeassistant/components/nam/strings.json b/homeassistant/components/nam/strings.json index f1aa0311f2fca..02cc9e3a7a88c 100644 --- a/homeassistant/components/nam/strings.json +++ b/homeassistant/components/nam/strings.json @@ -5,8 +5,7 @@ "another_device": "The IP address/hostname of another Nettigo Air Monitor was used.", "device_unsupported": "The device is unsupported.", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reauth_unsuccessful": "Re-authentication was unsuccessful, please remove the integration and set it up again.", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_unsuccessful": "Re-authentication was unsuccessful, please remove the integration and set it up again." }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/namecheapdns/strings.json b/homeassistant/components/namecheapdns/strings.json index dd293a2ed51e1..fdc6c2107b1c9 100644 --- a/homeassistant/components/namecheapdns/strings.json +++ b/homeassistant/components/namecheapdns/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/nederlandse_spoorwegen/strings.json b/homeassistant/components/nederlandse_spoorwegen/strings.json index 50eef378da737..13e7982c6fb9d 100644 --- a/homeassistant/components/nederlandse_spoorwegen/strings.json +++ b/homeassistant/components/nederlandse_spoorwegen/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "already_configured": "This API key is already configured for another entry.", diff --git a/homeassistant/components/neopool/strings.json b/homeassistant/components/neopool/strings.json index 5980ee3e2410d..c795fbfda197b 100644 --- a/homeassistant/components/neopool/strings.json +++ b/homeassistant/components/neopool/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "serial_mismatch": "The device at this address has a different serial number than the one originally configured." }, "error": { diff --git a/homeassistant/components/nextcloud/strings.json b/homeassistant/components/nextcloud/strings.json index a4997e6e78e28..4cbee34f1855a 100644 --- a/homeassistant/components/nextcloud/strings.json +++ b/homeassistant/components/nextcloud/strings.json @@ -3,8 +3,7 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "connection_error_during_import": "Connection error occurred during yaml configuration import", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "connection_error": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/nextdns/strings.json b/homeassistant/components/nextdns/strings.json index 18aff8b73f6bc..bb078f0125b96 100644 --- a/homeassistant/components/nextdns/strings.json +++ b/homeassistant/components/nextdns/strings.json @@ -4,8 +4,7 @@ "all_profiles_configured": "All NextDNS profiles are already configured.", "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "profile_not_available": "The configured NextDNS profile is no longer available in your account. Remove the configuration and configure the integration again.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/nfandroidtv/strings.json b/homeassistant/components/nfandroidtv/strings.json index ebc75419a9fc2..5c20ea9247f30 100644 --- a/homeassistant/components/nfandroidtv/strings.json +++ b/homeassistant/components/nfandroidtv/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/niko_home_control/strings.json b/homeassistant/components/niko_home_control/strings.json index 5f25e03fe621a..d291c0b23915e 100644 --- a/homeassistant/components/niko_home_control/strings.json +++ b/homeassistant/components/niko_home_control/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/nordpool/strings.json b/homeassistant/components/nordpool/strings.json index 085e342678bb1..b11d8bc8486d9 100644 --- a/homeassistant/components/nordpool/strings.json +++ b/homeassistant/components/nordpool/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" - }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "no_areas": "No area(s) selected", diff --git a/homeassistant/components/novy_cooker_hood/strings.json b/homeassistant/components/novy_cooker_hood/strings.json index 3ecaa9392a5eb..3fd5a77acf62e 100644 --- a/homeassistant/components/novy_cooker_hood/strings.json +++ b/homeassistant/components/novy_cooker_hood/strings.json @@ -3,8 +3,7 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "no_compatible_transmitters": "[%key:common::config_flow::abort::no_compatible_radio_frequency_transmitters%]", - "no_transmitters": "[%key:common::config_flow::abort::no_radio_frequency_transmitters%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "no_transmitters": "[%key:common::config_flow::abort::no_radio_frequency_transmitters%]" }, "step": { "reconfigure": { diff --git a/homeassistant/components/nrgkick/strings.json b/homeassistant/components/nrgkick/strings.json index edf14d06f8e16..4ac067105e150 100644 --- a/homeassistant/components/nrgkick/strings.json +++ b/homeassistant/components/nrgkick/strings.json @@ -5,7 +5,6 @@ "json_api_disabled": "JSON API is disabled on the device. Enable it in the NRGkick mobile app under Extended \u2192 Local API \u2192 API Variants.", "no_serial_number": "Device does not provide a serial number", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The device does not match the previous device" }, "error": { diff --git a/homeassistant/components/ntfy/strings.json b/homeassistant/components/ntfy/strings.json index 689c3194cb31b..7afb39a77ce8c 100644 --- a/homeassistant/components/ntfy/strings.json +++ b/homeassistant/components/ntfy/strings.json @@ -8,8 +8,7 @@ "abort": { "account_mismatch": "The provided access token corresponds to the account {wrong_username}. Please re-authenticate with the account **{username}**", "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/nut/strings.json b/homeassistant/components/nut/strings.json index 7da18653016da..181c49e2cd487 100644 --- a/homeassistant/components/nut/strings.json +++ b/homeassistant/components/nut/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "no_ups_found": "There are no UPS devices available on the NUT server.", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The device's manufacturer, model and serial number identifier does not match the previous identifier." }, "error": { diff --git a/homeassistant/components/ohme/strings.json b/homeassistant/components/ohme/strings.json index 837c581d6fd9f..cabeee4c14a43 100644 --- a/homeassistant/components/ohme/strings.json +++ b/homeassistant/components/ohme/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", diff --git a/homeassistant/components/onedrive/strings.json b/homeassistant/components/onedrive/strings.json index 1baad944a1584..bb472f9693dd5 100644 --- a/homeassistant/components/onedrive/strings.json +++ b/homeassistant/components/onedrive/strings.json @@ -5,7 +5,6 @@ "connection_error": "Failed to connect to OneDrive.", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]", "wrong_drive": "New account does not contain previously configured OneDrive." }, diff --git a/homeassistant/components/onedrive_for_business/strings.json b/homeassistant/components/onedrive_for_business/strings.json index bc8e9e3ae6f24..cf2ed76c7cdba 100644 --- a/homeassistant/components/onedrive_for_business/strings.json +++ b/homeassistant/components/onedrive_for_business/strings.json @@ -5,7 +5,6 @@ "connection_error": "[%key:component::onedrive::config::abort::connection_error%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]", "wrong_drive": "[%key:component::onedrive::config::abort::wrong_drive%]" }, diff --git a/homeassistant/components/onewire/strings.json b/homeassistant/components/onewire/strings.json index cc7bfa80f7df8..709fcbb03c0ec 100644 --- a/homeassistant/components/onewire/strings.json +++ b/homeassistant/components/onewire/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]" diff --git a/homeassistant/components/onkyo/strings.json b/homeassistant/components/onkyo/strings.json index 254d69e6f64be..57c1172bf174e 100644 --- a/homeassistant/components/onkyo/strings.json +++ b/homeassistant/components/onkyo/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The serial number of the device does not match the previous serial number", "unknown": "[%key:common::config_flow::error::unknown%]" }, diff --git a/homeassistant/components/openevse/strings.json b/homeassistant/components/openevse/strings.json index b74d9c43758c2..4d07a2ae1c253 100644 --- a/homeassistant/components/openevse/strings.json +++ b/homeassistant/components/openevse/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "This charger is already configured", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unavailable_host": "Unable to connect to host", "unique_id_mismatch": "The charger identifier does not match the previous identifier" }, diff --git a/homeassistant/components/openrgb/strings.json b/homeassistant/components/openrgb/strings.json index 5554911a30fd3..ea17c174fade1 100644 --- a/homeassistant/components/openrgb/strings.json +++ b/homeassistant/components/openrgb/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/ouman_eh_800/strings.json b/homeassistant/components/ouman_eh_800/strings.json index 73fdbb25a0d10..694c6be96d430 100644 --- a/homeassistant/components/ouman_eh_800/strings.json +++ b/homeassistant/components/ouman_eh_800/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/overkiz/strings.json b/homeassistant/components/overkiz/strings.json index c2304e58d1421..59dad6d893e28 100644 --- a/homeassistant/components/overkiz/strings.json +++ b/homeassistant/components/overkiz/strings.json @@ -7,7 +7,6 @@ "no_gateways": "No gateways were found for your account.", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "reauth_wrong_account": "You can only reauthenticate this entry with the same Overkiz account and hub", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "reconfigure_wrong_account": "You can only reconfigure this entry with the same Overkiz account and hub" }, "error": { diff --git a/homeassistant/components/overseerr/strings.json b/homeassistant/components/overseerr/strings.json index aa139f6cf919d..4156e6f13adef 100644 --- a/homeassistant/components/overseerr/strings.json +++ b/homeassistant/components/overseerr/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/ovhcloud_ai_endpoints/strings.json b/homeassistant/components/ovhcloud_ai_endpoints/strings.json index 127691efd415e..e25b45335d4e6 100644 --- a/homeassistant/components/ovhcloud_ai_endpoints/strings.json +++ b/homeassistant/components/ovhcloud_ai_endpoints/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/paperless_ngx/strings.json b/homeassistant/components/paperless_ngx/strings.json index 601f74cc40bcd..200e864859444 100644 --- a/homeassistant/components/paperless_ngx/strings.json +++ b/homeassistant/components/paperless_ngx/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::invalid_host%]", diff --git a/homeassistant/components/peblar/strings.json b/homeassistant/components/peblar/strings.json index 5348725833155..5d92572b6b9df 100644 --- a/homeassistant/components/peblar/strings.json +++ b/homeassistant/components/peblar/strings.json @@ -4,8 +4,7 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "different_device": "The information entered is from a different Peblar EV charger.", "no_serial_number": "The discovered Peblar device did not provide a serial number.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/playstation_network/strings.json b/homeassistant/components/playstation_network/strings.json index f6118f281fbb3..5dfaa80c50dd5 100644 --- a/homeassistant/components/playstation_network/strings.json +++ b/homeassistant/components/playstation_network/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "already_configured_as_subentry": "Already configured as a friend for another account. Delete the existing entry first.", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The provided NPSSO token corresponds to the account {wrong_account}. Please re-authenticate with the account **{name}**" }, "error": { diff --git a/homeassistant/components/plugwise/strings.json b/homeassistant/components/plugwise/strings.json index 1bcc8b2730f22..6b9db6ef2fafe 100644 --- a/homeassistant/components/plugwise/strings.json +++ b/homeassistant/components/plugwise/strings.json @@ -3,8 +3,7 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", "anna_with_adam": "Both Anna and Adam detected. Add your Adam instead of your Anna", - "not_the_same_smile": "The configured Smile ID does not match the Smile ID on the requested IP address.", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "not_the_same_smile": "The configured Smile ID does not match the Smile ID on the requested IP address." }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/pooldose/strings.json b/homeassistant/components/pooldose/strings.json index f313da694e7e2..d9f53bb20db54 100644 --- a/homeassistant/components/pooldose/strings.json +++ b/homeassistant/components/pooldose/strings.json @@ -5,7 +5,6 @@ "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "no_device_info": "Unable to retrieve device information", "no_serial_number": "No serial number found on the device", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "wrong_device": "The provided device does not match the configured device" }, "error": { diff --git a/homeassistant/components/portainer/strings.json b/homeassistant/components/portainer/strings.json index 671e94315650c..5f79eabc5ef87 100644 --- a/homeassistant/components/portainer/strings.json +++ b/homeassistant/components/portainer/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The Portainer instance ID does not match the previously configured instance. This can occur if the device was reset or reconfigured outside of Home Assistant." }, "error": { diff --git a/homeassistant/components/powerfox/strings.json b/homeassistant/components/powerfox/strings.json index cb3598e0a4170..ff1a4ba08f5d8 100644 --- a/homeassistant/components/powerfox/strings.json +++ b/homeassistant/components/powerfox/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/powerfox_local/strings.json b/homeassistant/components/powerfox_local/strings.json index fd6ddaa07960c..8845c0dda55ee 100644 --- a/homeassistant/components/powerfox_local/strings.json +++ b/homeassistant/components/powerfox_local/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "Please ensure you reconfigure against the same device." }, "error": { diff --git a/homeassistant/components/proxmoxve/strings.json b/homeassistant/components/proxmoxve/strings.json index b5b75b26e327a..f15f64403e56c 100644 --- a/homeassistant/components/proxmoxve/strings.json +++ b/homeassistant/components/proxmoxve/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "api_error_no_details": "An error occurred while communicating with the Proxmox VE instance.", diff --git a/homeassistant/components/pvoutput/strings.json b/homeassistant/components/pvoutput/strings.json index 342ed952eb963..bcee91c397bb8 100644 --- a/homeassistant/components/pvoutput/strings.json +++ b/homeassistant/components/pvoutput/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/pyload/strings.json b/homeassistant/components/pyload/strings.json index f41cda8d4968a..577cdae19b8f4 100644 --- a/homeassistant/components/pyload/strings.json +++ b/homeassistant/components/pyload/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/qnap/strings.json b/homeassistant/components/qnap/strings.json index 3a3b338b51e6a..af03edcacb3a7 100644 --- a/homeassistant/components/qnap/strings.json +++ b/homeassistant/components/qnap/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The device serial number does not match the original device. Please make sure you are connecting to the same QNAP NAS." }, "error": { diff --git a/homeassistant/components/renault/strings.json b/homeassistant/components/renault/strings.json index 82be1283994ec..116c1f7517935 100644 --- a/homeassistant/components/renault/strings.json +++ b/homeassistant/components/renault/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "kamereon_no_account": "Unable to find Kamereon account", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The selected Kamereon account ID does not match the previous account ID" }, "error": { diff --git a/homeassistant/components/reolink/strings.json b/homeassistant/components/reolink/strings.json index 560855677d90d..48fb9214380aa 100644 --- a/homeassistant/components/reolink/strings.json +++ b/homeassistant/components/reolink/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The MAC address of the device does not match the previous MAC address" }, "error": { diff --git a/homeassistant/components/ring/strings.json b/homeassistant/components/ring/strings.json index e7321b207fbe8..afd4ad8b82e8b 100644 --- a/homeassistant/components/ring/strings.json +++ b/homeassistant/components/ring/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", diff --git a/homeassistant/components/roku/strings.json b/homeassistant/components/roku/strings.json index 8a3a06aead62b..5df8b21ab2d4a 100644 --- a/homeassistant/components/roku/strings.json +++ b/homeassistant/components/roku/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]", "wrong_device": "This Roku device does not match the existing device ID. Please make sure you entered the correct host information." }, diff --git a/homeassistant/components/sabnzbd/strings.json b/homeassistant/components/sabnzbd/strings.json index 2b058f162f685..6238bfb01d4c5 100644 --- a/homeassistant/components/sabnzbd/strings.json +++ b/homeassistant/components/sabnzbd/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/samsungtv/strings.json b/homeassistant/components/samsungtv/strings.json index 752fe441f2b5d..60541f6639cb7 100644 --- a/homeassistant/components/samsungtv/strings.json +++ b/homeassistant/components/samsungtv/strings.json @@ -7,8 +7,7 @@ "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "id_missing": "This Samsung device doesn't have a serial number to identify it.", "not_supported": "This Samsung device is currently not supported.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "auth_missing": "[%key:component::samsungtv::config::abort::auth_missing%]", diff --git a/homeassistant/components/satel_integra/strings.json b/homeassistant/components/satel_integra/strings.json index 4f407ff604af8..33b834b131fbb 100644 --- a/homeassistant/components/satel_integra/strings.json +++ b/homeassistant/components/satel_integra/strings.json @@ -7,8 +7,7 @@ }, "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/saunum/strings.json b/homeassistant/components/saunum/strings.json index 9b480f6a1eb0e..852a553fbbcc1 100644 --- a/homeassistant/components/saunum/strings.json +++ b/homeassistant/components/saunum/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/sensibo/strings.json b/homeassistant/components/sensibo/strings.json index f155d9dfb491d..69ceb0ed0c19d 100644 --- a/homeassistant/components/sensibo/strings.json +++ b/homeassistant/components/sensibo/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/senz/strings.json b/homeassistant/components/senz/strings.json index 3d8c181ef7a2b..0e9dc96267280 100644 --- a/homeassistant/components/senz/strings.json +++ b/homeassistant/components/senz/strings.json @@ -4,8 +4,7 @@ "account_mismatch": "The used account does not match the original account", "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "create_entry": { "default": "[%key:common::config_flow::create_entry::authenticated%]" diff --git a/homeassistant/components/sfr_box/strings.json b/homeassistant/components/sfr_box/strings.json index dbf02e369cced..743055a9c07b7 100644 --- a/homeassistant/components/sfr_box/strings.json +++ b/homeassistant/components/sfr_box/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "Please ensure you reconfigure against the same device." }, "error": { diff --git a/homeassistant/components/shelly/strings.json b/homeassistant/components/shelly/strings.json index f3e919d14b082..69648c37673b9 100644 --- a/homeassistant/components/shelly/strings.json +++ b/homeassistant/components/shelly/strings.json @@ -14,7 +14,6 @@ "no_wifi_networks": "No Wi-Fi networks found during scan.", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "reauth_unsuccessful": "Re-authentication was unsuccessful, please remove the integration and set it up again.", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]", "wifi_provisioned": "Wi-Fi credentials for {ssid} have been provisioned to {name}. The device is connecting to Wi-Fi and will complete setup automatically." }, diff --git a/homeassistant/components/slide_local/strings.json b/homeassistant/components/slide_local/strings.json index 571fea5045675..2550a0f55d20d 100644 --- a/homeassistant/components/slide_local/strings.json +++ b/homeassistant/components/slide_local/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "discovery_connection_failed": "The setup of the discovered device failed with the following error: {error}. Please try to set it up manually.", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The MAC address of the device ({mac}) does not match the previous MAC address." }, "error": { diff --git a/homeassistant/components/sma/strings.json b/homeassistant/components/sma/strings.json index 4bc77d8dbf042..9027daa43f6b3 100644 --- a/homeassistant/components/sma/strings.json +++ b/homeassistant/components/sma/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "You selected a different SMA device than the one this config entry was configured with, this is not allowed." }, "error": { diff --git a/homeassistant/components/smhi/strings.json b/homeassistant/components/smhi/strings.json index c3c6c48236136..e30a36a61b927 100644 --- a/homeassistant/components/smhi/strings.json +++ b/homeassistant/components/smhi/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "wrong_location": "Only locations in Sweden are supported" diff --git a/homeassistant/components/smlight/strings.json b/homeassistant/components/smlight/strings.json index df8f2c73adcec..87f8314f74295 100644 --- a/homeassistant/components/smlight/strings.json +++ b/homeassistant/components/smlight/strings.json @@ -5,7 +5,6 @@ "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "reauth_failed": "[%key:common::config_flow::error::invalid_auth%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "Please ensure you reconfigure against the same device.", "unsupported_device": "This device is not yet supported by the SMLIGHT integration" }, diff --git a/homeassistant/components/smtp/strings.json b/homeassistant/components/smtp/strings.json index d11c74e837518..a0ad41e82f2dd 100644 --- a/homeassistant/components/smtp/strings.json +++ b/homeassistant/components/smtp/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/sofar/strings.json b/homeassistant/components/sofar/strings.json index a9822f170a70a..48113aaa61985 100644 --- a/homeassistant/components/sofar/strings.json +++ b/homeassistant/components/sofar/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "Please reconfigure the same inverter you originally set up." }, "error": { diff --git a/homeassistant/components/solaredge/strings.json b/homeassistant/components/solaredge/strings.json index c50f3b5a8745d..f477c3c1b0834 100644 --- a/homeassistant/components/solaredge/strings.json +++ b/homeassistant/components/solaredge/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", diff --git a/homeassistant/components/solaredge_modbus/strings.json b/homeassistant/components/solaredge_modbus/strings.json index a86e3e6f2977e..8fddbc070dc56 100644 --- a/homeassistant/components/solaredge_modbus/strings.json +++ b/homeassistant/components/solaredge_modbus/strings.json @@ -6,7 +6,6 @@ "ev_charger": "[%key:component::solaredge_modbus::config::error::ev_charger%]", "no_serial_number": "[%key:component::solaredge_modbus::config::error::no_serial_number%]", "no_solaredge_device": "[%key:component::solaredge_modbus::config::error::no_solaredge_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "wrong_device": "The inverter answering on that connection and device ID is a different one than this entry is set up for." }, "error": { diff --git a/homeassistant/components/solarlog/strings.json b/homeassistant/components/solarlog/strings.json index e038fbdc530cc..83ea4a0422d1b 100644 --- a/homeassistant/components/solarlog/strings.json +++ b/homeassistant/components/solarlog/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", diff --git a/homeassistant/components/specialized_turbo/strings.json b/homeassistant/components/specialized_turbo/strings.json index 1fe62e59f183f..5aaf50fe31710 100644 --- a/homeassistant/components/specialized_turbo/strings.json +++ b/homeassistant/components/specialized_turbo/strings.json @@ -4,8 +4,7 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]", "not_encrypted": "This bike has no stored encryption key to reconfigure.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/splunk/strings.json b/homeassistant/components/splunk/strings.json index b4e82c9ab0185..7f13d4540b7b2 100644 --- a/homeassistant/components/splunk/strings.json +++ b/homeassistant/components/splunk/strings.json @@ -6,7 +6,6 @@ "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", "invalid_config": "The YAML configuration is invalid and cannot be imported. Please check your configuration.yaml file.", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/srp_energy/strings.json b/homeassistant/components/srp_energy/strings.json index 9a2bd2556c559..1c496ecc14974 100644 --- a/homeassistant/components/srp_energy/strings.json +++ b/homeassistant/components/srp_energy/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/steam_online/strings.json b/homeassistant/components/steam_online/strings.json index cace946329e36..8cda691ba3894 100644 --- a/homeassistant/components/steam_online/strings.json +++ b/homeassistant/components/steam_online/strings.json @@ -3,8 +3,7 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", "already_configured_as_subentry": "This Steam account is already configured as a sub-entry.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/stiebel_eltron/strings.json b/homeassistant/components/stiebel_eltron/strings.json index e102331508212..65b24534f117b 100644 --- a/homeassistant/components/stiebel_eltron/strings.json +++ b/homeassistant/components/stiebel_eltron/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/systemnexa2/strings.json b/homeassistant/components/systemnexa2/strings.json index b4e62314a82be..0ba320d6587e8 100644 --- a/homeassistant/components/systemnexa2/strings.json +++ b/homeassistant/components/systemnexa2/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "invalid_host": "[%key:common::config_flow::error::invalid_host%]", "no_connection": "Could not establish connection to `{host}`", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unknown_connection_error": "Unknown error when accessing `{host}`", "unsupported_model": "Unsupported device model `{model}` version `{sw_version}`", "wrong_device": "The device at the new hostname/IP address does not match the configured device identity" diff --git a/homeassistant/components/tado/strings.json b/homeassistant/components/tado/strings.json index afad7d57bd023..2a67a5116ccf4 100644 --- a/homeassistant/components/tado/strings.json +++ b/homeassistant/components/tado/strings.json @@ -6,8 +6,7 @@ "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "could_not_authenticate": "Could not authenticate with Tado.", "no_homes": "There are no homes linked to this Tado account.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "progress": { "wait_for_device": "To authenticate, open the following URL and login at Tado:\n{url}\nIf the code is not automatically copied, paste the following code to authorize the integration:\n\n```{code}```\n\n\nThe login attempt will time out after five minutes." diff --git a/homeassistant/components/tailwind/strings.json b/homeassistant/components/tailwind/strings.json index ca7aac4756417..b9bffc428571a 100644 --- a/homeassistant/components/tailwind/strings.json +++ b/homeassistant/components/tailwind/strings.json @@ -6,7 +6,6 @@ "different_device": "The entered information is for a different Tailwind device.", "no_device_id": "The discovered Tailwind device did not provide a device ID.", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]", "unsupported_firmware": "The firmware of your Tailwind device is not supported. Please update your Tailwind device to the latest firmware version using the Tailwind app." }, diff --git a/homeassistant/components/technove/strings.json b/homeassistant/components/technove/strings.json index 13a17bc18bb1b..f34ff55f7e634 100644 --- a/homeassistant/components/technove/strings.json +++ b/homeassistant/components/technove/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "MAC address does not match the configured device. Expected to connect to device with MAC: `{expected_mac}`, but connected to device with MAC: `{actual_mac}`. \n\nPlease ensure you reconfigure against the same device." }, "error": { diff --git a/homeassistant/components/tedee/strings.json b/homeassistant/components/tedee/strings.json index 57b03cdaf3e63..c147faf28d58b 100644 --- a/homeassistant/components/tedee/strings.json +++ b/homeassistant/components/tedee/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "You selected a different bridge than the one this config entry was configured with, this is not allowed." }, "error": { diff --git a/homeassistant/components/telegram_bot/strings.json b/homeassistant/components/telegram_bot/strings.json index 67a5cfa082241..a91d5dbf21bff 100644 --- a/homeassistant/components/telegram_bot/strings.json +++ b/homeassistant/components/telegram_bot/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "bot_logout_failed": "Failed to log out Telegram bot. Please try again later.", diff --git a/homeassistant/components/teslemetry/strings.json b/homeassistant/components/teslemetry/strings.json index 2613bdae82140..045c393dd646f 100644 --- a/homeassistant/components/teslemetry/strings.json +++ b/homeassistant/components/teslemetry/strings.json @@ -30,8 +30,7 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "reauth_account_mismatch": "The reauthentication account does not match the original account", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_account_mismatch": "The reconfiguration account does not match the original account", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reconfigure_account_mismatch": "The reconfiguration account does not match the original account" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/tolo/strings.json b/homeassistant/components/tolo/strings.json index f6c028c03ffa6..048bb109e646c 100644 --- a/homeassistant/components/tolo/strings.json +++ b/homeassistant/components/tolo/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]" diff --git a/homeassistant/components/tonewinner/strings.json b/homeassistant/components/tonewinner/strings.json index 7f181ba28610e..721f2b3290155 100644 --- a/homeassistant/components/tonewinner/strings.json +++ b/homeassistant/components/tonewinner/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "reconfigure_unload_failed": "The existing configuration could not be unloaded. Please try again." }, "error": { diff --git a/homeassistant/components/tplink/strings.json b/homeassistant/components/tplink/strings.json index 97801449d41db..b47a9bca2d839 100644 --- a/homeassistant/components/tplink/strings.json +++ b/homeassistant/components/tplink/strings.json @@ -4,8 +4,7 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "camera_creds": "You have to set both username and password", diff --git a/homeassistant/components/trafikverket_camera/strings.json b/homeassistant/components/trafikverket_camera/strings.json index 029c1641bdd87..706c7462c81fb 100644 --- a/homeassistant/components/trafikverket_camera/strings.json +++ b/homeassistant/components/trafikverket_camera/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/trafikverket_train/strings.json b/homeassistant/components/trafikverket_train/strings.json index 793f6e37f8a4b..0084ac0775655 100644 --- a/homeassistant/components/trafikverket_train/strings.json +++ b/homeassistant/components/trafikverket_train/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/trafikverket_weatherstation/strings.json b/homeassistant/components/trafikverket_weatherstation/strings.json index a8d23516cc96f..cb883a45f6270 100644 --- a/homeassistant/components/trafikverket_weatherstation/strings.json +++ b/homeassistant/components/trafikverket_weatherstation/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/trmnl/strings.json b/homeassistant/components/trmnl/strings.json index 250a11951572a..a6687e9262f4f 100644 --- a/homeassistant/components/trmnl/strings.json +++ b/homeassistant/components/trmnl/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The API key belongs to a different account. Please use the API key for the original account." }, "error": { diff --git a/homeassistant/components/unifi_access/strings.json b/homeassistant/components/unifi_access/strings.json index da80feb5a1f88..1eaa4248fd26b 100644 --- a/homeassistant/components/unifi_access/strings.json +++ b/homeassistant/components/unifi_access/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/unifiprotect/strings.json b/homeassistant/components/unifiprotect/strings.json index 3e208498cdcf0..a337157a6929d 100644 --- a/homeassistant/components/unifiprotect/strings.json +++ b/homeassistant/components/unifiprotect/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "discovery_started": "Discovery started", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "wrong_nvr": "Connected to a different NVR than expected. If you replaced your hardware, please remove the old integration and add it again." }, "error": { diff --git a/homeassistant/components/uptime_kuma/strings.json b/homeassistant/components/uptime_kuma/strings.json index c8a049364756f..1d52d0f859e21 100644 --- a/homeassistant/components/uptime_kuma/strings.json +++ b/homeassistant/components/uptime_kuma/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/uptimerobot/strings.json b/homeassistant/components/uptimerobot/strings.json index 93b764c4feb32..4c604723b20b9 100644 --- a/homeassistant/components/uptimerobot/strings.json +++ b/homeassistant/components/uptimerobot/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "reauth_failed_existing": "Could not update the config entry, please remove the integration and set it up again.", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/vallox/strings.json b/homeassistant/components/vallox/strings.json index d2a2d81a57bbd..de6e57d1d5c52 100644 --- a/homeassistant/components/vallox/strings.json +++ b/homeassistant/components/vallox/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "invalid_host": "[%key:common::config_flow::error::invalid_host%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/velbus/strings.json b/homeassistant/components/velbus/strings.json index c27808a51f8d3..37f943c8d4d87 100644 --- a/homeassistant/components/velbus/strings.json +++ b/homeassistant/components/velbus/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", diff --git a/homeassistant/components/victron_gx/strings.json b/homeassistant/components/victron_gx/strings.json index 073c2227b2eea..4d77adeb9418d 100644 --- a/homeassistant/components/victron_gx/strings.json +++ b/homeassistant/components/victron_gx/strings.json @@ -112,7 +112,6 @@ "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "different_device": "The device at this address is different from the originally configured device.", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/vistapool/strings.json b/homeassistant/components/vistapool/strings.json index a5ad2d081724f..a495a367f75af 100644 --- a/homeassistant/components/vistapool/strings.json +++ b/homeassistant/components/vistapool/strings.json @@ -3,8 +3,7 @@ "abort": { "account_mismatch": "The credentials entered are for a different Vistapool account than the one being reconfigured.", "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/vivotek/strings.json b/homeassistant/components/vivotek/strings.json index a0eb373b7edc8..6d101538e1489 100644 --- a/homeassistant/components/vivotek/strings.json +++ b/homeassistant/components/vivotek/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/vizio/strings.json b/homeassistant/components/vizio/strings.json index 13ea7b46dd6e1..7cf7dc0fecb85 100644 --- a/homeassistant/components/vizio/strings.json +++ b/homeassistant/components/vizio/strings.json @@ -4,7 +4,6 @@ "already_configured_device": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "Please ensure you reconfigure against the same device." }, "error": { diff --git a/homeassistant/components/vodafone_station/strings.json b/homeassistant/components/vodafone_station/strings.json index 16186a36173e8..3303a43656033 100644 --- a/homeassistant/components/vodafone_station/strings.json +++ b/homeassistant/components/vodafone_station/strings.json @@ -7,7 +7,6 @@ "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", "model_not_supported": "The device model is currently unsupported.", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/volvo/strings.json b/homeassistant/components/volvo/strings.json index 6b8ab4aed00da..48e32cd616d1b 100644 --- a/homeassistant/components/volvo/strings.json +++ b/homeassistant/components/volvo/strings.json @@ -6,8 +6,7 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "create_entry": { "default": "[%key:common::config_flow::create_entry::authenticated%]" diff --git a/homeassistant/components/watts/strings.json b/homeassistant/components/watts/strings.json index 4c20f220fb6b5..e53394722db0a 100644 --- a/homeassistant/components/watts/strings.json +++ b/homeassistant/components/watts/strings.json @@ -5,8 +5,7 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "invalid_token": "The provided access token is invalid.", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "create_entry": { "default": "[%key:common::config_flow::create_entry::authenticated%]" diff --git a/homeassistant/components/wattwaechter/strings.json b/homeassistant/components/wattwaechter/strings.json index 704dd4d9ec762..5e22def4563a4 100644 --- a/homeassistant/components/wattwaechter/strings.json +++ b/homeassistant/components/wattwaechter/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "wrong_device": "The device does not match the original WattWächter Plus device." }, "error": { diff --git a/homeassistant/components/waze_travel_time/strings.json b/homeassistant/components/waze_travel_time/strings.json index 221b0af5ccfbd..06a628840cf9e 100644 --- a/homeassistant/components/waze_travel_time/strings.json +++ b/homeassistant/components/waze_travel_time/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_location%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_location%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]" diff --git a/homeassistant/components/webostv/strings.json b/homeassistant/components/webostv/strings.json index a6b08cd243700..f0c0bdcc90745 100644 --- a/homeassistant/components/webostv/strings.json +++ b/homeassistant/components/webostv/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "already_in_progress": "[%key:common::config_flow::abort::already_in_progress%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "wrong_device": "The configured device is not the same found at this hostname or IP address." }, "error": { diff --git a/homeassistant/components/wiim/strings.json b/homeassistant/components/wiim/strings.json index 0b755f1ef9fe1..50aa4d002a68c 100644 --- a/homeassistant/components/wiim/strings.json +++ b/homeassistant/components/wiim/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The host belongs to a different WiiM device." }, "error": { diff --git a/homeassistant/components/wled/strings.json b/homeassistant/components/wled/strings.json index 5a2732c774547..852ceabb271e7 100644 --- a/homeassistant/components/wled/strings.json +++ b/homeassistant/components/wled/strings.json @@ -6,7 +6,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "MAC address does not match the configured device. Expected to connect to device with MAC: `{expected_mac}`, but connected to device with MAC: `{actual_mac}`. \n\nPlease ensure you reconfigure against the same device.", "unsupported_version": "[%key:component::wled::common::unsupported_version%]" }, diff --git a/homeassistant/components/yale_smart_alarm/strings.json b/homeassistant/components/yale_smart_alarm/strings.json index c69374d9ca71b..8f6ecc3643b4f 100644 --- a/homeassistant/components/yale_smart_alarm/strings.json +++ b/homeassistant/components/yale_smart_alarm/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]" + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/zonneplan/strings.json b/homeassistant/components/zonneplan/strings.json index d236993dcb465..91a3a26eda657 100644 --- a/homeassistant/components/zonneplan/strings.json +++ b/homeassistant/components/zonneplan/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", - "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "unique_id_mismatch": "The one-time password was validated for a different Zonneplan account than the one configured." }, "error": { diff --git a/homeassistant/config_entries.py b/homeassistant/config_entries.py index f3fa67f932010..4885457131923 100644 --- a/homeassistant/config_entries.py +++ b/homeassistant/config_entries.py @@ -3527,7 +3527,8 @@ def async_update_and_abort( are overridden options: replace the entry options with new options reason: set the reason for the abort, defaults to - `reauth_successful` or `reconfigure_successful` based on flow source + `reauth_successful` or `reconfigure_successful` based on flow source. + A custom reason requires a matching strings.json entry Returns: ConfigFlowResult: The result of the config flow. @@ -3540,11 +3541,14 @@ def async_update_and_abort( data_updates=data_updates, options=options, ) + translation_domain: str | None = None if reason is UNDEFINED: - reason = "reauth_successful" if self.source == SOURCE_RECONFIGURE: reason = "reconfigure_successful" - return self.async_abort(reason=reason) + translation_domain = HOMEASSISTANT_DOMAIN + else: + reason = "reauth_successful" + return self.async_abort(reason=reason, translation_domain=translation_domain) @callback def async_update_reload_and_abort( @@ -3570,7 +3574,8 @@ def async_update_reload_and_abort( are overridden options: replace the entry options with new options reason: set the reason for the abort, defaults to - `reauth_successful` or `reconfigure_successful` based on flow source + `reauth_successful` or `reconfigure_successful` based on flow source. + A custom reason requires a matching strings.json entry reload_even_if_entry_is_unchanged: set this to `False` if the entry should not be reloaded if it is unchanged @@ -3594,11 +3599,14 @@ def async_update_reload_and_abort( integration_domain=self.handler, ) self.hass.config_entries.async_schedule_reload(entry.entry_id) + translation_domain: str | None = None if reason is UNDEFINED: - reason = "reauth_successful" if self.source == SOURCE_RECONFIGURE: reason = "reconfigure_successful" - return self.async_abort(reason=reason) + translation_domain = HOMEASSISTANT_DOMAIN + else: + reason = "reauth_successful" + return self.async_abort(reason=reason, translation_domain=translation_domain) @callback @override diff --git a/tests/components/config/test_config_entries.py b/tests/components/config/test_config_entries.py index 5722080b1bd43..18472367c9c67 100644 --- a/tests/components/config/test_config_entries.py +++ b/tests/components/config/test_config_entries.py @@ -3501,6 +3501,7 @@ async def async_step_reconfigure(self, user_input=None): assert data == { "handler": "test", "reason": "reconfigure_successful", + "translation_domain": "homeassistant", "type": "abort", "description_placeholders": None, } diff --git a/tests/test_config_entries.py b/tests/test_config_entries.py index 98b28ddad8f03..67cacca263c8b 100644 --- a/tests/test_config_entries.py +++ b/tests/test_config_entries.py @@ -7306,16 +7306,21 @@ def test_raise_trying_to_add_same_config_entry_twice( ], ) @pytest.mark.parametrize( - ("source", "reason"), + ("source", "reason", "translation_domain"), [ - (config_entries.SOURCE_REAUTH, "reauth_successful"), - (config_entries.SOURCE_RECONFIGURE, "reconfigure_successful"), + (config_entries.SOURCE_REAUTH, "reauth_successful", None), + ( + config_entries.SOURCE_RECONFIGURE, + "reconfigure_successful", + HOMEASSISTANT_DOMAIN, + ), ], ) async def test_update_entry_and_reload( hass: HomeAssistant, source: str, reason: str, + translation_domain: str | None, expected_title: str, expected_unique_id: str, expected_data: dict[str, Any], @@ -7379,6 +7384,7 @@ async def async_step_reconfigure(self, data): else: assert result["type"] is FlowResultType.ABORT assert result["reason"] == reason + assert result.get("translation_domain") == translation_domain # Assert entry was reloaded assert len(comp.async_setup_entry.mock_calls) == calls_entry_load_unload[0] assert len(comp.async_unload_entry.mock_calls) == calls_entry_load_unload[1] @@ -7447,16 +7453,21 @@ async def async_step_reconfigure(self, data): @pytest.mark.parametrize( - ("source", "reason"), + ("source", "reason", "translation_domain"), [ - (config_entries.SOURCE_REAUTH, "reauth_successful"), - (config_entries.SOURCE_RECONFIGURE, "reconfigure_successful"), + (config_entries.SOURCE_REAUTH, "reauth_successful", None), + ( + config_entries.SOURCE_RECONFIGURE, + "reconfigure_successful", + HOMEASSISTANT_DOMAIN, + ), ], ) async def test_update_entry_without_reload( hass: HomeAssistant, source: str, reason: str, + translation_domain: str | None, ) -> None: """Test updating an entry without reloading.""" entry = MockConfigEntry( @@ -7518,11 +7529,73 @@ async def async_step_reconfigure(self, data): assert entry.state is config_entries.ConfigEntryState.LOADED assert result["type"] is FlowResultType.ABORT assert result["reason"] == reason + assert result.get("translation_domain") == translation_domain # Assert entry is not reloaded assert len(comp.async_setup_entry.mock_calls) == 1 assert len(comp.async_unload_entry.mock_calls) == 0 +@pytest.mark.parametrize( + "helper", + [ + pytest.param("async_update_and_abort", id="without_reload"), + pytest.param("async_update_reload_and_abort", id="with_reload"), + ], +) +@pytest.mark.parametrize( + "start_flow", + [ + pytest.param("start_reauth_flow", id="reauth"), + pytest.param("start_reconfigure_flow", id="reconfigure"), + ], +) +async def test_update_entry_and_abort_with_custom_reason( + hass: HomeAssistant, + helper: str, + start_flow: str, +) -> None: + """Test a custom abort reason is not translated in the homeassistant domain.""" + entry = MockConfigEntry(domain="comp", data={"vendor": "data"}) + entry.add_to_hass(hass) + + comp = MockModule( + "comp", + async_setup_entry=AsyncMock(return_value=True), + async_unload_entry=AsyncMock(return_value=True), + ) + mock_integration(hass, comp) + mock_platform(hass, "comp.config_flow", None) + + await hass.config_entries.async_setup(entry.entry_id) + + class MockFlowHandler(config_entries.ConfigFlow): + """Define a mock flow handler.""" + + VERSION = 1 + + async def async_step_reauth(self, data): + """Mock Reauth.""" + return getattr(self, helper)( + entry, data_updates={"buyer": "me"}, reason="custom_reason" + ) + + async def async_step_reconfigure(self, data): + """Mock Reconfigure.""" + return getattr(self, helper)( + entry, data_updates={"buyer": "me"}, reason="custom_reason" + ) + + with mock_config_flow("comp", MockFlowHandler): + result = await getattr(entry, start_flow)(hass) + + await hass.async_block_till_done() + + assert entry.data == {"vendor": "data", "buyer": "me"} + assert result["type"] is FlowResultType.ABORT + assert result["reason"] == "custom_reason" + assert "translation_domain" not in result + + @pytest.mark.parametrize( ( "kwargs", From 393df75de3bce9111b6d86384e7d35aca25f3808 Mon Sep 17 00:00:00 2001 From: Tom Matheussen <13683094+Tommatheussen@users.noreply.github.com> Date: Mon, 7 Sep 2026 15:03:21 +0200 Subject: [PATCH 17/26] Bump satel-integra to 1.5.0 (#181523) --- homeassistant/components/satel_integra/manifest.json | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/satel_integra/manifest.json b/homeassistant/components/satel_integra/manifest.json index b57efec331d7a..2b2411557bf73 100644 --- a/homeassistant/components/satel_integra/manifest.json +++ b/homeassistant/components/satel_integra/manifest.json @@ -8,5 +8,5 @@ "iot_class": "local_push", "loggers": ["satel_integra"], "quality_scale": "bronze", - "requirements": ["satel-integra==1.4.0"] + "requirements": ["satel-integra==1.5.0"] } diff --git a/requirements_all.txt b/requirements_all.txt index 744fffedc1ede..de95fc0ab5841 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -3028,7 +3028,7 @@ samsungtvws[async,encrypted]==3.0.5 sanix==1.0.6 # homeassistant.components.satel_integra -satel-integra==1.4.0 +satel-integra==1.5.0 # homeassistant.components.screenlogic screenlogicpy==0.10.2 From 117d32c5ac0522344cb80426e6db3fb5bfd4c29d Mon Sep 17 00:00:00 2001 From: Tom Matheussen <13683094+Tommatheussen@users.noreply.github.com> Date: Mon, 7 Sep 2026 15:09:24 +0200 Subject: [PATCH 18/26] Handle monitoring failure for Satel Integra (#181548) Co-authored-by: Erwin Douna --- .../components/satel_integra/client.py | 9 ++++++++- .../components/satel_integra/strings.json | 3 +++ tests/components/satel_integra/test_init.py | 19 +++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/satel_integra/client.py b/homeassistant/components/satel_integra/client.py index 1a78e11ee0b4b..c4ad59af7b03c 100644 --- a/homeassistant/components/satel_integra/client.py +++ b/homeassistant/components/satel_integra/client.py @@ -6,6 +6,7 @@ from satel_integra.exceptions import ( SatelConnectFailedError, SatelConnectionInitializationError, + SatelMonitoringStartError, SatelPanelBusyError, ) @@ -107,7 +108,13 @@ async def async_connect( output_changed_callback=outputs_update_callback, ) - await self.controller.start(enable_monitoring=True) + try: + await self.controller.start(enable_monitoring=True) + except SatelMonitoringStartError as ex: + raise ConfigEntryNotReady( + translation_domain=DOMAIN, + translation_key="monitoring_start_failed", + ) from ex async def async_close(self) -> None: """Close the connection.""" diff --git a/homeassistant/components/satel_integra/strings.json b/homeassistant/components/satel_integra/strings.json index 33b834b131fbb..fc8e456a49098 100644 --- a/homeassistant/components/satel_integra/strings.json +++ b/homeassistant/components/satel_integra/strings.json @@ -208,6 +208,9 @@ "missing_output_access_code": { "message": "Cannot control switchable outputs because no user code is configured for this Satel Integra entry. Configure a code in the integration options to enable output control." }, + "monitoring_start_failed": { + "message": "Connected to the alarm panel, but the panel did not confirm the request to start sending status updates." + }, "panel_busy": { "message": "[%key:component::satel_integra::config::error::panel_busy%]" } diff --git a/tests/components/satel_integra/test_init.py b/tests/components/satel_integra/test_init.py index 8bb43d3427883..97257d256c7e0 100644 --- a/tests/components/satel_integra/test_init.py +++ b/tests/components/satel_integra/test_init.py @@ -7,6 +7,7 @@ from satel_integra import ( SatelConnectFailedError, SatelConnectionInitializationError, + SatelMonitoringStartError, SatelPanelBusyError, SatelUnexpectedResponseError, ) @@ -265,3 +266,21 @@ async def test_setup_exceptions( mock_satel.connect.side_effect = exception await setup_integration(hass, mock_config_entry) assert mock_config_entry.state is expected_state + + +async def test_monitoring_start_error( + hass: HomeAssistant, + mock_satel: AsyncMock, + mock_config_entry: MockConfigEntry, +) -> None: + """Test setup is retried when monitoring fails to start.""" + mock_satel.start.side_effect = SatelMonitoringStartError + + await setup_integration(hass, mock_config_entry) + + assert mock_config_entry.state is ConfigEntryState.SETUP_RETRY + assert mock_config_entry.reason == ( + "Connected to the alarm panel, but the panel did not confirm the request to start sending status updates" + ) + mock_satel.start.assert_awaited_once_with(enable_monitoring=True) + mock_satel.read_panel_info.assert_not_awaited() From ab9ccbf5b9b0eceb99eaa6426368bc4e34eb5737 Mon Sep 17 00:00:00 2001 From: Erwin Douna Date: Mon, 7 Sep 2026 15:15:53 +0200 Subject: [PATCH 19/26] Add volume filter DF Portainer (#181510) --- homeassistant/components/portainer/coordinator.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/portainer/coordinator.py b/homeassistant/components/portainer/coordinator.py index 20da9a1712976..d7f84b967d991 100644 --- a/homeassistant/components/portainer/coordinator.py +++ b/homeassistant/components/portainer/coordinator.py @@ -23,6 +23,7 @@ from pyportainer.models.docker import ( DockerContainer, DockerContainerStats, + DockerDFType, DockerSystemDF, DockerVolume, DockerVolumeUsageData, @@ -261,7 +262,9 @@ async def update_data(self) -> dict[int, PortainerCoordinatorData]: self.portainer.get_containers(endpoint.id), self.portainer.docker_version(endpoint.id), self.portainer.docker_info(endpoint.id), - self.portainer.docker_system_df(endpoint.id, verbose=True), + self.portainer.docker_system_df( + endpoint.id, data_type=DockerDFType.VOLUME, verbose=True + ), self.portainer.get_volumes(endpoint.id), ) From 488ad0645d6f3080cba25511705b3eb91acdac4e Mon Sep 17 00:00:00 2001 From: "Barry vd. Heuvel" Date: Mon, 7 Sep 2026 15:38:47 +0200 Subject: [PATCH 20/26] Add cooling status/information sensors to Weheat (#181278) Co-authored-by: Claude Opus 5 --- homeassistant/components/weheat/icons.json | 21 + homeassistant/components/weheat/sensor.py | 112 ++++- homeassistant/components/weheat/strings.json | 70 +++ tests/components/weheat/conftest.py | 21 + .../weheat/snapshots/test_sensor.ambr | 460 ++++++++++++++++++ tests/components/weheat/test_sensor.py | 186 ++++++- 6 files changed, 866 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/weheat/icons.json b/homeassistant/components/weheat/icons.json index 0b20377a9ed9d..c5fc792dbc72e 100644 --- a/homeassistant/components/weheat/icons.json +++ b/homeassistant/components/weheat/icons.json @@ -30,6 +30,24 @@ "compressor_rpm": { "default": "mdi:fan" }, + "cooling_blocked_by": { + "default": "mdi:snowflake-alert" + }, + "cooling_conditions_met": { + "default": "mdi:checkbox-multiple-marked-outline" + }, + "cooling_pause_reason": { + "default": "mdi:snowflake-off" + }, + "cooling_state": { + "default": "mdi:snowflake-thermometer" + }, + "cooling_stop_reason": { + "default": "mdi:snowflake-off" + }, + "cooling_wait_until": { + "default": "mdi:timer-sand" + }, "cop": { "default": "mdi:speedometer" }, @@ -75,6 +93,9 @@ "heat_pump_state": { "default": "mdi:state-machine" }, + "last_cooling_time": { + "default": "mdi:snowflake-check" + }, "outside_temperature": { "default": "mdi:home-thermometer-outline" }, diff --git a/homeassistant/components/weheat/sensor.py b/homeassistant/components/weheat/sensor.py index c56ab44b06888..58ab024669f7e 100644 --- a/homeassistant/components/weheat/sensor.py +++ b/homeassistant/components/weheat/sensor.py @@ -2,6 +2,8 @@ from collections.abc import Callable from dataclasses import dataclass +from datetime import datetime +from enum import Enum from typing import override from weheat.abstractions.heat_pump import HeatPump @@ -47,7 +49,21 @@ class WeHeatSensorEntityDescription(SensorEntityDescription): """Describes Weheat sensor entity.""" - value_fn: Callable[[HeatPump], StateType] + value_fn: Callable[[HeatPump], StateType | datetime] + + +# The portal counts the conditions the heat pump waits on and leaves these two +# settings out of its tally. +COOLING_CONDITIONS_NOT_COUNTED = ("control_method", "contact_not_blocked") + + +# A cooling state is only reported during a cooling cycle and covers every substate +# of it, including the water check the overall heat pump state reports as its own. +def _latched_reason(status: HeatPump, reason: Enum | None) -> str | None: + """Return a reason from before the cycle, which says nothing while one runs.""" + if status.cooling_state is not None: + return "none" + return reason.name.lower() if reason is not None else None SENSORS = [ @@ -239,6 +255,89 @@ class WeHeatSensorEntityDescription(SensorEntityDescription): ), ] +COOLING_SENSORS = [ + WeHeatSensorEntityDescription( + translation_key="cooling_state", + key="cooling_state", + device_class=SensorDeviceClass.ENUM, + options=[activity.name.lower() for activity in HeatPump.CoolingActivity], + value_fn=lambda status: ( + status.cooling_activity.name.lower() + if status.cooling_activity is not None + else None + ), + ), + WeHeatSensorEntityDescription( + translation_key="cooling_blocked_by", + key="cooling_blocked_by", + device_class=SensorDeviceClass.ENUM, + options=["none", *HeatPump.COOLING_START_CONDITION_BITS], + value_fn=lambda status: ( + None + if status.cooling_start_conditions is None + else "none" + if status.cooling_state is not None + else next( + ( + name + for name in HeatPump.COOLING_START_CONDITION_BITS + if not status.cooling_start_conditions[name] + ), + "none", + ) + ), + ), + WeHeatSensorEntityDescription( + translation_key="cooling_conditions_met", + key="cooling_conditions_met", + state_class=SensorStateClass.MEASUREMENT, + value_fn=lambda status: ( + None + if status.cooling_start_conditions is None + or status.cooling_state is not None + else sum( + met + for name, met in status.cooling_start_conditions.items() + if name not in COOLING_CONDITIONS_NOT_COUNTED + ) + ), + ), + WeHeatSensorEntityDescription( + translation_key="cooling_wait_until", + key="cooling_wait_until", + device_class=SensorDeviceClass.TIMESTAMP, + value_fn=lambda status: ( + status.cooling_available_from + if status.cooling_start_conditions is not None + and not status.cooling_start_conditions["exponential_backoff"] + else None + ), + ), + WeHeatSensorEntityDescription( + translation_key="last_cooling_time", + key="last_cooling_time", + device_class=SensorDeviceClass.TIMESTAMP, + value_fn=lambda status: status.last_cooling_time, + ), + WeHeatSensorEntityDescription( + translation_key="cooling_pause_reason", + key="cooling_pause_reason", + device_class=SensorDeviceClass.ENUM, + entity_category=EntityCategory.DIAGNOSTIC, + options=[reason.name.lower() for reason in HeatPump.CoolingPauseReason], + value_fn=lambda status: _latched_reason(status, status.cooling_pause_reason), + ), + WeHeatSensorEntityDescription( + translation_key="cooling_stop_reason", + key="cooling_stop_reason", + device_class=SensorDeviceClass.ENUM, + entity_category=EntityCategory.DIAGNOSTIC, + options=[reason.name.lower() for reason in HeatPump.CoolingStopReason], + value_fn=lambda status: _latched_reason(status, status.cooling_stop_reason), + ), +] + + ENERGY_SENSORS = [ WeHeatSensorEntityDescription( translation_key="electricity_used", @@ -360,6 +459,15 @@ async def async_setup_entry( for entity_description in SENSORS if entity_description.value_fn(weheatdata.data_coordinator.data) is not None ) + if weheatdata.data_coordinator.data.cooling_activity is not None: + entities.extend( + WeheatHeatPumpSensor( + weheatdata.heat_pump_info, + weheatdata.data_coordinator, + entity_description, + ) + for entity_description in COOLING_SENSORS + ) if weheatdata.heat_pump_info.has_dhw: entities.extend( WeheatHeatPumpSensor( @@ -412,6 +520,6 @@ def __init__( @property @override - def native_value(self) -> StateType: + def native_value(self) -> StateType | datetime: """Return the state of the sensor.""" return self.entity_description.value_fn(self.coordinator.data) diff --git a/homeassistant/components/weheat/strings.json b/homeassistant/components/weheat/strings.json index 2f1fd03cca79e..1b44b6efeddea 100644 --- a/homeassistant/components/weheat/strings.json +++ b/homeassistant/components/weheat/strings.json @@ -63,6 +63,73 @@ "compressor_rpm": { "name": "Compressor speed" }, + "cooling_blocked_by": { + "name": "Cooling blocked by", + "state": { + "contact_not_blocked": "Blocked by external contact", + "control_method": "Control method does not allow cooling", + "demand": "No cooling demand", + "dtc": "Cooling fault active", + "exponential_backoff": "Waiting for restart delay", + "heat_cool_delay": "Waiting for heating to cooling delay", + "indoor_unit_connected": "Indoor unit not connected", + "inside_temperature": "Room not warmer than target", + "none": "Not blocked", + "outside_air_temperature": "Outside temperature too low", + "water_temperature": "Water not warmer than cooling curve", + "water_to_air": "Air not warmer than water" + } + }, + "cooling_conditions_met": { + "name": "Cooling conditions met", + "unit_of_measurement": "of 9" + }, + "cooling_pause_reason": { + "name": "Cooling pause reason", + "state": { + "contact_blocked": "Blocked by external contact", + "demand": "No cooling demand", + "heat_pump_control": "Paused for another function", + "none": "Not paused", + "outside_colder_than_water_temperature": "Outside colder than water", + "outside_temperature_too_low": "Outside temperature too low", + "room_temperature_too_low": "Room temperature too low", + "water_temperature_below_dewpoint": "Water temperature below dew point", + "water_temperature_below_setpoint": "Water temperature colder than setpoint" + } + }, + "cooling_state": { + "name": "Cooling state", + "state": { + "active": "Cooling", + "idle": "Idle", + "paused": "Paused", + "pausing": "Pausing", + "standby": "[%key:common::state::standby%]", + "standby_run_cp": "Standby, pump running", + "starting": "Starting", + "stopped": "Stopped", + "stopping": "Stopping", + "waiting": "Waiting to start", + "water_check": "Checking water temperature" + } + }, + "cooling_stop_reason": { + "name": "Cooling stop reason", + "state": { + "contact_switch_over": "External contact switched over", + "control_method": "Stopped by control method", + "cooling_control": "Stopped by cooling control", + "dtc": "Stopped by diagnostics", + "heat_pump_control": "Stopped for another function", + "no_indoor_unit_communication": "No indoor unit communication", + "none": "Not stopped", + "thermostat_disabled": "Thermostat disabled" + } + }, + "cooling_wait_until": { + "name": "Cooling wait until" + }, "cop": { "name": "COP" }, @@ -139,6 +206,9 @@ "water_check": "Checking water temperature" } }, + "last_cooling_time": { + "name": "Last cooling" + }, "outside_temperature": { "name": "Outside temperature" }, diff --git a/tests/components/weheat/conftest.py b/tests/components/weheat/conftest.py index cd57febf5a7e6..3f1fbf656cfde 100644 --- a/tests/components/weheat/conftest.py +++ b/tests/components/weheat/conftest.py @@ -1,6 +1,7 @@ """Fixtures for Weheat tests.""" from collections.abc import Generator +from datetime import UTC, datetime from time import time from unittest.mock import AsyncMock, MagicMock, patch @@ -136,6 +137,26 @@ def mock_weheat_heat_pump_instance() -> MagicMock: mock_heat_pump_instance.compressor_rpm = 4500 mock_heat_pump_instance.compressor_percentage = 100 mock_heat_pump_instance.dhw_flow_volume = 1.12 + mock_heat_pump_instance.cooling_pause_reason_code = 4 + mock_heat_pump_instance.cooling_stop_reason_code = 0 + mock_heat_pump_instance.last_cooling_time = datetime( + 2025, 6, 21, 14, 30, tzinfo=UTC + ) + # The heat pump only reports a cooling state during a cooling cycle, so a + # heating one derives its cooling activity from the latched reasons instead. + mock_heat_pump_instance.cooling_state = None + mock_heat_pump_instance.cooling_activity = HeatPump.CoolingActivity.WAITING + mock_heat_pump_instance.cooling_pause_reason = ( + HeatPump.CoolingPauseReason.WATER_TEMPERATURE_BELOW_SETPOINT + ) + mock_heat_pump_instance.cooling_stop_reason = HeatPump.CoolingStopReason.NONE + mock_heat_pump_instance.cooling_backoff = 60 + mock_heat_pump_instance.cooling_available_from = datetime( + 2025, 6, 21, 15, 30, tzinfo=UTC + ) + mock_heat_pump_instance.cooling_start_conditions = { + name: name != "demand" for name in HeatPump.COOLING_START_CONDITION_BITS + } mock_heat_pump_instance.dhw_target_temperature = 55 mock_heat_pump_instance.dhw_control_method = HeatPump.DhwControlMethod.FIXED mock_heat_pump_instance.dhw_control_method_code = 1 diff --git a/tests/components/weheat/snapshots/test_sensor.ambr b/tests/components/weheat/snapshots/test_sensor.ambr index 201fe11c7db0d..ae3bc0dfc6bf2 100644 --- a/tests/components/weheat/snapshots/test_sensor.ambr +++ b/tests/components/weheat/snapshots/test_sensor.ambr @@ -359,6 +359,415 @@ 'state': '100', }) # --- +# name: test_all_entities[sensor.test_model_cooling_blocked_by-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + : list([ + 'none', + 'control_method', + 'dtc', + 'outside_air_temperature', + 'inside_temperature', + 'indoor_unit_connected', + 'water_to_air', + 'demand', + 'water_temperature', + 'contact_not_blocked', + 'exponential_backoff', + 'heat_cool_delay', + ]), + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.test_model_cooling_blocked_by', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Cooling blocked by', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Cooling blocked by', + 'platform': 'weheat', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'cooling_blocked_by', + 'unique_id': '0000-1111-2222-3333_cooling_blocked_by', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[sensor.test_model_cooling_blocked_by-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'enum', + : 'Test Model Cooling blocked by', + : list([ + 'none', + 'control_method', + 'dtc', + 'outside_air_temperature', + 'inside_temperature', + 'indoor_unit_connected', + 'water_to_air', + 'demand', + 'water_temperature', + 'contact_not_blocked', + 'exponential_backoff', + 'heat_cool_delay', + ]), + }), + 'context': , + 'entity_id': 'sensor.test_model_cooling_blocked_by', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'demand', + }) +# --- +# name: test_all_entities[sensor.test_model_cooling_conditions_met-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + : , + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.test_model_cooling_conditions_met', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Cooling conditions met', + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Cooling conditions met', + 'platform': 'weheat', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'cooling_conditions_met', + 'unique_id': '0000-1111-2222-3333_cooling_conditions_met', + 'unit_of_measurement': 'of 9', + }) +# --- +# name: test_all_entities[sensor.test_model_cooling_conditions_met-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'Test Model Cooling conditions met', + : , + : 'of 9', + }), + 'context': , + 'entity_id': 'sensor.test_model_cooling_conditions_met', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '8', + }) +# --- +# name: test_all_entities[sensor.test_model_cooling_pause_reason-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + : list([ + 'none', + 'room_temperature_too_low', + 'outside_temperature_too_low', + 'outside_colder_than_water_temperature', + 'water_temperature_below_setpoint', + 'heat_pump_control', + 'water_temperature_below_dewpoint', + 'contact_blocked', + 'demand', + ]), + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': , + 'entity_id': 'sensor.test_model_cooling_pause_reason', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Cooling pause reason', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Cooling pause reason', + 'platform': 'weheat', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'cooling_pause_reason', + 'unique_id': '0000-1111-2222-3333_cooling_pause_reason', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[sensor.test_model_cooling_pause_reason-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'enum', + : 'Test Model Cooling pause reason', + : list([ + 'none', + 'room_temperature_too_low', + 'outside_temperature_too_low', + 'outside_colder_than_water_temperature', + 'water_temperature_below_setpoint', + 'heat_pump_control', + 'water_temperature_below_dewpoint', + 'contact_blocked', + 'demand', + ]), + }), + 'context': , + 'entity_id': 'sensor.test_model_cooling_pause_reason', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'water_temperature_below_setpoint', + }) +# --- +# name: test_all_entities[sensor.test_model_cooling_state-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + : list([ + 'idle', + 'starting', + 'active', + 'stopping', + 'standby', + 'pausing', + 'water_check', + 'standby_run_cp', + 'paused', + 'stopped', + 'waiting', + ]), + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.test_model_cooling_state', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Cooling state', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Cooling state', + 'platform': 'weheat', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'cooling_state', + 'unique_id': '0000-1111-2222-3333_cooling_state', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[sensor.test_model_cooling_state-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'enum', + : 'Test Model Cooling state', + : list([ + 'idle', + 'starting', + 'active', + 'stopping', + 'standby', + 'pausing', + 'water_check', + 'standby_run_cp', + 'paused', + 'stopped', + 'waiting', + ]), + }), + 'context': , + 'entity_id': 'sensor.test_model_cooling_state', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'waiting', + }) +# --- +# name: test_all_entities[sensor.test_model_cooling_stop_reason-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': dict({ + : list([ + 'none', + 'dtc', + 'control_method', + 'no_indoor_unit_communication', + 'heat_pump_control', + 'cooling_control', + 'contact_switch_over', + 'thermostat_disabled', + ]), + }), + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': , + 'entity_id': 'sensor.test_model_cooling_stop_reason', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Cooling stop reason', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Cooling stop reason', + 'platform': 'weheat', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'cooling_stop_reason', + 'unique_id': '0000-1111-2222-3333_cooling_stop_reason', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[sensor.test_model_cooling_stop_reason-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'enum', + : 'Test Model Cooling stop reason', + : list([ + 'none', + 'dtc', + 'control_method', + 'no_indoor_unit_communication', + 'heat_pump_control', + 'cooling_control', + 'contact_switch_over', + 'thermostat_disabled', + ]), + }), + 'context': , + 'entity_id': 'sensor.test_model_cooling_stop_reason', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'none', + }) +# --- +# name: test_all_entities[sensor.test_model_cooling_wait_until-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.test_model_cooling_wait_until', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Cooling wait until', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Cooling wait until', + 'platform': 'weheat', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'cooling_wait_until', + 'unique_id': '0000-1111-2222-3333_cooling_wait_until', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[sensor.test_model_cooling_wait_until-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'timestamp', + : 'Test Model Cooling wait until', + }), + 'context': , + 'entity_id': 'sensor.test_model_cooling_wait_until', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- # name: test_all_entities[sensor.test_model_cop-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ @@ -1467,6 +1876,57 @@ 'state': '55', }) # --- +# name: test_all_entities[sensor.test_model_last_cooling-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.test_model_last_cooling', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Last cooling', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Last cooling', + 'platform': 'weheat', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'last_cooling_time', + 'unique_id': '0000-1111-2222-3333_last_cooling_time', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[sensor.test_model_last_cooling-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'timestamp', + : 'Test Model Last cooling', + }), + 'context': , + 'entity_id': 'sensor.test_model_last_cooling', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '2025-06-21T14:30:00+00:00', + }) +# --- # name: test_all_entities[sensor.test_model_output_power-entry] EntityRegistryEntrySnapshot({ 'aliases': list([ diff --git a/tests/components/weheat/test_sensor.py b/tests/components/weheat/test_sensor.py index 48c089761180b..c96f3f6e3a88f 100644 --- a/tests/components/weheat/test_sensor.py +++ b/tests/components/weheat/test_sensor.py @@ -5,8 +5,11 @@ import pytest from syrupy.assertion import SnapshotAssertion from weheat.abstractions.discovery import HeatPumpDiscovery +from weheat.abstractions.heat_pump import HeatPump -from homeassistant.const import STATE_UNKNOWN, Platform +from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN +from homeassistant.components.weheat.sensor import COOLING_CONDITIONS_NOT_COUNTED +from homeassistant.const import ATTR_UNIT_OF_MEASUREMENT, STATE_UNKNOWN, Platform from homeassistant.core import HomeAssistant from homeassistant.helpers import entity_registry as er @@ -33,7 +36,7 @@ async def test_all_entities( await snapshot_platform(hass, entity_registry, snapshot, mock_config_entry.entry_id) -@pytest.mark.parametrize(("has_dhw", "nr_of_entities"), [(False, 25), (True, 32)]) +@pytest.mark.parametrize(("has_dhw", "nr_of_entities"), [(False, 32), (True, 39)]) async def test_create_entities( hass: HomeAssistant, mock_weheat_discover: AsyncMock, @@ -95,3 +98,182 @@ async def test_an_unknown_dhw_control_method_keeps_the_sensor( assert ( hass.states.get("sensor.test_model_dhw_control_method").state == STATE_UNKNOWN ) + + +# The cooling sensors a heat pump that does not cool must not get. The cooling +# energy counters are not among them: those are reported either way, at zero. +COOLING_SENSORS = { + "sensor.test_model_cooling_state", + "sensor.test_model_cooling_blocked_by", + "sensor.test_model_cooling_conditions_met", + "sensor.test_model_cooling_wait_until", + "sensor.test_model_last_cooling", + "sensor.test_model_cooling_pause_reason", + "sensor.test_model_cooling_stop_reason", +} + + +CONDITIONS_COUNTED = len(HeatPump.COOLING_START_CONDITION_BITS) - len( + COOLING_CONDITIONS_NOT_COUNTED +) + + +def _start_conditions(*unmet: str) -> dict[str, bool]: + """Build a start condition mapping with the named conditions not met.""" + return {name: name not in unmet for name in HeatPump.COOLING_START_CONDITION_BITS} + + +@pytest.mark.parametrize( + ("unmet", "expected"), + [ + pytest.param((), "9", id="all_met"), + pytest.param(("demand",), "8", id="one_unmet"), + pytest.param(("outside_air_temperature", "exponential_backoff"), "7", id="two"), + pytest.param( + COOLING_CONDITIONS_NOT_COUNTED, "9", id="settings_are_not_counted" + ), + ], +) +@pytest.mark.usefixtures("mock_weheat_discover") +async def test_cooling_conditions_met( + hass: HomeAssistant, + mock_weheat_heat_pump: AsyncMock, + mock_config_entry: MockConfigEntry, + unmet: tuple[str, ...], + expected: str, +) -> None: + """Test how many start conditions are met is counted as the portal counts.""" + mock_weheat_heat_pump.cooling_start_conditions = _start_conditions(*unmet) + + with patch("homeassistant.components.weheat.PLATFORMS", [Platform.SENSOR]): + await setup_integration(hass, mock_config_entry) + + state = hass.states.get("sensor.test_model_cooling_conditions_met") + + assert state.state == expected + assert state.attributes[ATTR_UNIT_OF_MEASUREMENT] == f"of {CONDITIONS_COUNTED}" + + +@pytest.mark.parametrize( + ("cooling_state", "heat_pump_state"), + [ + pytest.param(HeatPump.CoolingState.ACTIVE, HeatPump.State.COOLING, id="active"), + pytest.param(HeatPump.CoolingState.IDLE, HeatPump.State.COOLING, id="idle"), + # the heat pump reports the water check as a state of its own, so the + # overall state is not cooling while the cooling cycle still is + pytest.param( + HeatPump.CoolingState.WATER_CHECK, + HeatPump.State.WATER_CHECK, + id="water_check", + ), + ], +) +@pytest.mark.usefixtures("mock_weheat_discover") +async def test_cooling_conditions_met_is_unknown_while_cooling( + hass: HomeAssistant, + mock_weheat_heat_pump: AsyncMock, + mock_config_entry: MockConfigEntry, + cooling_state: HeatPump.CoolingState, + heat_pump_state: HeatPump.State, +) -> None: + """Test the count is not reported once a cooling cycle is running.""" + mock_weheat_heat_pump.heat_pump_state = heat_pump_state + mock_weheat_heat_pump.cooling_state = cooling_state + mock_weheat_heat_pump.cooling_start_conditions = _start_conditions("demand") + + with patch("homeassistant.components.weheat.PLATFORMS", [Platform.SENSOR]): + await setup_integration(hass, mock_config_entry) + + assert ( + hass.states.get("sensor.test_model_cooling_conditions_met").state + == STATE_UNKNOWN + ) + + +@pytest.mark.parametrize( + ("sensor", "attribute", "stale"), + [ + pytest.param( + "cooling_pause_reason", + "cooling_pause_reason", + HeatPump.CoolingPauseReason.ROOM_TEMPERATURE_TOO_LOW, + id="pause_reason", + ), + pytest.param( + "cooling_stop_reason", + "cooling_stop_reason", + HeatPump.CoolingStopReason.HEAT_PUMP_CONTROL, + id="stop_reason", + ), + pytest.param( + "cooling_blocked_by", + "cooling_start_conditions", + dict.fromkeys(HeatPump.COOLING_START_CONDITION_BITS, False), + id="blocked_by", + ), + ], +) +@pytest.mark.usefixtures("mock_weheat_discover") +async def test_stale_cooling_reasons_are_not_reported_while_cooling( + hass: HomeAssistant, + mock_weheat_heat_pump: AsyncMock, + mock_config_entry: MockConfigEntry, + sensor: str, + attribute: str, + stale: object, +) -> None: + """Test what held cooling off is not reported once a cycle is running.""" + mock_weheat_heat_pump.heat_pump_state = HeatPump.State.COOLING + mock_weheat_heat_pump.cooling_state = HeatPump.CoolingState.ACTIVE + setattr(mock_weheat_heat_pump, attribute, stale) + + with patch("homeassistant.components.weheat.PLATFORMS", [Platform.SENSOR]): + await setup_integration(hass, mock_config_entry) + + assert hass.states.get(f"sensor.test_model_{sensor}").state == "none" + + +@pytest.mark.usefixtures("mock_weheat_discover") +async def test_a_heat_pump_without_cooling_gets_no_cooling_sensors( + hass: HomeAssistant, + mock_weheat_heat_pump: AsyncMock, + mock_config_entry: MockConfigEntry, +) -> None: + """Test a heat pump that does not cool gets no cooling sensors at all.""" + mock_weheat_heat_pump.cooling_activity = None + + with patch("homeassistant.components.weheat.PLATFORMS", [Platform.SENSOR]): + await setup_integration(hass, mock_config_entry) + + assert [ + entity_id + for entity_id in hass.states.async_entity_ids(SENSOR_DOMAIN) + if entity_id in COOLING_SENSORS + ] == [] + + +@pytest.mark.usefixtures("mock_weheat_discover") +async def test_cooling_without_start_conditions( + hass: HomeAssistant, + mock_weheat_heat_pump: AsyncMock, + mock_config_entry: MockConfigEntry, +) -> None: + """Test a cooling heat pump that reports no start conditions keeps its sensors.""" + mock_weheat_heat_pump.cooling_start_conditions = None + + with patch("homeassistant.components.weheat.PLATFORMS", [Platform.SENSOR]): + await setup_integration(hass, mock_config_entry) + + assert ( + hass.states.get("sensor.test_model_cooling_blocked_by").state == STATE_UNKNOWN + ) + assert ( + hass.states.get("sensor.test_model_cooling_conditions_met").state + == STATE_UNKNOWN + ) + assert ( + hass.states.get("sensor.test_model_cooling_wait_until").state == STATE_UNKNOWN + ) + assert ( + hass.states.get("sensor.test_model_cooling_pause_reason").state != STATE_UNKNOWN + ) From 3df4460a5dd9846e1a285aeee1574339deb2a110 Mon Sep 17 00:00:00 2001 From: Markus Tuominen <3738613+Markus98@users.noreply.github.com> Date: Mon, 7 Sep 2026 16:55:37 +0300 Subject: [PATCH 21/26] Fix lingering tasks in insteon properties and config tests (#181555) --- tests/components/insteon/mock_devices.py | 3 ++- tests/components/insteon/test_api_aldb.py | 16 ---------------- tests/components/insteon/test_api_config.py | 3 --- tests/components/insteon/test_api_properties.py | 6 ++++-- tests/components/insteon/test_api_scenes.py | 12 ------------ 5 files changed, 6 insertions(+), 34 deletions(-) diff --git a/tests/components/insteon/mock_devices.py b/tests/components/insteon/mock_devices.py index 05db45d00ac42..732829098db8d 100644 --- a/tests/components/insteon/mock_devices.py +++ b/tests/components/insteon/mock_devices.py @@ -138,7 +138,8 @@ def fill_aldb(self, address, records): device = self._devices[Address(address)] aldb_records = dict_to_aldb_record(records) - device.aldb.load_saved_records(ALDBStatus.LOADED, aldb_records) + with patch("pyinsteon.aldb.aldb_base.publish_topic", MagicMock()): + device.aldb.load_saved_records(ALDBStatus.LOADED, aldb_records) def fill_properties(self, address, props_dict): """Fill the operating flags and extended properties of a device.""" diff --git a/tests/components/insteon/test_api_aldb.py b/tests/components/insteon/test_api_aldb.py index 5060808db2b8b..dcac95ac38a4c 100644 --- a/tests/components/insteon/test_api_aldb.py +++ b/tests/components/insteon/test_api_aldb.py @@ -82,8 +82,6 @@ def _aldb_dict(mem_addr): } -# This tests needs to be adjusted to remove lingering tasks -@pytest.mark.parametrize("expected_lingering_tasks", [True]) async def test_get_aldb( hass: HomeAssistant, hass_ws_client: WebSocketGenerator, aldb_data ) -> None: @@ -100,8 +98,6 @@ async def test_get_aldb( assert len(result) == 5 -# This tests needs to be adjusted to remove lingering tasks -@pytest.mark.parametrize("expected_lingering_tasks", [True]) async def test_change_aldb_record( hass: HomeAssistant, hass_ws_client: WebSocketGenerator, aldb_data ) -> None: @@ -125,8 +121,6 @@ async def test_change_aldb_record( _compare_records(rec, change_rec) -# This tests needs to be adjusted to remove lingering tasks -@pytest.mark.parametrize("expected_lingering_tasks", [True]) async def test_create_aldb_record( hass: HomeAssistant, hass_ws_client: WebSocketGenerator, aldb_data ) -> None: @@ -150,8 +144,6 @@ async def test_create_aldb_record( _compare_records(rec, new_rec) -# This tests needs to be adjusted to remove lingering tasks -@pytest.mark.parametrize("expected_lingering_tasks", [True]) async def test_write_aldb( hass: HomeAssistant, hass_ws_client: WebSocketGenerator, aldb_data ) -> None: @@ -173,8 +165,6 @@ async def test_write_aldb( assert devices.async_save.call_count == 1 -# This tests needs to be adjusted to remove lingering tasks -@pytest.mark.parametrize("expected_lingering_tasks", [True]) async def test_load_aldb( hass: HomeAssistant, hass_ws_client: WebSocketGenerator, aldb_data ) -> None: @@ -195,8 +185,6 @@ async def test_load_aldb( assert devices.async_save.call_count == 1 -# This tests needs to be adjusted to remove lingering tasks -@pytest.mark.parametrize("expected_lingering_tasks", [True]) async def test_reset_aldb( hass: HomeAssistant, hass_ws_client: WebSocketGenerator, aldb_data ) -> None: @@ -228,8 +216,6 @@ async def test_reset_aldb( assert not devices["33.33.33"].aldb.pending_changes -# This tests needs to be adjusted to remove lingering tasks -@pytest.mark.parametrize("expected_lingering_tasks", [True]) async def test_default_links( hass: HomeAssistant, hass_ws_client: WebSocketGenerator, aldb_data ) -> None: @@ -305,8 +291,6 @@ async def test_notify_on_aldb_record_added( assert msg["event"]["type"] == "record_loaded" -# This tests needs to be adjusted to remove lingering tasks -@pytest.mark.parametrize("expected_lingering_tasks", [True]) async def test_bad_address( hass: HomeAssistant, hass_ws_client: WebSocketGenerator, aldb_data ) -> None: diff --git a/tests/components/insteon/test_api_config.py b/tests/components/insteon/test_api_config.py index b3eb5e302929d..a5017c496da7c 100644 --- a/tests/components/insteon/test_api_config.py +++ b/tests/components/insteon/test_api_config.py @@ -1,6 +1,5 @@ """Test the Insteon APIs for configuring the integration.""" -import asyncio from unittest.mock import patch from homeassistant.components import insteon @@ -406,7 +405,6 @@ async def test_get_broken_links( await devices.async_load() aldb_data = await async_load_json_object_fixture(hass, "aldb_data.json", DOMAIN) devices.fill_aldb("33.33.33", aldb_data) - await asyncio.sleep(1) with patch.object(insteon.api.config, "devices", devices): await ws_client.send_json({ID: 2, TYPE: "insteon/config/get_broken_links"}) msg = await ws_client.receive_json() @@ -445,4 +443,3 @@ async def test_get_unknown_devices( assert msg["success"] assert len(msg["result"]) == 1 - await asyncio.sleep(0.1) diff --git a/tests/components/insteon/test_api_properties.py b/tests/components/insteon/test_api_properties.py index b792066271da8..2c6da42382584 100644 --- a/tests/components/insteon/test_api_properties.py +++ b/tests/components/insteon/test_api_properties.py @@ -1,7 +1,7 @@ """Test the Insteon properties APIs.""" from typing import Any -from unittest.mock import AsyncMock, patch +from unittest.mock import AsyncMock, MagicMock, patch from pyinsteon.config import MOMENTARY_DELAY, RELAY_MODE, TOGGLE_BUTTON from pyinsteon.config.extended_property import ExtendedProperty @@ -125,7 +125,9 @@ async def test_get_read_only_properties( mock_read_only = ExtendedProperty( "44.44.44", "mock_read_only", bool, is_read_only=True ) - mock_read_only.set_value(False) + # Publishing the change would spawn status handler tasks that outlive the test + with patch("pyinsteon.subscriber_base.publish_topic", MagicMock()): + mock_read_only.set_value(False) ws_client, devices = await _setup( hass, hass_ws_client, "44.44.44", iolinc_properties_data diff --git a/tests/components/insteon/test_api_scenes.py b/tests/components/insteon/test_api_scenes.py index 14001e0495d7e..22ee1b140bbe2 100644 --- a/tests/components/insteon/test_api_scenes.py +++ b/tests/components/insteon/test_api_scenes.py @@ -64,8 +64,6 @@ async def _setup( return ws_client, devices -# This tests needs to be adjusted to remove lingering tasks -@pytest.mark.parametrize("expected_lingering_tasks", [True]) async def test_get_scenes( hass: HomeAssistant, hass_ws_client: WebSocketGenerator, scene_data: JsonArrayType ) -> None: @@ -80,8 +78,6 @@ async def test_get_scenes( assert len(result["20"]) == 3 -# This tests needs to be adjusted to remove lingering tasks -@pytest.mark.parametrize("expected_lingering_tasks", [True]) async def test_get_scene( hass: HomeAssistant, hass_ws_client: WebSocketGenerator, scene_data: JsonArrayType ) -> None: @@ -95,8 +91,6 @@ async def test_get_scene( assert len(result["devices"]) == 3 -# This tests needs to be adjusted to remove lingering tasks -@pytest.mark.parametrize("expected_lingering_tasks", [True]) @pytest.mark.usefixtures("remove_json") async def test_save_scene( hass: HomeAssistant, @@ -130,8 +124,6 @@ async def test_save_scene( assert result["scene_id"] == 20 -# This tests needs to be adjusted to remove lingering tasks -@pytest.mark.parametrize("expected_lingering_tasks", [True]) @pytest.mark.usefixtures("remove_json") async def test_save_new_scene( hass: HomeAssistant, @@ -165,8 +157,6 @@ async def test_save_new_scene( assert result["scene_id"] == 21 -# This tests needs to be adjusted to remove lingering tasks -@pytest.mark.parametrize("expected_lingering_tasks", [True]) @pytest.mark.usefixtures("remove_json") async def test_save_scene_error( hass: HomeAssistant, @@ -200,8 +190,6 @@ async def test_save_scene_error( assert result["scene_id"] == 20 -# This tests needs to be adjusted to remove lingering tasks -@pytest.mark.parametrize("expected_lingering_tasks", [True]) @pytest.mark.usefixtures("remove_json") async def test_delete_scene( hass: HomeAssistant, From d048e3f86a6d2be13d26b0359968f4d3d1542b4b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 7 Sep 2026 15:58:18 +0200 Subject: [PATCH 22/26] Update zizmor (#181494) Co-authored-by: Ariel Ebersberger --- .../actions/restore-or-build-venv/action.yml | 4 +- .github/workflows/builder.yml | 4 +- .github/workflows/ci.yaml | 46 +++++++++---------- .pre-commit-config.yaml | 2 +- requirements_test_pre_commit.txt | 2 +- 5 files changed, 29 insertions(+), 29 deletions(-) diff --git a/.github/actions/restore-or-build-venv/action.yml b/.github/actions/restore-or-build-venv/action.yml index e9955c5a2cd79..969bfbcf54bf5 100644 --- a/.github/actions/restore-or-build-venv/action.yml +++ b/.github/actions/restore-or-build-venv/action.yml @@ -36,7 +36,7 @@ runs: steps: - name: Set up uv and managed Python id: python - uses: ./.github/actions/setup-uv-python + uses: $/.github/actions/setup-uv-python with: uv-version: ${{ inputs.uv-version }} python-version: ${{ inputs.python-version }} @@ -73,7 +73,7 @@ runs: # timeout instead of a per-step cap. - name: Install additional OS dependencies if: steps.cache-venv.outputs.cache-hit != 'true' - uses: ./.github/actions/cache-apt-packages + uses: $/.github/actions/cache-apt-packages with: packages: >- bluez diff --git a/.github/workflows/builder.yml b/.github/workflows/builder.yml index 80918cc490cc6..2f522c6a73f50 100644 --- a/.github/workflows/builder.yml +++ b/.github/workflows/builder.yml @@ -278,7 +278,7 @@ jobs: name: Run E2E tests on base images if: github.repository_owner == 'home-assistant' needs: ["init", "build_base"] - uses: ./.github/workflows/e2e-tests.yml + uses: $/.github/workflows/e2e-tests.yml with: version: ${{ needs.init.outputs.version }} image_prefixes: ${{ needs.init.outputs.architectures }} @@ -287,7 +287,7 @@ jobs: name: Run E2E tests on machine images if: github.repository_owner == 'home-assistant' needs: ["init", "build_machine"] - uses: ./.github/workflows/e2e-tests.yml + uses: $/.github/workflows/e2e-tests.yml with: version: ${{ needs.init.outputs.version }} image_prefixes: ${{ needs.init.outputs.machines }} diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 377cc23f6cc41..e8b5781f18bc3 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -373,7 +373,7 @@ jobs: persist-credentials: false - name: Set up Python ${{ matrix.python-version }} and build venv id: python - uses: ./.github/actions/restore-or-build-venv + uses: $/.github/actions/restore-or-build-venv with: uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ matrix.python-version }} @@ -417,13 +417,13 @@ jobs: persist-credentials: false - name: Install additional OS dependencies timeout-minutes: 10 - uses: ./.github/actions/cache-apt-packages + uses: $/.github/actions/cache-apt-packages with: packages: libturbojpeg version: ${{ env.APT_CACHE_VERSION }} - name: Set up Python and restore venv id: python - uses: ./.github/actions/restore-or-build-venv + uses: $/.github/actions/restore-or-build-venv with: uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ needs.info.outputs.default_python }} @@ -454,7 +454,7 @@ jobs: persist-credentials: false - name: Set up Python and restore venv id: python - uses: ./.github/actions/restore-or-build-venv + uses: $/.github/actions/restore-or-build-venv with: uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ needs.info.outputs.default_python }} @@ -484,7 +484,7 @@ jobs: persist-credentials: false - name: Set up Python id: python - uses: ./.github/actions/setup-uv-python + uses: $/.github/actions/setup-uv-python with: uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ needs.info.outputs.default_python }} @@ -510,7 +510,7 @@ jobs: persist-credentials: false - name: Set up Python id: python - uses: ./.github/actions/setup-uv-python + uses: $/.github/actions/setup-uv-python with: uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ needs.info.outputs.default_python }} @@ -565,7 +565,7 @@ jobs: persist-credentials: false - name: Set up Python ${{ matrix.python-version }} and restore venv id: python - uses: ./.github/actions/restore-or-build-venv + uses: $/.github/actions/restore-or-build-venv with: uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ matrix.python-version }} @@ -610,7 +610,7 @@ jobs: persist-credentials: false - name: Set up Python and restore venv id: python - uses: ./.github/actions/restore-or-build-venv + uses: $/.github/actions/restore-or-build-venv with: uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ needs.info.outputs.default_python }} @@ -657,7 +657,7 @@ jobs: persist-credentials: false - name: Set up Python and restore venv id: python - uses: ./.github/actions/restore-or-build-venv + uses: $/.github/actions/restore-or-build-venv with: uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ needs.info.outputs.default_python }} @@ -708,7 +708,7 @@ jobs: echo "key=mypy-${MYPY_CACHE_VERSION}-${mypy_version}-${HA_SHORT_VERSION}-$(date -u '+%Y-%m-%dT%H:%M:%s')" >> $GITHUB_OUTPUT - name: Set up Python and restore venv id: python - uses: ./.github/actions/restore-or-build-venv + uses: $/.github/actions/restore-or-build-venv with: uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ needs.info.outputs.default_python }} @@ -763,7 +763,7 @@ jobs: persist-credentials: false - name: Install additional OS dependencies timeout-minutes: 10 - uses: ./.github/actions/cache-apt-packages + uses: $/.github/actions/cache-apt-packages with: packages: >- bluez @@ -773,7 +773,7 @@ jobs: execute_install_scripts: true - name: Set up Python and restore venv id: python - uses: ./.github/actions/restore-or-build-venv + uses: $/.github/actions/restore-or-build-venv with: uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ needs.info.outputs.default_python }} @@ -858,7 +858,7 @@ jobs: persist-credentials: false - name: Install additional OS dependencies timeout-minutes: 10 - uses: ./.github/actions/cache-apt-packages + uses: $/.github/actions/cache-apt-packages with: packages: >- bluez @@ -869,7 +869,7 @@ jobs: execute_install_scripts: true - name: Set up Python ${{ matrix.python-version }} and restore venv id: python - uses: ./.github/actions/restore-or-build-venv + uses: $/.github/actions/restore-or-build-venv with: uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ matrix.python-version }} @@ -991,7 +991,7 @@ jobs: persist-credentials: false - name: Install additional OS dependencies timeout-minutes: 10 - uses: ./.github/actions/cache-apt-packages + uses: $/.github/actions/cache-apt-packages with: packages: >- bluez @@ -1003,7 +1003,7 @@ jobs: execute_install_scripts: true - name: Set up Python ${{ matrix.python-version }} and restore venv id: python - uses: ./.github/actions/restore-or-build-venv + uses: $/.github/actions/restore-or-build-venv with: uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ matrix.python-version }} @@ -1132,7 +1132,7 @@ jobs: persist-credentials: false - name: Install additional OS dependencies timeout-minutes: 10 - uses: ./.github/actions/cache-apt-packages + uses: $/.github/actions/cache-apt-packages with: packages: >- bluez @@ -1145,13 +1145,13 @@ jobs: run: sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh -y - name: Cache PostgreSQL development headers timeout-minutes: 10 - uses: ./.github/actions/cache-apt-packages + uses: $/.github/actions/cache-apt-packages with: packages: postgresql-server-dev-14 version: ${{ env.APT_CACHE_VERSION }} - name: Set up Python ${{ matrix.python-version }} and restore venv id: python - uses: ./.github/actions/restore-or-build-venv + uses: $/.github/actions/restore-or-build-venv with: uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ matrix.python-version }} @@ -1266,7 +1266,7 @@ jobs: persist-credentials: false - name: Install additional OS dependencies timeout-minutes: 10 - uses: ./.github/actions/cache-apt-packages + uses: $/.github/actions/cache-apt-packages with: packages: >- bluez @@ -1277,7 +1277,7 @@ jobs: execute_install_scripts: true - name: Set up Python ${{ matrix.python-version }} and restore venv id: python - uses: ./.github/actions/restore-or-build-venv + uses: $/.github/actions/restore-or-build-venv with: uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ matrix.python-version }} @@ -1409,7 +1409,7 @@ jobs: persist-credentials: false - name: Install additional OS dependencies timeout-minutes: 10 - uses: ./.github/actions/cache-apt-packages + uses: $/.github/actions/cache-apt-packages with: packages: >- bluez @@ -1420,7 +1420,7 @@ jobs: execute_install_scripts: true - name: Set up Python ${{ matrix.python-version }} and restore venv id: python - uses: ./.github/actions/restore-or-build-venv + uses: $/.github/actions/restore-or-build-venv with: uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ matrix.python-version }} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4d6bfac215d2f..b54d5e287cf24 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -18,7 +18,7 @@ repos: exclude_types: [csv, json, html] exclude: ^tests/fixtures/|homeassistant/generated/|tests/components/.*/snapshots/ - repo: https://github.com/zizmorcore/zizmor-pre-commit - rev: v1.29.0 + rev: v1.30.0 hooks: - id: zizmor args: diff --git a/requirements_test_pre_commit.txt b/requirements_test_pre_commit.txt index dd2c429e2960e..09f7f2ec9ed37 100644 --- a/requirements_test_pre_commit.txt +++ b/requirements_test_pre_commit.txt @@ -3,4 +3,4 @@ codespell==2.4.3 ruff==0.16.5 yamllint==1.38.0 -zizmor==1.29.0 +zizmor==1.30.0 From 15fd24596676cb27f40f409f20a0b126afba1189 Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Mon, 7 Sep 2026 10:06:08 -0400 Subject: [PATCH 23/26] Fix Vizio soundbars requiring authentication (#181556) --- homeassistant/components/vizio/coordinator.py | 6 +++--- tests/components/vizio/test_init.py | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/vizio/coordinator.py b/homeassistant/components/vizio/coordinator.py index 939d067cc2019..140f9aba9759d 100644 --- a/homeassistant/components/vizio/coordinator.py +++ b/homeassistant/components/vizio/coordinator.py @@ -151,10 +151,10 @@ def __init__( update_interval=SCAN_INTERVAL, ) self.device = device - # Modern firmware bundles power/input/app state into one endpoint; + # Modern TV firmware bundles power/input/app state into one endpoint; # firmware without it never gains it, so probe only until the first - # URI_NOT_FOUND response. - self._use_state_extended = True + # URI_NOT_FOUND response. Audio devices do not support this endpoint. + self._use_state_extended = device.profile.has_inputs @override async def _async_setup(self) -> None: diff --git a/tests/components/vizio/test_init.py b/tests/components/vizio/test_init.py index d0aaee2091106..62fcc12a9abcd 100644 --- a/tests/components/vizio/test_init.py +++ b/tests/components/vizio/test_init.py @@ -13,6 +13,7 @@ VizioConnectionError, VizioNotFoundError, ) +from vizaio.profiles import SOUNDBAR_PROFILE from homeassistant.components.media_player import ( DOMAIN as MEDIA_PLAYER_DOMAIN, @@ -226,6 +227,23 @@ async def test_state_extended_polling( mock_vizio.get_current_app_config.assert_not_called() +@pytest.mark.usefixtures("vizio_connect") +async def test_soundbar_does_not_poll_state_extended( + hass: HomeAssistant, + mock_speaker_config_entry: MockConfigEntry, + mock_vizio: AsyncMock, +) -> None: + """Test soundbars use the unauthenticated power endpoint.""" + mock_vizio.profile = SOUNDBAR_PROFILE + mock_vizio.get_state_extended.side_effect = VizioAuthError("token required") + + await setup_integration(hass, mock_speaker_config_entry) + + mock_vizio.get_state_extended.assert_not_called() + mock_vizio.get_power_state.assert_called_once() + assert not hass.config_entries.flow.async_progress_by_handler(DOMAIN) + + @pytest.mark.usefixtures("vizio_connect") async def test_state_extended_power_off( hass: HomeAssistant, From c6b9d7080e9812270d5e7bd0263ffd6f5036534d Mon Sep 17 00:00:00 2001 From: Josef Zweck Date: Mon, 7 Sep 2026 16:23:50 +0200 Subject: [PATCH 24/26] Handle reauth_successful centrally (#181154) Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- homeassistant/components/abode/strings.json | 1 - homeassistant/components/accuweather/strings.json | 3 +-- homeassistant/components/actron_air/strings.json | 1 - homeassistant/components/airobot/strings.json | 1 - homeassistant/components/airos/strings.json | 1 - homeassistant/components/airpatrol/strings.json | 1 - homeassistant/components/airvisual/strings.json | 3 +-- homeassistant/components/airvisual_pro/strings.json | 3 +-- .../components/aladdin_connect/strings.json | 1 - homeassistant/components/alexa_devices/strings.json | 1 - .../components/androidtv_remote/strings.json | 1 - homeassistant/components/anthropic/strings.json | 3 +-- homeassistant/components/aosmith/strings.json | 3 +-- homeassistant/components/apple_tv/strings.json | 1 - homeassistant/components/aquacell/strings.json | 3 +-- homeassistant/components/aqvify/strings.json | 1 - .../components/aseko_pool_live/strings.json | 1 - homeassistant/components/august/strings.json | 3 +-- .../components/aussie_broadband/strings.json | 3 +-- homeassistant/components/autarco/strings.json | 3 +-- homeassistant/components/autoskope/strings.json | 3 +-- homeassistant/components/awair/strings.json | 1 - homeassistant/components/axis/strings.json | 1 - homeassistant/components/azure_storage/strings.json | 3 +-- homeassistant/components/backblaze_b2/strings.json | 3 +-- homeassistant/components/blebox/strings.json | 1 - homeassistant/components/blink/strings.json | 3 +-- homeassistant/components/blue_current/strings.json | 1 - homeassistant/components/bosch_alarm/strings.json | 3 +-- homeassistant/components/bosch_shc/strings.json | 3 +-- homeassistant/components/braviatv/strings.json | 3 +-- homeassistant/components/bring/strings.json | 1 - homeassistant/components/brunt/strings.json | 3 +-- homeassistant/components/caldav/strings.json | 3 +-- homeassistant/components/centriconnect/strings.json | 1 - homeassistant/components/cloudflare/strings.json | 3 --- homeassistant/components/co2signal/strings.json | 3 --- homeassistant/components/comelit/strings.json | 1 - homeassistant/components/compit/strings.json | 3 --- homeassistant/components/cookidoo/strings.json | 1 - homeassistant/components/cync/strings.json | 1 - .../components/data_grand_lyon/strings.json | 3 +-- homeassistant/components/deluge/strings.json | 3 +-- .../components/devolo_home_control/strings.json | 3 +-- .../components/devolo_home_network/strings.json | 3 +-- homeassistant/components/discord/strings.json | 3 +-- homeassistant/components/discovergy/strings.json | 3 +-- homeassistant/components/doorbird/strings.json | 1 - homeassistant/components/dormakaba_dkey/strings.json | 1 - homeassistant/components/dropbox/strings.json | 1 - homeassistant/components/ecobee/strings.json | 3 --- homeassistant/components/ecovacs/strings.json | 3 +-- homeassistant/components/efergy/strings.json | 3 +-- homeassistant/components/egauge/strings.json | 3 +-- homeassistant/components/electric_kiwi/strings.json | 3 +-- homeassistant/components/elmax/strings.json | 3 +-- homeassistant/components/energyid/strings.json | 3 +-- homeassistant/components/esphome/strings.json | 1 - homeassistant/components/ezviz/strings.json | 1 - homeassistant/components/fibaro/strings.json | 3 +-- homeassistant/components/firefly_iii/strings.json | 3 +-- homeassistant/components/fitbit/strings.json | 1 - homeassistant/components/fluss/strings.json | 3 +-- homeassistant/components/freshr/strings.json | 3 +-- .../components/fressnapf_tracker/strings.json | 3 +-- homeassistant/components/fritz/strings.json | 3 +-- homeassistant/components/fritzbox/strings.json | 3 +-- .../components/frontier_silicon/strings.json | 1 - homeassistant/components/fujitsu_fglair/strings.json | 3 +-- homeassistant/components/fumis/strings.json | 3 +-- homeassistant/components/fyta/strings.json | 3 +-- homeassistant/components/gatus/strings.json | 3 +-- .../components/gentex_homelink/strings.json | 1 - homeassistant/components/ghost/strings.json | 1 - homeassistant/components/google/strings.json | 1 - .../components/google_assistant_sdk/strings.json | 3 +-- homeassistant/components/google_drive/strings.json | 1 - .../google_generative_ai_conversation/strings.json | 3 +-- homeassistant/components/google_health/strings.json | 1 - homeassistant/components/google_mail/strings.json | 1 - homeassistant/components/google_photos/strings.json | 1 - homeassistant/components/google_sheets/strings.json | 3 +-- homeassistant/components/google_tasks/strings.json | 1 - homeassistant/components/google_weather/strings.json | 3 +-- homeassistant/components/growatt_server/strings.json | 3 +-- homeassistant/components/habitica/strings.json | 1 - homeassistant/components/heos/strings.json | 1 - homeassistant/components/home_connect/strings.json | 1 - homeassistant/components/homeassistant/strings.json | 1 + homeassistant/components/homee/strings.json | 1 - .../components/homematicip_cloud/strings.json | 1 - homeassistant/components/homevolt/strings.json | 1 - homeassistant/components/honeywell/strings.json | 3 --- homeassistant/components/huawei_lte/strings.json | 1 - .../components/husqvarna_automower/strings.json | 1 - .../components/husqvarna_automower_ble/strings.json | 1 - homeassistant/components/huum/strings.json | 3 +-- homeassistant/components/hydrawise/strings.json | 3 +-- homeassistant/components/hyperion/strings.json | 3 +-- homeassistant/components/hypontech/strings.json | 1 - homeassistant/components/iaqualink/strings.json | 3 +-- homeassistant/components/imap/strings.json | 3 +-- homeassistant/components/immich/strings.json | 1 - homeassistant/components/imou/strings.json | 1 - homeassistant/components/incomfort/strings.json | 3 +-- homeassistant/components/intellifire/strings.json | 3 +-- homeassistant/components/ista_ecotrend/strings.json | 1 - homeassistant/components/isy994/strings.json | 4 +--- homeassistant/components/ituran/strings.json | 3 +-- homeassistant/components/jellyfin/strings.json | 3 +-- homeassistant/components/justnimbus/strings.json | 3 +-- homeassistant/components/jvc_projector/strings.json | 1 - homeassistant/components/karakeep/strings.json | 3 +-- homeassistant/components/kiosker/strings.json | 1 - homeassistant/components/lacrosse_view/strings.json | 3 +-- homeassistant/components/lamarzocco/strings.json | 3 +-- homeassistant/components/lametric/strings.json | 1 - homeassistant/components/letpot/strings.json | 3 +-- .../components/libre_hardware_monitor/strings.json | 3 +-- homeassistant/components/lidarr/strings.json | 3 +-- homeassistant/components/liebherr/strings.json | 3 +-- homeassistant/components/litterrobot/strings.json | 1 - homeassistant/components/llama_cpp/strings.json | 3 +-- homeassistant/components/lojack/strings.json | 3 +-- homeassistant/components/luci/strings.json | 3 +-- homeassistant/components/mastodon/strings.json | 1 - homeassistant/components/mcp/strings.json | 1 - homeassistant/components/mealie/strings.json | 1 - homeassistant/components/melcloud/strings.json | 3 +-- homeassistant/components/melcloud_home/strings.json | 1 - homeassistant/components/metoffice/strings.json | 3 +-- homeassistant/components/microbees/strings.json | 1 - homeassistant/components/miele/strings.json | 3 +-- homeassistant/components/mikrotik/strings.json | 3 +-- homeassistant/components/monzo/strings.json | 1 - homeassistant/components/motioneye/strings.json | 3 +-- homeassistant/components/motionmount/strings.json | 1 - homeassistant/components/mqtt/strings.json | 3 +-- homeassistant/components/mta/strings.json | 3 +-- .../components/music_assistant/strings.json | 1 - homeassistant/components/myuplink/strings.json | 3 +-- homeassistant/components/nam/strings.json | 1 - homeassistant/components/namecheapdns/strings.json | 3 +-- homeassistant/components/nanoleaf/strings.json | 1 - homeassistant/components/nest/strings.json | 1 - homeassistant/components/nextcloud/strings.json | 3 +-- homeassistant/components/nextdns/strings.json | 3 +-- homeassistant/components/nice_go/strings.json | 3 +-- .../nintendo_parental_controls/strings.json | 3 +-- homeassistant/components/notion/strings.json | 3 +-- homeassistant/components/nrgkick/strings.json | 1 - homeassistant/components/ntfy/strings.json | 3 +-- homeassistant/components/nut/strings.json | 1 - homeassistant/components/ohme/strings.json | 3 +-- homeassistant/components/ollama/strings.json | 3 +-- homeassistant/components/onedrive/strings.json | 1 - .../components/onedrive_for_business/strings.json | 1 - homeassistant/components/onvif/strings.json | 3 +-- .../components/openai_conversation/strings.json | 3 +-- homeassistant/components/opendisplay/strings.json | 1 - homeassistant/components/openevse/strings.json | 1 - .../components/openexchangerates/strings.json | 1 - homeassistant/components/opower/strings.json | 3 +-- homeassistant/components/osoenergy/strings.json | 3 +-- homeassistant/components/ouman_eh_800/strings.json | 3 +-- homeassistant/components/overkiz/strings.json | 1 - homeassistant/components/overseerr/strings.json | 3 +-- .../components/ovhcloud_ai_endpoints/strings.json | 3 +-- homeassistant/components/ovo_energy/strings.json | 3 --- homeassistant/components/paperless_ngx/strings.json | 3 +-- homeassistant/components/peblar/strings.json | 3 +-- homeassistant/components/philips_js/strings.json | 3 +-- homeassistant/components/pi_hole/strings.json | 3 +-- .../components/playstation_network/strings.json | 1 - homeassistant/components/point/strings.json | 1 - homeassistant/components/portainer/strings.json | 1 - homeassistant/components/powerfox/strings.json | 3 +-- homeassistant/components/powerfox_local/strings.json | 1 - homeassistant/components/powerwall/strings.json | 3 +-- homeassistant/components/prosegur/strings.json | 3 +-- homeassistant/components/proxmoxve/strings.json | 3 +-- homeassistant/components/pterodactyl/strings.json | 3 +-- homeassistant/components/purpleair/strings.json | 3 +-- homeassistant/components/pvoutput/strings.json | 3 +-- .../components/pvpc_hourly_pricing/strings.json | 3 +-- homeassistant/components/pyload/strings.json | 3 +-- homeassistant/components/radarr/strings.json | 3 +-- homeassistant/components/rainbird/strings.json | 3 +-- homeassistant/components/rehlko/strings.json | 3 +-- .../components/remember_the_milk/strings.json | 1 - homeassistant/components/renault/strings.json | 1 - homeassistant/components/reolink/strings.json | 1 - homeassistant/components/ring/strings.json | 3 +-- .../components/rituals_perfume_genie/strings.json | 3 +-- homeassistant/components/roborock/strings.json | 1 - .../components/ruckus_unleashed/strings.json | 3 +-- homeassistant/components/rympro/strings.json | 3 +-- homeassistant/components/samsungtv/strings.json | 3 +-- homeassistant/components/schlage/strings.json | 1 - homeassistant/components/sense/strings.json | 3 +-- homeassistant/components/sensibo/strings.json | 3 +-- homeassistant/components/senz/strings.json | 3 +-- homeassistant/components/sfr_box/strings.json | 1 - homeassistant/components/shelly/strings.json | 1 - homeassistant/components/skybell/strings.json | 3 +-- homeassistant/components/sleepiq/strings.json | 3 +-- homeassistant/components/sma/strings.json | 1 - homeassistant/components/smarla/strings.json | 1 - homeassistant/components/smartthings/strings.json | 3 +-- homeassistant/components/smarttub/strings.json | 3 +-- homeassistant/components/smlight/strings.json | 1 - homeassistant/components/smtp/strings.json | 3 +-- homeassistant/components/solarlog/strings.json | 3 +-- homeassistant/components/sonarr/strings.json | 1 - .../components/specialized_turbo/strings.json | 3 +-- homeassistant/components/splunk/strings.json | 1 - homeassistant/components/spotify/strings.json | 1 - homeassistant/components/steam_online/strings.json | 3 +-- homeassistant/components/surepetcare/strings.json | 3 +-- homeassistant/components/switcher_kis/strings.json | 3 +-- homeassistant/components/system_bridge/strings.json | 1 - homeassistant/components/tado/strings.json | 3 +-- homeassistant/components/tailscale/strings.json | 3 +-- homeassistant/components/tailwind/strings.json | 1 - homeassistant/components/tankerkoenig/strings.json | 3 +-- homeassistant/components/tautulli/strings.json | 3 +-- homeassistant/components/tedee/strings.json | 1 - homeassistant/components/telegram_bot/strings.json | 3 +-- homeassistant/components/teltonika/strings.json | 1 - homeassistant/components/tesla_fleet/strings.json | 3 +-- homeassistant/components/teslemetry/strings.json | 1 - homeassistant/components/tessie/strings.json | 3 +-- .../components/thethingsnetwork/strings.json | 3 +-- homeassistant/components/tibber/strings.json | 1 - homeassistant/components/tplink_omada/strings.json | 3 +-- homeassistant/components/traccar_server/strings.json | 3 +-- .../components/trafikverket_camera/strings.json | 3 +-- .../components/trafikverket_ferry/strings.json | 3 +-- .../components/trafikverket_train/strings.json | 3 +-- .../trafikverket_weatherstation/strings.json | 3 +-- homeassistant/components/transmission/strings.json | 3 +-- homeassistant/components/trmnl/strings.json | 1 - homeassistant/components/tuya/strings.json | 3 --- homeassistant/components/twitch/strings.json | 1 - homeassistant/components/uhoo/strings.json | 3 +-- homeassistant/components/unifi_access/strings.json | 3 +-- homeassistant/components/unifiprotect/strings.json | 1 - homeassistant/components/uptime_kuma/strings.json | 3 +-- homeassistant/components/velux/strings.json | 3 +-- homeassistant/components/verisure/strings.json | 3 +-- homeassistant/components/vesync/strings.json | 1 - homeassistant/components/vicare/strings.json | 1 - homeassistant/components/victron_ble/strings.json | 3 +-- homeassistant/components/victron_gx/strings.json | 1 - homeassistant/components/vistapool/strings.json | 3 +-- homeassistant/components/vizio/strings.json | 1 - homeassistant/components/vlc_telnet/strings.json | 1 - .../components/vodafone_station/strings.json | 1 - homeassistant/components/volvo/strings.json | 3 +-- homeassistant/components/wallbox/strings.json | 3 +-- homeassistant/components/waterfurnace/strings.json | 1 - homeassistant/components/watts/strings.json | 3 +-- homeassistant/components/wattwaechter/strings.json | 1 - homeassistant/components/webostv/strings.json | 1 - homeassistant/components/weheat/strings.json | 1 - homeassistant/components/whirlpool/strings.json | 3 +-- homeassistant/components/withings/strings.json | 1 - homeassistant/components/xbox/strings.json | 1 - homeassistant/components/xiaomi_miio/strings.json | 1 - homeassistant/components/yale/strings.json | 3 +-- .../components/yale_smart_alarm/strings.json | 3 +-- homeassistant/components/yalexs_ble/strings.json | 3 +-- homeassistant/components/yolink/strings.json | 3 +-- homeassistant/components/yoto/strings.json | 1 - homeassistant/components/youtube/strings.json | 1 - homeassistant/components/zonneplan/strings.json | 1 - homeassistant/config_entries.py | 4 ++-- tests/test_config_entries.py | 12 ++++++++++-- 278 files changed, 168 insertions(+), 449 deletions(-) diff --git a/homeassistant/components/abode/strings.json b/homeassistant/components/abode/strings.json index 39514b9e721af..f7a15dccf224b 100644 --- a/homeassistant/components/abode/strings.json +++ b/homeassistant/components/abode/strings.json @@ -1,7 +1,6 @@ { "config": { "abort": { - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_account": "You must authenticate with the same Abode account that was originally configured." }, "error": { diff --git a/homeassistant/components/accuweather/strings.json b/homeassistant/components/accuweather/strings.json index ac6d15bd4774c..026c367228ed2 100644 --- a/homeassistant/components/accuweather/strings.json +++ b/homeassistant/components/accuweather/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_location%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_location%]" }, "create_entry": { "default": "Some sensors are not enabled by default. You can enable them in the entity registry after the integration configuration." diff --git a/homeassistant/components/actron_air/strings.json b/homeassistant/components/actron_air/strings.json index b062a3f6c042b..240a20b7fadab 100644 --- a/homeassistant/components/actron_air/strings.json +++ b/homeassistant/components/actron_air/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "oauth2_error": "Failed to start authentication flow", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_account": "You must authenticate with the same Actron Air account that was originally configured." }, "error": { diff --git a/homeassistant/components/airobot/strings.json b/homeassistant/components/airobot/strings.json index f7e3374eb4aa6..42197dfc5984e 100644 --- a/homeassistant/components/airobot/strings.json +++ b/homeassistant/components/airobot/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_device": "Device ID does not match the existing configuration. Please use the correct device credentials." }, "error": { diff --git a/homeassistant/components/airos/strings.json b/homeassistant/components/airos/strings.json index 3fbd598f3679f..c662b067b9506 100644 --- a/homeassistant/components/airos/strings.json +++ b/homeassistant/components/airos/strings.json @@ -6,7 +6,6 @@ "discovery_failed": "Unable to start discovery, check logs for details", "listen_error": "Unable to start listening for devices", "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "Re-authentication should be used for the same device not a new one" }, "error": { diff --git a/homeassistant/components/airpatrol/strings.json b/homeassistant/components/airpatrol/strings.json index 126a0ad723a86..55f951e059cc9 100644 --- a/homeassistant/components/airpatrol/strings.json +++ b/homeassistant/components/airpatrol/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "Login credentials do not match the configured account" }, "error": { diff --git a/homeassistant/components/airvisual/strings.json b/homeassistant/components/airvisual/strings.json index dab90ed4d065a..96029fa6c3122 100644 --- a/homeassistant/components/airvisual/strings.json +++ b/homeassistant/components/airvisual/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_location%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_location%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/airvisual_pro/strings.json b/homeassistant/components/airvisual_pro/strings.json index 5591968f18d74..b7daa1fa19285 100644 --- a/homeassistant/components/airvisual_pro/strings.json +++ b/homeassistant/components/airvisual_pro/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/aladdin_connect/strings.json b/homeassistant/components/aladdin_connect/strings.json index 33f762d56ff27..1b1e194093dc2 100644 --- a/homeassistant/components/aladdin_connect/strings.json +++ b/homeassistant/components/aladdin_connect/strings.json @@ -5,7 +5,6 @@ "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "cloud_not_enabled": "Please make sure you run Home Assistant with `{default_config}` enabled in your configuration.yaml.", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_account": "You are authenticated with a different account than the one set up. Please authenticate with the configured account." }, "create_entry": { diff --git a/homeassistant/components/alexa_devices/strings.json b/homeassistant/components/alexa_devices/strings.json index 1b64778c5345b..0e866e0c84501 100644 --- a/homeassistant/components/alexa_devices/strings.json +++ b/homeassistant/components/alexa_devices/strings.json @@ -11,7 +11,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/androidtv_remote/strings.json b/homeassistant/components/androidtv_remote/strings.json index 5c67cf0a2cd45..5373d72784ac7 100644 --- a/homeassistant/components/androidtv_remote/strings.json +++ b/homeassistant/components/androidtv_remote/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "Please ensure you reconfigure against the same device." }, "error": { diff --git a/homeassistant/components/anthropic/strings.json b/homeassistant/components/anthropic/strings.json index 1916293e1e7ba..4cbd0e1d44071 100644 --- a/homeassistant/components/anthropic/strings.json +++ b/homeassistant/components/anthropic/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "authentication_error": "[%key:common::config_flow::error::invalid_auth%]", diff --git a/homeassistant/components/aosmith/strings.json b/homeassistant/components/aosmith/strings.json index ccfcba5bd8e26..2f715bdd4652b 100644 --- a/homeassistant/components/aosmith/strings.json +++ b/homeassistant/components/aosmith/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", diff --git a/homeassistant/components/apple_tv/strings.json b/homeassistant/components/apple_tv/strings.json index 02ef2b64481b5..786f0e7fc96c5 100644 --- a/homeassistant/components/apple_tv/strings.json +++ b/homeassistant/components/apple_tv/strings.json @@ -10,7 +10,6 @@ "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", "ipv6_not_supported": "IPv6 is not supported.", "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "setup_failed": "Failed to set up device.", "unknown": "[%key:common::config_flow::error::unknown%]" }, diff --git a/homeassistant/components/aquacell/strings.json b/homeassistant/components/aquacell/strings.json index 7b9efa0718038..43898f4344eaf 100644 --- a/homeassistant/components/aquacell/strings.json +++ b/homeassistant/components/aquacell/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/aqvify/strings.json b/homeassistant/components/aqvify/strings.json index 5bc97b1b2e51d..7a3b53f860d18 100644 --- a/homeassistant/components/aqvify/strings.json +++ b/homeassistant/components/aqvify/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The entered API key corresponds to a different account." }, "error": { diff --git a/homeassistant/components/aseko_pool_live/strings.json b/homeassistant/components/aseko_pool_live/strings.json index fbd2329d34003..d55264f371514 100644 --- a/homeassistant/components/aseko_pool_live/strings.json +++ b/homeassistant/components/aseko_pool_live/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The user identifier does not match the previous identifier" }, "error": { diff --git a/homeassistant/components/august/strings.json b/homeassistant/components/august/strings.json index 535301e3c9f22..c5934fdfcd813 100644 --- a/homeassistant/components/august/strings.json +++ b/homeassistant/components/august/strings.json @@ -3,8 +3,7 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_invalid_user": "Reauthenticate must use the same account.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "reauth_invalid_user": "Reauthenticate must use the same account." }, "create_entry": { "default": "[%key:common::config_flow::create_entry::authenticated%]" diff --git a/homeassistant/components/aussie_broadband/strings.json b/homeassistant/components/aussie_broadband/strings.json index 82f27dbef71d9..830e571c0126a 100644 --- a/homeassistant/components/aussie_broadband/strings.json +++ b/homeassistant/components/aussie_broadband/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "no_services_found": "No services were found for this account", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "no_services_found": "No services were found for this account" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/autarco/strings.json b/homeassistant/components/autarco/strings.json index b306e5c755d89..1ef01fec22f6c 100644 --- a/homeassistant/components/autarco/strings.json +++ b/homeassistant/components/autarco/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/autoskope/strings.json b/homeassistant/components/autoskope/strings.json index dc4421c0e18be..7ca834f2e253b 100644 --- a/homeassistant/components/autoskope/strings.json +++ b/homeassistant/components/autoskope/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/awair/strings.json b/homeassistant/components/awair/strings.json index b50be5121fb19..e4d09f3e0ad1f 100644 --- a/homeassistant/components/awair/strings.json +++ b/homeassistant/components/awair/strings.json @@ -4,7 +4,6 @@ "already_configured_account": "[%key:common::config_flow::abort::already_configured_account%]", "already_configured_device": "[%key:common::config_flow::abort::already_configured_device%]", "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]", "unreachable": "[%key:common::config_flow::error::cannot_connect%]" }, diff --git a/homeassistant/components/axis/strings.json b/homeassistant/components/axis/strings.json index 1431b050d8866..d4e480469fc85 100644 --- a/homeassistant/components/axis/strings.json +++ b/homeassistant/components/axis/strings.json @@ -5,7 +5,6 @@ "link_local_address": "Link local addresses are not supported", "no_serial_number": "Could not retrieve a serial number from the device. Please check device connectivity and try again.", "not_axis_device": "Discovered device not an Axis device", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The serial number of the device does not match the previous serial number" }, "error": { diff --git a/homeassistant/components/azure_storage/strings.json b/homeassistant/components/azure_storage/strings.json index cc57ae400b671..295daf396f72f 100644 --- a/homeassistant/components/azure_storage/strings.json +++ b/homeassistant/components/azure_storage/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/backblaze_b2/strings.json b/homeassistant/components/backblaze_b2/strings.json index 521217a449274..001c46ec63101 100644 --- a/homeassistant/components/backblaze_b2/strings.json +++ b/homeassistant/components/backblaze_b2/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "bad_request": "The Backblaze B2 API rejected the request: {error_message}", diff --git a/homeassistant/components/blebox/strings.json b/homeassistant/components/blebox/strings.json index d2f79a0803281..064d28ae40134 100644 --- a/homeassistant/components/blebox/strings.json +++ b/homeassistant/components/blebox/strings.json @@ -5,7 +5,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "authorization_required": "The BleBox device requires authentication.", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The device identifier does not match the previously configured device.", "unsupported_device_response": "The BleBox device returned an unrecognized response.", "unsupported_device_version": "[%key:component::blebox::config::error::unsupported_version%]" diff --git a/homeassistant/components/blink/strings.json b/homeassistant/components/blink/strings.json index af05dea999ae5..6c4436d8ff197 100644 --- a/homeassistant/components/blink/strings.json +++ b/homeassistant/components/blink/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/blue_current/strings.json b/homeassistant/components/blue_current/strings.json index f3920ac789c10..eed91666022fd 100644 --- a/homeassistant/components/blue_current/strings.json +++ b/homeassistant/components/blue_current/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_account": "Wrong account: Please authenticate with the API token for {email}." }, "error": { diff --git a/homeassistant/components/bosch_alarm/strings.json b/homeassistant/components/bosch_alarm/strings.json index 3d34143c4bbed..efd14eaecfd45 100644 --- a/homeassistant/components/bosch_alarm/strings.json +++ b/homeassistant/components/bosch_alarm/strings.json @@ -3,8 +3,7 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "already_in_progress": "[%key:common::config_flow::abort::already_in_progress%]", - "device_mismatch": "Please ensure you reconfigure against the same device.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "device_mismatch": "Please ensure you reconfigure against the same device." }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/bosch_shc/strings.json b/homeassistant/components/bosch_shc/strings.json index c747701a4b769..704f357b9e1b4 100644 --- a/homeassistant/components/bosch_shc/strings.json +++ b/homeassistant/components/bosch_shc/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/braviatv/strings.json b/homeassistant/components/braviatv/strings.json index 6f08f905817c6..0494ec6908da6 100644 --- a/homeassistant/components/braviatv/strings.json +++ b/homeassistant/components/braviatv/strings.json @@ -3,8 +3,7 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "no_ip_control": "IP Control is disabled on your TV or the TV is not supported.", - "not_bravia_device": "The device is not a Bravia TV.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "not_bravia_device": "The device is not a Bravia TV." }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/bring/strings.json b/homeassistant/components/bring/strings.json index cc6e938c956e2..79a13d3dfbe8d 100644 --- a/homeassistant/components/bring/strings.json +++ b/homeassistant/components/bring/strings.json @@ -5,7 +5,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The login details correspond to a different account. Please re-authenticate to the previously configured account." }, "error": { diff --git a/homeassistant/components/brunt/strings.json b/homeassistant/components/brunt/strings.json index 502f5061feff2..0421e73cd8fca 100644 --- a/homeassistant/components/brunt/strings.json +++ b/homeassistant/components/brunt/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/caldav/strings.json b/homeassistant/components/caldav/strings.json index 6d7b8736768dc..a33018a34b861 100644 --- a/homeassistant/components/caldav/strings.json +++ b/homeassistant/components/caldav/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "create_entry": { "default": "[%key:common::config_flow::create_entry::authenticated%]" diff --git a/homeassistant/components/centriconnect/strings.json b/homeassistant/components/centriconnect/strings.json index 48498e771dbd0..8fb393caff659 100644 --- a/homeassistant/components/centriconnect/strings.json +++ b/homeassistant/components/centriconnect/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_device": "This CentriConnect/MyPropane device does not match the existing device ID. Please make sure you entered the credentials correctly." }, "error": { diff --git a/homeassistant/components/cloudflare/strings.json b/homeassistant/components/cloudflare/strings.json index adb50c9402f75..dddc250159a7e 100644 --- a/homeassistant/components/cloudflare/strings.json +++ b/homeassistant/components/cloudflare/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" - }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", diff --git a/homeassistant/components/co2signal/strings.json b/homeassistant/components/co2signal/strings.json index 3ebfd9ebc180e..c1108dd4c5a4f 100644 --- a/homeassistant/components/co2signal/strings.json +++ b/homeassistant/components/co2signal/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" - }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", "no_data": "No data is available for the location or zone you have selected.", diff --git a/homeassistant/components/comelit/strings.json b/homeassistant/components/comelit/strings.json index 2aee4049acdfe..5a974c67be54e 100644 --- a/homeassistant/components/comelit/strings.json +++ b/homeassistant/components/comelit/strings.json @@ -7,7 +7,6 @@ "invalid_pin": "The provided PIN is invalid. It must be a 4-10 digit number.", "invalid_vedo_auth": "The provided VEDO PIN is incorrect or VEDO alarm is not enabled on this device.", "invalid_vedo_pin": "The provided VEDO PIN is invalid. It must be a 4-10 digit number.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/compit/strings.json b/homeassistant/components/compit/strings.json index 596156e694b61..7efd6628b9bbf 100644 --- a/homeassistant/components/compit/strings.json +++ b/homeassistant/components/compit/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" - }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", diff --git a/homeassistant/components/cookidoo/strings.json b/homeassistant/components/cookidoo/strings.json index 4a1ecc438776f..9f7633629351a 100644 --- a/homeassistant/components/cookidoo/strings.json +++ b/homeassistant/components/cookidoo/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The user identifier does not match the previous identifier" }, "error": { diff --git a/homeassistant/components/cync/strings.json b/homeassistant/components/cync/strings.json index 51106a810eb19..d35dff9ffaadf 100644 --- a/homeassistant/components/cync/strings.json +++ b/homeassistant/components/cync/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "An incorrect user was provided by Cync for your email address, please consult your Cync app" }, "error": { diff --git a/homeassistant/components/data_grand_lyon/strings.json b/homeassistant/components/data_grand_lyon/strings.json index 0954ab472656c..f3d48da4dd523 100644 --- a/homeassistant/components/data_grand_lyon/strings.json +++ b/homeassistant/components/data_grand_lyon/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/deluge/strings.json b/homeassistant/components/deluge/strings.json index fc413167cffb2..0fda83a72e8e8 100644 --- a/homeassistant/components/deluge/strings.json +++ b/homeassistant/components/deluge/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/devolo_home_control/strings.json b/homeassistant/components/devolo_home_control/strings.json index 2dd828bf2efc0..b71a1f3d844e1 100644 --- a/homeassistant/components/devolo_home_control/strings.json +++ b/homeassistant/components/devolo_home_control/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", diff --git a/homeassistant/components/devolo_home_network/strings.json b/homeassistant/components/devolo_home_network/strings.json index 650a638829ce5..e2a4f3b9475cf 100644 --- a/homeassistant/components/devolo_home_network/strings.json +++ b/homeassistant/components/devolo_home_network/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "home_control": "The devolo Home Control Central Unit does not work with this integration.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "home_control": "The devolo Home Control Central Unit does not work with this integration." }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/discord/strings.json b/homeassistant/components/discord/strings.json index 612f336c4c763..523e7fff9af1b 100644 --- a/homeassistant/components/discord/strings.json +++ b/homeassistant/components/discord/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/discovergy/strings.json b/homeassistant/components/discovergy/strings.json index ad28b13a0bae7..f077f356c0483 100644 --- a/homeassistant/components/discovergy/strings.json +++ b/homeassistant/components/discovergy/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "account_mismatch": "The inexogy account authenticated with does not match the account that needed re-authentication.", - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/doorbird/strings.json b/homeassistant/components/doorbird/strings.json index e40fb3f420ab1..5e84ccac608a9 100644 --- a/homeassistant/components/doorbird/strings.json +++ b/homeassistant/components/doorbird/strings.json @@ -5,7 +5,6 @@ "link_local_address": "Link local addresses are not supported", "not_doorbird_device": "This device is not a DoorBird", "not_ipv4_address": "Only IPv4 addresses are supported", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_device": "Device MAC address does not match" }, "error": { diff --git a/homeassistant/components/dormakaba_dkey/strings.json b/homeassistant/components/dormakaba_dkey/strings.json index d9a76c41326f5..f5f33096db5e1 100644 --- a/homeassistant/components/dormakaba_dkey/strings.json +++ b/homeassistant/components/dormakaba_dkey/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/dropbox/strings.json b/homeassistant/components/dropbox/strings.json index 9e28a5deb6bf3..15e9ec25bcdd8 100644 --- a/homeassistant/components/dropbox/strings.json +++ b/homeassistant/components/dropbox/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_account": "Wrong account: Please authenticate with the correct account." }, "create_entry": { diff --git a/homeassistant/components/ecobee/strings.json b/homeassistant/components/ecobee/strings.json index 50f8ead0ad480..17ddd0b1191d6 100644 --- a/homeassistant/components/ecobee/strings.json +++ b/homeassistant/components/ecobee/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" - }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", "invalid_mfa_code": "The MFA code was not accepted by ecobee; please try again.", diff --git a/homeassistant/components/ecovacs/strings.json b/homeassistant/components/ecovacs/strings.json index 0ae48be55c8ed..ffab59149e15f 100644 --- a/homeassistant/components/ecovacs/strings.json +++ b/homeassistant/components/ecovacs/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/efergy/strings.json b/homeassistant/components/efergy/strings.json index db5297784b161..5ca76bd69aede 100644 --- a/homeassistant/components/efergy/strings.json +++ b/homeassistant/components/efergy/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/egauge/strings.json b/homeassistant/components/egauge/strings.json index 6844f84694a11..a7e383e1afb8d 100644 --- a/homeassistant/components/egauge/strings.json +++ b/homeassistant/components/egauge/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/electric_kiwi/strings.json b/homeassistant/components/electric_kiwi/strings.json index 7bb3256dd2159..05e879f20c875 100644 --- a/homeassistant/components/electric_kiwi/strings.json +++ b/homeassistant/components/electric_kiwi/strings.json @@ -3,8 +3,7 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "connection_error": "[%key:common::config_flow::error::cannot_connect%]", - "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]" }, "create_entry": { "default": "[%key:common::config_flow::create_entry::authenticated%]" diff --git a/homeassistant/components/elmax/strings.json b/homeassistant/components/elmax/strings.json index bd33e99a900dc..befbaffca5ba0 100644 --- a/homeassistant/components/elmax/strings.json +++ b/homeassistant/components/elmax/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", diff --git a/homeassistant/components/energyid/strings.json b/homeassistant/components/energyid/strings.json index e735285cd58ff..9f4d66b7e94bb 100644 --- a/homeassistant/components/energyid/strings.json +++ b/homeassistant/components/energyid/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "create_entry": { "add_sensor_mapping_hint": "You can now add mappings from any sensor in Home Assistant to {integration_name} using the '+ add sensor mapping' button." diff --git a/homeassistant/components/esphome/strings.json b/homeassistant/components/esphome/strings.json index 8ab9afbc45c5f..5ec3fb35e1a99 100644 --- a/homeassistant/components/esphome/strings.json +++ b/homeassistant/components/esphome/strings.json @@ -10,7 +10,6 @@ "mqtt_missing_mac": "Missing MAC address in MQTT properties.", "mqtt_missing_payload": "Missing MQTT payload.", "name_conflict_migrated": "The configuration for `{name}` has been migrated to a new device with MAC address `{mac}` from `{existing_mac}`.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "reauth_unique_id_changed": "**Re-authentication of `{name}` was aborted** because the address `{host}` points to a different device: `{unexpected_device_name}` (MAC: `{unexpected_mac}`) instead of the expected one (MAC: `{expected_mac}`).", "reconfigure_already_configured": "A device `{name}` with MAC address `{mac}` is already configured as `{title}`. Reconfiguration was aborted because the new configuration appears to refer to a different device.", "reconfigure_name_conflict": "**Reconfiguration of `{name}` was aborted** because the address `{host}` points to a device named `{name}` (MAC: `{expected_mac}`), which is already in use by another configuration entry: `{existing_title}`.", diff --git a/homeassistant/components/ezviz/strings.json b/homeassistant/components/ezviz/strings.json index 2cedcd3c78a2a..31ece9f957f33 100644 --- a/homeassistant/components/ezviz/strings.json +++ b/homeassistant/components/ezviz/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured_account": "[%key:common::config_flow::abort::already_configured_account%]", "ezviz_cloud_account_missing": "EZVIZ cloud account missing. Please reconfigure EZVIZ cloud account", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/fibaro/strings.json b/homeassistant/components/fibaro/strings.json index 6d8188306f66c..9989131024ac2 100644 --- a/homeassistant/components/fibaro/strings.json +++ b/homeassistant/components/fibaro/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/firefly_iii/strings.json b/homeassistant/components/firefly_iii/strings.json index 8f3d21e7e664f..47a94acd8dca9 100644 --- a/homeassistant/components/firefly_iii/strings.json +++ b/homeassistant/components/firefly_iii/strings.json @@ -6,8 +6,7 @@ }, "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/fitbit/strings.json b/homeassistant/components/fitbit/strings.json index 65d7c5b7f16ed..cce92d666aec4 100644 --- a/homeassistant/components/fitbit/strings.json +++ b/homeassistant/components/fitbit/strings.json @@ -6,7 +6,6 @@ "invalid_access_token": "[%key:common::config_flow::error::invalid_access_token%]", "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]", "wrong_account": "The user credentials provided do not match this Fitbit account." }, diff --git a/homeassistant/components/fluss/strings.json b/homeassistant/components/fluss/strings.json index 219a27daa5d65..a076be772471e 100644 --- a/homeassistant/components/fluss/strings.json +++ b/homeassistant/components/fluss/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/freshr/strings.json b/homeassistant/components/freshr/strings.json index 8afab1eeb6597..f0333809b7243 100644 --- a/homeassistant/components/freshr/strings.json +++ b/homeassistant/components/freshr/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/fressnapf_tracker/strings.json b/homeassistant/components/fressnapf_tracker/strings.json index f8949158cc20d..d5eb36f3adf9a 100644 --- a/homeassistant/components/fressnapf_tracker/strings.json +++ b/homeassistant/components/fressnapf_tracker/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "account_change_not_allowed": "Reconfiguring to a different account is not allowed. Please create a new entry instead.", diff --git a/homeassistant/components/fritz/strings.json b/homeassistant/components/fritz/strings.json index 9fb08402a5e6c..122306d5faebd 100644 --- a/homeassistant/components/fritz/strings.json +++ b/homeassistant/components/fritz/strings.json @@ -12,8 +12,7 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "already_in_progress": "[%key:common::config_flow::abort::already_in_progress%]", - "ignore_ip6_link_local": "IPv6 link local address is not supported.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "ignore_ip6_link_local": "IPv6 link local address is not supported." }, "error": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", diff --git a/homeassistant/components/fritzbox/strings.json b/homeassistant/components/fritzbox/strings.json index 1fe7e9b3b0c2b..5c9adede2aee7 100644 --- a/homeassistant/components/fritzbox/strings.json +++ b/homeassistant/components/fritzbox/strings.json @@ -10,8 +10,7 @@ "already_in_progress": "[%key:common::config_flow::abort::already_in_progress%]", "ignore_ip6_link_local": "IPv6 link local address is not supported.", "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]", - "not_supported": "Connected to FRITZ!Box but it's unable to control Smart Home devices.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "not_supported": "Connected to FRITZ!Box but it's unable to control Smart Home devices." }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", diff --git a/homeassistant/components/frontier_silicon/strings.json b/homeassistant/components/frontier_silicon/strings.json index 642360028760c..b85946fd70303 100644 --- a/homeassistant/components/frontier_silicon/strings.json +++ b/homeassistant/components/frontier_silicon/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/fujitsu_fglair/strings.json b/homeassistant/components/fujitsu_fglair/strings.json index e53a92ed1ba22..feb9ac227cf5c 100644 --- a/homeassistant/components/fujitsu_fglair/strings.json +++ b/homeassistant/components/fujitsu_fglair/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/fumis/strings.json b/homeassistant/components/fumis/strings.json index 8d4d991b4df5e..500118ebc1b87 100644 --- a/homeassistant/components/fumis/strings.json +++ b/homeassistant/components/fumis/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/fyta/strings.json b/homeassistant/components/fyta/strings.json index aecc7cacf6dcb..7f2062ad7209c 100644 --- a/homeassistant/components/fyta/strings.json +++ b/homeassistant/components/fyta/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/gatus/strings.json b/homeassistant/components/gatus/strings.json index 31af273f0748c..3a84ee7bce453 100644 --- a/homeassistant/components/gatus/strings.json +++ b/homeassistant/components/gatus/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/gentex_homelink/strings.json b/homeassistant/components/gentex_homelink/strings.json index 0e7e02532a17b..1bf685e50dee1 100644 --- a/homeassistant/components/gentex_homelink/strings.json +++ b/homeassistant/components/gentex_homelink/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "Please log in using the same account, or create a new entry." }, "create_entry": { diff --git a/homeassistant/components/ghost/strings.json b/homeassistant/components/ghost/strings.json index 49bdb27bc6c91..96ae477e72d9e 100644 --- a/homeassistant/components/ghost/strings.json +++ b/homeassistant/components/ghost/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "This Ghost site is already configured.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The provided credentials belong to a different Ghost site." }, "error": { diff --git a/homeassistant/components/google/strings.json b/homeassistant/components/google/strings.json index f5aa84af2e7a0..cc257303777ea 100644 --- a/homeassistant/components/google/strings.json +++ b/homeassistant/components/google/strings.json @@ -9,7 +9,6 @@ "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "code_expired": "Authentication code expired or credential setup is invalid, please try again.", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "timeout_connect": "[%key:common::config_flow::error::timeout_connect%]" }, "create_entry": { diff --git a/homeassistant/components/google_assistant_sdk/strings.json b/homeassistant/components/google_assistant_sdk/strings.json index 96ec044fa801c..fa6b3d33f5113 100644 --- a/homeassistant/components/google_assistant_sdk/strings.json +++ b/homeassistant/components/google_assistant_sdk/strings.json @@ -5,8 +5,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]" }, "create_entry": { "default": "[%key:common::config_flow::create_entry::authenticated%]" diff --git a/homeassistant/components/google_drive/strings.json b/homeassistant/components/google_drive/strings.json index 95032cb096e21..9a9f6b7f76ce2 100644 --- a/homeassistant/components/google_drive/strings.json +++ b/homeassistant/components/google_drive/strings.json @@ -8,7 +8,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "create_folder_failure": "Error while creating Google Drive folder:\n\n{message}", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]", "wrong_account": "Wrong account: Please authenticate with {email}." }, diff --git a/homeassistant/components/google_generative_ai_conversation/strings.json b/homeassistant/components/google_generative_ai_conversation/strings.json index ea2f3dcd946a5..f3016921655f9 100644 --- a/homeassistant/components/google_generative_ai_conversation/strings.json +++ b/homeassistant/components/google_generative_ai_conversation/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/google_health/strings.json b/homeassistant/components/google_health/strings.json index d383a4f118be3..5e871eac6b193 100644 --- a/homeassistant/components/google_health/strings.json +++ b/homeassistant/components/google_health/strings.json @@ -9,7 +9,6 @@ "cannot_connect": "Failed to connect.", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", "missing_profile_scope": "Missing required Google Health profile read permission. Please try again and select the right permission.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_account": "Wrong account: Please authenticate with the right account." }, "create_entry": { diff --git a/homeassistant/components/google_mail/strings.json b/homeassistant/components/google_mail/strings.json index 1e13f25714e2f..776104bf3ef30 100644 --- a/homeassistant/components/google_mail/strings.json +++ b/homeassistant/components/google_mail/strings.json @@ -6,7 +6,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_account": "Wrong account: Please authenticate with {email}." }, "create_entry": { diff --git a/homeassistant/components/google_photos/strings.json b/homeassistant/components/google_photos/strings.json index ba532dc99e8d6..7229526e26146 100644 --- a/homeassistant/components/google_photos/strings.json +++ b/homeassistant/components/google_photos/strings.json @@ -7,7 +7,6 @@ "access_not_configured": "Unable to access the Google API:\n\n{message}", "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]", "wrong_account": "Wrong account: Please authenticate with the right account." }, diff --git a/homeassistant/components/google_sheets/strings.json b/homeassistant/components/google_sheets/strings.json index 20d53b9c2159a..b236096f8e88e 100644 --- a/homeassistant/components/google_sheets/strings.json +++ b/homeassistant/components/google_sheets/strings.json @@ -7,8 +7,7 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "create_spreadsheet_failure": "Error while creating spreadsheet, see error log for details", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "open_spreadsheet_failure": "Error while opening spreadsheet, see error log for details", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "open_spreadsheet_failure": "Error while opening spreadsheet, see error log for details" }, "create_entry": { "default": "Successfully authenticated and spreadsheet created at: {url}" diff --git a/homeassistant/components/google_tasks/strings.json b/homeassistant/components/google_tasks/strings.json index 1115d6e94e26e..b839b696c8765 100644 --- a/homeassistant/components/google_tasks/strings.json +++ b/homeassistant/components/google_tasks/strings.json @@ -7,7 +7,6 @@ "access_not_configured": "Unable to access the Google API:\n\n{message}", "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]", "wrong_account": "Wrong account: Please authenticate with the right account." }, diff --git a/homeassistant/components/google_weather/strings.json b/homeassistant/components/google_weather/strings.json index fd0831217f611..2a4a30ffb0ba1 100644 --- a/homeassistant/components/google_weather/strings.json +++ b/homeassistant/components/google_weather/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "Unable to connect to the Google Weather API:\n\n{error_message}", diff --git a/homeassistant/components/growatt_server/strings.json b/homeassistant/components/growatt_server/strings.json index ab617e0f25cd1..ce41ca45a6ccf 100644 --- a/homeassistant/components/growatt_server/strings.json +++ b/homeassistant/components/growatt_server/strings.json @@ -3,8 +3,7 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "no_plants": "No plants have been found on this account", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "no_plants": "No plants have been found on this account" }, "error": { "cannot_connect": "Cannot connect to Growatt servers. Please check your internet connection and try again.", diff --git a/homeassistant/components/habitica/strings.json b/homeassistant/components/habitica/strings.json index d854c56a482f4..efabad26e90e9 100644 --- a/homeassistant/components/habitica/strings.json +++ b/homeassistant/components/habitica/strings.json @@ -73,7 +73,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "Hmm, those login details are correct, but they're not for this adventurer. Got another account to try?" }, "error": { diff --git a/homeassistant/components/heos/strings.json b/homeassistant/components/heos/strings.json index b9c3070090fba..142a1b9872eb6 100644 --- a/homeassistant/components/heos/strings.json +++ b/homeassistant/components/heos/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" }, diff --git a/homeassistant/components/home_connect/strings.json b/homeassistant/components/home_connect/strings.json index 8dc1aed4cb6e9..d252cc1119b85 100644 --- a/homeassistant/components/home_connect/strings.json +++ b/homeassistant/components/home_connect/strings.json @@ -10,7 +10,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_account": "Please ensure you reconfigure against the same account." }, "create_entry": { diff --git a/homeassistant/components/homeassistant/strings.json b/homeassistant/components/homeassistant/strings.json index e18c4e3cd0902..b0ae0b912295e 100644 --- a/homeassistant/components/homeassistant/strings.json +++ b/homeassistant/components/homeassistant/strings.json @@ -12,6 +12,7 @@ "oauth_implementation_unavailable": "[%key:common::config_flow::abort::oauth2_implementation_unavailable%]", "oauth_timeout": "[%key:common::config_flow::abort::oauth2_timeout%]", "oauth_unauthorized": "[%key:common::config_flow::abort::oauth2_unauthorized%]", + "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "reconfigure_successful": "[%key:common::config_flow::abort::reconfigure_successful%]", "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]", "user_rejected_authorize": "[%key:common::config_flow::abort::oauth2_user_rejected_authorize%]" diff --git a/homeassistant/components/homee/strings.json b/homeassistant/components/homee/strings.json index 37f569a2dc58f..ea165a0d5c86a 100644 --- a/homeassistant/components/homee/strings.json +++ b/homeassistant/components/homee/strings.json @@ -3,7 +3,6 @@ "abort": { "2nd_ip_address": "Your homee is already connected using another IP address", "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_hub": "IP address belongs to a different homee than the configured one." }, "error": { diff --git a/homeassistant/components/homematicip_cloud/strings.json b/homeassistant/components/homematicip_cloud/strings.json index deb3ad43f2a05..a6c7eb68f73f1 100644 --- a/homeassistant/components/homematicip_cloud/strings.json +++ b/homeassistant/components/homematicip_cloud/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "connection_aborted": "[%key:common::config_flow::error::cannot_connect%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/homevolt/strings.json b/homeassistant/components/homevolt/strings.json index c0eecc970f897..2c5c054fc012d 100644 --- a/homeassistant/components/homevolt/strings.json +++ b/homeassistant/components/homevolt/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]", "wrong_account": "The device you authenticated with is different from the one configured. Re-authenticate with the same Homevolt battery." }, diff --git a/homeassistant/components/honeywell/strings.json b/homeassistant/components/honeywell/strings.json index 9e7c6bb785606..c1283ad3a5e69 100644 --- a/homeassistant/components/honeywell/strings.json +++ b/homeassistant/components/honeywell/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" - }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]" diff --git a/homeassistant/components/huawei_lte/strings.json b/homeassistant/components/huawei_lte/strings.json index b2a3aea7bd7d4..396d03ca50756 100644 --- a/homeassistant/components/huawei_lte/strings.json +++ b/homeassistant/components/huawei_lte/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unsupported_device": "Unsupported device" }, "error": { diff --git a/homeassistant/components/husqvarna_automower/strings.json b/homeassistant/components/husqvarna_automower/strings.json index 523efafa31771..3052d43216579 100644 --- a/homeassistant/components/husqvarna_automower/strings.json +++ b/homeassistant/components/husqvarna_automower/strings.json @@ -5,7 +5,6 @@ "missing_amc_scope": "The `Authentication API` and the `Automower Connect API` are not connected to your application in the Husqvarna Developer Portal.", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", "no_mower_connected": "No mowers connected to this account.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]", "wrong_account": "You can only reauthenticate this entry with the same Husqvarna account." }, diff --git a/homeassistant/components/husqvarna_automower_ble/strings.json b/homeassistant/components/husqvarna_automower_ble/strings.json index edf93d1becea7..7bf1b6c2bd974 100644 --- a/homeassistant/components/husqvarna_automower_ble/strings.json +++ b/homeassistant/components/husqvarna_automower_ble/strings.json @@ -5,7 +5,6 @@ "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "no_devices_found": "Ensure the mower is in pairing mode and try again. It can take a few attempts.", "not_allowed": "Unable to read data from the mower, this usually means it is not paired", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/huum/strings.json b/homeassistant/components/huum/strings.json index d14d0ec4a4bc3..c2f5843b55026 100644 --- a/homeassistant/components/huum/strings.json +++ b/homeassistant/components/huum/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/hydrawise/strings.json b/homeassistant/components/hydrawise/strings.json index c5226551bfdbb..ebd97400e284f 100644 --- a/homeassistant/components/hydrawise/strings.json +++ b/homeassistant/components/hydrawise/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/hyperion/strings.json b/homeassistant/components/hyperion/strings.json index 77fc7cf603d67..3c9b480f45e65 100644 --- a/homeassistant/components/hyperion/strings.json +++ b/homeassistant/components/hyperion/strings.json @@ -6,8 +6,7 @@ "auth_new_token_not_work_error": "Failed to authenticate using newly created token", "auth_required_error": "Failed to determine if authorization is required", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "no_id": "The Hyperion Ambilight instance did not report its ID", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "no_id": "The Hyperion Ambilight instance did not report its ID" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/hypontech/strings.json b/homeassistant/components/hypontech/strings.json index 5c664462a60fd..4fbc9e8849698 100644 --- a/homeassistant/components/hypontech/strings.json +++ b/homeassistant/components/hypontech/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_account": "The provided credentials are for a different Hypontech Cloud account." }, "error": { diff --git a/homeassistant/components/iaqualink/strings.json b/homeassistant/components/iaqualink/strings.json index f540b293526d2..b5fe75b5d566f 100644 --- a/homeassistant/components/iaqualink/strings.json +++ b/homeassistant/components/iaqualink/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/imap/strings.json b/homeassistant/components/imap/strings.json index a4d42830393bb..f0bd31025e900 100644 --- a/homeassistant/components/imap/strings.json +++ b/homeassistant/components/imap/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/immich/strings.json b/homeassistant/components/immich/strings.json index 1c0ed21e6f08a..e470be8654813 100644 --- a/homeassistant/components/immich/strings.json +++ b/homeassistant/components/immich/strings.json @@ -7,7 +7,6 @@ "config": { "abort": { "already_configured": "This user is already configured for this Immich instance.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The provided API key does not match the configured user." }, "error": { diff --git a/homeassistant/components/imou/strings.json b/homeassistant/components/imou/strings.json index 66c1928a1c033..5c70849e583d2 100644 --- a/homeassistant/components/imou/strings.json +++ b/homeassistant/components/imou/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The App ID does not match the previously configured account." }, "error": { diff --git a/homeassistant/components/incomfort/strings.json b/homeassistant/components/incomfort/strings.json index 917077b341469..73913e4b0038e 100644 --- a/homeassistant/components/incomfort/strings.json +++ b/homeassistant/components/incomfort/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "auth_error": "Invalid credentials.", diff --git a/homeassistant/components/intellifire/strings.json b/homeassistant/components/intellifire/strings.json index 3faca975f0122..e4208be5da314 100644 --- a/homeassistant/components/intellifire/strings.json +++ b/homeassistant/components/intellifire/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "no_available_devices": "All available devices have already been configured.", - "not_intellifire_device": "Not an IntelliFire device.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "not_intellifire_device": "Not an IntelliFire device." }, "error": { "api_error": "Login failed" diff --git a/homeassistant/components/ista_ecotrend/strings.json b/homeassistant/components/ista_ecotrend/strings.json index 5b1cfefd2dd12..88baa3ba0b770 100644 --- a/homeassistant/components/ista_ecotrend/strings.json +++ b/homeassistant/components/ista_ecotrend/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The login details correspond to a different account. Please re-authenticate to the previously configured account." }, "error": { diff --git a/homeassistant/components/isy994/strings.json b/homeassistant/components/isy994/strings.json index ef516bfb64f8e..62abbb1abc64a 100644 --- a/homeassistant/components/isy994/strings.json +++ b/homeassistant/components/isy994/strings.json @@ -1,14 +1,12 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", "invalid_host": "The host entry was not in full URL format, e.g., {sample_ip}", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "ssl_error": "TLS handshake failed. The controller may require a newer TLS version, or SSL verification may be failing due to a self-signed certificate.", "unknown": "[%key:common::config_flow::error::unknown%]" }, diff --git a/homeassistant/components/ituran/strings.json b/homeassistant/components/ituran/strings.json index caf0b2d6af22f..17383865784ec 100644 --- a/homeassistant/components/ituran/strings.json +++ b/homeassistant/components/ituran/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/jellyfin/strings.json b/homeassistant/components/jellyfin/strings.json index fa3881f10520a..c671e60d5da72 100644 --- a/homeassistant/components/jellyfin/strings.json +++ b/homeassistant/components/jellyfin/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/justnimbus/strings.json b/homeassistant/components/justnimbus/strings.json index 98da939f785d5..d0586f473a311 100644 --- a/homeassistant/components/justnimbus/strings.json +++ b/homeassistant/components/justnimbus/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/jvc_projector/strings.json b/homeassistant/components/jvc_projector/strings.json index c47e97bc8a8f6..9a217d3b834e8 100644 --- a/homeassistant/components/jvc_projector/strings.json +++ b/homeassistant/components/jvc_projector/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/karakeep/strings.json b/homeassistant/components/karakeep/strings.json index b013711c9b2d8..ca60278fc367a 100644 --- a/homeassistant/components/karakeep/strings.json +++ b/homeassistant/components/karakeep/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "api_error": "The Karakeep API returned an unexpected response.", diff --git a/homeassistant/components/kiosker/strings.json b/homeassistant/components/kiosker/strings.json index 415060ecaa380..891abb922998e 100644 --- a/homeassistant/components/kiosker/strings.json +++ b/homeassistant/components/kiosker/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_device": "The device does not match the configured device." }, "error": { diff --git a/homeassistant/components/lacrosse_view/strings.json b/homeassistant/components/lacrosse_view/strings.json index b97fa1754bff5..4910baacce7fe 100644 --- a/homeassistant/components/lacrosse_view/strings.json +++ b/homeassistant/components/lacrosse_view/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", diff --git a/homeassistant/components/lamarzocco/strings.json b/homeassistant/components/lamarzocco/strings.json index ceff2038c3c5d..6f7185ac758da 100644 --- a/homeassistant/components/lamarzocco/strings.json +++ b/homeassistant/components/lamarzocco/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/lametric/strings.json b/homeassistant/components/lametric/strings.json index 20adc5ca1bb87..d9c29af7bd97a 100644 --- a/homeassistant/components/lametric/strings.json +++ b/homeassistant/components/lametric/strings.json @@ -7,7 +7,6 @@ "missing_configuration": "The LaMetric integration is not configured. Please follow the documentation.", "no_devices": "The authorized user has no LaMetric devices", "reauth_device_not_found": "The device you are trying to re-authenticate is not found in this LaMetric account", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/letpot/strings.json b/homeassistant/components/letpot/strings.json index 0cdefd4dd4064..e5654084af45a 100644 --- a/homeassistant/components/letpot/strings.json +++ b/homeassistant/components/letpot/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/libre_hardware_monitor/strings.json b/homeassistant/components/libre_hardware_monitor/strings.json index a029a818ab948..b6a35f6d3c423 100644 --- a/homeassistant/components/libre_hardware_monitor/strings.json +++ b/homeassistant/components/libre_hardware_monitor/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/lidarr/strings.json b/homeassistant/components/lidarr/strings.json index 94e7d2f0a4dda..2c7755d1aa05a 100644 --- a/homeassistant/components/lidarr/strings.json +++ b/homeassistant/components/lidarr/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/liebherr/strings.json b/homeassistant/components/liebherr/strings.json index 61847b722df40..25ef9813308f1 100644 --- a/homeassistant/components/liebherr/strings.json +++ b/homeassistant/components/liebherr/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "no_devices": "No devices found for this API key", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "no_devices": "No devices found for this API key" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/litterrobot/strings.json b/homeassistant/components/litterrobot/strings.json index 91c71c4c2552b..0aaf124350414 100644 --- a/homeassistant/components/litterrobot/strings.json +++ b/homeassistant/components/litterrobot/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The Whisker account does not match the previously configured account. Please re-authenticate using the same account, or remove this integration and set it up again if you want to use a different account." }, "error": { diff --git a/homeassistant/components/llama_cpp/strings.json b/homeassistant/components/llama_cpp/strings.json index d298773a914eb..75b029a210d37 100644 --- a/homeassistant/components/llama_cpp/strings.json +++ b/homeassistant/components/llama_cpp/strings.json @@ -37,8 +37,7 @@ "abort": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "entry_not_loaded": "Cannot add things while the configuration is disabled.", - "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]" }, "entry_type": "Conversation agent", "initiate_flow": { diff --git a/homeassistant/components/lojack/strings.json b/homeassistant/components/lojack/strings.json index 31bb0f2d31e95..d31cb1a736e77 100644 --- a/homeassistant/components/lojack/strings.json +++ b/homeassistant/components/lojack/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/luci/strings.json b/homeassistant/components/luci/strings.json index fe28ec962dcc1..468b06e54d18b 100644 --- a/homeassistant/components/luci/strings.json +++ b/homeassistant/components/luci/strings.json @@ -3,8 +3,7 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/mastodon/strings.json b/homeassistant/components/mastodon/strings.json index 205fa8ac17d56..d2fd6b723f6e1 100644 --- a/homeassistant/components/mastodon/strings.json +++ b/homeassistant/components/mastodon/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_account": "You have to use the same account that was used to configure the integration." }, "error": { diff --git a/homeassistant/components/mcp/strings.json b/homeassistant/components/mcp/strings.json index f35618009143c..3b844220b51dd 100644 --- a/homeassistant/components/mcp/strings.json +++ b/homeassistant/components/mcp/strings.json @@ -7,7 +7,6 @@ "invalid_discovery_info": "Invalid discovery information received", "missing_capabilities": "The MCP server does not support a required capability (Tools)", "reauth_account_mismatch": "The authenticated user does not match the MCP Server user that needed re-authentication.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "timeout_connect": "[%key:common::config_flow::error::timeout_connect%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, diff --git a/homeassistant/components/mealie/strings.json b/homeassistant/components/mealie/strings.json index 4bacefbb1eab5..b21870b8ac3eb 100644 --- a/homeassistant/components/mealie/strings.json +++ b/homeassistant/components/mealie/strings.json @@ -7,7 +7,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_account": "You have to use the same account that was used to configure the integration." }, "error": { diff --git a/homeassistant/components/melcloud/strings.json b/homeassistant/components/melcloud/strings.json index 3affefd9f4dec..7c1280e11af3d 100644 --- a/homeassistant/components/melcloud/strings.json +++ b/homeassistant/components/melcloud/strings.json @@ -3,8 +3,7 @@ "abort": { "already_configured": "MELCloud integration already configured for this email. Access token has been refreshed.", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/melcloud_home/strings.json b/homeassistant/components/melcloud_home/strings.json index ad16e1c87d604..4455082d2375b 100644 --- a/homeassistant/components/melcloud_home/strings.json +++ b/homeassistant/components/melcloud_home/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The login details correspond to a different account. Please re-authenticate to the previously configured account." }, "error": { diff --git a/homeassistant/components/metoffice/strings.json b/homeassistant/components/metoffice/strings.json index 3a13911b61433..a94d06c461b83 100644 --- a/homeassistant/components/metoffice/strings.json +++ b/homeassistant/components/metoffice/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/microbees/strings.json b/homeassistant/components/microbees/strings.json index 37040cd540a73..4b509324cdb26 100644 --- a/homeassistant/components/microbees/strings.json +++ b/homeassistant/components/microbees/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]", "wrong_account": "You can only reauthenticate this entry with the same microBees account." }, diff --git a/homeassistant/components/miele/strings.json b/homeassistant/components/miele/strings.json index 9bf830b401ac1..e5b3fb58c6164 100644 --- a/homeassistant/components/miele/strings.json +++ b/homeassistant/components/miele/strings.json @@ -7,8 +7,7 @@ "account_mismatch": "The used account does not match the original account", "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]" }, "create_entry": { "default": "[%key:common::config_flow::create_entry::authenticated%]" diff --git a/homeassistant/components/mikrotik/strings.json b/homeassistant/components/mikrotik/strings.json index cb716f57dca91..a1a27d4ae6d1d 100644 --- a/homeassistant/components/mikrotik/strings.json +++ b/homeassistant/components/mikrotik/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/monzo/strings.json b/homeassistant/components/monzo/strings.json index 3cdccf0348bca..fe844b8d2fa3b 100644 --- a/homeassistant/components/monzo/strings.json +++ b/homeassistant/components/monzo/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_account": "Wrong account: The credentials provided do not match this Monzo account." }, "create_entry": { diff --git a/homeassistant/components/motioneye/strings.json b/homeassistant/components/motioneye/strings.json index f342bf09fab4f..6b859133ce27a 100644 --- a/homeassistant/components/motioneye/strings.json +++ b/homeassistant/components/motioneye/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/motionmount/strings.json b/homeassistant/components/motionmount/strings.json index 59a6dc4dc3533..1492fb94c26d7 100644 --- a/homeassistant/components/motionmount/strings.json +++ b/homeassistant/components/motionmount/strings.json @@ -8,7 +8,6 @@ "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "invalid_response": "Failed to connect due to an invalid response from the MotionMount.", "not_connected": "Failed to connect.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "time_out": "[%key:common::config_flow::error::timeout_connect%]" }, "error": { diff --git a/homeassistant/components/mqtt/strings.json b/homeassistant/components/mqtt/strings.json index 30df5368e7dac..941575aa2934c 100644 --- a/homeassistant/components/mqtt/strings.json +++ b/homeassistant/components/mqtt/strings.json @@ -5,8 +5,7 @@ "addon_info_failed": "Failed get info for the {addon} app.", "addon_install_failed": "Failed to install the {addon} app.", "addon_start_failed": "Failed to start the {addon} app.", - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "bad_birth": "Invalid birth topic", diff --git a/homeassistant/components/mta/strings.json b/homeassistant/components/mta/strings.json index ebccf2a1f9ed3..f9d57e06f08ea 100644 --- a/homeassistant/components/mta/strings.json +++ b/homeassistant/components/mta/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/music_assistant/strings.json b/homeassistant/components/music_assistant/strings.json index 047b96f0b0060..3ad74fde5b975 100644 --- a/homeassistant/components/music_assistant/strings.json +++ b/homeassistant/components/music_assistant/strings.json @@ -6,7 +6,6 @@ "auth_failed": "Authentication failed, please try again", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "invalid_server_version": "The Music Assistant server is not the correct version", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/myuplink/strings.json b/homeassistant/components/myuplink/strings.json index 4b2d3d5a2fa45..3d6868dfe73db 100644 --- a/homeassistant/components/myuplink/strings.json +++ b/homeassistant/components/myuplink/strings.json @@ -6,8 +6,7 @@ "abort": { "account_mismatch": "The used account does not match the original account", "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]" }, "create_entry": { "default": "[%key:common::config_flow::create_entry::authenticated%]" diff --git a/homeassistant/components/nam/strings.json b/homeassistant/components/nam/strings.json index 02cc9e3a7a88c..3e2854841946e 100644 --- a/homeassistant/components/nam/strings.json +++ b/homeassistant/components/nam/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "another_device": "The IP address/hostname of another Nettigo Air Monitor was used.", "device_unsupported": "The device is unsupported.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "reauth_unsuccessful": "Re-authentication was unsuccessful, please remove the integration and set it up again." }, "error": { diff --git a/homeassistant/components/namecheapdns/strings.json b/homeassistant/components/namecheapdns/strings.json index fdc6c2107b1c9..d7261b1f1c248 100644 --- a/homeassistant/components/namecheapdns/strings.json +++ b/homeassistant/components/namecheapdns/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/nanoleaf/strings.json b/homeassistant/components/nanoleaf/strings.json index 0ca694ad5725d..9744bf0dff32a 100644 --- a/homeassistant/components/nanoleaf/strings.json +++ b/homeassistant/components/nanoleaf/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "invalid_token": "[%key:common::config_flow::error::invalid_access_token%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/nest/strings.json b/homeassistant/components/nest/strings.json index edbb759a81cf6..547e65b989f99 100644 --- a/homeassistant/components/nest/strings.json +++ b/homeassistant/components/nest/strings.json @@ -8,7 +8,6 @@ "invalid_access_token": "[%key:common::config_flow::error::invalid_access_token%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", "pubsub_api_error": "[%key:component::nest::config::error::pubsub_api_error%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown_authorize_url_generation": "[%key:common::config_flow::abort::unknown_authorize_url_generation%]" }, "create_entry": { diff --git a/homeassistant/components/nextcloud/strings.json b/homeassistant/components/nextcloud/strings.json index 4cbee34f1855a..a0d6e00dd175d 100644 --- a/homeassistant/components/nextcloud/strings.json +++ b/homeassistant/components/nextcloud/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "connection_error_during_import": "Connection error occurred during yaml configuration import", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "connection_error_during_import": "Connection error occurred during yaml configuration import" }, "error": { "connection_error": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/nextdns/strings.json b/homeassistant/components/nextdns/strings.json index bb078f0125b96..b4a7f1d889aa8 100644 --- a/homeassistant/components/nextdns/strings.json +++ b/homeassistant/components/nextdns/strings.json @@ -3,8 +3,7 @@ "abort": { "all_profiles_configured": "All NextDNS profiles are already configured.", "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "profile_not_available": "The configured NextDNS profile is no longer available in your account. Remove the configuration and configure the integration again.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "profile_not_available": "The configured NextDNS profile is no longer available in your account. Remove the configuration and configure the integration again." }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/nice_go/strings.json b/homeassistant/components/nice_go/strings.json index 60f74ce66c547..b8583e1c5a095 100644 --- a/homeassistant/components/nice_go/strings.json +++ b/homeassistant/components/nice_go/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", diff --git a/homeassistant/components/nintendo_parental_controls/strings.json b/homeassistant/components/nintendo_parental_controls/strings.json index 13c9a1f1adb9c..1884b464a9510 100644 --- a/homeassistant/components/nintendo_parental_controls/strings.json +++ b/homeassistant/components/nintendo_parental_controls/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "no_devices_found": "There are no devices paired with this Nintendo account, go to [Nintendo Support]({more_info_url}) for further assistance.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "no_devices_found": "There are no devices paired with this Nintendo account, go to [Nintendo Support]({more_info_url}) for further assistance." }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/notion/strings.json b/homeassistant/components/notion/strings.json index 8018b9b112f6f..3987b06d3d81f 100644 --- a/homeassistant/components/notion/strings.json +++ b/homeassistant/components/notion/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", diff --git a/homeassistant/components/nrgkick/strings.json b/homeassistant/components/nrgkick/strings.json index 4ac067105e150..3d7cc0bb29245 100644 --- a/homeassistant/components/nrgkick/strings.json +++ b/homeassistant/components/nrgkick/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "json_api_disabled": "JSON API is disabled on the device. Enable it in the NRGkick mobile app under Extended \u2192 Local API \u2192 API Variants.", "no_serial_number": "Device does not provide a serial number", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The device does not match the previous device" }, "error": { diff --git a/homeassistant/components/ntfy/strings.json b/homeassistant/components/ntfy/strings.json index 7afb39a77ce8c..74b689627becd 100644 --- a/homeassistant/components/ntfy/strings.json +++ b/homeassistant/components/ntfy/strings.json @@ -7,8 +7,7 @@ "config": { "abort": { "account_mismatch": "The provided access token corresponds to the account {wrong_username}. Please re-authenticate with the account **{username}**", - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/nut/strings.json b/homeassistant/components/nut/strings.json index 181c49e2cd487..ff22f9b3d3d13 100644 --- a/homeassistant/components/nut/strings.json +++ b/homeassistant/components/nut/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "no_ups_found": "There are no UPS devices available on the NUT server.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The device's manufacturer, model and serial number identifier does not match the previous identifier." }, "error": { diff --git a/homeassistant/components/ohme/strings.json b/homeassistant/components/ohme/strings.json index cabeee4c14a43..6d4fa11a6ab87 100644 --- a/homeassistant/components/ohme/strings.json +++ b/homeassistant/components/ohme/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", diff --git a/homeassistant/components/ollama/strings.json b/homeassistant/components/ollama/strings.json index b4aaa7d75e1ca..e7ca74bf4439a 100644 --- a/homeassistant/components/ollama/strings.json +++ b/homeassistant/components/ollama/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/onedrive/strings.json b/homeassistant/components/onedrive/strings.json index bb472f9693dd5..e6cacf829613e 100644 --- a/homeassistant/components/onedrive/strings.json +++ b/homeassistant/components/onedrive/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "connection_error": "Failed to connect to OneDrive.", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]", "wrong_drive": "New account does not contain previously configured OneDrive." }, diff --git a/homeassistant/components/onedrive_for_business/strings.json b/homeassistant/components/onedrive_for_business/strings.json index cf2ed76c7cdba..d1b1e62b8b7d6 100644 --- a/homeassistant/components/onedrive_for_business/strings.json +++ b/homeassistant/components/onedrive_for_business/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "connection_error": "[%key:component::onedrive::config::abort::connection_error%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]", "wrong_drive": "[%key:component::onedrive::config::abort::wrong_drive%]" }, diff --git a/homeassistant/components/onvif/strings.json b/homeassistant/components/onvif/strings.json index 8934fd8323483..e701f12a73c3a 100644 --- a/homeassistant/components/onvif/strings.json +++ b/homeassistant/components/onvif/strings.json @@ -4,8 +4,7 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]", "no_h264": "There were no H.264 streams available. Check the profile configuration on your device.", - "no_mac": "Could not configure unique ID for ONVIF device.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "no_mac": "Could not configure unique ID for ONVIF device." }, "error": { "auth_failed": "Could not authenticate: {error}", diff --git a/homeassistant/components/openai_conversation/strings.json b/homeassistant/components/openai_conversation/strings.json index 6b7d21ea44c25..6be23b94f0a85 100644 --- a/homeassistant/components/openai_conversation/strings.json +++ b/homeassistant/components/openai_conversation/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/opendisplay/strings.json b/homeassistant/components/opendisplay/strings.json index 7ea82e96061e3..fa52cdd60f440 100644 --- a/homeassistant/components/opendisplay/strings.json +++ b/homeassistant/components/opendisplay/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/openevse/strings.json b/homeassistant/components/openevse/strings.json index 4d07a2ae1c253..bffbf89e64ce9 100644 --- a/homeassistant/components/openevse/strings.json +++ b/homeassistant/components/openevse/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "This charger is already configured", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unavailable_host": "Unable to connect to host", "unique_id_mismatch": "The charger identifier does not match the previous identifier" }, diff --git a/homeassistant/components/openexchangerates/strings.json b/homeassistant/components/openexchangerates/strings.json index be10ba62e08ed..3c10b0324f933 100644 --- a/homeassistant/components/openexchangerates/strings.json +++ b/homeassistant/components/openexchangerates/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "timeout_connect": "[%key:common::config_flow::error::timeout_connect%]" }, "error": { diff --git a/homeassistant/components/opower/strings.json b/homeassistant/components/opower/strings.json index ac7f7aca31d93..50dde3bb2b02b 100644 --- a/homeassistant/components/opower/strings.json +++ b/homeassistant/components/opower/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/osoenergy/strings.json b/homeassistant/components/osoenergy/strings.json index f6d01ba2826c8..d71446de7f6de 100644 --- a/homeassistant/components/osoenergy/strings.json +++ b/homeassistant/components/osoenergy/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]" diff --git a/homeassistant/components/ouman_eh_800/strings.json b/homeassistant/components/ouman_eh_800/strings.json index 694c6be96d430..2bd140a2a0e80 100644 --- a/homeassistant/components/ouman_eh_800/strings.json +++ b/homeassistant/components/ouman_eh_800/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/overkiz/strings.json b/homeassistant/components/overkiz/strings.json index 59dad6d893e28..1b15fb83db619 100644 --- a/homeassistant/components/overkiz/strings.json +++ b/homeassistant/components/overkiz/strings.json @@ -5,7 +5,6 @@ "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", "no_gateways": "No gateways were found for your account.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "reauth_wrong_account": "You can only reauthenticate this entry with the same Overkiz account and hub", "reconfigure_wrong_account": "You can only reconfigure this entry with the same Overkiz account and hub" }, diff --git a/homeassistant/components/overseerr/strings.json b/homeassistant/components/overseerr/strings.json index 4156e6f13adef..64c144c96b1a8 100644 --- a/homeassistant/components/overseerr/strings.json +++ b/homeassistant/components/overseerr/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/ovhcloud_ai_endpoints/strings.json b/homeassistant/components/ovhcloud_ai_endpoints/strings.json index e25b45335d4e6..fe120b0f09749 100644 --- a/homeassistant/components/ovhcloud_ai_endpoints/strings.json +++ b/homeassistant/components/ovhcloud_ai_endpoints/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/ovo_energy/strings.json b/homeassistant/components/ovo_energy/strings.json index b1c47cf7bd203..1c2b2e2c5dd7d 100644 --- a/homeassistant/components/ovo_energy/strings.json +++ b/homeassistant/components/ovo_energy/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" - }, "error": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "authorization_error": "[%key:common::config_flow::error::invalid_auth%]", diff --git a/homeassistant/components/paperless_ngx/strings.json b/homeassistant/components/paperless_ngx/strings.json index 200e864859444..4c0cb9c80e4f5 100644 --- a/homeassistant/components/paperless_ngx/strings.json +++ b/homeassistant/components/paperless_ngx/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::invalid_host%]", diff --git a/homeassistant/components/peblar/strings.json b/homeassistant/components/peblar/strings.json index 5d92572b6b9df..afb4fccef9477 100644 --- a/homeassistant/components/peblar/strings.json +++ b/homeassistant/components/peblar/strings.json @@ -3,8 +3,7 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "different_device": "The information entered is from a different Peblar EV charger.", - "no_serial_number": "The discovered Peblar device did not provide a serial number.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "no_serial_number": "The discovered Peblar device did not provide a serial number." }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/philips_js/strings.json b/homeassistant/components/philips_js/strings.json index a220430f73089..5803e9a217ae6 100644 --- a/homeassistant/components/philips_js/strings.json +++ b/homeassistant/components/philips_js/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "pairing_failure": "Unable to pair: {error_id}", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "pairing_failure": "Unable to pair: {error_id}" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/pi_hole/strings.json b/homeassistant/components/pi_hole/strings.json index 6eec2d66991f8..6e649daa15cd3 100644 --- a/homeassistant/components/pi_hole/strings.json +++ b/homeassistant/components/pi_hole/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/playstation_network/strings.json b/homeassistant/components/playstation_network/strings.json index 5dfaa80c50dd5..95d96eb4a553d 100644 --- a/homeassistant/components/playstation_network/strings.json +++ b/homeassistant/components/playstation_network/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "already_configured_as_subentry": "Already configured as a friend for another account. Delete the existing entry first.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The provided NPSSO token corresponds to the account {wrong_account}. Please re-authenticate with the account **{name}**" }, "error": { diff --git a/homeassistant/components/point/strings.json b/homeassistant/components/point/strings.json index 45cac27236ca8..1fc428a2a98c5 100644 --- a/homeassistant/components/point/strings.json +++ b/homeassistant/components/point/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]", "wrong_account": "You can only reauthenticate this account with the same user." }, diff --git a/homeassistant/components/portainer/strings.json b/homeassistant/components/portainer/strings.json index 5f79eabc5ef87..66416065435a5 100644 --- a/homeassistant/components/portainer/strings.json +++ b/homeassistant/components/portainer/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The Portainer instance ID does not match the previously configured instance. This can occur if the device was reset or reconfigured outside of Home Assistant." }, "error": { diff --git a/homeassistant/components/powerfox/strings.json b/homeassistant/components/powerfox/strings.json index ff1a4ba08f5d8..5ad0926b0b3e8 100644 --- a/homeassistant/components/powerfox/strings.json +++ b/homeassistant/components/powerfox/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/powerfox_local/strings.json b/homeassistant/components/powerfox_local/strings.json index 8845c0dda55ee..c49d01782c416 100644 --- a/homeassistant/components/powerfox_local/strings.json +++ b/homeassistant/components/powerfox_local/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "Please ensure you reconfigure against the same device." }, "error": { diff --git a/homeassistant/components/powerwall/strings.json b/homeassistant/components/powerwall/strings.json index bf20e6e9e0407..2d52aa69d465e 100644 --- a/homeassistant/components/powerwall/strings.json +++ b/homeassistant/components/powerwall/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]" }, "error": { "cannot_connect": "A connection error occurred while connecting to the Powerwall: {error}", diff --git a/homeassistant/components/prosegur/strings.json b/homeassistant/components/prosegur/strings.json index aaa4dfe87671a..fcae90637970d 100644 --- a/homeassistant/components/prosegur/strings.json +++ b/homeassistant/components/prosegur/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/proxmoxve/strings.json b/homeassistant/components/proxmoxve/strings.json index f15f64403e56c..d138c26c6ca57 100644 --- a/homeassistant/components/proxmoxve/strings.json +++ b/homeassistant/components/proxmoxve/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "api_error_no_details": "An error occurred while communicating with the Proxmox VE instance.", diff --git a/homeassistant/components/pterodactyl/strings.json b/homeassistant/components/pterodactyl/strings.json index 216f85860257f..134875a8d1991 100644 --- a/homeassistant/components/pterodactyl/strings.json +++ b/homeassistant/components/pterodactyl/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/purpleair/strings.json b/homeassistant/components/purpleair/strings.json index 2c15e876b82bc..7d7c97ff005e3 100644 --- a/homeassistant/components/purpleair/strings.json +++ b/homeassistant/components/purpleair/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "invalid_api_key": "[%key:common::config_flow::error::invalid_api_key%]", diff --git a/homeassistant/components/pvoutput/strings.json b/homeassistant/components/pvoutput/strings.json index bcee91c397bb8..25045b9722378 100644 --- a/homeassistant/components/pvoutput/strings.json +++ b/homeassistant/components/pvoutput/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/pvpc_hourly_pricing/strings.json b/homeassistant/components/pvpc_hourly_pricing/strings.json index 6d074819b9d91..f7e27ec01125e 100644 --- a/homeassistant/components/pvpc_hourly_pricing/strings.json +++ b/homeassistant/components/pvpc_hourly_pricing/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]" diff --git a/homeassistant/components/pyload/strings.json b/homeassistant/components/pyload/strings.json index 577cdae19b8f4..1900d64f57333 100644 --- a/homeassistant/components/pyload/strings.json +++ b/homeassistant/components/pyload/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/radarr/strings.json b/homeassistant/components/radarr/strings.json index f759b0dec5e4d..bc9098467f5f4 100644 --- a/homeassistant/components/radarr/strings.json +++ b/homeassistant/components/radarr/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/rainbird/strings.json b/homeassistant/components/rainbird/strings.json index 5c2da6a6290ba..2d7857b152d5e 100644 --- a/homeassistant/components/rainbird/strings.json +++ b/homeassistant/components/rainbird/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/rehlko/strings.json b/homeassistant/components/rehlko/strings.json index 3950a2eb7d961..8cdb35a4ba801 100644 --- a/homeassistant/components/rehlko/strings.json +++ b/homeassistant/components/rehlko/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/remember_the_milk/strings.json b/homeassistant/components/remember_the_milk/strings.json index efb6a7f6955c6..ef8472e943f52 100644 --- a/homeassistant/components/remember_the_milk/strings.json +++ b/homeassistant/components/remember_the_milk/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "timeout_token": "Timeout getting access token", "unique_id_mismatch": "The login details correspond to a different account. Please re-authenticate to the previously configured account.", "unknown": "[%key:common::config_flow::error::unknown%]" diff --git a/homeassistant/components/renault/strings.json b/homeassistant/components/renault/strings.json index 116c1f7517935..3f22f671d35f0 100644 --- a/homeassistant/components/renault/strings.json +++ b/homeassistant/components/renault/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "kamereon_no_account": "Unable to find Kamereon account", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The selected Kamereon account ID does not match the previous account ID" }, "error": { diff --git a/homeassistant/components/reolink/strings.json b/homeassistant/components/reolink/strings.json index 48fb9214380aa..34ceb130877fe 100644 --- a/homeassistant/components/reolink/strings.json +++ b/homeassistant/components/reolink/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The MAC address of the device does not match the previous MAC address" }, "error": { diff --git a/homeassistant/components/ring/strings.json b/homeassistant/components/ring/strings.json index afd4ad8b82e8b..f22cfc24d7eb5 100644 --- a/homeassistant/components/ring/strings.json +++ b/homeassistant/components/ring/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", diff --git a/homeassistant/components/rituals_perfume_genie/strings.json b/homeassistant/components/rituals_perfume_genie/strings.json index 309d87bd29993..82dadd0b63067 100644 --- a/homeassistant/components/rituals_perfume_genie/strings.json +++ b/homeassistant/components/rituals_perfume_genie/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/roborock/strings.json b/homeassistant/components/roborock/strings.json index 4d9ad2a8cc2ec..a914ef16720f2 100644 --- a/homeassistant/components/roborock/strings.json +++ b/homeassistant/components/roborock/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured_account": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_account": "Wrong account: Please authenticate with the right account." }, "error": { diff --git a/homeassistant/components/ruckus_unleashed/strings.json b/homeassistant/components/ruckus_unleashed/strings.json index 29b9e8278f0df..d3512b1c573af 100644 --- a/homeassistant/components/ruckus_unleashed/strings.json +++ b/homeassistant/components/ruckus_unleashed/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "invalid_host": "[%key:common::config_flow::error::invalid_host%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "invalid_host": "[%key:common::config_flow::error::invalid_host%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/rympro/strings.json b/homeassistant/components/rympro/strings.json index 15b97aa11ef83..a5e9619010d3e 100644 --- a/homeassistant/components/rympro/strings.json +++ b/homeassistant/components/rympro/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/samsungtv/strings.json b/homeassistant/components/samsungtv/strings.json index 60541f6639cb7..51a7fbd290f12 100644 --- a/homeassistant/components/samsungtv/strings.json +++ b/homeassistant/components/samsungtv/strings.json @@ -6,8 +6,7 @@ "auth_missing": "Home Assistant is not authorized to connect to this Samsung TV. Check your TV's External Device Manager settings to authorize Home Assistant.", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "id_missing": "This Samsung device doesn't have a serial number to identify it.", - "not_supported": "This Samsung device is currently not supported.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "not_supported": "This Samsung device is currently not supported." }, "error": { "auth_missing": "[%key:component::samsungtv::config::abort::auth_missing%]", diff --git a/homeassistant/components/schlage/strings.json b/homeassistant/components/schlage/strings.json index f803a4fa5c9a1..847ebc189504e 100644 --- a/homeassistant/components/schlage/strings.json +++ b/homeassistant/components/schlage/strings.json @@ -6,7 +6,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_account": "The user credentials provided do not match this Schlage account." }, "error": { diff --git a/homeassistant/components/sense/strings.json b/homeassistant/components/sense/strings.json index 5248f02181d68..62b605c6036f8 100644 --- a/homeassistant/components/sense/strings.json +++ b/homeassistant/components/sense/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/sensibo/strings.json b/homeassistant/components/sensibo/strings.json index 69ceb0ed0c19d..508a4b8e73628 100644 --- a/homeassistant/components/sensibo/strings.json +++ b/homeassistant/components/sensibo/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/senz/strings.json b/homeassistant/components/senz/strings.json index 0e9dc96267280..f763847bad11e 100644 --- a/homeassistant/components/senz/strings.json +++ b/homeassistant/components/senz/strings.json @@ -3,8 +3,7 @@ "abort": { "account_mismatch": "The used account does not match the original account", "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]" }, "create_entry": { "default": "[%key:common::config_flow::create_entry::authenticated%]" diff --git a/homeassistant/components/sfr_box/strings.json b/homeassistant/components/sfr_box/strings.json index 743055a9c07b7..2686bbfe0e632 100644 --- a/homeassistant/components/sfr_box/strings.json +++ b/homeassistant/components/sfr_box/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "Please ensure you reconfigure against the same device." }, "error": { diff --git a/homeassistant/components/shelly/strings.json b/homeassistant/components/shelly/strings.json index 69648c37673b9..05cf32afe55d8 100644 --- a/homeassistant/components/shelly/strings.json +++ b/homeassistant/components/shelly/strings.json @@ -12,7 +12,6 @@ "ipv6_not_supported": "IPv6 is not supported.", "mac_address_mismatch": "[%key:component::shelly::config::error::mac_address_mismatch%]", "no_wifi_networks": "No Wi-Fi networks found during scan.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "reauth_unsuccessful": "Re-authentication was unsuccessful, please remove the integration and set it up again.", "unknown": "[%key:common::config_flow::error::unknown%]", "wifi_provisioned": "Wi-Fi credentials for {ssid} have been provisioned to {name}. The device is connecting to Wi-Fi and will complete setup automatically." diff --git a/homeassistant/components/skybell/strings.json b/homeassistant/components/skybell/strings.json index 85b83166482a0..31fefed0c18a3 100644 --- a/homeassistant/components/skybell/strings.json +++ b/homeassistant/components/skybell/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/sleepiq/strings.json b/homeassistant/components/sleepiq/strings.json index 5b92224babfd4..00b468d6b2761 100644 --- a/homeassistant/components/sleepiq/strings.json +++ b/homeassistant/components/sleepiq/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/sma/strings.json b/homeassistant/components/sma/strings.json index 9027daa43f6b3..482e9375a0723 100644 --- a/homeassistant/components/sma/strings.json +++ b/homeassistant/components/sma/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "You selected a different SMA device than the one this config entry was configured with, this is not allowed." }, "error": { diff --git a/homeassistant/components/smarla/strings.json b/homeassistant/components/smarla/strings.json index dc3ea906fd333..95ca1cd8f6d00 100644 --- a/homeassistant/components/smarla/strings.json +++ b/homeassistant/components/smarla/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "Please ensure you reconfigure against the same device." }, "error": { diff --git a/homeassistant/components/smartthings/strings.json b/homeassistant/components/smartthings/strings.json index 8948c15fe17bd..d2250780190cd 100644 --- a/homeassistant/components/smartthings/strings.json +++ b/homeassistant/components/smartthings/strings.json @@ -6,8 +6,7 @@ "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", "missing_scopes": "Authentication failed. Please make sure you have granted all required permissions.", "reauth_account_mismatch": "Authenticated account does not match the account to be reauthenticated. Please log in with the correct account and pick the right location.", - "reauth_location_mismatch": "Authenticated location does not match the location to be reauthenticated. Please log in with the correct account and pick the right location.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "reauth_location_mismatch": "Authenticated location does not match the location to be reauthenticated. Please log in with the correct account and pick the right location." }, "error": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" diff --git a/homeassistant/components/smarttub/strings.json b/homeassistant/components/smarttub/strings.json index 631be8fa0e872..d797886363f57 100644 --- a/homeassistant/components/smarttub/strings.json +++ b/homeassistant/components/smarttub/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]" diff --git a/homeassistant/components/smlight/strings.json b/homeassistant/components/smlight/strings.json index 87f8314f74295..cde11e4747999 100644 --- a/homeassistant/components/smlight/strings.json +++ b/homeassistant/components/smlight/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "reauth_failed": "[%key:common::config_flow::error::invalid_auth%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "Please ensure you reconfigure against the same device.", "unsupported_device": "This device is not yet supported by the SMLIGHT integration" }, diff --git a/homeassistant/components/smtp/strings.json b/homeassistant/components/smtp/strings.json index a0ad41e82f2dd..93d7f4b7a2fd0 100644 --- a/homeassistant/components/smtp/strings.json +++ b/homeassistant/components/smtp/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/solarlog/strings.json b/homeassistant/components/solarlog/strings.json index 83ea4a0422d1b..3878bbee0b139 100644 --- a/homeassistant/components/solarlog/strings.json +++ b/homeassistant/components/solarlog/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", diff --git a/homeassistant/components/sonarr/strings.json b/homeassistant/components/sonarr/strings.json index b7c30ff6899b1..a9894ce15e660 100644 --- a/homeassistant/components/sonarr/strings.json +++ b/homeassistant/components/sonarr/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/specialized_turbo/strings.json b/homeassistant/components/specialized_turbo/strings.json index 5aaf50fe31710..1a9e658582904 100644 --- a/homeassistant/components/specialized_turbo/strings.json +++ b/homeassistant/components/specialized_turbo/strings.json @@ -3,8 +3,7 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]", - "not_encrypted": "This bike has no stored encryption key to reconfigure.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "not_encrypted": "This bike has no stored encryption key to reconfigure." }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/splunk/strings.json b/homeassistant/components/splunk/strings.json index 7f13d4540b7b2..fc4cf98949642 100644 --- a/homeassistant/components/splunk/strings.json +++ b/homeassistant/components/splunk/strings.json @@ -5,7 +5,6 @@ "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", "invalid_config": "The YAML configuration is invalid and cannot be imported. Please check your configuration.yaml file.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/spotify/strings.json b/homeassistant/components/spotify/strings.json index 98ac05f0bddb4..d1dc1677cba7b 100644 --- a/homeassistant/components/spotify/strings.json +++ b/homeassistant/components/spotify/strings.json @@ -5,7 +5,6 @@ "connection_error": "Could not fetch account information. Is the user registered in the Spotify Developer Dashboard?", "missing_configuration": "The Spotify integration is not configured. Please follow the documentation.", "reauth_account_mismatch": "The Spotify account authenticated with does not match the account that needed re-authentication.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "user_not_premium": "The Spotify API has been changed and Developer applications created with a free account can no longer access the API. To continue using the Spotify integration, you should use an Spotify Developer application created with a Spotify Premium account, or upgrade to Spotify Premium." }, "create_entry": { diff --git a/homeassistant/components/steam_online/strings.json b/homeassistant/components/steam_online/strings.json index 8cda691ba3894..68ff9f1818077 100644 --- a/homeassistant/components/steam_online/strings.json +++ b/homeassistant/components/steam_online/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "already_configured_as_subentry": "This Steam account is already configured as a sub-entry.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured_as_subentry": "This Steam account is already configured as a sub-entry." }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/surepetcare/strings.json b/homeassistant/components/surepetcare/strings.json index ecb60ced54869..6ad48cdf0bcdf 100644 --- a/homeassistant/components/surepetcare/strings.json +++ b/homeassistant/components/surepetcare/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/switcher_kis/strings.json b/homeassistant/components/switcher_kis/strings.json index d632db07e8e18..2110eeef1b8ac 100644 --- a/homeassistant/components/switcher_kis/strings.json +++ b/homeassistant/components/switcher_kis/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]" }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]" diff --git a/homeassistant/components/system_bridge/strings.json b/homeassistant/components/system_bridge/strings.json index 3ad9acbc6007e..d98d59d918ede 100644 --- a/homeassistant/components/system_bridge/strings.json +++ b/homeassistant/components/system_bridge/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The identifier does not match the previous identifier", "unknown": "[%key:common::config_flow::error::unknown%]", "unsupported_version": "Your version of System Bridge is not supported. Please upgrade to the latest version." diff --git a/homeassistant/components/tado/strings.json b/homeassistant/components/tado/strings.json index 2a67a5116ccf4..f98159d8d4ae4 100644 --- a/homeassistant/components/tado/strings.json +++ b/homeassistant/components/tado/strings.json @@ -5,8 +5,7 @@ "api_rate_limit_reached": "Tado API rate limit reached. Please wait and try again later.", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "could_not_authenticate": "Could not authenticate with Tado.", - "no_homes": "There are no homes linked to this Tado account.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "no_homes": "There are no homes linked to this Tado account." }, "progress": { "wait_for_device": "To authenticate, open the following URL and login at Tado:\n{url}\nIf the code is not automatically copied, paste the following code to authorize the integration:\n\n```{code}```\n\n\nThe login attempt will time out after five minutes." diff --git a/homeassistant/components/tailscale/strings.json b/homeassistant/components/tailscale/strings.json index f90e00489e1a9..1132a15e5387b 100644 --- a/homeassistant/components/tailscale/strings.json +++ b/homeassistant/components/tailscale/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/tailwind/strings.json b/homeassistant/components/tailwind/strings.json index b9bffc428571a..eca890997f1f7 100644 --- a/homeassistant/components/tailwind/strings.json +++ b/homeassistant/components/tailwind/strings.json @@ -5,7 +5,6 @@ "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "different_device": "The entered information is for a different Tailwind device.", "no_device_id": "The discovered Tailwind device did not provide a device ID.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]", "unsupported_firmware": "The firmware of your Tailwind device is not supported. Please update your Tailwind device to the latest firmware version using the Tailwind app." }, diff --git a/homeassistant/components/tankerkoenig/strings.json b/homeassistant/components/tankerkoenig/strings.json index 792d8e582dea3..cecd83fec894a 100644 --- a/homeassistant/components/tankerkoenig/strings.json +++ b/homeassistant/components/tankerkoenig/strings.json @@ -8,8 +8,7 @@ }, "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_location%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_location%]" }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", diff --git a/homeassistant/components/tautulli/strings.json b/homeassistant/components/tautulli/strings.json index 814dc650e4752..97f43302b4aa3 100644 --- a/homeassistant/components/tautulli/strings.json +++ b/homeassistant/components/tautulli/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/tedee/strings.json b/homeassistant/components/tedee/strings.json index c147faf28d58b..56bf787f8430d 100644 --- a/homeassistant/components/tedee/strings.json +++ b/homeassistant/components/tedee/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "You selected a different bridge than the one this config entry was configured with, this is not allowed." }, "error": { diff --git a/homeassistant/components/telegram_bot/strings.json b/homeassistant/components/telegram_bot/strings.json index a91d5dbf21bff..7a9428cabe5e5 100644 --- a/homeassistant/components/telegram_bot/strings.json +++ b/homeassistant/components/telegram_bot/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "bot_logout_failed": "Failed to log out Telegram bot. Please try again later.", diff --git a/homeassistant/components/teltonika/strings.json b/homeassistant/components/teltonika/strings.json index f775e620035c8..e6718b6b3d684 100644 --- a/homeassistant/components/teltonika/strings.json +++ b/homeassistant/components/teltonika/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_account": "The device does not match the existing configuration." }, "error": { diff --git a/homeassistant/components/tesla_fleet/strings.json b/homeassistant/components/tesla_fleet/strings.json index 795124bb70771..3e1169555bc02 100644 --- a/homeassistant/components/tesla_fleet/strings.json +++ b/homeassistant/components/tesla_fleet/strings.json @@ -3,8 +3,7 @@ "abort": { "already_configured": "Configuration updated for profile.", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_account_mismatch": "The reauthentication account does not match the original account", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "reauth_account_mismatch": "The reauthentication account does not match the original account" }, "create_entry": { "default": "Successfully authenticated with Tesla." diff --git a/homeassistant/components/teslemetry/strings.json b/homeassistant/components/teslemetry/strings.json index 045c393dd646f..8d10d28ce2bd7 100644 --- a/homeassistant/components/teslemetry/strings.json +++ b/homeassistant/components/teslemetry/strings.json @@ -29,7 +29,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "reauth_account_mismatch": "The reauthentication account does not match the original account", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "reconfigure_account_mismatch": "The reconfiguration account does not match the original account" }, "error": { diff --git a/homeassistant/components/tessie/strings.json b/homeassistant/components/tessie/strings.json index b5c705a916b6e..cd21b57389f7c 100644 --- a/homeassistant/components/tessie/strings.json +++ b/homeassistant/components/tessie/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_service%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/thethingsnetwork/strings.json b/homeassistant/components/thethingsnetwork/strings.json index 9314a3043df2d..35daa429ead5e 100644 --- a/homeassistant/components/thethingsnetwork/strings.json +++ b/homeassistant/components/thethingsnetwork/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "Application ID is already configured", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "Application ID is already configured" }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", diff --git a/homeassistant/components/tibber/strings.json b/homeassistant/components/tibber/strings.json index 93abe359cb0d8..780df034e0cea 100644 --- a/homeassistant/components/tibber/strings.json +++ b/homeassistant/components/tibber/strings.json @@ -5,7 +5,6 @@ "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "invalid_access_token": "[%key:common::config_flow::error::invalid_access_token%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_account": "The connected account does not match {title}. Sign in with the same Tibber account and try again." }, "step": { diff --git a/homeassistant/components/tplink_omada/strings.json b/homeassistant/components/tplink_omada/strings.json index f03314a167607..f03147976fc0c 100644 --- a/homeassistant/components/tplink_omada/strings.json +++ b/homeassistant/components/tplink_omada/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "device_mismatch": "Please ensure you reauthenticate the same controller.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "device_mismatch": "Please ensure you reauthenticate the same controller." }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/traccar_server/strings.json b/homeassistant/components/traccar_server/strings.json index 514636e105c4d..c6fffd90dc81b 100644 --- a/homeassistant/components/traccar_server/strings.json +++ b/homeassistant/components/traccar_server/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/trafikverket_camera/strings.json b/homeassistant/components/trafikverket_camera/strings.json index 706c7462c81fb..4cd14310233cd 100644 --- a/homeassistant/components/trafikverket_camera/strings.json +++ b/homeassistant/components/trafikverket_camera/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/trafikverket_ferry/strings.json b/homeassistant/components/trafikverket_ferry/strings.json index 1e8528f358974..9758932607c9f 100644 --- a/homeassistant/components/trafikverket_ferry/strings.json +++ b/homeassistant/components/trafikverket_ferry/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/trafikverket_train/strings.json b/homeassistant/components/trafikverket_train/strings.json index 0084ac0775655..83f736c73c65f 100644 --- a/homeassistant/components/trafikverket_train/strings.json +++ b/homeassistant/components/trafikverket_train/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/trafikverket_weatherstation/strings.json b/homeassistant/components/trafikverket_weatherstation/strings.json index cb883a45f6270..d178525b5299d 100644 --- a/homeassistant/components/trafikverket_weatherstation/strings.json +++ b/homeassistant/components/trafikverket_weatherstation/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/transmission/strings.json b/homeassistant/components/transmission/strings.json index b9e5abb18b5b3..4fef7b8f92b2b 100644 --- a/homeassistant/components/transmission/strings.json +++ b/homeassistant/components/transmission/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/trmnl/strings.json b/homeassistant/components/trmnl/strings.json index a6687e9262f4f..e5100d77c93b0 100644 --- a/homeassistant/components/trmnl/strings.json +++ b/homeassistant/components/trmnl/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The API key belongs to a different account. Please use the API key for the original account." }, "error": { diff --git a/homeassistant/components/tuya/strings.json b/homeassistant/components/tuya/strings.json index 8676c8dc8b24d..b3aaf5fedd0ee 100644 --- a/homeassistant/components/tuya/strings.json +++ b/homeassistant/components/tuya/strings.json @@ -1,8 +1,5 @@ { "config": { - "abort": { - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" - }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", "login_error": "Login error ({code}): {msg}" diff --git a/homeassistant/components/twitch/strings.json b/homeassistant/components/twitch/strings.json index 93372966b89c1..6bba2a8366bdd 100644 --- a/homeassistant/components/twitch/strings.json +++ b/homeassistant/components/twitch/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]", "wrong_account": "Wrong account: Please authenticate with {username}." }, diff --git a/homeassistant/components/uhoo/strings.json b/homeassistant/components/uhoo/strings.json index 56086e9d46b1c..b13d3d610c1ee 100644 --- a/homeassistant/components/uhoo/strings.json +++ b/homeassistant/components/uhoo/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/unifi_access/strings.json b/homeassistant/components/unifi_access/strings.json index 1eaa4248fd26b..92f51d5c7b6a8 100644 --- a/homeassistant/components/unifi_access/strings.json +++ b/homeassistant/components/unifi_access/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/unifiprotect/strings.json b/homeassistant/components/unifiprotect/strings.json index a337157a6929d..48b4721cafefa 100644 --- a/homeassistant/components/unifiprotect/strings.json +++ b/homeassistant/components/unifiprotect/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "discovery_started": "Discovery started", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_nvr": "Connected to a different NVR than expected. If you replaced your hardware, please remove the old integration and add it again." }, "error": { diff --git a/homeassistant/components/uptime_kuma/strings.json b/homeassistant/components/uptime_kuma/strings.json index 1d52d0f859e21..b6eb88e8ec522 100644 --- a/homeassistant/components/uptime_kuma/strings.json +++ b/homeassistant/components/uptime_kuma/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/velux/strings.json b/homeassistant/components/velux/strings.json index fb1ea00ed9a49..ab7d24fd856f6 100644 --- a/homeassistant/components/velux/strings.json +++ b/homeassistant/components/velux/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/verisure/strings.json b/homeassistant/components/verisure/strings.json index 1942192294798..d49ac4cd32571 100644 --- a/homeassistant/components/verisure/strings.json +++ b/homeassistant/components/verisure/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", diff --git a/homeassistant/components/vesync/strings.json b/homeassistant/components/vesync/strings.json index 909626a99cd75..6506488ba0e9b 100644 --- a/homeassistant/components/vesync/strings.json +++ b/homeassistant/components/vesync/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "VeSync account is already configured", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_account": "The account you are trying to re-authenticate is different from the one configured" }, "error": { diff --git a/homeassistant/components/vicare/strings.json b/homeassistant/components/vicare/strings.json index ad723aed14f2a..afdef6212a495 100644 --- a/homeassistant/components/vicare/strings.json +++ b/homeassistant/components/vicare/strings.json @@ -6,7 +6,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "create_entry": { diff --git a/homeassistant/components/victron_ble/strings.json b/homeassistant/components/victron_ble/strings.json index be63312d11e05..ef524360193fe 100644 --- a/homeassistant/components/victron_ble/strings.json +++ b/homeassistant/components/victron_ble/strings.json @@ -10,8 +10,7 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "invalid_access_token": "Invalid encryption key for instant readout", "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]", - "not_supported": "Device not supported", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "not_supported": "Device not supported" }, "error": { "invalid_access_token": "Invalid encryption key for instant readout", diff --git a/homeassistant/components/victron_gx/strings.json b/homeassistant/components/victron_gx/strings.json index 4d77adeb9418d..11b5ad0c211d4 100644 --- a/homeassistant/components/victron_gx/strings.json +++ b/homeassistant/components/victron_gx/strings.json @@ -111,7 +111,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "different_device": "The device at this address is different from the originally configured device.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/vistapool/strings.json b/homeassistant/components/vistapool/strings.json index a495a367f75af..7b6fa157be190 100644 --- a/homeassistant/components/vistapool/strings.json +++ b/homeassistant/components/vistapool/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "account_mismatch": "The credentials entered are for a different Vistapool account than the one being reconfigured.", - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/vizio/strings.json b/homeassistant/components/vizio/strings.json index 7cf7dc0fecb85..2f7fea728820a 100644 --- a/homeassistant/components/vizio/strings.json +++ b/homeassistant/components/vizio/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured_device": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "Please ensure you reconfigure against the same device." }, "error": { diff --git a/homeassistant/components/vlc_telnet/strings.json b/homeassistant/components/vlc_telnet/strings.json index 8d92e0560c695..016dd0850fbc2 100644 --- a/homeassistant/components/vlc_telnet/strings.json +++ b/homeassistant/components/vlc_telnet/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_service%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/vodafone_station/strings.json b/homeassistant/components/vodafone_station/strings.json index 3303a43656033..90c20299bae70 100644 --- a/homeassistant/components/vodafone_station/strings.json +++ b/homeassistant/components/vodafone_station/strings.json @@ -6,7 +6,6 @@ "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", "model_not_supported": "The device model is currently unsupported.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/volvo/strings.json b/homeassistant/components/volvo/strings.json index 48e32cd616d1b..b081ab2531df4 100644 --- a/homeassistant/components/volvo/strings.json +++ b/homeassistant/components/volvo/strings.json @@ -5,8 +5,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]" }, "create_entry": { "default": "[%key:common::config_flow::create_entry::authenticated%]" diff --git a/homeassistant/components/wallbox/strings.json b/homeassistant/components/wallbox/strings.json index 63c12c7efd07e..ff50ea4bac18d 100644 --- a/homeassistant/components/wallbox/strings.json +++ b/homeassistant/components/wallbox/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/waterfurnace/strings.json b/homeassistant/components/waterfurnace/strings.json index d7d427d9a04cc..fb9ba1ee2cfc9 100644 --- a/homeassistant/components/waterfurnace/strings.json +++ b/homeassistant/components/waterfurnace/strings.json @@ -5,7 +5,6 @@ "cannot_connect": "Please verify your credentials.", "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", "no_devices": "No devices found on your account.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "Unexpected error, please try again.", "wrong_account": "You must reauthenticate with the same WaterFurnace account that was originally configured." }, diff --git a/homeassistant/components/watts/strings.json b/homeassistant/components/watts/strings.json index e53394722db0a..ca98ddfc72c48 100644 --- a/homeassistant/components/watts/strings.json +++ b/homeassistant/components/watts/strings.json @@ -4,8 +4,7 @@ "account_mismatch": "The authenticated account does not match the configured account", "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "invalid_token": "The provided access token is invalid.", - "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]" }, "create_entry": { "default": "[%key:common::config_flow::create_entry::authenticated%]" diff --git a/homeassistant/components/wattwaechter/strings.json b/homeassistant/components/wattwaechter/strings.json index 5e22def4563a4..f2e087e53c401 100644 --- a/homeassistant/components/wattwaechter/strings.json +++ b/homeassistant/components/wattwaechter/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_device": "The device does not match the original WattWächter Plus device." }, "error": { diff --git a/homeassistant/components/webostv/strings.json b/homeassistant/components/webostv/strings.json index f0c0bdcc90745..52db9913d2aa8 100644 --- a/homeassistant/components/webostv/strings.json +++ b/homeassistant/components/webostv/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "already_in_progress": "[%key:common::config_flow::abort::already_in_progress%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_device": "The configured device is not the same found at this hostname or IP address." }, "error": { diff --git a/homeassistant/components/weheat/strings.json b/homeassistant/components/weheat/strings.json index 1b44b6efeddea..74b2da3ad197b 100644 --- a/homeassistant/components/weheat/strings.json +++ b/homeassistant/components/weheat/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", "no_devices_found": "Could not find any heat pumps on this account", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_account": "You can only reauthenticate this account with the same user." }, "create_entry": { diff --git a/homeassistant/components/whirlpool/strings.json b/homeassistant/components/whirlpool/strings.json index 75a70e8e89b41..4ae317a1e3b55 100644 --- a/homeassistant/components/whirlpool/strings.json +++ b/homeassistant/components/whirlpool/strings.json @@ -4,8 +4,7 @@ }, "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "account_locked": "[%key:component::whirlpool::common::account_locked_error%]", diff --git a/homeassistant/components/withings/strings.json b/homeassistant/components/withings/strings.json index 71d9bb272f873..4d7250a18c6b8 100644 --- a/homeassistant/components/withings/strings.json +++ b/homeassistant/components/withings/strings.json @@ -6,7 +6,6 @@ "abort": { "already_configured": "Configuration updated for profile.", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "wrong_account": "Authenticated account does not match the account to be reauthenticated. Please log in with the correct account." }, "create_entry": { diff --git a/homeassistant/components/xbox/strings.json b/homeassistant/components/xbox/strings.json index 384972aa7bec8..ee77d3c81a8c8 100644 --- a/homeassistant/components/xbox/strings.json +++ b/homeassistant/components/xbox/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "already_configured_as_subentry": "This account is already configured as a sub-entry. Please remove the existing sub-entry before adding it.", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The account ({gamertag}) you used is not the one previously configured. Please sign in again with the correct account." }, "create_entry": { diff --git a/homeassistant/components/xiaomi_miio/strings.json b/homeassistant/components/xiaomi_miio/strings.json index 5efc44b57621b..a411e9de1a7b4 100644 --- a/homeassistant/components/xiaomi_miio/strings.json +++ b/homeassistant/components/xiaomi_miio/strings.json @@ -4,7 +4,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "incomplete_info": "Incomplete information to set up device, no host or token supplied.", "not_xiaomi_miio": "Device is not (yet) supported by Xiaomi Home integration.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]" }, "error": { diff --git a/homeassistant/components/yale/strings.json b/homeassistant/components/yale/strings.json index 76a5c0ea118f7..c05060cee404a 100644 --- a/homeassistant/components/yale/strings.json +++ b/homeassistant/components/yale/strings.json @@ -3,8 +3,7 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_invalid_user": "Reauthenticate must use the same account.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "reauth_invalid_user": "Reauthenticate must use the same account." }, "create_entry": { "default": "[%key:common::config_flow::create_entry::authenticated%]" diff --git a/homeassistant/components/yale_smart_alarm/strings.json b/homeassistant/components/yale_smart_alarm/strings.json index 8f6ecc3643b4f..7548e558521d9 100644 --- a/homeassistant/components/yale_smart_alarm/strings.json +++ b/homeassistant/components/yale_smart_alarm/strings.json @@ -1,8 +1,7 @@ { "config": { "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_account%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/yalexs_ble/strings.json b/homeassistant/components/yalexs_ble/strings.json index 5951301075996..77c3b4d0b723a 100644 --- a/homeassistant/components/yalexs_ble/strings.json +++ b/homeassistant/components/yalexs_ble/strings.json @@ -3,8 +3,7 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", "already_in_progress": "[%key:common::config_flow::abort::already_in_progress%]", - "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]" }, "error": { "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", diff --git a/homeassistant/components/yolink/strings.json b/homeassistant/components/yolink/strings.json index 35c28b3bd5ccf..17db1ae59d82d 100644 --- a/homeassistant/components/yolink/strings.json +++ b/homeassistant/components/yolink/strings.json @@ -2,8 +2,7 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", - "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]" + "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]" }, "create_entry": { "default": "[%key:common::config_flow::create_entry::authenticated%]" diff --git a/homeassistant/components/yoto/strings.json b/homeassistant/components/yoto/strings.json index 154704c916c54..1ab512a8b3532 100644 --- a/homeassistant/components/yoto/strings.json +++ b/homeassistant/components/yoto/strings.json @@ -3,7 +3,6 @@ "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "missing_configuration": "[%key:common::config_flow::abort::oauth2_missing_configuration%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The reauthorized account does not match the original Yoto account. Please log in with the same account." }, "create_entry": { diff --git a/homeassistant/components/youtube/strings.json b/homeassistant/components/youtube/strings.json index a4cdc32a49506..457ab5be86f23 100644 --- a/homeassistant/components/youtube/strings.json +++ b/homeassistant/components/youtube/strings.json @@ -5,7 +5,6 @@ "already_configured": "[%key:common::config_flow::abort::already_configured_account%]", "no_channel": "Please create a YouTube channel to be able to use the integration. Instructions can be found at {support_url}.", "no_subscriptions": "You need to be subscribed to YouTube channels in order to add them.", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unknown": "[%key:common::config_flow::error::unknown%]", "wrong_account": "Wrong account: please authenticate with the right account." }, diff --git a/homeassistant/components/zonneplan/strings.json b/homeassistant/components/zonneplan/strings.json index 91a3a26eda657..1e34035c7ab0e 100644 --- a/homeassistant/components/zonneplan/strings.json +++ b/homeassistant/components/zonneplan/strings.json @@ -2,7 +2,6 @@ "config": { "abort": { "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", - "reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]", "unique_id_mismatch": "The one-time password was validated for a different Zonneplan account than the one configured." }, "error": { diff --git a/homeassistant/config_entries.py b/homeassistant/config_entries.py index 4885457131923..64f14ba0876d8 100644 --- a/homeassistant/config_entries.py +++ b/homeassistant/config_entries.py @@ -3545,9 +3545,9 @@ def async_update_and_abort( if reason is UNDEFINED: if self.source == SOURCE_RECONFIGURE: reason = "reconfigure_successful" - translation_domain = HOMEASSISTANT_DOMAIN else: reason = "reauth_successful" + translation_domain = HOMEASSISTANT_DOMAIN return self.async_abort(reason=reason, translation_domain=translation_domain) @callback @@ -3603,9 +3603,9 @@ def async_update_reload_and_abort( if reason is UNDEFINED: if self.source == SOURCE_RECONFIGURE: reason = "reconfigure_successful" - translation_domain = HOMEASSISTANT_DOMAIN else: reason = "reauth_successful" + translation_domain = HOMEASSISTANT_DOMAIN return self.async_abort(reason=reason, translation_domain=translation_domain) @callback diff --git a/tests/test_config_entries.py b/tests/test_config_entries.py index 67cacca263c8b..240cc1b59fa7f 100644 --- a/tests/test_config_entries.py +++ b/tests/test_config_entries.py @@ -7308,7 +7308,11 @@ def test_raise_trying_to_add_same_config_entry_twice( @pytest.mark.parametrize( ("source", "reason", "translation_domain"), [ - (config_entries.SOURCE_REAUTH, "reauth_successful", None), + ( + config_entries.SOURCE_REAUTH, + "reauth_successful", + HOMEASSISTANT_DOMAIN, + ), ( config_entries.SOURCE_RECONFIGURE, "reconfigure_successful", @@ -7455,7 +7459,11 @@ async def async_step_reconfigure(self, data): @pytest.mark.parametrize( ("source", "reason", "translation_domain"), [ - (config_entries.SOURCE_REAUTH, "reauth_successful", None), + ( + config_entries.SOURCE_REAUTH, + "reauth_successful", + HOMEASSISTANT_DOMAIN, + ), ( config_entries.SOURCE_RECONFIGURE, "reconfigure_successful", From 42b59fa87b4a1dc07ecd5e09dd7f869c9b7653bb Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Mon, 7 Sep 2026 11:19:17 -0400 Subject: [PATCH 25/26] Bump vizaio to 0.6.2 (#181562) --- homeassistant/components/vizio/manifest.json | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/vizio/manifest.json b/homeassistant/components/vizio/manifest.json index b4290f5d4a05e..bff7a9e04976f 100644 --- a/homeassistant/components/vizio/manifest.json +++ b/homeassistant/components/vizio/manifest.json @@ -7,6 +7,6 @@ "integration_type": "device", "iot_class": "local_polling", "loggers": ["vizaio"], - "requirements": ["vizaio==0.6.1"], + "requirements": ["vizaio==0.6.2"], "zeroconf": ["_viziocast._tcp.local."] } diff --git a/requirements_all.txt b/requirements_all.txt index de95fc0ab5841..3003c8ea2900e 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -3394,7 +3394,7 @@ vilfo-api-client==0.5.0 visionpluspython==1.1.0 # homeassistant.components.vizio -vizaio==0.6.1 +vizaio==0.6.2 # homeassistant.components.caldav vobject==0.9.9 From 7d4fe95ee9846dd99bb588b2c48a3584d4f61619 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milo=C5=A1=20Sva=C5=A1ek?= Date: Mon, 7 Sep 2026 17:21:02 +0200 Subject: [PATCH 26/26] Add binary_sensor platform to NeoPool (#180393) --- .../components/neopool/binary_sensor.py | 390 ++++ homeassistant/components/neopool/const.py | 1 + homeassistant/components/neopool/strings.json | 89 + tests/components/neopool/conftest.py | 61 + .../neopool/snapshots/test_binary_sensor.ambr | 1836 +++++++++++++++++ .../neopool/snapshots/test_diagnostics.ambr | 6 + .../components/neopool/test_binary_sensor.py | 255 +++ 7 files changed, 2638 insertions(+) create mode 100644 homeassistant/components/neopool/binary_sensor.py create mode 100644 tests/components/neopool/snapshots/test_binary_sensor.ambr create mode 100644 tests/components/neopool/test_binary_sensor.py diff --git a/homeassistant/components/neopool/binary_sensor.py b/homeassistant/components/neopool/binary_sensor.py new file mode 100644 index 0000000000000..b72e38f2730aa --- /dev/null +++ b/homeassistant/components/neopool/binary_sensor.py @@ -0,0 +1,390 @@ +"""Binary sensor platform for the NeoPool integration.""" + +from collections.abc import Callable +from dataclasses import dataclass +from typing import Any, override + +from neopool_modbus.capabilities import ( + has_heating_relay, + is_chlorine_module_present, + is_conductivity_module_present, + is_hydrolysis_present, + is_ionization_present, + is_ph_module_present, + is_redox_module_present, +) +from neopool_modbus.registers import is_valid_relay_gpio + +from homeassistant.components.binary_sensor import ( + BinarySensorDeviceClass, + BinarySensorEntity, + BinarySensorEntityDescription, +) +from homeassistant.const import EntityCategory +from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback + +from .const import ( + CONF_USE_AUX1, + CONF_USE_AUX2, + CONF_USE_AUX3, + CONF_USE_AUX4, + CONF_USE_COVER_SENSOR, + CONF_USE_LIGHT, +) +from .coordinator import NeoPoolConfigEntry, NeoPoolCoordinator +from .entity import NeoPoolEntity + +PARALLEL_UPDATES = 0 + +type _SupportedFn = Callable[[dict[str, Any]], bool] + + +@dataclass(frozen=True, kw_only=True) +class NeoPoolBinarySensorEntityDescription(BinarySensorEntityDescription): + """Describes a NeoPool binary sensor entity.""" + + supported_fn: _SupportedFn | None = None + value_fn: Callable[[dict[str, Any], HomeAssistant], bool | None] | None = None + + +def _gpio_ok(gpio_key: str) -> _SupportedFn: + """Return a supported_fn that checks a relay GPIO key is valid.""" + return lambda data: gpio_key not in data or is_valid_relay_gpio(data[gpio_key] or 0) + + +def _pool_cover_open(data: dict[str, Any], hass: HomeAssistant) -> bool | None: + """Invert the raw cover state for the OPENING device class. + + The cover bit is only valid while filtration runs; otherwise report unknown. + """ + if data.get("Filtration Pump") is not True: + return None + value = data.get("Pool Cover") + if value is None: + return None + return not bool(value) + + +BINARY_SENSOR_DESCRIPTIONS: dict[str, NeoPoolBinarySensorEntityDescription] = { + "pH Acid Pump": NeoPoolBinarySensorEntityDescription( + key="pH Acid Pump", + translation_key="ph_acid_pump", + device_class=BinarySensorDeviceClass.RUNNING, + entity_category=EntityCategory.DIAGNOSTIC, + supported_fn=_gpio_ok("MBF_PAR_PH_ACID_RELAY_GPIO"), + ), + "Filtration Pump": NeoPoolBinarySensorEntityDescription( + key="Filtration Pump", + translation_key="filtration_pump", + device_class=BinarySensorDeviceClass.RUNNING, + supported_fn=_gpio_ok("MBF_PAR_FILT_GPIO"), + ), + "Pool Light": NeoPoolBinarySensorEntityDescription( + key="Pool Light", + translation_key="pool_light", + device_class=BinarySensorDeviceClass.LIGHT, + supported_fn=_gpio_ok("MBF_PAR_LIGHTING_GPIO"), + ), + "AUX1": NeoPoolBinarySensorEntityDescription( + key="AUX1", + translation_key="aux", + translation_placeholders={"number": "1"}, + device_class=BinarySensorDeviceClass.POWER, + ), + "AUX2": NeoPoolBinarySensorEntityDescription( + key="AUX2", + translation_key="aux", + translation_placeholders={"number": "2"}, + device_class=BinarySensorDeviceClass.POWER, + ), + "AUX3": NeoPoolBinarySensorEntityDescription( + key="AUX3", + translation_key="aux", + translation_placeholders={"number": "3"}, + device_class=BinarySensorDeviceClass.POWER, + ), + "AUX4": NeoPoolBinarySensorEntityDescription( + key="AUX4", + translation_key="aux", + translation_placeholders={"number": "4"}, + device_class=BinarySensorDeviceClass.POWER, + ), + "pH module control status": NeoPoolBinarySensorEntityDescription( + key="pH module control status", + translation_key="ph_module_control_status", + device_class=BinarySensorDeviceClass.RUNNING, + entity_category=EntityCategory.DIAGNOSTIC, + entity_registry_enabled_default=False, + supported_fn=is_ph_module_present, + ), + "pH control module": NeoPoolBinarySensorEntityDescription( + key="pH control module", + translation_key="ph_control_module", + device_class=BinarySensorDeviceClass.RUNNING, + entity_category=EntityCategory.DIAGNOSTIC, + entity_registry_enabled_default=False, + supported_fn=is_ph_module_present, + ), + "pH measurement active": NeoPoolBinarySensorEntityDescription( + key="pH measurement active", + translation_key="ph_measurement_active", + device_class=BinarySensorDeviceClass.RUNNING, + entity_category=EntityCategory.DIAGNOSTIC, + entity_registry_enabled_default=False, + supported_fn=is_ph_module_present, + ), + "Redox pump active": NeoPoolBinarySensorEntityDescription( + key="Redox pump active", + translation_key="redox_pump_active", + device_class=BinarySensorDeviceClass.RUNNING, + entity_category=EntityCategory.DIAGNOSTIC, + entity_registry_enabled_default=False, + supported_fn=lambda data: ( + is_redox_module_present(data) + and ( + "MBF_PAR_RX_RELAY_GPIO" not in data + or is_valid_relay_gpio(data["MBF_PAR_RX_RELAY_GPIO"] or 0) + ) + ), + ), + "Redox control module": NeoPoolBinarySensorEntityDescription( + key="Redox control module", + translation_key="redox_control_module", + device_class=BinarySensorDeviceClass.RUNNING, + entity_category=EntityCategory.DIAGNOSTIC, + entity_registry_enabled_default=False, + supported_fn=is_redox_module_present, + ), + "Redox measurement active": NeoPoolBinarySensorEntityDescription( + key="Redox measurement active", + translation_key="redox_measurement_active", + device_class=BinarySensorDeviceClass.RUNNING, + entity_category=EntityCategory.DIAGNOSTIC, + entity_registry_enabled_default=False, + supported_fn=is_redox_module_present, + ), + "Chlorine flow sensor problem": NeoPoolBinarySensorEntityDescription( + key="Chlorine flow sensor problem", + translation_key="chlorine_flow_sensor_problem", + device_class=BinarySensorDeviceClass.PROBLEM, + entity_category=EntityCategory.DIAGNOSTIC, + supported_fn=is_chlorine_module_present, + ), + "Chlorine pump active": NeoPoolBinarySensorEntityDescription( + key="Chlorine pump active", + translation_key="chlorine_pump_active", + device_class=BinarySensorDeviceClass.RUNNING, + entity_category=EntityCategory.DIAGNOSTIC, + entity_registry_enabled_default=False, + supported_fn=lambda data: ( + is_chlorine_module_present(data) + and ( + "MBF_PAR_CL_RELAY_GPIO" not in data + or is_valid_relay_gpio(data["MBF_PAR_CL_RELAY_GPIO"] or 0) + ) + ), + ), + "Chlorine control module": NeoPoolBinarySensorEntityDescription( + key="Chlorine control module", + translation_key="chlorine_control_module", + device_class=BinarySensorDeviceClass.RUNNING, + entity_category=EntityCategory.DIAGNOSTIC, + entity_registry_enabled_default=False, + supported_fn=is_chlorine_module_present, + ), + "Chlorine measurement active": NeoPoolBinarySensorEntityDescription( + key="Chlorine measurement active", + translation_key="chlorine_measurement_active", + device_class=BinarySensorDeviceClass.RUNNING, + entity_category=EntityCategory.DIAGNOSTIC, + entity_registry_enabled_default=False, + supported_fn=is_chlorine_module_present, + ), + "Conductivity pump active": NeoPoolBinarySensorEntityDescription( + key="Conductivity pump active", + translation_key="conductivity_pump_active", + device_class=BinarySensorDeviceClass.RUNNING, + entity_category=EntityCategory.DIAGNOSTIC, + entity_registry_enabled_default=False, + supported_fn=lambda data: ( + is_conductivity_module_present(data) + and ( + "MBF_PAR_CD_RELAY_GPIO" not in data + or is_valid_relay_gpio(data["MBF_PAR_CD_RELAY_GPIO"] or 0) + ) + ), + ), + "Conductivity control module": NeoPoolBinarySensorEntityDescription( + key="Conductivity control module", + translation_key="conductivity_control_module", + device_class=BinarySensorDeviceClass.RUNNING, + entity_category=EntityCategory.DIAGNOSTIC, + entity_registry_enabled_default=False, + supported_fn=is_conductivity_module_present, + ), + "Conductivity measurement active": NeoPoolBinarySensorEntityDescription( + key="Conductivity measurement active", + translation_key="conductivity_measurement_active", + device_class=BinarySensorDeviceClass.RUNNING, + entity_category=EntityCategory.DIAGNOSTIC, + entity_registry_enabled_default=False, + supported_fn=is_conductivity_module_present, + ), + "ION On Target": NeoPoolBinarySensorEntityDescription( + key="ION On Target", + translation_key="ion_on_target", + entity_category=EntityCategory.DIAGNOSTIC, + entity_registry_enabled_default=False, + supported_fn=is_ionization_present, # pragma: no cover + ), + "ION Low": NeoPoolBinarySensorEntityDescription( + key="ION Low", + translation_key="ion_low", + device_class=BinarySensorDeviceClass.PROBLEM, + entity_category=EntityCategory.DIAGNOSTIC, + supported_fn=is_ionization_present, # pragma: no cover + ), + "ION Program time exceeded": NeoPoolBinarySensorEntityDescription( + key="ION Program time exceeded", + translation_key="ion_program_time_exceeded", + device_class=BinarySensorDeviceClass.PROBLEM, + entity_category=EntityCategory.DIAGNOSTIC, + supported_fn=is_ionization_present, # pragma: no cover + ), + "HIDRO Low": NeoPoolBinarySensorEntityDescription( + key="HIDRO Low", + translation_key="hidro_low", + device_class=BinarySensorDeviceClass.PROBLEM, + entity_category=EntityCategory.DIAGNOSTIC, + supported_fn=is_hydrolysis_present, + ), + "Pool Cover": NeoPoolBinarySensorEntityDescription( + key="Pool Cover", + translation_key="pool_cover", + device_class=BinarySensorDeviceClass.OPENING, + value_fn=_pool_cover_open, + ), + "HIDRO Module active": NeoPoolBinarySensorEntityDescription( + key="HIDRO Module active", + translation_key="hidro_module_active", + device_class=BinarySensorDeviceClass.RUNNING, + entity_category=EntityCategory.DIAGNOSTIC, + supported_fn=is_hydrolysis_present, + ), + "HIDRO Module regulated": NeoPoolBinarySensorEntityDescription( + key="HIDRO Module regulated", + translation_key="hidro_module_regulated", + device_class=BinarySensorDeviceClass.RUNNING, + entity_category=EntityCategory.DIAGNOSTIC, + entity_registry_enabled_default=False, + supported_fn=is_hydrolysis_present, + ), + "HIDRO Activated by the RX module": NeoPoolBinarySensorEntityDescription( + key="HIDRO Activated by the RX module", + translation_key="hidro_activated_by_the_rx_module", + device_class=BinarySensorDeviceClass.RUNNING, + entity_category=EntityCategory.DIAGNOSTIC, + supported_fn=lambda data: ( + is_hydrolysis_present(data) and is_redox_module_present(data) + ), # pragma: no cover + ), + "HIDRO Chlorine shock mode": NeoPoolBinarySensorEntityDescription( + key="HIDRO Chlorine shock mode", + translation_key="hidro_chlorine_shock_mode", + device_class=BinarySensorDeviceClass.RUNNING, + entity_category=EntityCategory.DIAGNOSTIC, + supported_fn=is_hydrolysis_present, + ), + "HIDRO Activated by the CL module": NeoPoolBinarySensorEntityDescription( + key="HIDRO Activated by the CL module", + translation_key="hidro_activated_by_the_cl_module", + device_class=BinarySensorDeviceClass.RUNNING, + entity_category=EntityCategory.DIAGNOSTIC, + supported_fn=lambda data: ( + is_hydrolysis_present(data) and is_chlorine_module_present(data) + ), + ), + "Heating": NeoPoolBinarySensorEntityDescription( + key="Heating", + translation_key="heating", + device_class=BinarySensorDeviceClass.RUNNING, + entity_category=EntityCategory.DIAGNOSTIC, + supported_fn=has_heating_relay, + ), + "UV Lamp": NeoPoolBinarySensorEntityDescription( + key="UV Lamp", + translation_key="uv_lamp", + device_class=BinarySensorDeviceClass.RUNNING, + entity_category=EntityCategory.DIAGNOSTIC, + supported_fn=lambda data: ( + "MBF_PAR_UV_RELAY_GPIO" not in data + or is_valid_relay_gpio(data["MBF_PAR_UV_RELAY_GPIO"] or 0) + ), + ), +} + + +# Entities gated on a config-entry option (in addition to their supported_fn). +# The controller cannot detect what is physically wired to the light or aux +# relays, nor whether a cover sensor is present, so these entities are opt-in +# per config entry rather than surfaced from a device capability bit. +_ENTITY_OPTION_KEY: dict[str, str] = { + "Pool Light": CONF_USE_LIGHT, + "AUX1": CONF_USE_AUX1, + "AUX2": CONF_USE_AUX2, + "AUX3": CONF_USE_AUX3, + "AUX4": CONF_USE_AUX4, + "Pool Cover": CONF_USE_COVER_SENSOR, +} + + +async def async_setup_entry( + hass: HomeAssistant, + entry: NeoPoolConfigEntry, + async_add_entities: AddConfigEntryEntitiesCallback, +) -> None: + """Set up NeoPool binary sensors from a config entry.""" + coordinator = entry.runtime_data + options = entry.options + + async_add_entities( + NeoPoolBinarySensor(coordinator, key, desc) + for key, desc in BINARY_SENSOR_DESCRIPTIONS.items() + if ( + (option_key := _ENTITY_OPTION_KEY.get(key)) is None + or bool(options.get(option_key)) + ) + and (desc.supported_fn is None or desc.supported_fn(coordinator.data)) + ) + + +class NeoPoolBinarySensor(NeoPoolEntity, BinarySensorEntity): + """Representation of a NeoPool binary sensor.""" + + _winter_mode_active = False + entity_description: NeoPoolBinarySensorEntityDescription + + def __init__( + self, + coordinator: NeoPoolCoordinator, + key: str, + description: NeoPoolBinarySensorEntityDescription, + ) -> None: + """Initialize the binary sensor.""" + super().__init__(coordinator) + self.entity_description = description + self._key = key + self._attr_unique_id = ( + f"{self.coordinator.config_entry.unique_id}_{key.lower()}" + ) + + @property + @override + def is_on(self) -> bool | None: + """Return True if the binary sensor is on.""" + if (value_fn := self.entity_description.value_fn) is not None: + value: bool | None = value_fn(self.coordinator.data, self.hass) + return value + value = self.coordinator.data.get(self._key) + return None if value is None else bool(value) diff --git a/homeassistant/components/neopool/const.py b/homeassistant/components/neopool/const.py index 33ab63a75ae95..c8c0ed3a102f1 100644 --- a/homeassistant/components/neopool/const.py +++ b/homeassistant/components/neopool/const.py @@ -6,6 +6,7 @@ NAME = "NeoPool" PLATFORMS: list[Platform] = [ + Platform.BINARY_SENSOR, Platform.BUTTON, Platform.LIGHT, Platform.SENSOR, diff --git a/homeassistant/components/neopool/strings.json b/homeassistant/components/neopool/strings.json index c795fbfda197b..3002e901e68c7 100644 --- a/homeassistant/components/neopool/strings.json +++ b/homeassistant/components/neopool/strings.json @@ -44,6 +44,95 @@ } }, "entity": { + "binary_sensor": { + "aux": { + "name": "Auxiliary relay {number}" + }, + "chlorine_control_module": { + "name": "Chlorine regulation active" + }, + "chlorine_flow_sensor_problem": { + "name": "Chlorine flow sensor" + }, + "chlorine_measurement_active": { + "name": "Chlorine measurement" + }, + "chlorine_pump_active": { + "name": "Chlorine pump active" + }, + "conductivity_control_module": { + "name": "Conductivity regulation active" + }, + "conductivity_measurement_active": { + "name": "Conductivity measurement" + }, + "conductivity_pump_active": { + "name": "Conductivity pump active" + }, + "filtration_pump": { + "name": "Filtration" + }, + "heating": { + "name": "Heating" + }, + "hidro_activated_by_the_cl_module": { + "name": "Hydrolysis activated by chlorine module" + }, + "hidro_activated_by_the_rx_module": { + "name": "Hydrolysis activated by Redox module" + }, + "hidro_chlorine_shock_mode": { + "name": "Hydrolysis chlorine shock mode (boost)" + }, + "hidro_low": { + "name": "Hydrolysis production problem" + }, + "hidro_module_active": { + "name": "Hydrolysis enabled" + }, + "hidro_module_regulated": { + "name": "Hydrolysis regulation active" + }, + "ion_low": { + "name": "Ionizer production problem" + }, + "ion_on_target": { + "name": "Ionizer on target" + }, + "ion_program_time_exceeded": { + "name": "Ionizer program time exceeded" + }, + "ph_acid_pump": { + "name": "pH acid pump" + }, + "ph_control_module": { + "name": "pH regulation active" + }, + "ph_measurement_active": { + "name": "pH measurement" + }, + "ph_module_control_status": { + "name": "pH flow detection control" + }, + "pool_cover": { + "name": "Pool cover" + }, + "pool_light": { + "name": "Pool light" + }, + "redox_control_module": { + "name": "Redox regulation active" + }, + "redox_measurement_active": { + "name": "Redox measurement" + }, + "redox_pump_active": { + "name": "Redox pump active" + }, + "uv_lamp": { + "name": "UV lamp" + } + }, "button": { "escape": { "name": "Clear error messages" diff --git a/tests/components/neopool/conftest.py b/tests/components/neopool/conftest.py index 0ab265308bcc4..2026f242468d9 100644 --- a/tests/components/neopool/conftest.py +++ b/tests/components/neopool/conftest.py @@ -83,6 +83,15 @@ "pH pump active": False, "pH acid pump active": False, "Filtration Pump": False, + "pH Acid Pump": False, + # Measurement / module "active" bits. The controller keeps measuring the + # probes regardless of filtration state, so these read True even though the + # filtration pump above is off. + "pH measurement active": True, + "Redox measurement active": True, + "Chlorine measurement active": True, + "Conductivity measurement active": True, + "HIDRO Module active": True, "MBF_PAR_HIDRO_COVER_REDUCTION": 0x0C19, "MBF_PAR_HIDRO_COVER_ENABLE": 0x0000, "Pool Cover": 0, @@ -200,6 +209,58 @@ def mock_config_entry_switch() -> MockConfigEntry: ) +@pytest.fixture +def mock_config_entry_binary_sensor() -> MockConfigEntry: + """Return a config entry with the options the binary_sensor platform gates on.""" + return MockConfigEntry( + domain=DOMAIN, + title=MOCK_NAME, + unique_id=MOCK_SERIAL, + version=CURRENT_VERSION, + data={ + CONF_HOST: MOCK_HOST, + CONF_PORT: MOCK_PORT, + CONF_NAME: MOCK_NAME, + "unit_id": DEFAULT_UNIT_ID, + "modbus_framer": "tcp", + }, + options={ + CONF_USE_LIGHT: True, + CONF_USE_COVER_SENSOR: True, + CONF_USE_AUX1: True, + CONF_USE_AUX2: True, + CONF_USE_AUX3: True, + CONF_USE_AUX4: True, + }, + ) + + +@pytest.fixture +def mock_config_entry_binary_sensor_no_options() -> MockConfigEntry: + """Return a config entry with every binary_sensor option disabled.""" + return MockConfigEntry( + domain=DOMAIN, + title=MOCK_NAME, + unique_id=MOCK_SERIAL, + version=CURRENT_VERSION, + data={ + CONF_HOST: MOCK_HOST, + CONF_PORT: MOCK_PORT, + CONF_NAME: MOCK_NAME, + "unit_id": DEFAULT_UNIT_ID, + "modbus_framer": "tcp", + }, + options={ + CONF_USE_LIGHT: False, + CONF_USE_COVER_SENSOR: False, + CONF_USE_AUX1: False, + CONF_USE_AUX2: False, + CONF_USE_AUX3: False, + CONF_USE_AUX4: False, + }, + ) + + @pytest.fixture def mock_neopool_client() -> Generator[MagicMock]: """Patch the NeoPoolModbusClient and return a configurable mock instance.""" diff --git a/tests/components/neopool/snapshots/test_binary_sensor.ambr b/tests/components/neopool/snapshots/test_binary_sensor.ambr new file mode 100644 index 0000000000000..312e5018e21b1 --- /dev/null +++ b/tests/components/neopool/snapshots/test_binary_sensor.ambr @@ -0,0 +1,1836 @@ +# serializer version: 1 +# name: test_all_entities[binary_sensor.neopool_auxiliary_relay_1-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': None, + 'entity_id': 'binary_sensor.neopool_auxiliary_relay_1', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Auxiliary relay 1', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Auxiliary relay 1', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'aux', + 'unique_id': '1234567890_aux1', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_auxiliary_relay_1-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'power', + : 'NeoPool Auxiliary relay 1', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_auxiliary_relay_1', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_auxiliary_relay_2-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': None, + 'entity_id': 'binary_sensor.neopool_auxiliary_relay_2', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Auxiliary relay 2', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Auxiliary relay 2', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'aux', + 'unique_id': '1234567890_aux2', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_auxiliary_relay_2-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'power', + : 'NeoPool Auxiliary relay 2', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_auxiliary_relay_2', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_auxiliary_relay_3-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': None, + 'entity_id': 'binary_sensor.neopool_auxiliary_relay_3', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Auxiliary relay 3', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Auxiliary relay 3', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'aux', + 'unique_id': '1234567890_aux3', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_auxiliary_relay_3-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'power', + : 'NeoPool Auxiliary relay 3', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_auxiliary_relay_3', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_auxiliary_relay_4-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': None, + 'entity_id': 'binary_sensor.neopool_auxiliary_relay_4', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Auxiliary relay 4', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Auxiliary relay 4', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'aux', + 'unique_id': '1234567890_aux4', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_auxiliary_relay_4-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'power', + : 'NeoPool Auxiliary relay 4', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_auxiliary_relay_4', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_chlorine_flow_sensor-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_chlorine_flow_sensor', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Chlorine flow sensor', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Chlorine flow sensor', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'chlorine_flow_sensor_problem', + 'unique_id': '1234567890_chlorine flow sensor problem', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_chlorine_flow_sensor-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'problem', + : 'NeoPool Chlorine flow sensor', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_chlorine_flow_sensor', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_chlorine_measurement-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_chlorine_measurement', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Chlorine measurement', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Chlorine measurement', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'chlorine_measurement_active', + 'unique_id': '1234567890_chlorine measurement active', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_chlorine_measurement-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'running', + : 'NeoPool Chlorine measurement', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_chlorine_measurement', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'on', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_chlorine_pump_active-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_chlorine_pump_active', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Chlorine pump active', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Chlorine pump active', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'chlorine_pump_active', + 'unique_id': '1234567890_chlorine pump active', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_chlorine_pump_active-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'running', + : 'NeoPool Chlorine pump active', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_chlorine_pump_active', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_chlorine_regulation_active-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_chlorine_regulation_active', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Chlorine regulation active', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Chlorine regulation active', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'chlorine_control_module', + 'unique_id': '1234567890_chlorine control module', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_chlorine_regulation_active-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'running', + : 'NeoPool Chlorine regulation active', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_chlorine_regulation_active', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_conductivity_measurement-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_conductivity_measurement', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Conductivity measurement', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Conductivity measurement', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'conductivity_measurement_active', + 'unique_id': '1234567890_conductivity measurement active', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_conductivity_measurement-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'running', + : 'NeoPool Conductivity measurement', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_conductivity_measurement', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'on', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_conductivity_regulation_active-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_conductivity_regulation_active', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Conductivity regulation active', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Conductivity regulation active', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'conductivity_control_module', + 'unique_id': '1234567890_conductivity control module', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_conductivity_regulation_active-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'running', + : 'NeoPool Conductivity regulation active', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_conductivity_regulation_active', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_filtration-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': None, + 'entity_id': 'binary_sensor.neopool_filtration', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Filtration', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Filtration', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'filtration_pump', + 'unique_id': '1234567890_filtration pump', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_filtration-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'running', + : 'NeoPool Filtration', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_filtration', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'off', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_heating-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_heating', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Heating', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Heating', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'heating', + 'unique_id': '1234567890_heating', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_heating-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'running', + : 'NeoPool Heating', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_heating', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_hydrolysis_activated_by_chlorine_module-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_hydrolysis_activated_by_chlorine_module', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Hydrolysis activated by chlorine module', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Hydrolysis activated by chlorine module', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'hidro_activated_by_the_cl_module', + 'unique_id': '1234567890_hidro activated by the cl module', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_hydrolysis_activated_by_chlorine_module-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'running', + : 'NeoPool Hydrolysis activated by chlorine module', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_hydrolysis_activated_by_chlorine_module', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_hydrolysis_activated_by_redox_module-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_hydrolysis_activated_by_redox_module', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Hydrolysis activated by Redox module', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Hydrolysis activated by Redox module', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'hidro_activated_by_the_rx_module', + 'unique_id': '1234567890_hidro activated by the rx module', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_hydrolysis_activated_by_redox_module-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'running', + : 'NeoPool Hydrolysis activated by Redox module', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_hydrolysis_activated_by_redox_module', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_hydrolysis_chlorine_shock_mode_boost-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_hydrolysis_chlorine_shock_mode_boost', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Hydrolysis chlorine shock mode (boost)', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Hydrolysis chlorine shock mode (boost)', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'hidro_chlorine_shock_mode', + 'unique_id': '1234567890_hidro chlorine shock mode', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_hydrolysis_chlorine_shock_mode_boost-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'running', + : 'NeoPool Hydrolysis chlorine shock mode (boost)', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_hydrolysis_chlorine_shock_mode_boost', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_hydrolysis_enabled-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_hydrolysis_enabled', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Hydrolysis enabled', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Hydrolysis enabled', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'hidro_module_active', + 'unique_id': '1234567890_hidro module active', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_hydrolysis_enabled-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'running', + : 'NeoPool Hydrolysis enabled', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_hydrolysis_enabled', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'on', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_hydrolysis_production_problem-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_hydrolysis_production_problem', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Hydrolysis production problem', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Hydrolysis production problem', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'hidro_low', + 'unique_id': '1234567890_hidro low', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_hydrolysis_production_problem-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'problem', + : 'NeoPool Hydrolysis production problem', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_hydrolysis_production_problem', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_hydrolysis_regulation_active-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_hydrolysis_regulation_active', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Hydrolysis regulation active', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Hydrolysis regulation active', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'hidro_module_regulated', + 'unique_id': '1234567890_hidro module regulated', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_hydrolysis_regulation_active-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'running', + : 'NeoPool Hydrolysis regulation active', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_hydrolysis_regulation_active', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_ionizer_on_target-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_ionizer_on_target', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Ionizer on target', + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Ionizer on target', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'ion_on_target', + 'unique_id': '1234567890_ion on target', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_ionizer_on_target-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'NeoPool Ionizer on target', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_ionizer_on_target', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_ionizer_production_problem-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_ionizer_production_problem', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Ionizer production problem', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Ionizer production problem', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'ion_low', + 'unique_id': '1234567890_ion low', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_ionizer_production_problem-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'problem', + : 'NeoPool Ionizer production problem', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_ionizer_production_problem', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_ionizer_program_time_exceeded-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_ionizer_program_time_exceeded', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Ionizer program time exceeded', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Ionizer program time exceeded', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'ion_program_time_exceeded', + 'unique_id': '1234567890_ion program time exceeded', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_ionizer_program_time_exceeded-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'problem', + : 'NeoPool Ionizer program time exceeded', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_ionizer_program_time_exceeded', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_ph_acid_pump-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_ph_acid_pump', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'pH acid pump', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'pH acid pump', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'ph_acid_pump', + 'unique_id': '1234567890_ph acid pump', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_ph_acid_pump-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'running', + : 'NeoPool pH acid pump', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_ph_acid_pump', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'off', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_ph_flow_detection_control-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_ph_flow_detection_control', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'pH flow detection control', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'pH flow detection control', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'ph_module_control_status', + 'unique_id': '1234567890_ph module control status', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_ph_flow_detection_control-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'running', + : 'NeoPool pH flow detection control', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_ph_flow_detection_control', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_ph_measurement-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_ph_measurement', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'pH measurement', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'pH measurement', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'ph_measurement_active', + 'unique_id': '1234567890_ph measurement active', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_ph_measurement-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'running', + : 'NeoPool pH measurement', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_ph_measurement', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'on', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_ph_regulation_active-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_ph_regulation_active', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'pH regulation active', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'pH regulation active', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'ph_control_module', + 'unique_id': '1234567890_ph control module', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_ph_regulation_active-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'running', + : 'NeoPool pH regulation active', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_ph_regulation_active', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'on', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_pool_cover-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': None, + 'entity_id': 'binary_sensor.neopool_pool_cover', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Pool cover', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Pool cover', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'pool_cover', + 'unique_id': '1234567890_pool cover', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_pool_cover-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'opening', + : 'NeoPool Pool cover', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_pool_cover', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_pool_light-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': None, + 'entity_id': 'binary_sensor.neopool_pool_light', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Pool light', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Pool light', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'pool_light', + 'unique_id': '1234567890_pool light', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_pool_light-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'light', + : 'NeoPool Pool light', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_pool_light', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_redox_measurement-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_redox_measurement', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Redox measurement', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Redox measurement', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'redox_measurement_active', + 'unique_id': '1234567890_redox measurement active', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_redox_measurement-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'running', + : 'NeoPool Redox measurement', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_redox_measurement', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'on', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_redox_pump_active-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_redox_pump_active', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Redox pump active', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Redox pump active', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'redox_pump_active', + 'unique_id': '1234567890_redox pump active', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_redox_pump_active-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'running', + : 'NeoPool Redox pump active', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_redox_pump_active', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_redox_regulation_active-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_redox_regulation_active', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Redox regulation active', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Redox regulation active', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'redox_control_module', + 'unique_id': '1234567890_redox control module', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_redox_regulation_active-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'running', + : 'NeoPool Redox regulation active', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_redox_regulation_active', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[binary_sensor.neopool_uv_lamp-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': , + 'entity_id': 'binary_sensor.neopool_uv_lamp', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'UV lamp', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'UV lamp', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'uv_lamp', + 'unique_id': '1234567890_uv lamp', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[binary_sensor.neopool_uv_lamp-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'running', + : 'NeoPool UV lamp', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_uv_lamp', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_setup_when_modules_absent[binary_sensor.neopool_auxiliary_relay_1-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': None, + 'entity_id': 'binary_sensor.neopool_auxiliary_relay_1', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Auxiliary relay 1', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Auxiliary relay 1', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'aux', + 'unique_id': '1234567890_aux1', + 'unit_of_measurement': None, + }) +# --- +# name: test_setup_when_modules_absent[binary_sensor.neopool_auxiliary_relay_1-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'power', + : 'NeoPool Auxiliary relay 1', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_auxiliary_relay_1', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_setup_when_modules_absent[binary_sensor.neopool_auxiliary_relay_2-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': None, + 'entity_id': 'binary_sensor.neopool_auxiliary_relay_2', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Auxiliary relay 2', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Auxiliary relay 2', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'aux', + 'unique_id': '1234567890_aux2', + 'unit_of_measurement': None, + }) +# --- +# name: test_setup_when_modules_absent[binary_sensor.neopool_auxiliary_relay_2-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'power', + : 'NeoPool Auxiliary relay 2', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_auxiliary_relay_2', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_setup_when_modules_absent[binary_sensor.neopool_auxiliary_relay_3-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': None, + 'entity_id': 'binary_sensor.neopool_auxiliary_relay_3', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Auxiliary relay 3', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Auxiliary relay 3', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'aux', + 'unique_id': '1234567890_aux3', + 'unit_of_measurement': None, + }) +# --- +# name: test_setup_when_modules_absent[binary_sensor.neopool_auxiliary_relay_3-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'power', + : 'NeoPool Auxiliary relay 3', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_auxiliary_relay_3', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_setup_when_modules_absent[binary_sensor.neopool_auxiliary_relay_4-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': None, + 'entity_id': 'binary_sensor.neopool_auxiliary_relay_4', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Auxiliary relay 4', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Auxiliary relay 4', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'aux', + 'unique_id': '1234567890_aux4', + 'unit_of_measurement': None, + }) +# --- +# name: test_setup_when_modules_absent[binary_sensor.neopool_auxiliary_relay_4-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'power', + : 'NeoPool Auxiliary relay 4', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_auxiliary_relay_4', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_setup_when_modules_absent[binary_sensor.neopool_pool_cover-entry] + EntityRegistryEntrySnapshot({ + 'aliases': list([ + None, + ]), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'binary_sensor', + 'entity_category': None, + 'entity_id': 'binary_sensor.neopool_pool_cover', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'object_id_base': 'Pool cover', + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Pool cover', + 'platform': 'neopool', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': 'pool_cover', + 'unique_id': '1234567890_pool cover', + 'unit_of_measurement': None, + }) +# --- +# name: test_setup_when_modules_absent[binary_sensor.neopool_pool_cover-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + : 'opening', + : 'NeoPool Pool cover', + }), + 'context': , + 'entity_id': 'binary_sensor.neopool_pool_cover', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- diff --git a/tests/components/neopool/snapshots/test_diagnostics.ambr b/tests/components/neopool/snapshots/test_diagnostics.ambr index fdae906d02bc1..c99e1315cd5df 100644 --- a/tests/components/neopool/snapshots/test_diagnostics.ambr +++ b/tests/components/neopool/snapshots/test_diagnostics.ambr @@ -31,9 +31,12 @@ 'CELL_RUNTIME_POLB': 1800, 'CELL_RUNTIME_POL_CHANGES': 7, 'CELL_RUNTIME_TOTAL': 65536, + 'Chlorine measurement active': True, 'Chlorine measurement module detected': True, + 'Conductivity measurement active': True, 'Conductivity measurement module detected': True, 'Filtration Pump': False, + 'HIDRO Module active': True, 'HIDRO in Pol1': False, 'HIDRO in Pol2': False, 'HIDRO in dead time': False, @@ -81,11 +84,14 @@ 'MBF_POWER_MODULE_VERSION': 4660, 'PH_PUMP_STATUS': 'off', 'Pool Cover': 0, + 'Redox measurement active': True, 'Redox measurement module detected': True, 'filtration_mode': 'manual', 'filtration_speed_state': 'off', + 'pH Acid Pump': False, 'pH acid pump active': False, 'pH control module': True, + 'pH measurement active': True, 'pH measurement module detected': True, 'pH pump active': False, }), diff --git a/tests/components/neopool/test_binary_sensor.py b/tests/components/neopool/test_binary_sensor.py new file mode 100644 index 0000000000000..8875b1b06b7e1 --- /dev/null +++ b/tests/components/neopool/test_binary_sensor.py @@ -0,0 +1,255 @@ +"""Tests for the NeoPool binary_sensor platform value decoders.""" + +from datetime import timedelta +from typing import Any +from unittest.mock import MagicMock, patch + +from freezegun.api import FrozenDateTimeFactory +import pytest +from syrupy.assertion import SnapshotAssertion + +from homeassistant.components.binary_sensor import DOMAIN as BINARY_SENSOR_DOMAIN +from homeassistant.const import STATE_OFF, STATE_ON, STATE_UNKNOWN, Platform +from homeassistant.core import HomeAssistant +from homeassistant.helpers import entity_registry as er + +from . import setup_integration +from .conftest import MOCK_POOL_DATA + +from tests.common import MockConfigEntry, async_fire_time_changed, snapshot_platform + + +def _binary_state(hass: HomeAssistant, entry: MockConfigEntry, key: str): + """Return the HA state object of the binary_sensor for a coordinator key.""" + registry = er.async_get(hass) + suffix = f"_{key.lower()}" + entries = [ + e + for e in er.async_entries_for_config_entry(registry, entry.entry_id) + if e.domain == BINARY_SENSOR_DOMAIN and e.unique_id.endswith(suffix) + ] + if not entries: + return None + return hass.states.get(entries[0].entity_id) + + +async def test_direct_key_reflects_coordinator_value( + hass: HomeAssistant, + mock_config_entry_binary_sensor: MockConfigEntry, + mock_neopool_client: MagicMock, + freezer: FrozenDateTimeFactory, +) -> None: + """A simple boolean key from coordinator.data flows straight through is_on.""" + await setup_integration(hass, mock_config_entry_binary_sensor) + + mock_neopool_client.async_read_all.return_value = { + **MOCK_POOL_DATA, + "Filtration Pump": True, + } + freezer.tick(timedelta(seconds=60)) + async_fire_time_changed(hass) + await hass.async_block_till_done(wait_background_tasks=True) + state = _binary_state(hass, mock_config_entry_binary_sensor, "Filtration Pump") + assert state is not None + assert state.state == STATE_ON + + mock_neopool_client.async_read_all.return_value = { + **MOCK_POOL_DATA, + "Filtration Pump": False, + } + freezer.tick(timedelta(seconds=60)) + async_fire_time_changed(hass) + await hass.async_block_till_done(wait_background_tasks=True) + state = _binary_state(hass, mock_config_entry_binary_sensor, "Filtration Pump") + assert state is not None + assert state.state == STATE_OFF + + +async def test_pool_cover_inverts_hardware_value( + hass: HomeAssistant, + mock_config_entry_binary_sensor: MockConfigEntry, + mock_neopool_client: MagicMock, + freezer: FrozenDateTimeFactory, +) -> None: + """Pool Cover: hardware 1 (covered) → HA OFF; hardware 0 → HA ON. + + The OPENING device class needs the opposite polarity from the raw + register, so the entity inverts the value before returning is_on. + """ + await setup_integration(hass, mock_config_entry_binary_sensor) + + mock_neopool_client.async_read_all.return_value = { + **MOCK_POOL_DATA, + "Pool Cover": True, + "Filtration Pump": True, + } + freezer.tick(timedelta(seconds=60)) + async_fire_time_changed(hass) + await hass.async_block_till_done(wait_background_tasks=True) + state = _binary_state(hass, mock_config_entry_binary_sensor, "Pool Cover") + assert state is not None + assert state.state == STATE_OFF + + mock_neopool_client.async_read_all.return_value = { + **MOCK_POOL_DATA, + "Pool Cover": False, + "Filtration Pump": True, + } + freezer.tick(timedelta(seconds=60)) + async_fire_time_changed(hass) + await hass.async_block_till_done(wait_background_tasks=True) + state = _binary_state(hass, mock_config_entry_binary_sensor, "Pool Cover") + assert state is not None + assert state.state == STATE_ON + + +async def test_pool_cover_none_yields_unknown( + hass: HomeAssistant, + mock_config_entry_binary_sensor: MockConfigEntry, + mock_neopool_client: MagicMock, + freezer: FrozenDateTimeFactory, +) -> None: + """Missing Pool Cover key surfaces as STATE_UNKNOWN, not on/off.""" + await setup_integration(hass, mock_config_entry_binary_sensor) + + mock_neopool_client.async_read_all.return_value = { + **MOCK_POOL_DATA, + "Pool Cover": None, + "Filtration Pump": True, + } + freezer.tick(timedelta(seconds=60)) + async_fire_time_changed(hass) + await hass.async_block_till_done(wait_background_tasks=True) + state = _binary_state(hass, mock_config_entry_binary_sensor, "Pool Cover") + assert state is not None + assert state.state == STATE_UNKNOWN + + +@pytest.mark.parametrize("pump_state", [False, None]) +async def test_pool_cover_unknown_when_filtration_not_running( + hass: HomeAssistant, + mock_config_entry_binary_sensor: MockConfigEntry, + mock_neopool_client: MagicMock, + freezer: FrozenDateTimeFactory, + pump_state: bool | None, +) -> None: + """Cover reads unknown unless the pump is confirmed running. + + The device only reports the cover bit while filtration runs, so an idle + (False) or unknown (None) pump state must not surface a stale open/closed. + """ + await setup_integration(hass, mock_config_entry_binary_sensor) + + mock_neopool_client.async_read_all.return_value = { + **MOCK_POOL_DATA, + "Pool Cover": False, + "Filtration Pump": pump_state, + } + freezer.tick(timedelta(seconds=60)) + async_fire_time_changed(hass) + await hass.async_block_till_done(wait_background_tasks=True) + state = _binary_state(hass, mock_config_entry_binary_sensor, "Pool Cover") + assert state is not None + assert state.state == STATE_UNKNOWN + + +@pytest.mark.usefixtures("entity_registry_enabled_by_default") +async def test_measurement_module_reads_raw_bit( + hass: HomeAssistant, + mock_config_entry_binary_sensor: MockConfigEntry, + mock_neopool_client: MagicMock, + freezer: FrozenDateTimeFactory, +) -> None: + """Measurement-module sensors report the raw device bit, even with filtration off. + + The controller keeps measuring the probes regardless of the filtration + pump state, so the entity must not force the value off. + """ + await setup_integration(hass, mock_config_entry_binary_sensor) + + mock_neopool_client.async_read_all.return_value = { + **MOCK_POOL_DATA, + "pH measurement active": True, + "Filtration Pump": False, + } + freezer.tick(timedelta(seconds=60)) + async_fire_time_changed(hass) + await hass.async_block_till_done(wait_background_tasks=True) + state = _binary_state( + hass, mock_config_entry_binary_sensor, "pH measurement active" + ) + assert state is not None + assert state.state == STATE_ON + + mock_neopool_client.async_read_all.return_value = { + **MOCK_POOL_DATA, + "pH measurement active": False, + "Filtration Pump": False, + } + freezer.tick(timedelta(seconds=60)) + async_fire_time_changed(hass) + await hass.async_block_till_done(wait_background_tasks=True) + state = _binary_state( + hass, mock_config_entry_binary_sensor, "pH measurement active" + ) + assert state is not None + assert state.state == STATE_OFF + + +@pytest.mark.usefixtures("entity_registry_enabled_by_default", "mock_neopool_client") +async def test_all_entities( + hass: HomeAssistant, + snapshot: SnapshotAssertion, + entity_registry: er.EntityRegistry, + mock_config_entry_binary_sensor: MockConfigEntry, +) -> None: + """Snapshot every entity registered by the binary_sensor platform.""" + with patch("homeassistant.components.neopool.PLATFORMS", [Platform.BINARY_SENSOR]): + await setup_integration(hass, mock_config_entry_binary_sensor) + await snapshot_platform( + hass, entity_registry, snapshot, mock_config_entry_binary_sensor.entry_id + ) + + +@pytest.mark.usefixtures("entity_registry_enabled_by_default") +async def test_setup_when_modules_absent( + hass: HomeAssistant, + snapshot: SnapshotAssertion, + entity_registry: er.EntityRegistry, + mock_config_entry_binary_sensor: MockConfigEntry, + mock_neopool_client: MagicMock, + minimal_pool_data: dict[str, Any], +) -> None: + """Snapshot the binary_sensor entities registered when no modules are present.""" + mock_neopool_client.async_read_all.return_value = minimal_pool_data + with patch("homeassistant.components.neopool.PLATFORMS", [Platform.BINARY_SENSOR]): + await setup_integration(hass, mock_config_entry_binary_sensor) + await snapshot_platform( + hass, entity_registry, snapshot, mock_config_entry_binary_sensor.entry_id + ) + + +@pytest.mark.usefixtures("entity_registry_enabled_by_default", "mock_neopool_client") +async def test_opt_in_entities_absent_without_options( + hass: HomeAssistant, + mock_config_entry_binary_sensor_no_options: MockConfigEntry, +) -> None: + """Opt-in entities are not registered when their config option is off. + + Pool Light, the four auxiliary relays, and Pool Cover are gated on an + integration option in addition to any capability check. With every option + disabled they must not register, while an ungated relay sensor still does. + """ + with patch("homeassistant.components.neopool.PLATFORMS", [Platform.BINARY_SENSOR]): + await setup_integration(hass, mock_config_entry_binary_sensor_no_options) + + for key in ("Pool Light", "AUX1", "AUX2", "AUX3", "AUX4", "Pool Cover"): + assert ( + _binary_state(hass, mock_config_entry_binary_sensor_no_options, key) is None + ) + assert ( + _binary_state( + hass, mock_config_entry_binary_sensor_no_options, "Filtration Pump" + ) + is not None + )