From da537ddb8b083af59030cfdd5983c34d7ae8a5d0 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 16:26:59 +0100 Subject: [PATCH 01/26] Add integration_type device to steamist (#163640) --- homeassistant/components/steamist/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/steamist/manifest.json b/homeassistant/components/steamist/manifest.json index cabb8835608a05..c094de9e2459dc 100644 --- a/homeassistant/components/steamist/manifest.json +++ b/homeassistant/components/steamist/manifest.json @@ -14,6 +14,7 @@ } ], "documentation": "https://www.home-assistant.io/integrations/steamist", + "integration_type": "device", "iot_class": "local_polling", "loggers": ["aiosteamist", "discovery30303"], "requirements": ["aiosteamist==1.0.1", "discovery30303==0.3.3"] diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index fcb0e77cba7fc4..72000f1f7b8602 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -6595,7 +6595,7 @@ }, "steamist": { "name": "Steamist", - "integration_type": "hub", + "integration_type": "device", "config_flow": true, "iot_class": "local_polling" }, From 6ce28987abef3f4082f5357ea096a8e3a8656043 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 16:27:23 +0100 Subject: [PATCH 02/26] Add integration_type service to syncthing (#163651) --- homeassistant/components/syncthing/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/syncthing/manifest.json b/homeassistant/components/syncthing/manifest.json index 40d93dce4c7ed5..39d983f0580ceb 100644 --- a/homeassistant/components/syncthing/manifest.json +++ b/homeassistant/components/syncthing/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@zhulik"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/syncthing", + "integration_type": "service", "iot_class": "local_polling", "loggers": ["aiosyncthing"], "requirements": ["aiosyncthing==0.7.1"] diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index 72000f1f7b8602..e4a54315156619 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -6729,7 +6729,7 @@ }, "syncthing": { "name": "Syncthing", - "integration_type": "hub", + "integration_type": "service", "config_flow": true, "iot_class": "local_polling" }, From e7e8c7a53a4956a192961eb7fbe3e17ff335bb1d Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 19:11:57 +0100 Subject: [PATCH 03/26] Add integration_type device to togrill (#163669) --- homeassistant/components/togrill/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/togrill/manifest.json b/homeassistant/components/togrill/manifest.json index 429ffeab9ce040..9897c9921d39dc 100644 --- a/homeassistant/components/togrill/manifest.json +++ b/homeassistant/components/togrill/manifest.json @@ -12,6 +12,7 @@ "config_flow": true, "dependencies": ["bluetooth"], "documentation": "https://www.home-assistant.io/integrations/togrill", + "integration_type": "device", "iot_class": "local_push", "loggers": ["togrill_bluetooth"], "quality_scale": "bronze", diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index e4a54315156619..ea50c810d4a058 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -7072,7 +7072,7 @@ }, "togrill": { "name": "ToGrill", - "integration_type": "hub", + "integration_type": "device", "config_flow": true, "iot_class": "local_push" }, From 2a03d95bcdaf88668a607caf687d84988b43e584 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 19:34:39 +0100 Subject: [PATCH 04/26] Add integration_type service to telegram_bot (#163660) --- homeassistant/components/telegram_bot/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/telegram_bot/manifest.json b/homeassistant/components/telegram_bot/manifest.json index 0d320cfe3b0887..514c84bde5cb8e 100644 --- a/homeassistant/components/telegram_bot/manifest.json +++ b/homeassistant/components/telegram_bot/manifest.json @@ -5,6 +5,7 @@ "config_flow": true, "dependencies": ["http"], "documentation": "https://www.home-assistant.io/integrations/telegram_bot", + "integration_type": "service", "iot_class": "cloud_push", "loggers": ["telegram"], "quality_scale": "silver", diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index ea50c810d4a058..cf2a5ebac898ab 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -6869,7 +6869,7 @@ "name": "Telegram" }, "telegram_bot": { - "integration_type": "hub", + "integration_type": "service", "config_flow": true, "iot_class": "cloud_push", "name": "Telegram bot" From 7cd48ef0792ed9edb37675dd13780a652389cd9d Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 19:35:29 +0100 Subject: [PATCH 05/26] Add integration_type device to tami4 (#163659) --- homeassistant/components/tami4/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/tami4/manifest.json b/homeassistant/components/tami4/manifest.json index e09970c341da78..962eb4d62fdcd5 100644 --- a/homeassistant/components/tami4/manifest.json +++ b/homeassistant/components/tami4/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@Guy293"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/tami4", + "integration_type": "device", "iot_class": "cloud_polling", "requirements": ["Tami4EdgeAPI==3.0"] } diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index cf2a5ebac898ab..c47a50a2807c06 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -6801,7 +6801,7 @@ }, "tami4": { "name": "Tami4 Edge / Edge+", - "integration_type": "hub", + "integration_type": "device", "config_flow": true, "iot_class": "cloud_polling" }, From b6e83d22e3bb6b8a432c9433be5412adc1b71d6a Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 19:36:19 +0100 Subject: [PATCH 06/26] Add integration_type device to syncthru (#163658) --- homeassistant/components/syncthru/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/syncthru/manifest.json b/homeassistant/components/syncthru/manifest.json index a33cefd2c703d6..ec6ecce7acea75 100644 --- a/homeassistant/components/syncthru/manifest.json +++ b/homeassistant/components/syncthru/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@nielstron"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/syncthru", + "integration_type": "device", "iot_class": "local_polling", "loggers": ["pysyncthru"], "requirements": ["PySyncThru==0.8.0", "url-normalize==2.2.1"], diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index c47a50a2807c06..2ad9464256bc4c 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -5948,7 +5948,7 @@ "name": "Samsung Smart TV" }, "syncthru": { - "integration_type": "hub", + "integration_type": "device", "config_flow": true, "iot_class": "local_polling", "name": "Samsung SyncThru Printer" From 19b1fc6561f446c543ab5f7d15bd7a5667fb6884 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 19:37:34 +0100 Subject: [PATCH 07/26] Add integration_type hub to tibber (#163665) --- homeassistant/components/tibber/manifest.json | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/tibber/manifest.json b/homeassistant/components/tibber/manifest.json index d44a6b64008b13..06423dfb6669e5 100644 --- a/homeassistant/components/tibber/manifest.json +++ b/homeassistant/components/tibber/manifest.json @@ -5,6 +5,7 @@ "config_flow": true, "dependencies": ["application_credentials", "recorder"], "documentation": "https://www.home-assistant.io/integrations/tibber", + "integration_type": "hub", "iot_class": "cloud_polling", "loggers": ["tibber"], "requirements": ["pyTibber==0.35.0"] From 14b6269dbfd4d0c49a022147178503d5e213654b Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 19:39:05 +0100 Subject: [PATCH 08/26] Add integration_type device to thermopro (#163664) --- homeassistant/components/thermopro/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/thermopro/manifest.json b/homeassistant/components/thermopro/manifest.json index bee126b54e8afb..8608dfbc53838d 100644 --- a/homeassistant/components/thermopro/manifest.json +++ b/homeassistant/components/thermopro/manifest.json @@ -23,6 +23,7 @@ "config_flow": true, "dependencies": ["bluetooth_adapters"], "documentation": "https://www.home-assistant.io/integrations/thermopro", + "integration_type": "device", "iot_class": "local_push", "requirements": ["thermopro-ble==1.1.3"] } diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index 2ad9464256bc4c..08b65ced7fc738 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -6970,7 +6970,7 @@ }, "thermopro": { "name": "ThermoPro", - "integration_type": "hub", + "integration_type": "device", "config_flow": true, "iot_class": "local_push" }, From 08adb88c6be9af11db112d06ef42d88273d499a5 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 19:39:43 +0100 Subject: [PATCH 09/26] Add integration_type device to thermobeacon (#163663) --- homeassistant/components/thermobeacon/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/thermobeacon/manifest.json b/homeassistant/components/thermobeacon/manifest.json index 7223a34d683546..e1dbf9e44ebe44 100644 --- a/homeassistant/components/thermobeacon/manifest.json +++ b/homeassistant/components/thermobeacon/manifest.json @@ -53,6 +53,7 @@ "config_flow": true, "dependencies": ["bluetooth_adapters"], "documentation": "https://www.home-assistant.io/integrations/thermobeacon", + "integration_type": "device", "iot_class": "local_push", "requirements": ["thermobeacon-ble==0.10.0"] } diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index 08b65ced7fc738..d173b8614cebfe 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -6959,7 +6959,7 @@ }, "thermobeacon": { "name": "ThermoBeacon", - "integration_type": "hub", + "integration_type": "device", "config_flow": true, "iot_class": "local_push" }, From 430f064243e94dcc2b5ca9daa954e095b48f901f Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 19:40:20 +0100 Subject: [PATCH 10/26] Add integration_type device to tesla_wall_connector (#163662) --- homeassistant/components/tesla_wall_connector/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/tesla_wall_connector/manifest.json b/homeassistant/components/tesla_wall_connector/manifest.json index e01e6e5a5d8237..d008d99f1c16a9 100644 --- a/homeassistant/components/tesla_wall_connector/manifest.json +++ b/homeassistant/components/tesla_wall_connector/manifest.json @@ -18,6 +18,7 @@ } ], "documentation": "https://www.home-assistant.io/integrations/tesla_wall_connector", + "integration_type": "device", "iot_class": "local_polling", "loggers": ["tesla_wall_connector"], "requirements": ["tesla-wall-connector==1.1.0"] diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index d173b8614cebfe..0b90c18f41db36 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -6921,7 +6921,7 @@ "name": "Tesla Powerwall" }, "tesla_wall_connector": { - "integration_type": "hub", + "integration_type": "device", "config_flow": true, "iot_class": "local_polling", "name": "Tesla Wall Connector" From 3f6bfa96fc3bcebb9504e18d91d417df51b41dfd Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 19:41:34 +0100 Subject: [PATCH 11/26] Add integration_type hub to tellduslive (#163661) --- homeassistant/components/tellduslive/manifest.json | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/tellduslive/manifest.json b/homeassistant/components/tellduslive/manifest.json index 4ebf1a334bd66b..07795c2b2bf9d4 100644 --- a/homeassistant/components/tellduslive/manifest.json +++ b/homeassistant/components/tellduslive/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@fredrike"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/tellduslive", + "integration_type": "hub", "iot_class": "cloud_polling", "requirements": ["tellduslive==0.10.12"] } From 02058afb102ceea9594f28d30400f547475e74d8 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 19:42:39 +0100 Subject: [PATCH 12/26] Add integration_type service to trafikverket_weatherstation (#163677) --- .../components/trafikverket_weatherstation/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/trafikverket_weatherstation/manifest.json b/homeassistant/components/trafikverket_weatherstation/manifest.json index 3996379540f26e..c65bef540d41e9 100644 --- a/homeassistant/components/trafikverket_weatherstation/manifest.json +++ b/homeassistant/components/trafikverket_weatherstation/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@gjohansson-ST"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/trafikverket_weatherstation", + "integration_type": "service", "iot_class": "cloud_polling", "loggers": ["pytrafikverket"], "requirements": ["pytrafikverket==1.1.1"] diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index 0b90c18f41db36..5719af8594ebc5 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -7189,7 +7189,7 @@ "name": "Trafikverket Train" }, "trafikverket_weatherstation": { - "integration_type": "hub", + "integration_type": "service", "config_flow": true, "iot_class": "cloud_polling", "name": "Trafikverket Weather Station" From ed9ad950d9786d202836dc0bf648e0d887e6d795 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 19:42:55 +0100 Subject: [PATCH 13/26] Add integration_type service to trafikverket_train (#163676) --- homeassistant/components/trafikverket_train/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/trafikverket_train/manifest.json b/homeassistant/components/trafikverket_train/manifest.json index 40f3a39a2bb377..a97fd5b8cb8522 100644 --- a/homeassistant/components/trafikverket_train/manifest.json +++ b/homeassistant/components/trafikverket_train/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@gjohansson-ST"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/trafikverket_train", + "integration_type": "service", "iot_class": "cloud_polling", "loggers": ["pytrafikverket"], "requirements": ["pytrafikverket==1.1.1"] diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index 5719af8594ebc5..ca0e8cf945bc79 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -7183,7 +7183,7 @@ "name": "Trafikverket Ferry" }, "trafikverket_train": { - "integration_type": "hub", + "integration_type": "service", "config_flow": true, "iot_class": "cloud_polling", "name": "Trafikverket Train" From 35e770b9984a421a81aa4e50c520c592c6b13abe Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 19:43:14 +0100 Subject: [PATCH 14/26] Add integration_type service to trafikverket_ferry (#163675) --- homeassistant/components/trafikverket_ferry/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/trafikverket_ferry/manifest.json b/homeassistant/components/trafikverket_ferry/manifest.json index 4177587db7e116..a1c55f9697840b 100644 --- a/homeassistant/components/trafikverket_ferry/manifest.json +++ b/homeassistant/components/trafikverket_ferry/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@gjohansson-ST"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/trafikverket_ferry", + "integration_type": "service", "iot_class": "cloud_polling", "loggers": ["pytrafikverket"], "requirements": ["pytrafikverket==1.1.1"] diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index ca0e8cf945bc79..1d94a38bdee14e 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -7177,7 +7177,7 @@ "name": "Trafikverket Camera" }, "trafikverket_ferry": { - "integration_type": "hub", + "integration_type": "service", "config_flow": true, "iot_class": "cloud_polling", "name": "Trafikverket Ferry" From 46b0eaecf621b6176baf81230b4c65115a89076b Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 19:43:48 +0100 Subject: [PATCH 15/26] Add integration_type service to trafikverket_camera (#163674) --- homeassistant/components/trafikverket_camera/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/trafikverket_camera/manifest.json b/homeassistant/components/trafikverket_camera/manifest.json index 08d945e0a0c737..641654de20a0a0 100644 --- a/homeassistant/components/trafikverket_camera/manifest.json +++ b/homeassistant/components/trafikverket_camera/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@gjohansson-ST"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/trafikverket_camera", + "integration_type": "service", "iot_class": "cloud_polling", "loggers": ["pytrafikverket"], "requirements": ["pytrafikverket==1.1.1"] diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index 1d94a38bdee14e..021d9a5b00ec27 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -7171,7 +7171,7 @@ "name": "Trafikverket", "integrations": { "trafikverket_camera": { - "integration_type": "hub", + "integration_type": "service", "config_flow": true, "iot_class": "cloud_polling", "name": "Trafikverket Camera" From 541cc808b0575d62ecfc079b76fa4d24a330e304 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 19:45:21 +0100 Subject: [PATCH 16/26] Add integration_type hub to totalconnect (#163672) --- homeassistant/components/totalconnect/manifest.json | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/totalconnect/manifest.json b/homeassistant/components/totalconnect/manifest.json index db9a53ac154909..699bb8a7d762e4 100644 --- a/homeassistant/components/totalconnect/manifest.json +++ b/homeassistant/components/totalconnect/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@austinmroczek"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/totalconnect", + "integration_type": "hub", "iot_class": "cloud_polling", "loggers": ["total_connect_client"], "requirements": ["total-connect-client==2025.12.2"] From debf07e3fcb2bb902f3925b6cc276bd7fb3f63c8 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 19:46:07 +0100 Subject: [PATCH 17/26] Add integration_type device to toon (#163671) --- homeassistant/components/toon/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/toon/manifest.json b/homeassistant/components/toon/manifest.json index 5e5af3940749d1..17755a6e0b62c1 100644 --- a/homeassistant/components/toon/manifest.json +++ b/homeassistant/components/toon/manifest.json @@ -12,6 +12,7 @@ } ], "documentation": "https://www.home-assistant.io/integrations/toon", + "integration_type": "device", "iot_class": "cloud_push", "loggers": ["toonapi"], "requirements": ["toonapi==0.3.0"] diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index 021d9a5b00ec27..d133db1ed6d05c 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -7096,7 +7096,7 @@ }, "toon": { "name": "Toon", - "integration_type": "hub", + "integration_type": "device", "config_flow": true, "iot_class": "cloud_push" }, From 3c1b7ada9a979f97fd50ba39785492fc66b5807e Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 19:46:36 +0100 Subject: [PATCH 18/26] Add integration_type device to tolo (#163670) --- homeassistant/components/tolo/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/tolo/manifest.json b/homeassistant/components/tolo/manifest.json index 613fc810683cf5..85ca3666156158 100644 --- a/homeassistant/components/tolo/manifest.json +++ b/homeassistant/components/tolo/manifest.json @@ -9,6 +9,7 @@ } ], "documentation": "https://www.home-assistant.io/integrations/tolo", + "integration_type": "device", "iot_class": "local_polling", "loggers": ["tololib"], "requirements": ["tololib==1.2.2"] diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index d133db1ed6d05c..e3513f4bb55795 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -7078,7 +7078,7 @@ }, "tolo": { "name": "TOLO Sauna", - "integration_type": "hub", + "integration_type": "device", "config_flow": true, "iot_class": "local_polling" }, From cd26901386994ef45fe4739a7ffe28f6a7caf313 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 19:46:51 +0100 Subject: [PATCH 19/26] Add integration_type service to todoist (#163668) --- homeassistant/components/todoist/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/todoist/manifest.json b/homeassistant/components/todoist/manifest.json index 67526a85b65b16..2c67ea079e7fbc 100644 --- a/homeassistant/components/todoist/manifest.json +++ b/homeassistant/components/todoist/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@boralyl"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/todoist", + "integration_type": "service", "iot_class": "cloud_polling", "loggers": ["todoist"], "requirements": ["todoist-api-python==3.1.0"] diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index e3513f4bb55795..a34c72c794e425 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -7066,7 +7066,7 @@ }, "todoist": { "name": "Todoist", - "integration_type": "hub", + "integration_type": "service", "config_flow": true, "iot_class": "cloud_polling" }, From 0711176f9c56000d4902186acdb01d7efa54ef0b Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 19:48:35 +0100 Subject: [PATCH 20/26] Add integration_type device to tilt_ble (#163666) --- homeassistant/components/tilt_ble/manifest.json | 1 + homeassistant/generated/integrations.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/tilt_ble/manifest.json b/homeassistant/components/tilt_ble/manifest.json index f43e480a8f8b37..1036ccda773b7d 100644 --- a/homeassistant/components/tilt_ble/manifest.json +++ b/homeassistant/components/tilt_ble/manifest.json @@ -11,6 +11,7 @@ "config_flow": true, "dependencies": ["bluetooth_adapters"], "documentation": "https://www.home-assistant.io/integrations/tilt_ble", + "integration_type": "device", "iot_class": "local_push", "requirements": ["tilt-ble==1.0.1"] } diff --git a/homeassistant/generated/integrations.json b/homeassistant/generated/integrations.json index a34c72c794e425..6e13eebeeda3dc 100644 --- a/homeassistant/generated/integrations.json +++ b/homeassistant/generated/integrations.json @@ -7040,7 +7040,7 @@ "name": "Tilt", "integrations": { "tilt_ble": { - "integration_type": "hub", + "integration_type": "device", "config_flow": true, "iot_class": "local_push", "name": "Tilt Hydrometer BLE" From f020948e2dd902655ef45419e33f97486c9b6762 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 19:48:55 +0100 Subject: [PATCH 21/26] Add integration_type hub to tradfri (#163673) Co-authored-by: Josef Zweck --- homeassistant/components/tradfri/manifest.json | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/tradfri/manifest.json b/homeassistant/components/tradfri/manifest.json index c411c52146bd51..e0488e0be390c4 100644 --- a/homeassistant/components/tradfri/manifest.json +++ b/homeassistant/components/tradfri/manifest.json @@ -7,6 +7,7 @@ "homekit": { "models": ["TRADFRI"] }, + "integration_type": "hub", "iot_class": "local_polling", "loggers": ["pytradfri"], "requirements": ["pytradfri[async]==9.0.1"] From eeb7ce37251716c983325ab0bc7c17bb53189543 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Fri, 20 Feb 2026 19:49:23 +0100 Subject: [PATCH 22/26] Improve type hints in homematic hub (#163614) --- homeassistant/components/homematic/__init__.py | 12 ++++++++---- homeassistant/components/homematic/entity.py | 13 +++++++------ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/homeassistant/components/homematic/__init__.py b/homeassistant/components/homematic/__init__.py index 4ce57afe9466c7..41d965fab11064 100644 --- a/homeassistant/components/homematic/__init__.py +++ b/homeassistant/components/homematic/__init__.py @@ -3,6 +3,7 @@ from datetime import datetime from functools import partial import logging +from typing import Any from pyhomematic import HMConnection import voluptuous as vol @@ -215,8 +216,11 @@ def setup(hass: HomeAssistant, config: ConfigType) -> bool: hass.data[DATA_CONF] = remotes = {} hass.data[DATA_STORE] = set() + interfaces: dict[str, dict[str, Any]] = conf[CONF_INTERFACES] + hosts: dict[str, dict[str, Any]] = conf[CONF_HOSTS] + # Create hosts-dictionary for pyhomematic - for rname, rconfig in conf[CONF_INTERFACES].items(): + for rname, rconfig in interfaces.items(): remotes[rname] = { "ip": rconfig.get(CONF_HOST), "port": rconfig.get(CONF_PORT), @@ -232,7 +236,7 @@ def setup(hass: HomeAssistant, config: ConfigType) -> bool: "connect": True, } - for sname, sconfig in conf[CONF_HOSTS].items(): + for sname, sconfig in hosts.items(): remotes[sname] = { "ip": sconfig.get(CONF_HOST), "port": sconfig[CONF_PORT], @@ -258,7 +262,7 @@ def setup(hass: HomeAssistant, config: ConfigType) -> bool: hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, hass.data[DATA_HOMEMATIC].stop) # Init homematic hubs - entity_hubs = [HMHub(hass, homematic, hub_name) for hub_name in conf[CONF_HOSTS]] + entity_hubs = [HMHub(hass, homematic, hub_name) for hub_name in hosts] def _hm_service_virtualkey(service: ServiceCall) -> None: """Service to handle virtualkey servicecalls.""" @@ -294,7 +298,7 @@ def _hm_service_virtualkey(service: ServiceCall) -> None: def _service_handle_value(service: ServiceCall) -> None: """Service to call setValue method for HomeMatic system variable.""" - entity_ids = service.data.get(ATTR_ENTITY_ID) + entity_ids: list[str] | None = service.data.get(ATTR_ENTITY_ID) name = service.data[ATTR_NAME] value = service.data[ATTR_VALUE] diff --git a/homeassistant/components/homematic/entity.py b/homeassistant/components/homematic/entity.py index f9e8de703fb4f8..9a153eb0aa8c69 100644 --- a/homeassistant/components/homematic/entity.py +++ b/homeassistant/components/homematic/entity.py @@ -11,6 +11,7 @@ from pyhomematic.devicetypes.generic import HMGeneric from homeassistant.const import ATTR_NAME +from homeassistant.core import HomeAssistant from homeassistant.helpers import config_validation as cv from homeassistant.helpers.entity import Entity, EntityDescription from homeassistant.helpers.event import track_time_interval @@ -199,14 +200,14 @@ class HMHub(Entity): _attr_should_poll = False - def __init__(self, hass, homematic, name): + def __init__(self, hass: HomeAssistant, homematic: HMConnection, name: str) -> None: """Initialize HomeMatic hub.""" self.hass = hass self.entity_id = f"{DOMAIN}.{name.lower()}" self._homematic = homematic - self._variables = {} + self._variables: dict[str, Any] = {} self._name = name - self._state = None + self._state: int | None = None # Load data track_time_interval(self.hass, self._update_hub, SCAN_INTERVAL_HUB) @@ -216,12 +217,12 @@ def __init__(self, hass, homematic, name): self.hass.add_job(self._update_variables, None) @property - def name(self): + def name(self) -> str: """Return the name of the device.""" return self._name @property - def state(self): + def state(self) -> int | None: """Return the state of the entity.""" return self._state @@ -231,7 +232,7 @@ def extra_state_attributes(self) -> dict[str, Any]: return self._variables.copy() @property - def icon(self): + def icon(self) -> str: """Return the icon to use in the frontend, if any.""" return "mdi:gradient-vertical" From f6459453ed41b783e75996155f6d4802275efc1d Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 20 Feb 2026 19:51:02 +0100 Subject: [PATCH 23/26] Add integration_type hub to surepetcare (#163646) --- homeassistant/components/surepetcare/manifest.json | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/components/surepetcare/manifest.json b/homeassistant/components/surepetcare/manifest.json index bcfd10d2f0208b..4aa24a581e751f 100644 --- a/homeassistant/components/surepetcare/manifest.json +++ b/homeassistant/components/surepetcare/manifest.json @@ -4,6 +4,7 @@ "codeowners": ["@benleb", "@danielhiversen"], "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/surepetcare", + "integration_type": "hub", "iot_class": "cloud_polling", "loggers": ["rich", "surepy"], "requirements": ["surepy==0.9.0"] From 6115a4c1fbaaba3059c6ccf022cf0b7bb5a2834e Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Fri, 20 Feb 2026 19:56:39 +0100 Subject: [PATCH 24/26] Use shorthand attributes in swiss_hydrological_data (#163607) --- .../swiss_hydrological_data/sensor.py | 66 +++++++------------ 1 file changed, 24 insertions(+), 42 deletions(-) diff --git a/homeassistant/components/swiss_hydrological_data/sensor.py b/homeassistant/components/swiss_hydrological_data/sensor.py index e475ae909d0616..fdec1df6df2f39 100644 --- a/homeassistant/components/swiss_hydrological_data/sensor.py +++ b/homeassistant/components/swiss_hydrological_data/sensor.py @@ -4,7 +4,7 @@ from datetime import timedelta import logging -from typing import Any +from typing import TYPE_CHECKING, Any from swisshydrodata import SwissHydroData import voluptuous as vol @@ -67,8 +67,8 @@ def setup_platform( discovery_info: DiscoveryInfoType | None = None, ) -> None: """Set up the Swiss hydrological sensor.""" - station = config[CONF_STATION] - monitored_conditions = config[CONF_MONITORED_CONDITIONS] + station: int = config[CONF_STATION] + monitored_conditions: list[str] = config[CONF_MONITORED_CONDITIONS] hydro_data = HydrologicalData(station) hydro_data.update() @@ -93,38 +93,24 @@ class SwissHydrologicalDataSensor(SensorEntity): "Data provided by the Swiss Federal Office for the Environment FOEN" ) - def __init__(self, hydro_data, station, condition): + def __init__( + self, hydro_data: HydrologicalData, station: int, condition: str + ) -> None: """Initialize the Swiss hydrological sensor.""" self.hydro_data = hydro_data + data = hydro_data.data + if TYPE_CHECKING: + # Setup will fail in setup_platform if the data is None. + assert data is not None + self._condition = condition - self._data = self._state = self._unit_of_measurement = None - self._icon = CONDITIONS[condition] + self._data: dict[str, Any] | None = data + self._attr_icon = CONDITIONS[condition] + self._attr_name = f"{data['water-body-name']} {condition}" + self._attr_native_unit_of_measurement = data["parameters"][condition]["unit"] + self._attr_unique_id = f"{station}_{condition}" self._station = station - @property - def name(self): - """Return the name of the sensor.""" - return f"{self._data['water-body-name']} {self._condition}" - - @property - def unique_id(self) -> str: - """Return a unique, friendly identifier for this entity.""" - return f"{self._station}_{self._condition}" - - @property - def native_unit_of_measurement(self): - """Return the unit of measurement of this entity, if any.""" - if self._state is not None: - return self.hydro_data.data["parameters"][self._condition]["unit"] - return None - - @property - def native_value(self): - """Return the state of the sensor.""" - if isinstance(self._state, (int, float)): - return round(self._state, 2) - return None - @property def extra_state_attributes(self) -> dict[str, Any]: """Return the device state attributes.""" @@ -146,32 +132,28 @@ def extra_state_attributes(self) -> dict[str, Any]: return attrs - @property - def icon(self): - """Icon to use in the frontend.""" - return self._icon - def update(self) -> None: """Get the latest data and update the state.""" self.hydro_data.update() self._data = self.hydro_data.data - if self._data is None: - self._state = None - else: - self._state = self._data["parameters"][self._condition]["value"] + self._attr_native_value = None + if self._data is not None: + state = self._data["parameters"][self._condition]["value"] + if isinstance(state, (int, float)): + self._attr_native_value = round(state, 2) class HydrologicalData: """The Class for handling the data retrieval.""" - def __init__(self, station): + def __init__(self, station: int) -> None: """Initialize the data object.""" self.station = station - self.data = None + self.data: dict[str, Any] | None = None @Throttle(MIN_TIME_BETWEEN_UPDATES) - def update(self): + def update(self) -> None: """Get the latest data.""" shd = SwissHydroData() From 6ecbaa979a72e211b94ac282fe62cfd8e3591e02 Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Fri, 20 Feb 2026 20:36:07 +0100 Subject: [PATCH 25/26] Fix hassfest requirements check (#163681) --- .github/workflows/ci.yaml | 2 +- script/hassfest/requirements.py | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index f647dd0460241c..acc34a298b1075 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -37,7 +37,7 @@ on: type: boolean env: - CACHE_VERSION: 2 + CACHE_VERSION: 3 UV_CACHE_VERSION: 1 MYPY_CACHE_VERSION: 1 HA_SHORT_VERSION: "2026.3" diff --git a/script/hassfest/requirements.py b/script/hassfest/requirements.py index b3ca309278395a..034fe122fc7171 100644 --- a/script/hassfest/requirements.py +++ b/script/hassfest/requirements.py @@ -203,11 +203,6 @@ "sense": {"sense-energy": {"async-timeout"}}, "slimproto": {"aioslimproto": {"async-timeout"}}, "surepetcare": {"surepy": {"async-timeout"}}, - "tami4": { - # https://github.com/SeleniumHQ/selenium/issues/16943 - # tami4 > selenium > types* - "selenium": {"types-certifi", "types-urllib3"}, - }, "travisci": { # https://github.com/menegazzo/travispy seems to be unmaintained # and unused https://www.home-assistant.io/integrations/travisci From aa2bb44f0ed1c7e87d3a5b5050a688ec18a76c02 Mon Sep 17 00:00:00 2001 From: Erwin Douna Date: Fri, 20 Feb 2026 21:33:13 +0100 Subject: [PATCH 26/26] Bump pyportainer 1.0.27 (#163613) Co-authored-by: Josef Zweck Co-authored-by: Jan-Philipp Benecke --- homeassistant/components/portainer/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/portainer/manifest.json b/homeassistant/components/portainer/manifest.json index 1dcb4a0e6f1e1e..cf3ff3d891183a 100644 --- a/homeassistant/components/portainer/manifest.json +++ b/homeassistant/components/portainer/manifest.json @@ -7,5 +7,5 @@ "integration_type": "service", "iot_class": "local_polling", "quality_scale": "bronze", - "requirements": ["pyportainer==1.0.23"] + "requirements": ["pyportainer==1.0.27"] } diff --git a/requirements_all.txt b/requirements_all.txt index e8538fc6bc8c68..43c4e2e205fc9a 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2364,7 +2364,7 @@ pyplaato==0.0.19 pypoint==3.0.0 # homeassistant.components.portainer -pyportainer==1.0.23 +pyportainer==1.0.27 # homeassistant.components.probe_plus pyprobeplus==1.1.2 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 869c9139363bc3..e09b56cdb585a9 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -2014,7 +2014,7 @@ pyplaato==0.0.19 pypoint==3.0.0 # homeassistant.components.portainer -pyportainer==1.0.23 +pyportainer==1.0.27 # homeassistant.components.probe_plus pyprobeplus==1.1.2