From 1110ca5dc61a1fb9312e878a0d07eb1ea7ed573c Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Fri, 20 Feb 2026 11:32:45 +0100 Subject: [PATCH 01/29] Use shorthand attributes in geonetnz_volcano (#163596) --- .../components/geonetnz_volcano/sensor.py | 24 ++++--------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/homeassistant/components/geonetnz_volcano/sensor.py b/homeassistant/components/geonetnz_volcano/sensor.py index c55cbd76615b4..55fb7a477bf3a 100644 --- a/homeassistant/components/geonetnz_volcano/sensor.py +++ b/homeassistant/components/geonetnz_volcano/sensor.py @@ -58,11 +58,12 @@ def async_add_sensor(feed_manager, external_id, unit_system): class GeonetnzVolcanoSensor(SensorEntity): """Represents an external event with GeoNet NZ Volcano feed data.""" + _attr_icon = DEFAULT_ICON + _attr_native_unit_of_measurement = "alert level" _attr_should_poll = False def __init__(self, config_entry_id, feed_manager, external_id, unit_system): """Initialize entity with data from feed entry.""" - self._config_entry_id = config_entry_id self._feed_manager = feed_manager self._external_id = external_id self._attr_unique_id = f"{config_entry_id}_{external_id}" @@ -71,8 +72,6 @@ def __init__(self, config_entry_id, feed_manager, external_id, unit_system): self._distance = None self._latitude = None self._longitude = None - self._attribution = None - self._alert_level = None self._activity = None self._hazards = None self._feed_last_update = None @@ -124,7 +123,7 @@ def _update_from_feed(self, feed_entry, last_update, last_update_successful): self._latitude = round(feed_entry.coordinates[0], 5) self._longitude = round(feed_entry.coordinates[1], 5) self._attr_attribution = feed_entry.attribution - self._alert_level = feed_entry.alert_level + self._attr_native_value = feed_entry.alert_level self._activity = feed_entry.activity self._hazards = feed_entry.hazards self._feed_last_update = dt_util.as_utc(last_update) if last_update else None @@ -133,25 +132,10 @@ def _update_from_feed(self, feed_entry, last_update, last_update_successful): ) @property - def native_value(self): - """Return the state of the sensor.""" - return self._alert_level - - @property - def icon(self): - """Return the icon to use in the frontend, if any.""" - return DEFAULT_ICON - - @property - def name(self) -> str | None: + def name(self) -> str: """Return the name of the entity.""" return f"Volcano {self._title}" - @property - def native_unit_of_measurement(self): - """Return the unit of measurement.""" - return "alert level" - @property def extra_state_attributes(self) -> dict[str, Any]: """Return the device state attributes.""" From 12591a95c69c3b14b963377a2a985382829533c3 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Fri, 20 Feb 2026 11:33:18 +0100 Subject: [PATCH 02/29] Use shorthand attributes in torque (#163597) --- homeassistant/components/torque/sensor.py | 29 ++++------------------- 1 file changed, 5 insertions(+), 24 deletions(-) diff --git a/homeassistant/components/torque/sensor.py b/homeassistant/components/torque/sensor.py index 8d4183e296170..01dbf0237abf3 100644 --- a/homeassistant/components/torque/sensor.py +++ b/homeassistant/components/torque/sensor.py @@ -131,34 +131,15 @@ def get(self, request: web.Request) -> str | None: class TorqueSensor(SensorEntity): """Representation of a Torque sensor.""" + _attr_icon = "mdi:car" + def __init__(self, name, unit): """Initialize the sensor.""" - self._name = name - self._unit = unit - self._state = None - - @property - def name(self): - """Return the name of the sensor.""" - return self._name - - @property - def native_unit_of_measurement(self): - """Return the unit of measurement.""" - return self._unit - - @property - def native_value(self): - """Return the state of the sensor.""" - return self._state - - @property - def icon(self): - """Return the default icon of the sensor.""" - return "mdi:car" + self._attr_name = name + self._attr_native_unit_of_measurement = unit @callback def async_on_update(self, value): """Receive an update.""" - self._state = value + self._attr_native_value = value self.async_write_ha_state() From 5d818cd2ba6b4353ac070cfe32b20f4675502c55 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Fri, 20 Feb 2026 11:37:40 +0100 Subject: [PATCH 03/29] Use shorthand attributes in transport_nsw (#163598) --- .../components/transport_nsw/sensor.py | 31 ++++--------------- 1 file changed, 6 insertions(+), 25 deletions(-) diff --git a/homeassistant/components/transport_nsw/sensor.py b/homeassistant/components/transport_nsw/sensor.py index 49a11a57f65b0..1f247a0c699dd 100644 --- a/homeassistant/components/transport_nsw/sensor.py +++ b/homeassistant/components/transport_nsw/sensor.py @@ -78,25 +78,16 @@ class TransportNSWSensor(SensorEntity): _attr_attribution = "Data provided by Transport NSW" _attr_device_class = SensorDeviceClass.DURATION + _attr_native_unit_of_measurement = UnitOfTime.MINUTES _attr_state_class = SensorStateClass.MEASUREMENT def __init__(self, data, stop_id, name): """Initialize the sensor.""" self.data = data - self._name = name + self._attr_name = name self._stop_id = stop_id - self._times = self._state = None - self._icon = ICONS[None] - - @property - def name(self): - """Return the name of the sensor.""" - return self._name - - @property - def native_value(self): - """Return the state of the sensor.""" - return self._state + self._times = None + self._attr_icon = ICONS[None] @property def extra_state_attributes(self) -> dict[str, Any] | None: @@ -113,22 +104,12 @@ def extra_state_attributes(self) -> dict[str, Any] | None: } return None - @property - def native_unit_of_measurement(self): - """Return the unit this state is expressed in.""" - return UnitOfTime.MINUTES - - @property - def icon(self): - """Icon to use in the frontend, if any.""" - return self._icon - def update(self) -> None: """Get the latest data from Transport NSW and update the states.""" self.data.update() self._times = self.data.info - self._state = self._times[ATTR_DUE_IN] - self._icon = ICONS[self._times[ATTR_MODE]] + self._attr_native_value = self._times[ATTR_DUE_IN] + self._attr_icon = ICONS[self._times[ATTR_MODE]] def _get_value(value): From eccaac4e94865567eac47f573c91457941a98f68 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Fri, 20 Feb 2026 11:38:11 +0100 Subject: [PATCH 04/29] Use shorthand attributes in rmvtransport (#163599) --- .../components/rmvtransport/sensor.py | 28 +++++-------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/homeassistant/components/rmvtransport/sensor.py b/homeassistant/components/rmvtransport/sensor.py index 4128831f8663e..b85a731bac0d3 100644 --- a/homeassistant/components/rmvtransport/sensor.py +++ b/homeassistant/components/rmvtransport/sensor.py @@ -122,6 +122,7 @@ class RMVDepartureSensor(SensorEntity): """Implementation of an RMV departure sensor.""" _attr_attribution = ATTRIBUTION + _attr_native_unit_of_measurement = UnitOfTime.MINUTES def __init__( self, @@ -137,7 +138,7 @@ def __init__( ): """Initialize the sensor.""" self._station = station - self._name = name + self._attr_name = name self._state = None self.data = RMVDepartureData( station, @@ -149,12 +150,7 @@ def __init__( max_journeys, timeout, ) - self._icon = ICONS[None] - - @property - def name(self): - """Return the name of the sensor.""" - return self._name + self._attr_icon = ICONS[None] @property def available(self) -> bool: @@ -181,32 +177,22 @@ def extra_state_attributes(self) -> dict[str, Any]: except IndexError: return {} - @property - def icon(self): - """Icon to use in the frontend, if any.""" - return self._icon - - @property - def native_unit_of_measurement(self): - """Return the unit this state is expressed in.""" - return UnitOfTime.MINUTES - async def async_update(self) -> None: """Get the latest data and update the state.""" await self.data.async_update() - if self._name == DEFAULT_NAME: - self._name = self.data.station + if self._attr_name == DEFAULT_NAME: + self._attr_name = self.data.station self._station = self.data.station if not self.data.departures: self._state = None - self._icon = ICONS[None] + self._attr_icon = ICONS[None] return self._state = self.data.departures[0].get("minutes") - self._icon = ICONS[self.data.departures[0].get("product")] + self._attr_icon = ICONS[self.data.departures[0].get("product")] class RMVDepartureData: From 63e4eaf79ed4d2cbc7ce94a370ed7492d15f5285 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Fri, 20 Feb 2026 11:41:56 +0100 Subject: [PATCH 05/29] Use shorthand attributes in netdata (#163605) --- homeassistant/components/netdata/sensor.py | 63 ++++++---------------- 1 file changed, 16 insertions(+), 47 deletions(-) diff --git a/homeassistant/components/netdata/sensor.py b/homeassistant/components/netdata/sensor.py index 4346cbe868950..41adcd2095e24 100644 --- a/homeassistant/components/netdata/sensor.py +++ b/homeassistant/components/netdata/sensor.py @@ -113,35 +113,15 @@ class NetdataSensor(SensorEntity): def __init__(self, netdata, name, sensor, sensor_name, element, icon, unit, invert): """Initialize the Netdata sensor.""" self.netdata = netdata - self._state = None self._sensor = sensor self._element = element - self._sensor_name = self._sensor if sensor_name is None else sensor_name - self._name = name - self._icon = icon - self._unit_of_measurement = unit + if sensor_name is None: + sensor_name = self._sensor + self._attr_name = f"{name} {sensor_name}" + self._attr_icon = icon + self._attr_native_unit_of_measurement = unit self._invert = invert - @property - def name(self): - """Return the name of the sensor.""" - return f"{self._name} {self._sensor_name}" - - @property - def native_unit_of_measurement(self): - """Return the unit the value is expressed in.""" - return self._unit_of_measurement - - @property - def icon(self): - """Return the icon to use in the frontend, if any.""" - return self._icon - - @property - def native_value(self): - """Return the state of the resources.""" - return self._state - @property def available(self) -> bool: """Could the resource be accessed during the last update call.""" @@ -151,9 +131,9 @@ async def async_update(self) -> None: """Get the latest data from Netdata REST API.""" await self.netdata.async_update() resource_data = self.netdata.api.metrics.get(self._sensor) - self._state = round(resource_data["dimensions"][self._element]["value"], 2) * ( - -1 if self._invert else 1 - ) + self._attr_native_value = round( + resource_data["dimensions"][self._element]["value"], 2 + ) * (-1 if self._invert else 1) class NetdataAlarms(SensorEntity): @@ -162,29 +142,18 @@ class NetdataAlarms(SensorEntity): def __init__(self, netdata, name, host, port): """Initialize the Netdata alarm sensor.""" self.netdata = netdata - self._state = None - self._name = name + self._attr_name = f"{name} Alarms" self._host = host self._port = port @property - def name(self): - """Return the name of the sensor.""" - return f"{self._name} Alarms" - - @property - def native_value(self): - """Return the state of the resources.""" - return self._state - - @property - def icon(self): + def icon(self) -> str: """Status symbol if type is symbol.""" - if self._state == "ok": + if self._attr_native_value == "ok": return "mdi:check" - if self._state == "warning": + if self._attr_native_value == "warning": return "mdi:alert-outline" - if self._state == "critical": + if self._attr_native_value == "critical": return "mdi:alert" return "mdi:crosshairs-question" @@ -197,7 +166,7 @@ async def async_update(self) -> None: """Get the latest alarms from Netdata REST API.""" await self.netdata.async_update() alarms = self.netdata.api.alarms["alarms"] - self._state = None + self._attr_native_value = None number_of_alarms = len(alarms) number_of_relevant_alarms = number_of_alarms @@ -211,9 +180,9 @@ async def async_update(self) -> None: ): number_of_relevant_alarms = number_of_relevant_alarms - 1 elif alarms[alarm]["status"] == "CRITICAL": - self._state = "critical" + self._attr_native_value = "critical" return - self._state = "ok" if number_of_relevant_alarms == 0 else "warning" + self._attr_native_value = "ok" if number_of_relevant_alarms == 0 else "warning" class NetdataData: From cff5a12d5fa4b549a68edeba4efcfaf0b094548d Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Fri, 20 Feb 2026 11:43:23 +0100 Subject: [PATCH 06/29] Use shorthand attributes in reddit (#163600) --- homeassistant/components/reddit/sensor.py | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/homeassistant/components/reddit/sensor.py b/homeassistant/components/reddit/sensor.py index 0f758d565fa56..963d7999c26b9 100644 --- a/homeassistant/components/reddit/sensor.py +++ b/homeassistant/components/reddit/sensor.py @@ -99,8 +99,12 @@ def setup_platform( class RedditSensor(SensorEntity): """Representation of a Reddit sensor.""" + _attr_icon = "mdi:reddit" + def __init__(self, reddit, subreddit: str, limit: int, sort_by: str) -> None: """Initialize the Reddit sensor.""" + self._attr_name = f"reddit_{subreddit}" + self._attr_native_value = 0 self._reddit = reddit self._subreddit = subreddit self._limit = limit @@ -108,16 +112,6 @@ def __init__(self, reddit, subreddit: str, limit: int, sort_by: str) -> None: self._subreddit_data: list = [] - @property - def name(self): - """Return the name of the sensor.""" - return f"reddit_{self._subreddit}" - - @property - def native_value(self): - """Return the state of the sensor.""" - return len(self._subreddit_data) - @property def extra_state_attributes(self) -> dict[str, Any]: """Return the state attributes.""" @@ -127,11 +121,6 @@ def extra_state_attributes(self) -> dict[str, Any]: CONF_SORT_BY: self._sort_by, } - @property - def icon(self): - """Return the icon to use in the frontend.""" - return "mdi:reddit" - def update(self) -> None: """Update data from Reddit API.""" self._subreddit_data = [] @@ -156,3 +145,5 @@ def update(self) -> None: except praw.exceptions.PRAWException as err: _LOGGER.error("Reddit error %s", err) + + self._attr_native_value = len(self._subreddit_data) From 4937c6521b691ce2f5cb10b02a3458762da91bb9 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Fri, 20 Feb 2026 11:43:44 +0100 Subject: [PATCH 07/29] Add type hint for icon property (#163609) --- homeassistant/components/atag/sensor.py | 2 +- homeassistant/components/input_datetime/__init__.py | 2 +- homeassistant/components/input_number/__init__.py | 2 +- homeassistant/components/itunes/media_player.py | 2 +- homeassistant/components/starline/sensor.py | 2 +- homeassistant/components/xiaomi_aqara/switch.py | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/atag/sensor.py b/homeassistant/components/atag/sensor.py index ca5bbd5e6140e..48865503002e7 100644 --- a/homeassistant/components/atag/sensor.py +++ b/homeassistant/components/atag/sensor.py @@ -64,6 +64,6 @@ def native_value(self): return self.coordinator.atag.report[self._id].state @property - def icon(self): + def icon(self) -> str: """Return icon.""" return self.coordinator.atag.report[self._id].icon diff --git a/homeassistant/components/input_datetime/__init__.py b/homeassistant/components/input_datetime/__init__.py index ba183090277c7..fb7394902331d 100644 --- a/homeassistant/components/input_datetime/__init__.py +++ b/homeassistant/components/input_datetime/__init__.py @@ -310,7 +310,7 @@ def has_time(self) -> bool: return self._config[CONF_HAS_TIME] @property - def icon(self): + def icon(self) -> str | None: """Return the icon to be used for this entity.""" return self._config.get(CONF_ICON) diff --git a/homeassistant/components/input_number/__init__.py b/homeassistant/components/input_number/__init__.py index 8d5cf877f8af4..81d1479be03b6 100644 --- a/homeassistant/components/input_number/__init__.py +++ b/homeassistant/components/input_number/__init__.py @@ -243,7 +243,7 @@ def name(self): return self._config.get(CONF_NAME) @property - def icon(self): + def icon(self) -> str | None: """Return the icon to be used for this entity.""" return self._config.get(CONF_ICON) diff --git a/homeassistant/components/itunes/media_player.py b/homeassistant/components/itunes/media_player.py index 92e3aefe9750e..373f1003b0a81 100644 --- a/homeassistant/components/itunes/media_player.py +++ b/homeassistant/components/itunes/media_player.py @@ -451,7 +451,7 @@ def name(self): return self.device_name @property - def icon(self): + def icon(self) -> str: """Return the icon to use in the frontend, if any.""" if self.selected is True: return "mdi:volume-high" diff --git a/homeassistant/components/starline/sensor.py b/homeassistant/components/starline/sensor.py index fee189dbf3b14..5fff61144dc3a 100644 --- a/homeassistant/components/starline/sensor.py +++ b/homeassistant/components/starline/sensor.py @@ -120,7 +120,7 @@ def __init__( self.entity_description = description @property - def icon(self): + def icon(self) -> str | None: """Icon to use in the frontend, if any.""" if self._key == "battery": return icon_for_battery_level( diff --git a/homeassistant/components/xiaomi_aqara/switch.py b/homeassistant/components/xiaomi_aqara/switch.py index 6afd878f80779..69cba6491cdb7 100644 --- a/homeassistant/components/xiaomi_aqara/switch.py +++ b/homeassistant/components/xiaomi_aqara/switch.py @@ -158,7 +158,7 @@ def __init__( super().__init__(device, name, xiaomi_hub, config_entry) @property - def icon(self): + def icon(self) -> str: """Return the icon to use in the frontend, if any.""" if self._data_key == "status": return "mdi:power-plug" From f80e1dd25bcfb87dee2e03c83b1f5ca229974ce8 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Fri, 20 Feb 2026 11:49:04 +0100 Subject: [PATCH 08/29] Use shorthand attributes in homematic (#163610) --- homeassistant/components/homematic/entity.py | 26 +++++--------------- homeassistant/components/homematic/sensor.py | 2 +- 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/homeassistant/components/homematic/entity.py b/homeassistant/components/homematic/entity.py index 4cba934f3b192..f9e8de703fb4f 100644 --- a/homeassistant/components/homematic/entity.py +++ b/homeassistant/components/homematic/entity.py @@ -45,15 +45,16 @@ def __init__( entity_description: EntityDescription | None = None, ) -> None: """Initialize a generic HomeMatic device.""" - self._name = config.get(ATTR_NAME) + self._attr_name = config.get(ATTR_NAME) self._address = config.get(ATTR_ADDRESS) self._interface = config.get(ATTR_INTERFACE) self._channel = config.get(ATTR_CHANNEL) self._state = config.get(ATTR_PARAM) - self._unique_id = config.get(ATTR_UNIQUE_ID) + if unique_id := config.get(ATTR_UNIQUE_ID): + self._attr_unique_id = unique_id.replace(" ", "_") self._data: dict[str, Any] = {} self._connected = False - self._available = False + self._attr_available = False self._channel_map: dict[str, str] = {} if entity_description is not None: @@ -67,21 +68,6 @@ async def async_added_to_hass(self) -> None: """Load data init callbacks.""" self._subscribe_homematic_events() - @property - def unique_id(self): - """Return unique ID. HomeMatic entity IDs are unique by default.""" - return self._unique_id.replace(" ", "_") - - @property - def name(self): - """Return the name of the device.""" - return self._name - - @property - def available(self) -> bool: - """Return true if device is available.""" - return self._available - @property def extra_state_attributes(self) -> dict[str, Any]: """Return device specific state attributes.""" @@ -116,7 +102,7 @@ def update(self) -> None: self._load_data_from_hm() # Link events from pyhomematic - self._available = not self._hmdevice.UNREACH + self._attr_available = not self._hmdevice.UNREACH except Exception as err: # noqa: BLE001 self._connected = False _LOGGER.error("Exception while linking %s: %s", self._address, str(err)) @@ -132,7 +118,7 @@ def _hm_event_callback(self, device, caller, attribute, value): # Availability has changed if self.available != (not self._hmdevice.UNREACH): - self._available = not self._hmdevice.UNREACH + self._attr_available = not self._hmdevice.UNREACH has_changed = True # If it has changed data point, update Home Assistant diff --git a/homeassistant/components/homematic/sensor.py b/homeassistant/components/homematic/sensor.py index 0ddc319626e0c..04b6546674cd7 100644 --- a/homeassistant/components/homematic/sensor.py +++ b/homeassistant/components/homematic/sensor.py @@ -344,4 +344,4 @@ def _init_data_struct(self) -> None: if self._state: self._data.update({self._state: None}) else: - _LOGGER.critical("Unable to initialize sensor: %s", self._name) + _LOGGER.critical("Unable to initialize sensor: %s", self.name) From d6f30795188ea4b2cd9aadc7cd3d762836dd2ebd Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Fri, 20 Feb 2026 11:49:48 +0100 Subject: [PATCH 09/29] Use shorthand attributes in london_air (#163601) --- homeassistant/components/london_air/sensor.py | 26 ++++--------------- 1 file changed, 5 insertions(+), 21 deletions(-) diff --git a/homeassistant/components/london_air/sensor.py b/homeassistant/components/london_air/sensor.py index 33b21473735cd..3560e9b332145 100644 --- a/homeassistant/components/london_air/sensor.py +++ b/homeassistant/components/london_air/sensor.py @@ -107,36 +107,20 @@ def update(self): class AirSensor(SensorEntity): """Single authority air sensor.""" - ICON = "mdi:cloud-outline" + _attr_icon = "mdi:cloud-outline" def __init__(self, name, api_data): """Initialize the sensor.""" - self._name = name + self._attr_name = self._key = name self._api_data = api_data self._site_data = None - self._state = None self._updated = None - @property - def name(self): - """Return the name of the sensor.""" - return self._name - - @property - def native_value(self): - """Return the state of the sensor.""" - return self._state - @property def site_data(self): """Return the dict of sites data.""" return self._site_data - @property - def icon(self): - """Icon to use in the frontend, if any.""" - return self.ICON - @property def extra_state_attributes(self) -> dict[str, Any]: """Return other details about the sensor state.""" @@ -151,7 +135,7 @@ def update(self) -> None: sites_status: list = [] self._api_data.update() if self._api_data.data: - self._site_data = self._api_data.data[self._name] + self._site_data = self._api_data.data[self._key] self._updated = self._site_data[0]["updated"] sites_status.extend( site["pollutants_status"] @@ -160,9 +144,9 @@ def update(self) -> None: ) if sites_status: - self._state = max(set(sites_status), key=sites_status.count) + self._attr_native_value = max(set(sites_status), key=sites_status.count) else: - self._state = None + self._attr_native_value = None def parse_species(species_data): From 8a38bace9048e4fbe4751b9eb1930dcab225d566 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 16:15:05 +0100 Subject: [PATCH 10/29] Add integration_type service to streamlabswater (#163642) --- homeassistant/components/streamlabswater/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/streamlabswater/manifest.json b/homeassistant/components/streamlabswater/manifest.json index ec076bd52ec21..cde7dcfa9ebae 100644 --- a/homeassistant/components/streamlabswater/manifest.json +++ b/homeassistant/components/streamlabswater/manifest.json @@ -4,6 +4,7 @@ "codeowners": [], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/streamlabswater", + "integration_type": "service", "iot_class": "cloud_polling", "loggers": ["streamlabswater"], "requirements": ["streamlabswater==1.0.1"] diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index c9e34ca6f89e1..7532c4de5413f 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -6613,7 +6613,7 @@ }, "streamlabswater": { "name": "StreamLabs", - "integration_type": "hub", + "integration_type": "service", "config_flow": true, "iot_class": "cloud_polling" }, From 69db5787ecf3ad31df63153dd676d395b6af62bf Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 16:15:39 +0100 Subject: [PATCH 11/29] Add integration_type device to stiebel_eltron (#163641) --- homeassistant/components/stiebel_eltron/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/stiebel_eltron/manifest.json b/homeassistant/components/stiebel_eltron/manifest.json index f3cfba01e1df2..f3ff88e0e2b7e 100644 --- a/homeassistant/components/stiebel_eltron/manifest.json +++ b/homeassistant/components/stiebel_eltron/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@fucm", "@ThyMYthOS"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/stiebel_eltron", + "integration_type": "device", "iot_class": "local_polling", "loggers": ["pymodbus", "pystiebeleltron"], "requirements": ["pystiebeleltron==0.2.5"] diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index 7532c4de5413f..e2f4d8b2b03f2 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -6601,7 +6601,7 @@ }, "stiebel_eltron": { "name": "STIEBEL ELTRON", - "integration_type": "hub", + "integration_type": "device", "config_flow": true, "iot_class": "local_polling" }, From 6a9fd67e05e50996f0c474fa6bfae70139fabaef Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 16:16:35 +0100 Subject: [PATCH 12/29] Add integration_type hub to somfy_mylink (#163631) --- homeassistant/components/somfy_mylink/manifest.json | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/somfy_mylink/manifest.json b/homeassistant/components/somfy_mylink/manifest.json index 86fab41c9a13a..fa815d808b4a1 100644 --- a/homeassistant/components/somfy_mylink/manifest.json +++ b/homeassistant/components/somfy_mylink/manifest.json @@ -10,6 +10,7 @@ } ], "documentation": "https://www.home-assistant.io/integrations/somfy_mylink", + "integration_type": "hub", "iot_class": "assumed_state", "loggers": ["somfy_mylink_synergy"], "requirements": ["somfy-mylink-synergy==1.0.6"] From c2ba5d87d5ebc8836d36916e7be7173804747e3d Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 16:17:03 +0100 Subject: [PATCH 13/29] Add integration_type hub to subaru (#163643) --- homeassistant/components/subaru/manifest.json | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/subaru/manifest.json b/homeassistant/components/subaru/manifest.json index 71bc1dd1a9f29..930f497d3fe5b 100644 --- a/homeassistant/components/subaru/manifest.json +++ b/homeassistant/components/subaru/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@G-Two"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/subaru", + "integration_type": "hub", "iot_class": "cloud_polling", "loggers": ["stdiomask", "subarulink"], "requirements": ["subarulink==0.7.15"] From 03f5e6d6a3e7aa64e3c8126f3bcd5fa932d82255 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 16:17:47 +0100 Subject: [PATCH 14/29] Add integration_type device to songpal (#163633) --- homeassistant/components/songpal/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/songpal/manifest.json b/homeassistant/components/songpal/manifest.json index d9794a69e05b9..e99d4f3e2e31f 100644 --- a/homeassistant/components/songpal/manifest.json +++ b/homeassistant/components/songpal/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@rytilahti", "@shenxn"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/songpal", + "integration_type": "device", "iot_class": "local_push", "loggers": ["songpal"], "requirements": ["python-songpal==0.16.2"], diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index e2f4d8b2b03f2..dd0267c81b993 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -6495,7 +6495,7 @@ "name": "Sony Projector" }, "songpal": { - "integration_type": "hub", + "integration_type": "device", "config_flow": true, "iot_class": "local_push", "name": "Sony Songpal" From 522f63cdab839da05e8c1f28e6f4a3b8c2d623f2 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 16:18:03 +0100 Subject: [PATCH 15/29] Add integration_type hub to sunricher_dali (#163645) --- homeassistant/components/sunricher_dali/manifest.json | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/sunricher_dali/manifest.json b/homeassistant/components/sunricher_dali/manifest.json index 80524a9bfb117..d5a76d0d0d8ba 100644 --- a/homeassistant/components/sunricher_dali/manifest.json +++ b/homeassistant/components/sunricher_dali/manifest.json @@ -9,6 +9,7 @@ } ], "documentation": "https://www.home-assistant.io/integrations/sunricher_dali", + "integration_type": "hub", "iot_class": "local_push", "quality_scale": "silver", "requirements": ["PySrDaliGateway==0.19.3"] From 2bf5f67ecd8c072675bd569381db047cd40a27b5 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 16:18:20 +0100 Subject: [PATCH 16/29] Add integration_type service to suez_water (#163644) --- homeassistant/components/suez_water/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/suez_water/manifest.json b/homeassistant/components/suez_water/manifest.json index 5c23240ce9196..c91d326e0878f 100644 --- a/homeassistant/components/suez_water/manifest.json +++ b/homeassistant/components/suez_water/manifest.json @@ -5,6 +5,7 @@ "codeowners": ["@ooii", "@jb101010-2"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/suez_water", + "integration_type": "service", "iot_class": "cloud_polling", "loggers": ["pysuez", "regex"], "quality_scale": "bronze", diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index dd0267c81b993..be426466fba4f 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -6625,7 +6625,7 @@ }, "suez_water": { "name": "Suez Water", - "integration_type": "hub", + "integration_type": "service", "config_flow": true, "iot_class": "cloud_polling" }, From 9b6e6a688d1c0ca3e8b1bfa1099449a9b99dcbec Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 16:18:57 +0100 Subject: [PATCH 17/29] Add integration_type service to swiss_public_transport (#163647) --- homeassistant/components/swiss_public_transport/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/swiss_public_transport/manifest.json b/homeassistant/components/swiss_public_transport/manifest.json index 105093280431f..cd12f1bc3be9d 100644 --- a/homeassistant/components/swiss_public_transport/manifest.json +++ b/homeassistant/components/swiss_public_transport/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@fabaff", "@miaucl"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/swiss_public_transport", + "integration_type": "service", "iot_class": "cloud_polling", "loggers": ["opendata_transport"], "requirements": ["python-opendata-transport==0.5.0"] diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index be426466fba4f..1f5ec47ee0573 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -6678,7 +6678,7 @@ }, "swiss_public_transport": { "name": "Swiss public transport", - "integration_type": "hub", + "integration_type": "service", "config_flow": true, "iot_class": "cloud_polling" }, From 04621a2e5861685ae9c28fe8eb51cced0084869a Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 16:19:28 +0100 Subject: [PATCH 18/29] Add integration_type hub to switchbee (#163648) --- homeassistant/components/switchbee/manifest.json | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/switchbee/manifest.json b/homeassistant/components/switchbee/manifest.json index 2e7b15e0561cc..1584f7d46db48 100644 --- a/homeassistant/components/switchbee/manifest.json +++ b/homeassistant/components/switchbee/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@jafar-atili"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/switchbee", + "integration_type": "hub", "iot_class": "local_push", "requirements": ["pyswitchbee==1.8.3"] } From 3143d9c4fdd4da690d3f5fb6dadc9359afd325d8 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 16:20:01 +0100 Subject: [PATCH 19/29] Add integration_type hub to snoo (#163626) --- homeassistant/components/snoo/manifest.json | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/snoo/manifest.json b/homeassistant/components/snoo/manifest.json index 5a162a9e9d3d2..916535b156328 100644 --- a/homeassistant/components/snoo/manifest.json +++ b/homeassistant/components/snoo/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@Lash-L"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/snoo", + "integration_type": "hub", "iot_class": "cloud_push", "loggers": ["snoo"], "quality_scale": "bronze", From 8c3e72b53d77c77cc808477e4510f3287d77e65e Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 16:20:31 +0100 Subject: [PATCH 20/29] Add integration_type device to snooz (#163627) --- homeassistant/components/snooz/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/snooz/manifest.json b/homeassistant/components/snooz/manifest.json index 5b43aa7e92d6a..a0a10f23a6f4d 100644 --- a/homeassistant/components/snooz/manifest.json +++ b/homeassistant/components/snooz/manifest.json @@ -13,6 +13,7 @@ "config_flow": true, "dependencies": ["bluetooth_adapters"], "documentation": "https://www.home-assistant.io/integrations/snooz", + "integration_type": "device", "iot_class": "local_push", "requirements": ["pysnooz==0.8.6"] } diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index 1f5ec47ee0573..4c81e0ffb77be 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -6411,7 +6411,7 @@ }, "snooz": { "name": "Snooz", - "integration_type": "hub", + "integration_type": "device", "config_flow": true, "iot_class": "local_push" }, From d2918586f9b2d7a58648bcc0bc161fb66bc28716 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 16:21:09 +0100 Subject: [PATCH 21/29] Add integration_type device to solax (#163629) --- homeassistant/components/solax/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/solax/manifest.json b/homeassistant/components/solax/manifest.json index 5509901ae0218..d72924109588c 100644 --- a/homeassistant/components/solax/manifest.json +++ b/homeassistant/components/solax/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@squishykid", "@Darsstar"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/solax", + "integration_type": "device", "iot_class": "local_polling", "loggers": ["solax"], "requirements": ["solax==3.2.3"] diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index 4c81e0ffb77be..aeaa811018a77 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -6440,7 +6440,7 @@ }, "solax": { "name": "SolaX Power", - "integration_type": "hub", + "integration_type": "device", "config_flow": true, "iot_class": "local_polling" }, From 8ff06f3c723c9915b768fe89f2a143097d3386af Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 16:21:35 +0100 Subject: [PATCH 22/29] Add integration_type hub to soma (#163630) --- homeassistant/components/soma/manifest.json | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/soma/manifest.json b/homeassistant/components/soma/manifest.json index ed0c5ff624056..1e080ade626bd 100644 --- a/homeassistant/components/soma/manifest.json +++ b/homeassistant/components/soma/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@ratsept"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/soma", + "integration_type": "hub", "iot_class": "local_polling", "loggers": ["api"], "requirements": ["pysoma==0.0.12"] From 47eba50b4a03813b26a3f057efdf666b875074f3 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 16:22:07 +0100 Subject: [PATCH 23/29] Add integration_type service to sonarr (#163632) --- homeassistant/components/sonarr/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/sonarr/manifest.json b/homeassistant/components/sonarr/manifest.json index c81dc9c39729d..8b8fd91e5c3eb 100644 --- a/homeassistant/components/sonarr/manifest.json +++ b/homeassistant/components/sonarr/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@ctalkington"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/sonarr", + "integration_type": "service", "iot_class": "local_polling", "loggers": ["aiopyarr"], "requirements": ["aiopyarr==23.4.0"] diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index aeaa811018a77..6b0007eea1760 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -6463,7 +6463,7 @@ }, "sonarr": { "name": "Sonarr", - "integration_type": "hub", + "integration_type": "service", "config_flow": true, "iot_class": "local_polling" }, From bf950e49167813b6a28af0a345f698608f7cf466 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 16:22:33 +0100 Subject: [PATCH 24/29] Add integration_type service to splunk (#163635) --- homeassistant/components/splunk/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/splunk/manifest.json b/homeassistant/components/splunk/manifest.json index 0cbbd5070c1fc..6d32dca38a906 100644 --- a/homeassistant/components/splunk/manifest.json +++ b/homeassistant/components/splunk/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@Bre77"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/splunk", + "integration_type": "service", "iot_class": "local_push", "loggers": ["hass_splunk"], "quality_scale": "legacy", diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index 6b0007eea1760..3c8a3e5335a90 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -6534,7 +6534,7 @@ }, "splunk": { "name": "Splunk", - "integration_type": "hub", + "integration_type": "service", "config_flow": true, "iot_class": "local_push", "single_config_entry": true From 34f1c4cbe00e97c61463d67956261a11b60afb5b Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 16:23:00 +0100 Subject: [PATCH 25/29] Add integration_type device to soundtouch (#163634) --- homeassistant/components/soundtouch/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/soundtouch/manifest.json b/homeassistant/components/soundtouch/manifest.json index 0d8349d1eae8b..5fc7a771d7094 100644 --- a/homeassistant/components/soundtouch/manifest.json +++ b/homeassistant/components/soundtouch/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@kroimon"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/soundtouch", + "integration_type": "device", "iot_class": "local_polling", "loggers": ["libsoundtouch"], "requirements": ["libsoundtouch==0.8"], diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index 3c8a3e5335a90..89e245d16891e 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -6510,7 +6510,7 @@ }, "soundtouch": { "name": "Bose SoundTouch", - "integration_type": "hub", + "integration_type": "device", "config_flow": true, "iot_class": "local_polling" }, From c15a804ab42bfcc0911c417c63b3f1bc458efae9 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 16:23:39 +0100 Subject: [PATCH 26/29] Add integration_type service to srp_energy (#163636) --- homeassistant/components/srp_energy/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/srp_energy/manifest.json b/homeassistant/components/srp_energy/manifest.json index e2571368789b8..27deb87b0ca1d 100644 --- a/homeassistant/components/srp_energy/manifest.json +++ b/homeassistant/components/srp_energy/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@briglx"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/srp_energy", + "integration_type": "service", "iot_class": "cloud_polling", "loggers": ["srpenergy"], "requirements": ["srpenergy==1.3.6"] diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index 89e245d16891e..c7abd0104b6ad 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -6553,7 +6553,7 @@ }, "srp_energy": { "name": "SRP Energy", - "integration_type": "hub", + "integration_type": "service", "config_flow": true, "iot_class": "cloud_polling" }, From a1f35ed3c452442484023797d210eb1c4c92306d Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 16:23:57 +0100 Subject: [PATCH 27/29] Add integration_type hub to switcher_kis (#163650) --- homeassistant/components/switcher_kis/manifest.json | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/switcher_kis/manifest.json b/homeassistant/components/switcher_kis/manifest.json index 2a90f7bc4054e..8dd06f3d5660c 100644 --- a/homeassistant/components/switcher_kis/manifest.json +++ b/homeassistant/components/switcher_kis/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@thecode", "@YogevBokobza"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/switcher_kis", + "integration_type": "hub", "iot_class": "local_push", "loggers": ["aioswitcher"], "quality_scale": "silver", From 88bc6165b5cdefab2c260a15557f83a4b12b2fea Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 16:25:33 +0100 Subject: [PATCH 28/29] Add integration_type device to starlink (#163639) --- homeassistant/components/starlink/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/starlink/manifest.json b/homeassistant/components/starlink/manifest.json index cc787076e7a6f..5bdd4da62a10d 100644 --- a/homeassistant/components/starlink/manifest.json +++ b/homeassistant/components/starlink/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@boswelja"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/starlink", + "integration_type": "device", "iot_class": "local_polling", "requirements": ["starlink-grpc-core==1.2.3"] } diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index c7abd0104b6ad..fcb0e77cba7fc 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -6571,7 +6571,7 @@ }, "starlink": { "name": "Starlink", - "integration_type": "hub", + "integration_type": "device", "config_flow": true, "iot_class": "local_polling" }, From 03f81e4a09337b80105d044594de5191bd097ac6 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 16:25:58 +0100 Subject: [PATCH 29/29] Add integration_type hub to starline (#163638) --- homeassistant/components/starline/manifest.json | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/starline/manifest.json b/homeassistant/components/starline/manifest.json index 5b15445c004f3..31f3641592ecf 100644 --- a/homeassistant/components/starline/manifest.json +++ b/homeassistant/components/starline/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@anonym-tsk"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/starline", + "integration_type": "hub", "iot_class": "cloud_polling", "loggers": ["starline"], "requirements": ["starline==0.1.5"]