From 9f6569d6588c3ab6c287d0fe5792546e41271dda Mon Sep 17 00:00:00 2001
From: Bouwe Westerdijk <11290930+bouwew@users.noreply.github.com>
Date: Fri, 25 Oct 2024 23:55:28 +0200
Subject: [PATCH] Bump plugwise to v1.4.4 (#129170)

---
 homeassistant/components/plugwise/__init__.py |  2 +-
 .../components/plugwise/coordinator.py        |  7 +++--
 .../components/plugwise/manifest.json         |  2 +-
 requirements_all.txt                          |  2 +-
 requirements_test_all.txt                     |  2 +-
 tests/components/plugwise/conftest.py         | 27 +++++++++----------
 6 files changed, 22 insertions(+), 20 deletions(-)

diff --git a/homeassistant/components/plugwise/__init__.py b/homeassistant/components/plugwise/__init__.py
index f7677e39f7a..7d1b9ceac8a 100644
--- a/homeassistant/components/plugwise/__init__.py
+++ b/homeassistant/components/plugwise/__init__.py
@@ -33,7 +33,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: PlugwiseConfigEntry) ->
         model=coordinator.api.smile_model,
         model_id=coordinator.api.smile_model_id,
         name=coordinator.api.smile_name,
-        sw_version=coordinator.api.smile_version[0],
+        sw_version=str(coordinator.api.smile_version),
     )  # required for adding the entity-less P1 Gateway
 
     await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
diff --git a/homeassistant/components/plugwise/coordinator.py b/homeassistant/components/plugwise/coordinator.py
index c3fe33c64d2..da2ef810d35 100644
--- a/homeassistant/components/plugwise/coordinator.py
+++ b/homeassistant/components/plugwise/coordinator.py
@@ -2,6 +2,7 @@
 
 from datetime import timedelta
 
+from packaging.version import Version
 from plugwise import PlugwiseData, Smile
 from plugwise.exceptions import (
     ConnectionFailedError,
@@ -61,8 +62,10 @@ class PlugwiseDataUpdateCoordinator(DataUpdateCoordinator[PlugwiseData]):
 
     async def _connect(self) -> None:
         """Connect to the Plugwise Smile."""
-        self._connected = await self.api.connect()
-        self.api.get_all_devices()
+        version = await self.api.connect()
+        self._connected = isinstance(version, Version)
+        if self._connected:
+            self.api.get_all_devices()
 
     async def _async_update_data(self) -> PlugwiseData:
         """Fetch data from Plugwise."""
diff --git a/homeassistant/components/plugwise/manifest.json b/homeassistant/components/plugwise/manifest.json
index 89378ae5b90..a4253a30cb5 100644
--- a/homeassistant/components/plugwise/manifest.json
+++ b/homeassistant/components/plugwise/manifest.json
@@ -7,6 +7,6 @@
   "integration_type": "hub",
   "iot_class": "local_polling",
   "loggers": ["plugwise"],
-  "requirements": ["plugwise==1.4.3"],
+  "requirements": ["plugwise==1.4.4"],
   "zeroconf": ["_plugwise._tcp.local."]
 }
diff --git a/requirements_all.txt b/requirements_all.txt
index bbe205fd15c..6d581e85227 100644
--- a/requirements_all.txt
+++ b/requirements_all.txt
@@ -1616,7 +1616,7 @@ plexauth==0.0.6
 plexwebsocket==0.0.14
 
 # homeassistant.components.plugwise
-plugwise==1.4.3
+plugwise==1.4.4
 
 # homeassistant.components.plum_lightpad
 plumlightpad==0.0.11
diff --git a/requirements_test_all.txt b/requirements_test_all.txt
index 9aa608a8cd4..6b87fda3b4a 100644
--- a/requirements_test_all.txt
+++ b/requirements_test_all.txt
@@ -1323,7 +1323,7 @@ plexauth==0.0.6
 plexwebsocket==0.0.14
 
 # homeassistant.components.plugwise
-plugwise==1.4.3
+plugwise==1.4.4
 
 # homeassistant.components.plum_lightpad
 plumlightpad==0.0.11
diff --git a/tests/components/plugwise/conftest.py b/tests/components/plugwise/conftest.py
index ace3ccbda60..f18c96d36c5 100644
--- a/tests/components/plugwise/conftest.py
+++ b/tests/components/plugwise/conftest.py
@@ -7,6 +7,7 @@ import json
 from typing import Any
 from unittest.mock import AsyncMock, MagicMock, patch
 
+from packaging.version import Version
 from plugwise import PlugwiseData
 import pytest
 
@@ -67,7 +68,7 @@ def mock_smile_config_flow() -> Generator[MagicMock]:
         smile.smile_model = "Test Model"
         smile.smile_model_id = "Test Model ID"
         smile.smile_name = "Test Smile Name"
-        smile.connect.return_value = True
+        smile.connect.return_value = Version("4.3.2")
         yield smile
 
 
@@ -89,7 +90,7 @@ def mock_smile_adam() -> Generator[MagicMock]:
         smile.smile_model = "Gateway"
         smile.smile_model_id = "smile_open_therm"
         smile.smile_name = "Adam"
