mirror of
https://github.com/home-assistant/core.git
synced 2025-07-16 17:57:11 +00:00
2024.12.2 (#132846)
This commit is contained in:
commit
3fe2c14a79
@ -25,5 +25,5 @@
|
|||||||
"integration_type": "device",
|
"integration_type": "device",
|
||||||
"iot_class": "local_push",
|
"iot_class": "local_push",
|
||||||
"loggers": ["aioacaia"],
|
"loggers": ["aioacaia"],
|
||||||
"requirements": ["aioacaia==0.1.10"]
|
"requirements": ["aioacaia==0.1.11"]
|
||||||
}
|
}
|
||||||
|
@ -28,5 +28,5 @@
|
|||||||
"documentation": "https://www.home-assistant.io/integrations/august",
|
"documentation": "https://www.home-assistant.io/integrations/august",
|
||||||
"iot_class": "cloud_push",
|
"iot_class": "cloud_push",
|
||||||
"loggers": ["pubnub", "yalexs"],
|
"loggers": ["pubnub", "yalexs"],
|
||||||
"requirements": ["yalexs==8.10.0", "yalexs-ble==2.5.1"]
|
"requirements": ["yalexs==8.10.0", "yalexs-ble==2.5.2"]
|
||||||
}
|
}
|
||||||
|
@ -6,5 +6,5 @@
|
|||||||
"documentation": "https://www.home-assistant.io/integrations/conversation",
|
"documentation": "https://www.home-assistant.io/integrations/conversation",
|
||||||
"integration_type": "system",
|
"integration_type": "system",
|
||||||
"quality_scale": "internal",
|
"quality_scale": "internal",
|
||||||
"requirements": ["hassil==2.0.5", "home-assistant-intents==2024.12.4"]
|
"requirements": ["hassil==2.0.5", "home-assistant-intents==2024.12.9"]
|
||||||
}
|
}
|
||||||
|
@ -5,5 +5,5 @@
|
|||||||
"documentation": "https://www.home-assistant.io/integrations/cups",
|
"documentation": "https://www.home-assistant.io/integrations/cups",
|
||||||
"iot_class": "local_polling",
|
"iot_class": "local_polling",
|
||||||
"quality_scale": "legacy",
|
"quality_scale": "legacy",
|
||||||
"requirements": ["pycups==1.9.73"]
|
"requirements": ["pycups==2.0.4"]
|
||||||
}
|
}
|
||||||
|
@ -6,5 +6,5 @@
|
|||||||
"integration_type": "service",
|
"integration_type": "service",
|
||||||
"iot_class": "local_push",
|
"iot_class": "local_push",
|
||||||
"quality_scale": "internal",
|
"quality_scale": "internal",
|
||||||
"requirements": ["debugpy==1.8.6"]
|
"requirements": ["debugpy==1.8.8"]
|
||||||
}
|
}
|
||||||
|
@ -6,5 +6,5 @@
|
|||||||
"documentation": "https://www.home-assistant.io/integrations/ecovacs",
|
"documentation": "https://www.home-assistant.io/integrations/ecovacs",
|
||||||
"iot_class": "cloud_push",
|
"iot_class": "cloud_push",
|
||||||
"loggers": ["sleekxmppfs", "sucks", "deebot_client"],
|
"loggers": ["sleekxmppfs", "sucks", "deebot_client"],
|
||||||
"requirements": ["py-sucks==0.9.10", "deebot-client==9.2.0"]
|
"requirements": ["py-sucks==0.9.10", "deebot-client==9.3.0"]
|
||||||
}
|
}
|
||||||
|
@ -7,5 +7,5 @@
|
|||||||
"documentation": "https://www.home-assistant.io/integrations/ezviz",
|
"documentation": "https://www.home-assistant.io/integrations/ezviz",
|
||||||
"iot_class": "cloud_polling",
|
"iot_class": "cloud_polling",
|
||||||
"loggers": ["paho_mqtt", "pyezviz"],
|
"loggers": ["paho_mqtt", "pyezviz"],
|
||||||
"requirements": ["pyezviz==0.2.2.3"]
|
"requirements": ["pyezviz==0.2.1.2"]
|
||||||
}
|
}
|
||||||
|
@ -20,5 +20,5 @@
|
|||||||
"documentation": "https://www.home-assistant.io/integrations/frontend",
|
"documentation": "https://www.home-assistant.io/integrations/frontend",
|
||||||
"integration_type": "system",
|
"integration_type": "system",
|
||||||
"quality_scale": "internal",
|
"quality_scale": "internal",
|
||||||
"requirements": ["home-assistant-frontend==20241127.6"]
|
"requirements": ["home-assistant-frontend==20241127.7"]
|
||||||
}
|
}
|
||||||
|
@ -53,10 +53,10 @@ class HusqvarnaConfigFlowHandler(
|
|||||||
tz = await dt_util.async_get_time_zone(str(dt_util.DEFAULT_TIME_ZONE))
|
tz = await dt_util.async_get_time_zone(str(dt_util.DEFAULT_TIME_ZONE))
|
||||||
automower_api = AutomowerSession(AsyncConfigFlowAuth(websession, token), tz)
|
automower_api = AutomowerSession(AsyncConfigFlowAuth(websession, token), tz)
|
||||||
try:
|
try:
|
||||||
data = await automower_api.get_status()
|
status_data = await automower_api.get_status()
|
||||||
except Exception: # noqa: BLE001
|
except Exception: # noqa: BLE001
|
||||||
return self.async_abort(reason="unknown")
|
return self.async_abort(reason="unknown")
|
||||||
if data == {}:
|
if status_data == {}:
|
||||||
return self.async_abort(reason="no_mower_connected")
|
return self.async_abort(reason="no_mower_connected")
|
||||||
|
|
||||||
structured_token = structure_token(token[CONF_ACCESS_TOKEN])
|
structured_token = structure_token(token[CONF_ACCESS_TOKEN])
|
||||||
|
@ -7,7 +7,7 @@ from homeassistant.const import CONF_PASSWORD, CONF_USERNAME, Platform
|
|||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.exceptions import ConfigEntryAuthFailed
|
from homeassistant.exceptions import ConfigEntryAuthFailed
|
||||||
|
|
||||||
from .const import DOMAIN
|
from .const import APP_ID, DOMAIN
|
||||||
from .coordinator import (
|
from .coordinator import (
|
||||||
HydrawiseMainDataUpdateCoordinator,
|
HydrawiseMainDataUpdateCoordinator,
|
||||||
HydrawiseUpdateCoordinators,
|
HydrawiseUpdateCoordinators,
|
||||||
@ -30,7 +30,8 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> b
|
|||||||
raise ConfigEntryAuthFailed
|
raise ConfigEntryAuthFailed
|
||||||
|
|
||||||
hydrawise = client.Hydrawise(
|
hydrawise = client.Hydrawise(
|
||||||
auth.Auth(config_entry.data[CONF_USERNAME], config_entry.data[CONF_PASSWORD])
|
auth.Auth(config_entry.data[CONF_USERNAME], config_entry.data[CONF_PASSWORD]),
|
||||||
|
app_id=APP_ID,
|
||||||
)
|
)
|
||||||
|
|
||||||
main_coordinator = HydrawiseMainDataUpdateCoordinator(hass, hydrawise)
|
main_coordinator = HydrawiseMainDataUpdateCoordinator(hass, hydrawise)
|
||||||
|
@ -6,14 +6,14 @@ from collections.abc import Callable, Mapping
|
|||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from aiohttp import ClientError
|
from aiohttp import ClientError
|
||||||
from pydrawise import auth, client
|
from pydrawise import auth as pydrawise_auth, client
|
||||||
from pydrawise.exceptions import NotAuthorizedError
|
from pydrawise.exceptions import NotAuthorizedError
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.config_entries import SOURCE_REAUTH, ConfigFlow, ConfigFlowResult
|
from homeassistant.config_entries import SOURCE_REAUTH, ConfigFlow, ConfigFlowResult
|
||||||
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
|
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
|
||||||
|
|
||||||
from .const import DOMAIN, LOGGER
|
from .const import APP_ID, DOMAIN, LOGGER
|
||||||
|
|
||||||
|
|
||||||
class HydrawiseConfigFlow(ConfigFlow, domain=DOMAIN):
|
class HydrawiseConfigFlow(ConfigFlow, domain=DOMAIN):
|
||||||
@ -29,16 +29,21 @@ class HydrawiseConfigFlow(ConfigFlow, domain=DOMAIN):
|
|||||||
on_failure: Callable[[str], ConfigFlowResult],
|
on_failure: Callable[[str], ConfigFlowResult],
|
||||||
) -> ConfigFlowResult:
|
) -> ConfigFlowResult:
|
||||||
"""Create the config entry."""
|
"""Create the config entry."""
|
||||||
|
|
||||||
# Verify that the provided credentials work."""
|
# Verify that the provided credentials work."""
|
||||||
api = client.Hydrawise(auth.Auth(username, password))
|
auth = pydrawise_auth.Auth(username, password)
|
||||||
try:
|
try:
|
||||||
# Don't fetch zones because we don't need them yet.
|
await auth.token()
|
||||||
user = await api.get_user(fetch_zones=False)
|
|
||||||
except NotAuthorizedError:
|
except NotAuthorizedError:
|
||||||
return on_failure("invalid_auth")
|
return on_failure("invalid_auth")
|
||||||
except TimeoutError:
|
except TimeoutError:
|
||||||
return on_failure("timeout_connect")
|
return on_failure("timeout_connect")
|
||||||
|
|
||||||
|
try:
|
||||||
|
api = client.Hydrawise(auth, app_id=APP_ID)
|
||||||
|
# Don't fetch zones because we don't need them yet.
|
||||||
|
user = await api.get_user(fetch_zones=False)
|
||||||
|
except TimeoutError:
|
||||||
|
return on_failure("timeout_connect")
|
||||||
except ClientError as ex:
|
except ClientError as ex:
|
||||||
LOGGER.error("Unable to connect to Hydrawise cloud service: %s", ex)
|
LOGGER.error("Unable to connect to Hydrawise cloud service: %s", ex)
|
||||||
return on_failure("cannot_connect")
|
return on_failure("cannot_connect")
|
||||||
|
@ -3,8 +3,12 @@
|
|||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
from homeassistant.const import __version__ as HA_VERSION
|
||||||
|
|
||||||
LOGGER = logging.getLogger(__package__)
|
LOGGER = logging.getLogger(__package__)
|
||||||
|
|
||||||
|
APP_ID = f"homeassistant-{HA_VERSION}"
|
||||||
|
|
||||||
DOMAIN = "hydrawise"
|
DOMAIN = "hydrawise"
|
||||||
DEFAULT_WATERING_TIME = timedelta(minutes=15)
|
DEFAULT_WATERING_TIME = timedelta(minutes=15)
|
||||||
|
|
||||||
|
@ -6,5 +6,5 @@
|
|||||||
"documentation": "https://www.home-assistant.io/integrations/hydrawise",
|
"documentation": "https://www.home-assistant.io/integrations/hydrawise",
|
||||||
"iot_class": "cloud_polling",
|
"iot_class": "cloud_polling",
|
||||||
"loggers": ["pydrawise"],
|
"loggers": ["pydrawise"],
|
||||||
"requirements": ["pydrawise==2024.9.0"]
|
"requirements": ["pydrawise==2024.12.0"]
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,6 @@
|
|||||||
"iot_class": "calculated",
|
"iot_class": "calculated",
|
||||||
"loggers": ["yt_dlp"],
|
"loggers": ["yt_dlp"],
|
||||||
"quality_scale": "internal",
|
"quality_scale": "internal",
|
||||||
"requirements": ["yt-dlp[default]==2024.12.03"],
|
"requirements": ["yt-dlp[default]==2024.12.06"],
|
||||||
"single_config_entry": true
|
"single_config_entry": true
|
||||||
}
|
}
|
||||||
|
@ -95,11 +95,17 @@ PARAMETER_ID_TO_EXCLUDE_F730 = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
PARAMETER_ID_TO_INCLUDE_SMO20 = (
|
PARAMETER_ID_TO_INCLUDE_SMO20 = (
|
||||||
|
"40013",
|
||||||
|
"40033",
|
||||||
"40940",
|
"40940",
|
||||||
|
"44069",
|
||||||
|
"44071",
|
||||||
|
"44073",
|
||||||
"47011",
|
"47011",
|
||||||
"47015",
|
"47015",
|
||||||
"47028",
|
"47028",
|
||||||
"47032",
|
"47032",
|
||||||
|
"47398",
|
||||||
"50004",
|
"50004",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -191,17 +191,8 @@ class PlugwiseClimateEntity(PlugwiseEntity, ClimateEntity):
|
|||||||
self._previous_action_mode(self.coordinator)
|
self._previous_action_mode(self.coordinator)
|
||||||
|
|
||||||
# Adam provides the hvac_action for each thermostat
|
# Adam provides the hvac_action for each thermostat
|
||||||
if self._gateway["smile_name"] == "Adam":
|
if (action := self.device.get("control_state")) is not None:
|
||||||
if (control_state := self.device.get("control_state")) == "cooling":
|
return HVACAction(action)
|
||||||
return HVACAction.COOLING
|
|
||||||
if control_state == "heating":
|
|
||||||
return HVACAction.HEATING
|
|
||||||
if control_state == "preheating":
|
|
||||||
return HVACAction.PREHEATING
|
|
||||||
if control_state == "off":
|
|
||||||
return HVACAction.IDLE
|
|
||||||
|
|
||||||
return HVACAction.IDLE
|
|
||||||
|
|
||||||
# Anna
|
# Anna
|
||||||
heater: str = self._gateway["heater_id"]
|
heater: str = self._gateway["heater_id"]
|
||||||
|
@ -7,6 +7,6 @@
|
|||||||
"integration_type": "hub",
|
"integration_type": "hub",
|
||||||
"iot_class": "local_polling",
|
"iot_class": "local_polling",
|
||||||
"loggers": ["plugwise"],
|
"loggers": ["plugwise"],
|
||||||
"requirements": ["plugwise==1.6.0"],
|
"requirements": ["plugwise==1.6.3"],
|
||||||
"zeroconf": ["_plugwise._tcp.local."]
|
"zeroconf": ["_plugwise._tcp.local."]
|
||||||
}
|
}
|
||||||
|
@ -18,5 +18,5 @@
|
|||||||
"documentation": "https://www.home-assistant.io/integrations/reolink",
|
"documentation": "https://www.home-assistant.io/integrations/reolink",
|
||||||
"iot_class": "local_push",
|
"iot_class": "local_push",
|
||||||
"loggers": ["reolink_aio"],
|
"loggers": ["reolink_aio"],
|
||||||
"requirements": ["reolink-aio==0.11.4"]
|
"requirements": ["reolink-aio==0.11.5"]
|
||||||
}
|
}
|
||||||
|
@ -6,5 +6,5 @@
|
|||||||
"documentation": "https://www.home-assistant.io/integrations/risco",
|
"documentation": "https://www.home-assistant.io/integrations/risco",
|
||||||
"iot_class": "local_push",
|
"iot_class": "local_push",
|
||||||
"loggers": ["pyrisco"],
|
"loggers": ["pyrisco"],
|
||||||
"requirements": ["pyrisco==0.6.4"]
|
"requirements": ["pyrisco==0.6.5"]
|
||||||
}
|
}
|
||||||
|
@ -79,6 +79,8 @@ class SwitchBotCloudAirConditioner(SwitchBotCloudEntity, ClimateEntity):
|
|||||||
_attr_hvac_mode = HVACMode.FAN_ONLY
|
_attr_hvac_mode = HVACMode.FAN_ONLY
|
||||||
_attr_temperature_unit = UnitOfTemperature.CELSIUS
|
_attr_temperature_unit = UnitOfTemperature.CELSIUS
|
||||||
_attr_target_temperature = 21
|
_attr_target_temperature = 21
|
||||||
|
_attr_target_temperature_step = 1
|
||||||
|
_attr_precision = 1
|
||||||
_attr_name = None
|
_attr_name = None
|
||||||
_enable_turn_on_off_backwards_compatibility = False
|
_enable_turn_on_off_backwards_compatibility = False
|
||||||
|
|
||||||
@ -97,7 +99,7 @@ class SwitchBotCloudAirConditioner(SwitchBotCloudEntity, ClimateEntity):
|
|||||||
)
|
)
|
||||||
await self.send_api_command(
|
await self.send_api_command(
|
||||||
AirConditionerCommands.SET_ALL,
|
AirConditionerCommands.SET_ALL,
|
||||||
parameters=f"{new_temperature},{new_mode},{new_fan_speed},on",
|
parameters=f"{int(new_temperature)},{new_mode},{new_fan_speed},on",
|
||||||
)
|
)
|
||||||
|
|
||||||
async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:
|
async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:
|
||||||
|
@ -14,5 +14,5 @@
|
|||||||
},
|
},
|
||||||
"iot_class": "cloud_polling",
|
"iot_class": "cloud_polling",
|
||||||
"loggers": ["PyTado"],
|
"loggers": ["PyTado"],
|
||||||
"requirements": ["python-tado==0.17.7"]
|
"requirements": ["python-tado==0.17.6"]
|
||||||
}
|
}
|
||||||
|
@ -6,5 +6,5 @@
|
|||||||
"documentation": "https://www.home-assistant.io/integrations/totalconnect",
|
"documentation": "https://www.home-assistant.io/integrations/totalconnect",
|
||||||
"iot_class": "cloud_polling",
|
"iot_class": "cloud_polling",
|
||||||
"loggers": ["total_connect_client"],
|
"loggers": ["total_connect_client"],
|
||||||
"requirements": ["total-connect-client==2024.5"]
|
"requirements": ["total-connect-client==2024.12"]
|
||||||
}
|
}
|
||||||
|
@ -7,5 +7,5 @@
|
|||||||
"integration_type": "service",
|
"integration_type": "service",
|
||||||
"iot_class": "cloud_polling",
|
"iot_class": "cloud_polling",
|
||||||
"loggers": ["twentemilieu"],
|
"loggers": ["twentemilieu"],
|
||||||
"requirements": ["twentemilieu==2.1.0"]
|
"requirements": ["twentemilieu==2.2.0"]
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
"integration_type": "hub",
|
"integration_type": "hub",
|
||||||
"iot_class": "local_push",
|
"iot_class": "local_push",
|
||||||
"loggers": ["aiounifi"],
|
"loggers": ["aiounifi"],
|
||||||
"requirements": ["aiounifi==80"],
|
"requirements": ["aiounifi==81"],
|
||||||
"ssdp": [
|
"ssdp": [
|
||||||
{
|
{
|
||||||
"manufacturer": "Ubiquiti Networks",
|
"manufacturer": "Ubiquiti Networks",
|
||||||
|
@ -13,5 +13,5 @@
|
|||||||
"documentation": "https://www.home-assistant.io/integrations/yale",
|
"documentation": "https://www.home-assistant.io/integrations/yale",
|
||||||
"iot_class": "cloud_push",
|
"iot_class": "cloud_push",
|
||||||
"loggers": ["socketio", "engineio", "yalexs"],
|
"loggers": ["socketio", "engineio", "yalexs"],
|
||||||
"requirements": ["yalexs==8.10.0", "yalexs-ble==2.5.1"]
|
"requirements": ["yalexs==8.10.0", "yalexs-ble==2.5.2"]
|
||||||
}
|
}
|
||||||
|
@ -12,5 +12,5 @@
|
|||||||
"dependencies": ["bluetooth_adapters"],
|
"dependencies": ["bluetooth_adapters"],
|
||||||
"documentation": "https://www.home-assistant.io/integrations/yalexs_ble",
|
"documentation": "https://www.home-assistant.io/integrations/yalexs_ble",
|
||||||
"iot_class": "local_push",
|
"iot_class": "local_push",
|
||||||
"requirements": ["yalexs-ble==2.5.1"]
|
"requirements": ["yalexs-ble==2.5.2"]
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
"zha",
|
"zha",
|
||||||
"universal_silabs_flasher"
|
"universal_silabs_flasher"
|
||||||
],
|
],
|
||||||
"requirements": ["universal-silabs-flasher==0.0.25", "zha==0.0.41"],
|
"requirements": ["universal-silabs-flasher==0.0.25", "zha==0.0.42"],
|
||||||
"usb": [
|
"usb": [
|
||||||
{
|
{
|
||||||
"vid": "10C4",
|
"vid": "10C4",
|
||||||
|
@ -25,7 +25,7 @@ if TYPE_CHECKING:
|
|||||||
APPLICATION_NAME: Final = "HomeAssistant"
|
APPLICATION_NAME: Final = "HomeAssistant"
|
||||||
MAJOR_VERSION: Final = 2024
|
MAJOR_VERSION: Final = 2024
|
||||||
MINOR_VERSION: Final = 12
|
MINOR_VERSION: Final = 12
|
||||||
PATCH_VERSION: Final = "1"
|
PATCH_VERSION: Final = "2"
|
||||||
__short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}"
|
__short_version__: Final = f"{MAJOR_VERSION}.{MINOR_VERSION}"
|
||||||
__version__: Final = f"{__short_version__}.{PATCH_VERSION}"
|
__version__: Final = f"{__short_version__}.{PATCH_VERSION}"
|
||||||
REQUIRED_PYTHON_VER: Final[tuple[int, int, int]] = (3, 12, 0)
|
REQUIRED_PYTHON_VER: Final[tuple[int, int, int]] = (3, 12, 0)
|
||||||
|
@ -34,8 +34,8 @@ habluetooth==3.6.0
|
|||||||
hass-nabucasa==0.86.0
|
hass-nabucasa==0.86.0
|
||||||
hassil==2.0.5
|
hassil==2.0.5
|
||||||
home-assistant-bluetooth==1.13.0
|
home-assistant-bluetooth==1.13.0
|
||||||
home-assistant-frontend==20241127.6
|
home-assistant-frontend==20241127.7
|
||||||
home-assistant-intents==2024.12.4
|
home-assistant-intents==2024.12.9
|
||||||
httpx==0.27.2
|
httpx==0.27.2
|
||||||
ifaddr==0.2.0
|
ifaddr==0.2.0
|
||||||
Jinja2==3.1.4
|
Jinja2==3.1.4
|
||||||
|
@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "homeassistant"
|
name = "homeassistant"
|
||||||
version = "2024.12.1"
|
version = "2024.12.2"
|
||||||
license = {text = "Apache-2.0"}
|
license = {text = "Apache-2.0"}
|
||||||
description = "Open-source home automation platform running on Python 3."
|
description = "Open-source home automation platform running on Python 3."
|
||||||
readme = "README.rst"
|
readme = "README.rst"
|
||||||
|
@ -173,7 +173,7 @@ aio-geojson-usgs-earthquakes==0.3
|
|||||||
aio-georss-gdacs==0.10
|
aio-georss-gdacs==0.10
|
||||||
|
|
||||||
# homeassistant.components.acaia
|
# homeassistant.components.acaia
|
||||||
aioacaia==0.1.10
|
aioacaia==0.1.11
|
||||||
|
|
||||||
# homeassistant.components.airq
|
# homeassistant.components.airq
|
||||||
aioairq==0.4.3
|
aioairq==0.4.3
|
||||||
@ -402,7 +402,7 @@ aiotedee==0.2.20
|
|||||||
aiotractive==0.6.0
|
aiotractive==0.6.0
|
||||||
|
|
||||||
# homeassistant.components.unifi
|
# homeassistant.components.unifi
|
||||||
aiounifi==80
|
aiounifi==81
|
||||||
|
|
||||||
# homeassistant.components.vlc_telnet
|
# homeassistant.components.vlc_telnet
|
||||||
aiovlc==0.5.1
|
aiovlc==0.5.1
|
||||||
@ -729,7 +729,7 @@ datapoint==0.9.9
|
|||||||
dbus-fast==2.24.3
|
dbus-fast==2.24.3
|
||||||
|
|
||||||
# homeassistant.components.debugpy
|
# homeassistant.components.debugpy
|
||||||
debugpy==1.8.6
|
debugpy==1.8.8
|
||||||
|
|
||||||
# homeassistant.components.decora_wifi
|
# homeassistant.components.decora_wifi
|
||||||
# decora-wifi==1.4
|
# decora-wifi==1.4
|
||||||
@ -738,7 +738,7 @@ debugpy==1.8.6
|
|||||||
# decora==0.6
|
# decora==0.6
|
||||||
|
|
||||||
# homeassistant.components.ecovacs
|
# homeassistant.components.ecovacs
|
||||||
deebot-client==9.2.0
|
deebot-client==9.3.0
|
||||||
|
|
||||||
# homeassistant.components.ihc
|
# homeassistant.components.ihc
|
||||||
# homeassistant.components.namecheapdns
|
# homeassistant.components.namecheapdns
|
||||||
@ -1130,10 +1130,10 @@ hole==0.8.0
|
|||||||
holidays==0.62
|
holidays==0.62
|
||||||
|
|
||||||
# homeassistant.components.frontend
|
# homeassistant.components.frontend
|
||||||
home-assistant-frontend==20241127.6
|
home-assistant-frontend==20241127.7
|
||||||
|
|
||||||
# homeassistant.components.conversation
|
# homeassistant.components.conversation
|
||||||
home-assistant-intents==2024.12.4
|
home-assistant-intents==2024.12.9
|
||||||
|
|
||||||
# homeassistant.components.home_connect
|
# homeassistant.components.home_connect
|
||||||
homeconnect==0.8.0
|
homeconnect==0.8.0
|
||||||
@ -1622,7 +1622,7 @@ plexauth==0.0.6
|
|||||||
plexwebsocket==0.0.14
|
plexwebsocket==0.0.14
|
||||||
|
|
||||||
# homeassistant.components.plugwise
|
# homeassistant.components.plugwise
|
||||||
plugwise==1.6.0
|
plugwise==1.6.3
|
||||||
|
|
||||||
# homeassistant.components.plum_lightpad
|
# homeassistant.components.plum_lightpad
|
||||||
plumlightpad==0.0.11
|
plumlightpad==0.0.11
|
||||||
@ -1832,7 +1832,7 @@ pycountry==24.6.1
|
|||||||
pycsspeechtts==1.0.8
|
pycsspeechtts==1.0.8
|
||||||
|
|
||||||
# homeassistant.components.cups
|
# homeassistant.components.cups
|
||||||
# pycups==1.9.73
|
# pycups==2.0.4
|
||||||
|
|
||||||
# homeassistant.components.daikin
|
# homeassistant.components.daikin
|
||||||
pydaikin==2.13.7
|
pydaikin==2.13.7
|
||||||
@ -1859,7 +1859,7 @@ pydiscovergy==3.0.2
|
|||||||
pydoods==1.0.2
|
pydoods==1.0.2
|
||||||
|
|
||||||
# homeassistant.components.hydrawise
|
# homeassistant.components.hydrawise
|
||||||
pydrawise==2024.9.0
|
pydrawise==2024.12.0
|
||||||
|
|
||||||
# homeassistant.components.android_ip_webcam
|
# homeassistant.components.android_ip_webcam
|
||||||
pydroid-ipcam==2.0.0
|
pydroid-ipcam==2.0.0
|
||||||
@ -1907,7 +1907,7 @@ pyeverlights==0.1.0
|
|||||||
pyevilgenius==2.0.0
|
pyevilgenius==2.0.0
|
||||||
|
|
||||||
# homeassistant.components.ezviz
|
# homeassistant.components.ezviz
|
||||||
pyezviz==0.2.2.3
|
pyezviz==0.2.1.2
|
||||||
|
|
||||||
# homeassistant.components.fibaro
|
# homeassistant.components.fibaro
|
||||||
pyfibaro==0.8.0
|
pyfibaro==0.8.0
|
||||||
@ -2203,7 +2203,7 @@ pyrecswitch==1.0.2
|
|||||||
pyrepetierng==0.1.0
|
pyrepetierng==0.1.0
|
||||||
|
|
||||||
# homeassistant.components.risco
|
# homeassistant.components.risco
|
||||||
pyrisco==0.6.4
|
pyrisco==0.6.5
|
||||||
|
|
||||||
# homeassistant.components.rituals_perfume_genie
|
# homeassistant.components.rituals_perfume_genie
|
||||||
pyrituals==0.0.6
|
pyrituals==0.0.6
|
||||||
@ -2411,7 +2411,7 @@ python-smarttub==0.0.38
|
|||||||
python-songpal==0.16.2
|
python-songpal==0.16.2
|
||||||
|
|
||||||
# homeassistant.components.tado
|
# homeassistant.components.tado
|
||||||
python-tado==0.17.7
|
python-tado==0.17.6
|
||||||
|
|
||||||
# homeassistant.components.technove
|
# homeassistant.components.technove
|
||||||
python-technove==1.3.1
|
python-technove==1.3.1
|
||||||
@ -2556,7 +2556,7 @@ renault-api==0.2.7
|
|||||||
renson-endura-delta==1.7.1
|
renson-endura-delta==1.7.1
|
||||||
|
|
||||||
# homeassistant.components.reolink
|
# homeassistant.components.reolink
|
||||||
reolink-aio==0.11.4
|
reolink-aio==0.11.5
|
||||||
|
|
||||||
# homeassistant.components.idteck_prox
|
# homeassistant.components.idteck_prox
|
||||||
rfk101py==0.0.1
|
rfk101py==0.0.1
|
||||||
@ -2858,7 +2858,7 @@ tololib==1.1.0
|
|||||||
toonapi==0.3.0
|
toonapi==0.3.0
|
||||||
|
|
||||||
# homeassistant.components.totalconnect
|
# homeassistant.components.totalconnect
|
||||||
total-connect-client==2024.5
|
total-connect-client==2024.12
|
||||||
|
|
||||||
# homeassistant.components.tplink_lte
|
# homeassistant.components.tplink_lte
|
||||||
tp-connected==0.0.4
|
tp-connected==0.0.4
|
||||||
@ -2882,7 +2882,7 @@ ttn_client==1.2.0
|
|||||||
tuya-device-sharing-sdk==0.2.1
|
tuya-device-sharing-sdk==0.2.1
|
||||||
|
|
||||||
# homeassistant.components.twentemilieu
|
# homeassistant.components.twentemilieu
|
||||||
twentemilieu==2.1.0
|
twentemilieu==2.2.0
|
||||||
|
|
||||||
# homeassistant.components.twilio
|
# homeassistant.components.twilio
|
||||||
twilio==6.32.0
|
twilio==6.32.0
|
||||||
@ -3044,7 +3044,7 @@ yalesmartalarmclient==0.4.3
|
|||||||
# homeassistant.components.august
|
# homeassistant.components.august
|
||||||
# homeassistant.components.yale
|
# homeassistant.components.yale
|
||||||
# homeassistant.components.yalexs_ble
|
# homeassistant.components.yalexs_ble
|
||||||
yalexs-ble==2.5.1
|
yalexs-ble==2.5.2
|
||||||
|
|
||||||
# homeassistant.components.august
|
# homeassistant.components.august
|
||||||
# homeassistant.components.yale
|
# homeassistant.components.yale
|
||||||
@ -3066,7 +3066,7 @@ youless-api==2.1.2
|
|||||||
youtubeaio==1.1.5
|
youtubeaio==1.1.5
|
||||||
|
|
||||||
# homeassistant.components.media_extractor
|
# homeassistant.components.media_extractor
|
||||||
yt-dlp[default]==2024.12.03
|
yt-dlp[default]==2024.12.06
|
||||||
|
|
||||||
# homeassistant.components.zamg
|
# homeassistant.components.zamg
|
||||||
zamg==0.3.6
|
zamg==0.3.6
|
||||||
@ -3081,7 +3081,7 @@ zeroconf==0.136.2
|
|||||||
zeversolar==0.3.2
|
zeversolar==0.3.2
|
||||||
|
|
||||||
# homeassistant.components.zha
|
# homeassistant.components.zha
|
||||||
zha==0.0.41
|
zha==0.0.42
|
||||||
|
|
||||||
# homeassistant.components.zhong_hong
|
# homeassistant.components.zhong_hong
|
||||||
zhong-hong-hvac==1.0.13
|
zhong-hong-hvac==1.0.13
|
||||||
|
@ -161,7 +161,7 @@ aio-geojson-usgs-earthquakes==0.3
|
|||||||
aio-georss-gdacs==0.10
|
aio-georss-gdacs==0.10
|
||||||
|
|
||||||
# homeassistant.components.acaia
|
# homeassistant.components.acaia
|
||||||
aioacaia==0.1.10
|
aioacaia==0.1.11
|
||||||
|
|
||||||
# homeassistant.components.airq
|
# homeassistant.components.airq
|
||||||
aioairq==0.4.3
|
aioairq==0.4.3
|
||||||
@ -384,7 +384,7 @@ aiotedee==0.2.20
|
|||||||
aiotractive==0.6.0
|
aiotractive==0.6.0
|
||||||
|
|
||||||
# homeassistant.components.unifi
|
# homeassistant.components.unifi
|
||||||
aiounifi==80
|
aiounifi==81
|
||||||
|
|
||||||
# homeassistant.components.vlc_telnet
|
# homeassistant.components.vlc_telnet
|
||||||
aiovlc==0.5.1
|
aiovlc==0.5.1
|
||||||
@ -625,10 +625,10 @@ datapoint==0.9.9
|
|||||||
dbus-fast==2.24.3
|
dbus-fast==2.24.3
|
||||||
|
|
||||||
# homeassistant.components.debugpy
|
# homeassistant.components.debugpy
|
||||||
debugpy==1.8.6
|
debugpy==1.8.8
|
||||||
|
|
||||||
# homeassistant.components.ecovacs
|
# homeassistant.components.ecovacs
|
||||||
deebot-client==9.2.0
|
deebot-client==9.3.0
|
||||||
|
|
||||||
# homeassistant.components.ihc
|
# homeassistant.components.ihc
|
||||||
# homeassistant.components.namecheapdns
|
# homeassistant.components.namecheapdns
|
||||||
@ -956,10 +956,10 @@ hole==0.8.0
|
|||||||
holidays==0.62
|
holidays==0.62
|
||||||
|
|
||||||
# homeassistant.components.frontend
|
# homeassistant.components.frontend
|
||||||
home-assistant-frontend==20241127.6
|
home-assistant-frontend==20241127.7
|
||||||
|
|
||||||
# homeassistant.components.conversation
|
# homeassistant.components.conversation
|
||||||
home-assistant-intents==2024.12.4
|
home-assistant-intents==2024.12.9
|
||||||
|
|
||||||
# homeassistant.components.home_connect
|
# homeassistant.components.home_connect
|
||||||
homeconnect==0.8.0
|
homeconnect==0.8.0
|
||||||
@ -1329,7 +1329,7 @@ plexauth==0.0.6
|
|||||||
plexwebsocket==0.0.14
|
plexwebsocket==0.0.14
|
||||||
|
|
||||||
# homeassistant.components.plugwise
|
# homeassistant.components.plugwise
|
||||||
plugwise==1.6.0
|
plugwise==1.6.3
|
||||||
|
|
||||||
# homeassistant.components.plum_lightpad
|
# homeassistant.components.plum_lightpad
|
||||||
plumlightpad==0.0.11
|
plumlightpad==0.0.11
|
||||||
@ -1500,7 +1500,7 @@ pydexcom==0.2.3
|
|||||||
pydiscovergy==3.0.2
|
pydiscovergy==3.0.2
|
||||||
|
|
||||||
# homeassistant.components.hydrawise
|
# homeassistant.components.hydrawise
|
||||||
pydrawise==2024.9.0
|
pydrawise==2024.12.0
|
||||||
|
|
||||||
# homeassistant.components.android_ip_webcam
|
# homeassistant.components.android_ip_webcam
|
||||||
pydroid-ipcam==2.0.0
|
pydroid-ipcam==2.0.0
|
||||||
@ -1536,7 +1536,7 @@ pyeverlights==0.1.0
|
|||||||
pyevilgenius==2.0.0
|
pyevilgenius==2.0.0
|
||||||
|
|
||||||
# homeassistant.components.ezviz
|
# homeassistant.components.ezviz
|
||||||
pyezviz==0.2.2.3
|
pyezviz==0.2.1.2
|
||||||
|
|
||||||
# homeassistant.components.fibaro
|
# homeassistant.components.fibaro
|
||||||
pyfibaro==0.8.0
|
pyfibaro==0.8.0
|
||||||
@ -1775,7 +1775,7 @@ pyqwikswitch==0.93
|
|||||||
pyrainbird==6.0.1
|
pyrainbird==6.0.1
|
||||||
|
|
||||||
# homeassistant.components.risco
|
# homeassistant.components.risco
|
||||||
pyrisco==0.6.4
|
pyrisco==0.6.5
|
||||||
|
|
||||||
# homeassistant.components.rituals_perfume_genie
|
# homeassistant.components.rituals_perfume_genie
|
||||||
pyrituals==0.0.6
|
pyrituals==0.0.6
|
||||||
@ -1932,7 +1932,7 @@ python-smarttub==0.0.38
|
|||||||
python-songpal==0.16.2
|
python-songpal==0.16.2
|
||||||
|
|
||||||
# homeassistant.components.tado
|
# homeassistant.components.tado
|
||||||
python-tado==0.17.7
|
python-tado==0.17.6
|
||||||
|
|
||||||
# homeassistant.components.technove
|
# homeassistant.components.technove
|
||||||
python-technove==1.3.1
|
python-technove==1.3.1
|
||||||
@ -2047,7 +2047,7 @@ renault-api==0.2.7
|
|||||||
renson-endura-delta==1.7.1
|
renson-endura-delta==1.7.1
|
||||||
|
|
||||||
# homeassistant.components.reolink
|
# homeassistant.components.reolink
|
||||||
reolink-aio==0.11.4
|
reolink-aio==0.11.5
|
||||||
|
|
||||||
# homeassistant.components.rflink
|
# homeassistant.components.rflink
|
||||||
rflink==0.0.66
|
rflink==0.0.66
|
||||||
@ -2274,7 +2274,7 @@ tololib==1.1.0
|
|||||||
toonapi==0.3.0
|
toonapi==0.3.0
|
||||||
|
|
||||||
# homeassistant.components.totalconnect
|
# homeassistant.components.totalconnect
|
||||||
total-connect-client==2024.5
|
total-connect-client==2024.12
|
||||||
|
|
||||||
# homeassistant.components.tplink_omada
|
# homeassistant.components.tplink_omada
|
||||||
tplink-omada-client==1.4.3
|
tplink-omada-client==1.4.3
|
||||||
@ -2295,7 +2295,7 @@ ttn_client==1.2.0
|
|||||||
tuya-device-sharing-sdk==0.2.1
|
tuya-device-sharing-sdk==0.2.1
|
||||||
|
|
||||||
# homeassistant.components.twentemilieu
|
# homeassistant.components.twentemilieu
|
||||||
twentemilieu==2.1.0
|
twentemilieu==2.2.0
|
||||||
|
|
||||||
# homeassistant.components.twilio
|
# homeassistant.components.twilio
|
||||||
twilio==6.32.0
|
twilio==6.32.0
|
||||||
@ -2433,7 +2433,7 @@ yalesmartalarmclient==0.4.3
|
|||||||
# homeassistant.components.august
|
# homeassistant.components.august
|
||||||
# homeassistant.components.yale
|
# homeassistant.components.yale
|
||||||
# homeassistant.components.yalexs_ble
|
# homeassistant.components.yalexs_ble
|
||||||
yalexs-ble==2.5.1
|
yalexs-ble==2.5.2
|
||||||
|
|
||||||
# homeassistant.components.august
|
# homeassistant.components.august
|
||||||
# homeassistant.components.yale
|
# homeassistant.components.yale
|
||||||
@ -2452,7 +2452,7 @@ youless-api==2.1.2
|
|||||||
youtubeaio==1.1.5
|
youtubeaio==1.1.5
|
||||||
|
|
||||||
# homeassistant.components.media_extractor
|
# homeassistant.components.media_extractor
|
||||||
yt-dlp[default]==2024.12.03
|
yt-dlp[default]==2024.12.06
|
||||||
|
|
||||||
# homeassistant.components.zamg
|
# homeassistant.components.zamg
|
||||||
zamg==0.3.6
|
zamg==0.3.6
|
||||||
@ -2464,7 +2464,7 @@ zeroconf==0.136.2
|
|||||||
zeversolar==0.3.2
|
zeversolar==0.3.2
|
||||||
|
|
||||||
# homeassistant.components.zha
|
# homeassistant.components.zha
|
||||||
zha==0.0.41
|
zha==0.0.42
|
||||||
|
|
||||||
# homeassistant.components.zwave_js
|
# homeassistant.components.zwave_js
|
||||||
zwave-js-server-python==0.59.1
|
zwave-js-server-python==0.59.1
|
||||||
|
@ -23,7 +23,7 @@ RUN --mount=from=ghcr.io/astral-sh/uv:0.5.4,source=/uv,target=/bin/uv \
|
|||||||
-c /usr/src/homeassistant/homeassistant/package_constraints.txt \
|
-c /usr/src/homeassistant/homeassistant/package_constraints.txt \
|
||||||
-r /usr/src/homeassistant/requirements.txt \
|
-r /usr/src/homeassistant/requirements.txt \
|
||||||
stdlib-list==0.10.0 pipdeptree==2.23.4 tqdm==4.66.5 ruff==0.8.0 \
|
stdlib-list==0.10.0 pipdeptree==2.23.4 tqdm==4.66.5 ruff==0.8.0 \
|
||||||
PyTurboJPEG==1.7.5 go2rtc-client==0.1.1 ha-ffmpeg==3.2.2 hassil==2.0.5 home-assistant-intents==2024.12.4 mutagen==1.47.0 pymicro-vad==1.0.1 pyspeex-noise==1.0.2
|
PyTurboJPEG==1.7.5 go2rtc-client==0.1.1 ha-ffmpeg==3.2.2 hassil==2.0.5 home-assistant-intents==2024.12.9 mutagen==1.47.0 pymicro-vad==1.0.1 pyspeex-noise==1.0.2
|
||||||
|
|
||||||
LABEL "name"="hassfest"
|
LABEL "name"="hassfest"
|
||||||
LABEL "maintainer"="Home Assistant <hello@home-assistant.io>"
|
LABEL "maintainer"="Home Assistant <hello@home-assistant.io>"
|
||||||
|
@ -571,7 +571,7 @@
|
|||||||
'name': 'HassGetState',
|
'name': 'HassGetState',
|
||||||
}),
|
}),
|
||||||
'match': True,
|
'match': True,
|
||||||
'sentence_template': '[tell me] how many {on_off_domains:domain} (is|are) {on_off_states:state} [in <area>]',
|
'sentence_template': '[tell me] how many {on_off_domains:domain} (is|are) {on_off_states:state} [<in_area_floor>]',
|
||||||
'slots': dict({
|
'slots': dict({
|
||||||
'area': 'kitchen',
|
'area': 'kitchen',
|
||||||
'domain': 'lights',
|
'domain': 'lights',
|
||||||
|
@ -56,7 +56,6 @@ def mock_legacy_pydrawise(
|
|||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def mock_pydrawise(
|
def mock_pydrawise(
|
||||||
mock_auth: AsyncMock,
|
|
||||||
user: User,
|
user: User,
|
||||||
controller: Controller,
|
controller: Controller,
|
||||||
zones: list[Zone],
|
zones: list[Zone],
|
||||||
|
@ -21,6 +21,7 @@ pytestmark = pytest.mark.usefixtures("mock_setup_entry")
|
|||||||
async def test_form(
|
async def test_form(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
mock_setup_entry: AsyncMock,
|
mock_setup_entry: AsyncMock,
|
||||||
|
mock_auth: AsyncMock,
|
||||||
mock_pydrawise: AsyncMock,
|
mock_pydrawise: AsyncMock,
|
||||||
user: User,
|
user: User,
|
||||||
) -> None:
|
) -> None:
|
||||||
@ -46,11 +47,12 @@ async def test_form(
|
|||||||
CONF_PASSWORD: "__password__",
|
CONF_PASSWORD: "__password__",
|
||||||
}
|
}
|
||||||
assert len(mock_setup_entry.mock_calls) == 1
|
assert len(mock_setup_entry.mock_calls) == 1
|
||||||
mock_pydrawise.get_user.assert_called_once_with(fetch_zones=False)
|
mock_auth.token.assert_awaited_once_with()
|
||||||
|
mock_pydrawise.get_user.assert_awaited_once_with(fetch_zones=False)
|
||||||
|
|
||||||
|
|
||||||
async def test_form_api_error(
|
async def test_form_api_error(
|
||||||
hass: HomeAssistant, mock_pydrawise: AsyncMock, user: User
|
hass: HomeAssistant, mock_auth: AsyncMock, mock_pydrawise: AsyncMock, user: User
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test we handle API errors."""
|
"""Test we handle API errors."""
|
||||||
mock_pydrawise.get_user.side_effect = ClientError("XXX")
|
mock_pydrawise.get_user.side_effect = ClientError("XXX")
|
||||||
@ -71,8 +73,29 @@ async def test_form_api_error(
|
|||||||
assert result2["type"] is FlowResultType.CREATE_ENTRY
|
assert result2["type"] is FlowResultType.CREATE_ENTRY
|
||||||
|
|
||||||
|
|
||||||
async def test_form_connect_timeout(
|
async def test_form_auth_connect_timeout(
|
||||||
hass: HomeAssistant, mock_pydrawise: AsyncMock, user: User
|
hass: HomeAssistant, mock_auth: AsyncMock, mock_pydrawise: AsyncMock
|
||||||
|
) -> None:
|
||||||
|
"""Test we handle API errors."""
|
||||||
|
mock_auth.token.side_effect = TimeoutError
|
||||||
|
init_result = await hass.config_entries.flow.async_init(
|
||||||
|
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
||||||
|
)
|
||||||
|
data = {CONF_USERNAME: "asdf@asdf.com", CONF_PASSWORD: "__password__"}
|
||||||
|
result = await hass.config_entries.flow.async_configure(
|
||||||
|
init_result["flow_id"], data
|
||||||
|
)
|
||||||
|
|
||||||
|
assert result["type"] is FlowResultType.FORM
|
||||||
|
assert result["errors"] == {"base": "timeout_connect"}
|
||||||
|
|
||||||
|
mock_auth.token.reset_mock(side_effect=True)
|
||||||
|
result2 = await hass.config_entries.flow.async_configure(result["flow_id"], data)
|
||||||
|
assert result2["type"] is FlowResultType.CREATE_ENTRY
|
||||||
|
|
||||||
|
|
||||||
|
async def test_form_client_connect_timeout(
|
||||||
|
hass: HomeAssistant, mock_auth: AsyncMock, mock_pydrawise: AsyncMock, user: User
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test we handle API errors."""
|
"""Test we handle API errors."""
|
||||||
mock_pydrawise.get_user.side_effect = TimeoutError
|
mock_pydrawise.get_user.side_effect = TimeoutError
|
||||||
@ -94,10 +117,10 @@ async def test_form_connect_timeout(
|
|||||||
|
|
||||||
|
|
||||||
async def test_form_not_authorized_error(
|
async def test_form_not_authorized_error(
|
||||||
hass: HomeAssistant, mock_pydrawise: AsyncMock, user: User
|
hass: HomeAssistant, mock_auth: AsyncMock, mock_pydrawise: AsyncMock
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test we handle API errors."""
|
"""Test we handle API errors."""
|
||||||
mock_pydrawise.get_user.side_effect = NotAuthorizedError
|
mock_auth.token.side_effect = NotAuthorizedError
|
||||||
|
|
||||||
init_result = await hass.config_entries.flow.async_init(
|
init_result = await hass.config_entries.flow.async_init(
|
||||||
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
||||||
@ -109,8 +132,7 @@ async def test_form_not_authorized_error(
|
|||||||
assert result["type"] is FlowResultType.FORM
|
assert result["type"] is FlowResultType.FORM
|
||||||
assert result["errors"] == {"base": "invalid_auth"}
|
assert result["errors"] == {"base": "invalid_auth"}
|
||||||
|
|
||||||
mock_pydrawise.get_user.reset_mock(side_effect=True)
|
mock_auth.token.reset_mock(side_effect=True)
|
||||||
mock_pydrawise.get_user.return_value = user
|
|
||||||
result2 = await hass.config_entries.flow.async_configure(result["flow_id"], data)
|
result2 = await hass.config_entries.flow.async_configure(result["flow_id"], data)
|
||||||
assert result2["type"] is FlowResultType.CREATE_ENTRY
|
assert result2["type"] is FlowResultType.CREATE_ENTRY
|
||||||
|
|
||||||
@ -118,6 +140,7 @@ async def test_form_not_authorized_error(
|
|||||||
async def test_reauth(
|
async def test_reauth(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
user: User,
|
user: User,
|
||||||
|
mock_auth: AsyncMock,
|
||||||
mock_pydrawise: AsyncMock,
|
mock_pydrawise: AsyncMock,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test that re-authorization works."""
|
"""Test that re-authorization works."""
|
||||||
|
@ -176,7 +176,7 @@
|
|||||||
"off"
|
"off"
|
||||||
],
|
],
|
||||||
"climate_mode": "auto",
|
"climate_mode": "auto",
|
||||||
"control_state": "off",
|
"control_state": "idle",
|
||||||
"dev_class": "climate",
|
"dev_class": "climate",
|
||||||
"model": "ThermoZone",
|
"model": "ThermoZone",
|
||||||
"name": "Bathroom",
|
"name": "Bathroom",
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
"06aecb3d00354375924f50c47af36bd2": {
|
"06aecb3d00354375924f50c47af36bd2": {
|
||||||
"active_preset": "no_frost",
|
"active_preset": "no_frost",
|
||||||
"climate_mode": "off",
|
"climate_mode": "off",
|
||||||
"control_state": "off",
|
"control_state": "idle",
|
||||||
"dev_class": "climate",
|
"dev_class": "climate",
|
||||||
"model": "ThermoZone",
|
"model": "ThermoZone",
|
||||||
"name": "Slaapkamer",
|
"name": "Slaapkamer",
|
||||||
@ -26,7 +26,7 @@
|
|||||||
"13228dab8ce04617af318a2888b3c548": {
|
"13228dab8ce04617af318a2888b3c548": {
|
||||||
"active_preset": "home",
|
"active_preset": "home",
|
||||||
"climate_mode": "heat",
|
"climate_mode": "heat",
|
||||||
"control_state": "off",
|
"control_state": "idle",
|
||||||
"dev_class": "climate",
|
"dev_class": "climate",
|
||||||
"model": "ThermoZone",
|
"model": "ThermoZone",
|
||||||
"name": "Woonkamer",
|
"name": "Woonkamer",
|
||||||
@ -238,7 +238,7 @@
|
|||||||
"d27aede973b54be484f6842d1b2802ad": {
|
"d27aede973b54be484f6842d1b2802ad": {
|
||||||
"active_preset": "home",
|
"active_preset": "home",
|
||||||
"climate_mode": "heat",
|
"climate_mode": "heat",
|
||||||
"control_state": "off",
|
"control_state": "idle",
|
||||||
"dev_class": "climate",
|
"dev_class": "climate",
|
||||||
"model": "ThermoZone",
|
"model": "ThermoZone",
|
||||||
"name": "Kinderkamer",
|
"name": "Kinderkamer",
|
||||||
@ -285,7 +285,7 @@
|
|||||||
"d58fec52899f4f1c92e4f8fad6d8c48c": {
|
"d58fec52899f4f1c92e4f8fad6d8c48c": {
|
||||||
"active_preset": "home",
|
"active_preset": "home",
|
||||||
"climate_mode": "heat",
|
"climate_mode": "heat",
|
||||||
"control_state": "off",
|
"control_state": "idle",
|
||||||
"dev_class": "climate",
|
"dev_class": "climate",
|
||||||
"model": "ThermoZone",
|
"model": "ThermoZone",
|
||||||
"name": "Logeerkamer",
|
"name": "Logeerkamer",
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
"off"
|
"off"
|
||||||
],
|
],
|
||||||
"climate_mode": "auto",
|
"climate_mode": "auto",
|
||||||
|
"control_state": "idle",
|
||||||
"dev_class": "climate",
|
"dev_class": "climate",
|
||||||
"model": "ThermoZone",
|
"model": "ThermoZone",
|
||||||
"name": "Badkamer",
|
"name": "Badkamer",
|
||||||
@ -66,6 +67,7 @@
|
|||||||
"off"
|
"off"
|
||||||
],
|
],
|
||||||
"climate_mode": "heat",
|
"climate_mode": "heat",
|
||||||
|
"control_state": "idle",
|
||||||
"dev_class": "climate",
|
"dev_class": "climate",
|
||||||
"model": "ThermoZone",
|
"model": "ThermoZone",
|
||||||
"name": "Bios",
|
"name": "Bios",
|
||||||
@ -112,6 +114,7 @@
|
|||||||
"446ac08dd04d4eff8ac57489757b7314": {
|
"446ac08dd04d4eff8ac57489757b7314": {
|
||||||
"active_preset": "no_frost",
|
"active_preset": "no_frost",
|
||||||
"climate_mode": "heat",
|
"climate_mode": "heat",
|
||||||
|
"control_state": "idle",
|
||||||
"dev_class": "climate",
|
"dev_class": "climate",
|
||||||
"model": "ThermoZone",
|
"model": "ThermoZone",
|
||||||
"name": "Garage",
|
"name": "Garage",
|
||||||
@ -258,6 +261,7 @@
|
|||||||
"off"
|
"off"
|
||||||
],
|
],
|
||||||
"climate_mode": "auto",
|
"climate_mode": "auto",
|
||||||
|
"control_state": "idle",
|
||||||
"dev_class": "climate",
|
"dev_class": "climate",
|
||||||
"model": "ThermoZone",
|
"model": "ThermoZone",
|
||||||
"name": "Jessie",
|
"name": "Jessie",
|
||||||
@ -402,6 +406,7 @@
|
|||||||
"off"
|
"off"
|
||||||
],
|
],
|
||||||
"climate_mode": "auto",
|
"climate_mode": "auto",
|
||||||
|
"control_state": "heating",
|
||||||
"dev_class": "climate",
|
"dev_class": "climate",
|
||||||
"model": "ThermoZone",
|
"model": "ThermoZone",
|
||||||
"name": "Woonkamer",
|
"name": "Woonkamer",
|
||||||
@ -577,7 +582,7 @@
|
|||||||
"cooling_present": false,
|
"cooling_present": false,
|
||||||
"gateway_id": "fe799307f1624099878210aa0b9f1475",
|
"gateway_id": "fe799307f1624099878210aa0b9f1475",
|
||||||
"heater_id": "90986d591dcd426cae3ec3e8111ff730",
|
"heater_id": "90986d591dcd426cae3ec3e8111ff730",
|
||||||
"item_count": 364,
|
"item_count": 369,
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"af82e4ccf9c548528166d38e560662a4": {
|
"af82e4ccf9c548528166d38e560662a4": {
|
||||||
"warning": "Node Plug (with MAC address 000D6F000D13CB01, in room 'n.a.') has been unreachable since 23:03 2020-01-18. Please check the connection and restart the device."
|
"warning": "Node Plug (with MAC address 000D6F000D13CB01, in room 'n.a.') has been unreachable since 23:03 2020-01-18. Please check the connection and restart the device."
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
'off',
|
'off',
|
||||||
]),
|
]),
|
||||||
'climate_mode': 'auto',
|
'climate_mode': 'auto',
|
||||||
|
'control_state': 'idle',
|
||||||
'dev_class': 'climate',
|
'dev_class': 'climate',
|
||||||
'model': 'ThermoZone',
|
'model': 'ThermoZone',
|
||||||
'name': 'Badkamer',
|
'name': 'Badkamer',
|
||||||
@ -75,6 +76,7 @@
|
|||||||
'off',
|
'off',
|
||||||
]),
|
]),
|
||||||
'climate_mode': 'heat',
|
'climate_mode': 'heat',
|
||||||
|
'control_state': 'idle',
|
||||||
'dev_class': 'climate',
|
'dev_class': 'climate',
|
||||||
'model': 'ThermoZone',
|
'model': 'ThermoZone',
|
||||||
'name': 'Bios',
|
'name': 'Bios',
|
||||||
@ -131,6 +133,7 @@
|
|||||||
'446ac08dd04d4eff8ac57489757b7314': dict({
|
'446ac08dd04d4eff8ac57489757b7314': dict({
|
||||||
'active_preset': 'no_frost',
|
'active_preset': 'no_frost',
|
||||||
'climate_mode': 'heat',
|
'climate_mode': 'heat',
|
||||||
|
'control_state': 'idle',
|
||||||
'dev_class': 'climate',
|
'dev_class': 'climate',
|
||||||
'model': 'ThermoZone',
|
'model': 'ThermoZone',
|
||||||
'name': 'Garage',
|
'name': 'Garage',
|
||||||
@ -286,6 +289,7 @@
|
|||||||
'off',
|
'off',
|
||||||
]),
|
]),
|
||||||
'climate_mode': 'auto',
|
'climate_mode': 'auto',
|
||||||
|
'control_state': 'idle',
|
||||||
'dev_class': 'climate',
|
'dev_class': 'climate',
|
||||||
'model': 'ThermoZone',
|
'model': 'ThermoZone',
|
||||||
'name': 'Jessie',
|
'name': 'Jessie',
|
||||||
@ -440,6 +444,7 @@
|
|||||||
'off',
|
'off',
|
||||||
]),
|
]),
|
||||||
'climate_mode': 'auto',
|
'climate_mode': 'auto',
|
||||||
|
'control_state': 'heating',
|
||||||
'dev_class': 'climate',
|
'dev_class': 'climate',
|
||||||
'model': 'ThermoZone',
|
'model': 'ThermoZone',
|
||||||
'name': 'Woonkamer',
|
'name': 'Woonkamer',
|
||||||
@ -625,7 +630,7 @@
|
|||||||
'cooling_present': False,
|
'cooling_present': False,
|
||||||
'gateway_id': 'fe799307f1624099878210aa0b9f1475',
|
'gateway_id': 'fe799307f1624099878210aa0b9f1475',
|
||||||
'heater_id': '90986d591dcd426cae3ec3e8111ff730',
|
'heater_id': '90986d591dcd426cae3ec3e8111ff730',
|
||||||
'item_count': 364,
|
'item_count': 369,
|
||||||
'notifications': dict({
|
'notifications': dict({
|
||||||
'af82e4ccf9c548528166d38e560662a4': dict({
|
'af82e4ccf9c548528166d38e560662a4': dict({
|
||||||
'warning': "Node Plug (with MAC address 000D6F000D13CB01, in room 'n.a.') has been unreachable since 23:03 2020-01-18. Please check the connection and restart the device.",
|
'warning': "Node Plug (with MAC address 000D6F000D13CB01, in room 'n.a.') has been unreachable since 23:03 2020-01-18. Please check the connection and restart the device.",
|
||||||
|
@ -31,15 +31,13 @@ async def test_adam_climate_entity_attributes(
|
|||||||
state = hass.states.get("climate.woonkamer")
|
state = hass.states.get("climate.woonkamer")
|
||||||
assert state
|
assert state
|
||||||
assert state.state == HVACMode.AUTO
|
assert state.state == HVACMode.AUTO
|
||||||
|
assert state.attributes["hvac_action"] == "heating"
|
||||||
assert state.attributes["hvac_modes"] == [HVACMode.AUTO, HVACMode.HEAT]
|
assert state.attributes["hvac_modes"] == [HVACMode.AUTO, HVACMode.HEAT]
|
||||||
# hvac_action is not asserted as the fixture is not in line with recent firmware functionality
|
|
||||||
|
|
||||||
assert "preset_modes" in state.attributes
|
assert "preset_modes" in state.attributes
|
||||||
assert "no_frost" in state.attributes["preset_modes"]
|
assert "no_frost" in state.attributes["preset_modes"]
|
||||||
assert "home" in state.attributes["preset_modes"]
|
assert "home" in state.attributes["preset_modes"]
|
||||||
|
|
||||||
assert state.attributes["current_temperature"] == 20.9
|
|
||||||
assert state.attributes["preset_mode"] == "home"
|
assert state.attributes["preset_mode"] == "home"
|
||||||
|
assert state.attributes["current_temperature"] == 20.9
|
||||||
assert state.attributes["supported_features"] == 17
|
assert state.attributes["supported_features"] == 17
|
||||||
assert state.attributes["temperature"] == 21.5
|
assert state.attributes["temperature"] == 21.5
|
||||||
assert state.attributes["min_temp"] == 0.0
|
assert state.attributes["min_temp"] == 0.0
|
||||||
@ -49,15 +47,13 @@ async def test_adam_climate_entity_attributes(
|
|||||||
state = hass.states.get("climate.jessie")
|
state = hass.states.get("climate.jessie")
|
||||||
assert state
|
assert state
|
||||||
assert state.state == HVACMode.AUTO
|
assert state.state == HVACMode.AUTO
|
||||||
|
assert state.attributes["hvac_action"] == "idle"
|
||||||
assert state.attributes["hvac_modes"] == [HVACMode.AUTO, HVACMode.HEAT]
|
assert state.attributes["hvac_modes"] == [HVACMode.AUTO, HVACMode.HEAT]
|
||||||
# hvac_action is not asserted as the fixture is not in line with recent firmware functionality
|
|
||||||
|
|
||||||
assert "preset_modes" in state.attributes
|
assert "preset_modes" in state.attributes
|
||||||
assert "no_frost" in state.attributes["preset_modes"]
|
assert "no_frost" in state.attributes["preset_modes"]
|
||||||
assert "home" in state.attributes["preset_modes"]
|
assert "home" in state.attributes["preset_modes"]
|
||||||
|
|
||||||
assert state.attributes["current_temperature"] == 17.2
|
|
||||||
assert state.attributes["preset_mode"] == "asleep"
|
assert state.attributes["preset_mode"] == "asleep"
|
||||||
|
assert state.attributes["current_temperature"] == 17.2
|
||||||
assert state.attributes["temperature"] == 15.0
|
assert state.attributes["temperature"] == 15.0
|
||||||
assert state.attributes["min_temp"] == 0.0
|
assert state.attributes["min_temp"] == 0.0
|
||||||
assert state.attributes["max_temp"] == 35.0
|
assert state.attributes["max_temp"] == 35.0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user