-        smile.connect.return_value = True
+        smile.connect.return_value = Version("3.0.15")
         all_data = _read_json(chosen_env, "all_data")
         smile.async_update.return_value = PlugwiseData(
             all_data["gateway"], all_data["devices"]
@@ -116,7 +117,7 @@ def mock_smile_adam_2() -> Generator[MagicMock]:
         smile.smile_model = "Gateway"
         smile.smile_model_id = "smile_open_therm"
         smile.smile_name = "Adam"
-        smile.connect.return_value = True
+        smile.connect.return_value = Version("3.6.4")
         all_data = _read_json(chosen_env, "all_data")
         smile.async_update.return_value = PlugwiseData(
             all_data["gateway"], all_data["devices"]
@@ -143,7 +144,7 @@ def mock_smile_adam_3() -> Generator[MagicMock]:
         smile.smile_model = "Gateway"
         smile.smile_model_id = "smile_open_therm"
         smile.smile_name = "Adam"
-        smile.connect.return_value = True
+        smile.connect.return_value = Version("3.6.4")
         all_data = _read_json(chosen_env, "all_data")
         smile.async_update.return_value = PlugwiseData(
             all_data["gateway"], all_data["devices"]
@@ -170,7 +171,7 @@ def mock_smile_adam_4() -> Generator[MagicMock]:
         smile.smile_model = "Gateway"
         smile.smile_model_id = "smile_open_therm"
         smile.smile_name = "Adam"
-        smile.connect.return_value = True
+        smile.connect.return_value = Version("3.2.8")
         all_data = _read_json(chosen_env, "all_data")
         smile.async_update.return_value = PlugwiseData(
             all_data["gateway"], all_data["devices"]
@@ -196,7 +197,7 @@ def mock_smile_anna() -> Generator[MagicMock]:
         smile.smile_model = "Gateway"
         smile.smile_model_id = "smile_thermo"
         smile.smile_name = "Smile Anna"
-        smile.connect.return_value = True
+        smile.connect.return_value = Version("4.0.15")
         all_data = _read_json(chosen_env, "all_data")
         smile.async_update.return_value = PlugwiseData(
             all_data["gateway"], all_data["devices"]
@@ -222,7 +223,7 @@ def mock_smile_anna_2() -> Generator[MagicMock]:
         smile.smile_model = "Gateway"
         smile.smile_model_id = "smile_thermo"
         smile.smile_name = "Smile Anna"
-        smile.connect.return_value = True
+        smile.connect.return_value = Version("4.0.15")
         all_data = _read_json(chosen_env, "all_data")
         smile.async_update.return_value = PlugwiseData(
             all_data["gateway"], all_data["devices"]
@@ -248,7 +249,7 @@ def mock_smile_anna_3() -> Generator[MagicMock]:
         smile.smile_model = "Gateway"
         smile.smile_model_id = "smile_thermo"
         smile.smile_name = "Smile Anna"
-        smile.connect.return_value = True
+        smile.connect.return_value = Version("4.0.15")
         all_data = _read_json(chosen_env, "all_data")
         smile.async_update.return_value = PlugwiseData(
             all_data["gateway"], all_data["devices"]
@@ -274,7 +275,7 @@ def mock_smile_p1() -> Generator[MagicMock]:
         smile.smile_model = "Gateway"
         smile.smile_model_id = "smile"
         smile.smile_name = "Smile P1"
-        smile.connect.return_value = True
+        smile.connect.return_value = Version("4.4.2")
         all_data = _read_json(chosen_env, "all_data")
         smile.async_update.return_value = PlugwiseData(
             all_data["gateway"], all_data["devices"]
@@ -300,7 +301,7 @@ def mock_smile_p1_2() -> Generator[MagicMock]:
         smile.smile_model = "Gateway"
         smile.smile_model_id = "smile"
         smile.smile_name = "Smile P1"
-        smile.connect.return_value = True
+        smile.connect.return_value = Version("4.4.2")
         all_data = _read_json(chosen_env, "all_data")
         smile.async_update.return_value = PlugwiseData(
             all_data["gateway"], all_data["devices"]
@@ -326,9 +327,7 @@ def mock_smile_legacy_anna() -> Generator[MagicMock]:
         smile.smile_model = "Gateway"
         smile.smile_model_id = None
         smile.smile_name = "Smile Anna"
-
-        smile.connect.return_value = True
-
+        smile.connect.return_value = Version("1.8.22")
         all_data = _read_json(chosen_env, "all_data")
         smile.async_update.return_value = PlugwiseData(
             all_data["gateway"], all_data["devices"]
@@ -354,7 +353,7 @@ def mock_stretch() -> Generator[MagicMock]:
         smile.smile_model = "Gateway"
         smile.smile_model_id = None
         smile.smile_name = "Stretch"
-        smile.connect.return_value = True
+        smile.connect.return_value = Version("3.1.11")
         all_data = _read_json(chosen_env, "all_data")
         smile.async_update.return_value = PlugwiseData(
             all_data["gateway"], all_data["devices"]