Bump aiohue to version 4.1.2 (#66609)

pull/66624/head
Marcel van der Veldt 2022-02-16 02:26:13 +01:00 committed by Paulus Schoutsen
parent 7bb14aae23
commit de96d21ea9
12 changed files with 80 additions and 30 deletions

View File

@ -3,7 +3,7 @@
"name": "Philips Hue", "name": "Philips Hue",
"config_flow": true, "config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/hue", "documentation": "https://www.home-assistant.io/integrations/hue",
"requirements": ["aiohue==4.0.1"], "requirements": ["aiohue==4.1.2"],
"ssdp": [ "ssdp": [
{ {
"manufacturer": "Royal Philips Electronics", "manufacturer": "Royal Philips Electronics",

View File

@ -5,7 +5,11 @@ from typing import Any
from aiohue.v2 import HueBridgeV2 from aiohue.v2 import HueBridgeV2
from aiohue.v2.controllers.events import EventType from aiohue.v2.controllers.events import EventType
from aiohue.v2.controllers.scenes import Scene as HueScene, ScenesController from aiohue.v2.controllers.scenes import (
Scene as HueScene,
ScenePut as HueScenePut,
ScenesController,
)
import voluptuous as vol import voluptuous as vol
from homeassistant.components.scene import ATTR_TRANSITION, Scene as SceneEntity from homeassistant.components.scene import ATTR_TRANSITION, Scene as SceneEntity
@ -131,7 +135,7 @@ class HueSceneEntity(HueBaseEntity, SceneEntity):
await self.bridge.async_request_call( await self.bridge.async_request_call(
self.controller.update, self.controller.update,
self.resource.id, self.resource.id,
HueScene(self.resource.id, speed=speed / 100), HueScenePut(speed=speed / 100),
) )
await self.bridge.async_request_call( await self.bridge.async_request_call(

View File

@ -5,8 +5,12 @@ from typing import Any, Union
from aiohue.v2 import HueBridgeV2 from aiohue.v2 import HueBridgeV2
from aiohue.v2.controllers.events import EventType from aiohue.v2.controllers.events import EventType
from aiohue.v2.controllers.sensors import LightLevelController, MotionController from aiohue.v2.controllers.sensors import (
from aiohue.v2.models.resource import SensingService LightLevel,
LightLevelController,
Motion,
MotionController,
)
from homeassistant.components.switch import SwitchDeviceClass, SwitchEntity from homeassistant.components.switch import SwitchDeviceClass, SwitchEntity
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
@ -20,6 +24,8 @@ from .v2.entity import HueBaseEntity
ControllerType = Union[LightLevelController, MotionController] ControllerType = Union[LightLevelController, MotionController]
SensingService = Union[LightLevel, Motion]
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,

View File

@ -4,13 +4,13 @@ from __future__ import annotations
from typing import Any, Union from typing import Any, Union
from aiohue.v2 import HueBridgeV2 from aiohue.v2 import HueBridgeV2
from aiohue.v2.controllers.config import EntertainmentConfigurationController from aiohue.v2.controllers.config import (
EntertainmentConfiguration,
EntertainmentConfigurationController,
)
from aiohue.v2.controllers.events import EventType from aiohue.v2.controllers.events import EventType
from aiohue.v2.controllers.sensors import MotionController from aiohue.v2.controllers.sensors import MotionController
from aiohue.v2.models.entertainment import ( from aiohue.v2.models.entertainment_configuration import EntertainmentStatus
EntertainmentConfiguration,
EntertainmentStatus,
)
from aiohue.v2.models.motion import Motion from aiohue.v2.models.motion import Motion
from homeassistant.components.binary_sensor import ( from homeassistant.components.binary_sensor import (
@ -109,4 +109,4 @@ class HueEntertainmentActiveSensor(HueBinarySensorBase):
def name(self) -> str: def name(self) -> str:
"""Return sensor name.""" """Return sensor name."""
type_title = self.resource.type.value.replace("_", " ").title() type_title = self.resource.type.value.replace("_", " ").title()
return f"{self.resource.name}: {type_title}" return f"{self.resource.metadata.name}: {type_title}"

View File

@ -1,11 +1,12 @@
"""Generic Hue Entity Model.""" """Generic Hue Entity Model."""
from __future__ import annotations from __future__ import annotations
from typing import TYPE_CHECKING, Union
from aiohue.v2.controllers.base import BaseResourcesController from aiohue.v2.controllers.base import BaseResourcesController
from aiohue.v2.controllers.events import EventType from aiohue.v2.controllers.events import EventType
from aiohue.v2.models.clip import CLIPResource
from aiohue.v2.models.connectivity import ConnectivityServiceStatus
from aiohue.v2.models.resource import ResourceTypes from aiohue.v2.models.resource import ResourceTypes
from aiohue.v2.models.zigbee_connectivity import ConnectivityServiceStatus
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers.entity import DeviceInfo, Entity from homeassistant.helpers.entity import DeviceInfo, Entity
@ -14,6 +15,16 @@ from homeassistant.helpers.entity_registry import async_get as async_get_entity_
from ..bridge import HueBridge from ..bridge import HueBridge
from ..const import CONF_IGNORE_AVAILABILITY, DOMAIN from ..const import CONF_IGNORE_AVAILABILITY, DOMAIN
if TYPE_CHECKING:
from aiohue.v2.models.device_power import DevicePower
from aiohue.v2.models.grouped_light import GroupedLight
from aiohue.v2.models.light import Light
from aiohue.v2.models.light_level import LightLevel
from aiohue.v2.models.motion import Motion
HueResource = Union[Light, DevicePower, GroupedLight, LightLevel, Motion]
RESOURCE_TYPE_NAMES = { RESOURCE_TYPE_NAMES = {
# a simple mapping of hue resource type to Hass name # a simple mapping of hue resource type to Hass name
ResourceTypes.LIGHT_LEVEL: "Illuminance", ResourceTypes.LIGHT_LEVEL: "Illuminance",
@ -30,7 +41,7 @@ class HueBaseEntity(Entity):
self, self,
bridge: HueBridge, bridge: HueBridge,
controller: BaseResourcesController, controller: BaseResourcesController,
resource: CLIPResource, resource: HueResource,
) -> None: ) -> None:
"""Initialize a generic Hue resource entity.""" """Initialize a generic Hue resource entity."""
self.bridge = bridge self.bridge = bridge
@ -122,7 +133,7 @@ class HueBaseEntity(Entity):
# used in subclasses # used in subclasses
@callback @callback
def _handle_event(self, event_type: EventType, resource: CLIPResource) -> None: def _handle_event(self, event_type: EventType, resource: HueResource) -> None:
"""Handle status event for this resource (or it's parent).""" """Handle status event for this resource (or it's parent)."""
if event_type == EventType.RESOURCE_DELETED and resource.id == self.resource.id: if event_type == EventType.RESOURCE_DELETED and resource.id == self.resource.id:
self.logger.debug("Received delete for %s", self.entity_id) self.logger.debug("Received delete for %s", self.entity_id)

View File

@ -7,7 +7,7 @@ from typing import Any
from aiohue.v2 import HueBridgeV2 from aiohue.v2 import HueBridgeV2
from aiohue.v2.controllers.events import EventType from aiohue.v2.controllers.events import EventType
from aiohue.v2.controllers.groups import GroupedLight, Room, Zone from aiohue.v2.controllers.groups import GroupedLight, Room, Zone
from aiohue.v2.models.feature import DynamicsFeatureStatus from aiohue.v2.models.feature import DynamicStatus
from homeassistant.components.light import ( from homeassistant.components.light import (
ATTR_BRIGHTNESS, ATTR_BRIGHTNESS,
@ -283,7 +283,7 @@ class GroupedHueLight(HueBaseEntity, LightEntity):
total_brightness += dimming.brightness total_brightness += dimming.brightness
if ( if (
light.dynamics light.dynamics
and light.dynamics.status == DynamicsFeatureStatus.DYNAMIC_PALETTE and light.dynamics.status == DynamicStatus.DYNAMIC_PALETTE
): ):
lights_in_dynamic_mode += 1 lights_in_dynamic_mode += 1

View File

@ -12,10 +12,10 @@ from aiohue.v2.controllers.sensors import (
TemperatureController, TemperatureController,
ZigbeeConnectivityController, ZigbeeConnectivityController,
) )
from aiohue.v2.models.connectivity import ZigbeeConnectivity
from aiohue.v2.models.device_power import DevicePower from aiohue.v2.models.device_power import DevicePower
from aiohue.v2.models.light_level import LightLevel from aiohue.v2.models.light_level import LightLevel
from aiohue.v2.models.temperature import Temperature from aiohue.v2.models.temperature import Temperature
from aiohue.v2.models.zigbee_connectivity import ZigbeeConnectivity
from homeassistant.components.binary_sensor import BinarySensorDeviceClass from homeassistant.components.binary_sensor import BinarySensorDeviceClass
from homeassistant.components.sensor import ( from homeassistant.components.sensor import (

View File

@ -191,7 +191,7 @@ aiohomekit==0.6.11
aiohttp_cors==0.7.0 aiohttp_cors==0.7.0
# homeassistant.components.hue # homeassistant.components.hue
aiohue==4.0.1 aiohue==4.1.2
# homeassistant.components.homewizard # homeassistant.components.homewizard
aiohwenergy==0.8.0 aiohwenergy==0.8.0

View File

@ -141,7 +141,7 @@ aiohomekit==0.6.11
aiohttp_cors==0.7.0 aiohttp_cors==0.7.0
# homeassistant.components.hue # homeassistant.components.hue
aiohue==4.0.1 aiohue==4.1.2
# homeassistant.components.homewizard # homeassistant.components.homewizard
aiohwenergy==0.8.0 aiohwenergy==0.8.0

View File

@ -8,7 +8,6 @@ from unittest.mock import AsyncMock, Mock, patch
import aiohue.v1 as aiohue_v1 import aiohue.v1 as aiohue_v1
import aiohue.v2 as aiohue_v2 import aiohue.v2 as aiohue_v2
from aiohue.v2.controllers.events import EventType from aiohue.v2.controllers.events import EventType
from aiohue.v2.models.clip import parse_clip_resource
import pytest import pytest
from homeassistant.components import hue from homeassistant.components import hue
@ -187,7 +186,7 @@ def create_mock_api_v2(hass):
def emit_event(event_type, data): def emit_event(event_type, data):
"""Emit an event from a (hue resource) dict.""" """Emit an event from a (hue resource) dict."""
api.events.emit(EventType(event_type), parse_clip_resource(data)) api.events.emit(EventType(event_type), data)
api.load_test_data = load_test_data api.load_test_data = load_test_data
api.emit_event = emit_event api.emit_event = emit_event

View File

@ -97,8 +97,12 @@ async def test_light_turn_on_service(hass, mock_bridge_v2, v2_resources_test_dat
assert mock_bridge_v2.mock_requests[0]["json"]["color_temperature"]["mirek"] == 300 assert mock_bridge_v2.mock_requests[0]["json"]["color_temperature"]["mirek"] == 300
# Now generate update event by emitting the json we've sent as incoming event # Now generate update event by emitting the json we've sent as incoming event
mock_bridge_v2.mock_requests[0]["json"]["color_temperature"].pop("mirek_valid") event = {
mock_bridge_v2.api.emit_event("update", mock_bridge_v2.mock_requests[0]["json"]) "id": "3a6710fa-4474-4eba-b533-5e6e72968feb",
"type": "light",
**mock_bridge_v2.mock_requests[0]["json"],
}
mock_bridge_v2.api.emit_event("update", event)
await hass.async_block_till_done() await hass.async_block_till_done()
# the light should now be on # the light should now be on
@ -186,7 +190,12 @@ async def test_light_turn_off_service(hass, mock_bridge_v2, v2_resources_test_da
assert mock_bridge_v2.mock_requests[0]["json"]["on"]["on"] is False assert mock_bridge_v2.mock_requests[0]["json"]["on"]["on"] is False
# Now generate update event by emitting the json we've sent as incoming event # Now generate update event by emitting the json we've sent as incoming event
mock_bridge_v2.api.emit_event("update", mock_bridge_v2.mock_requests[0]["json"]) event = {
"id": "02cba059-9c2c-4d45-97e4-4f79b1bfbaa1",
"type": "light",
**mock_bridge_v2.mock_requests[0]["json"],
}
mock_bridge_v2.api.emit_event("update", event)
await hass.async_block_till_done() await hass.async_block_till_done()
# the light should now be off # the light should now be off
@ -377,10 +386,20 @@ async def test_grouped_lights(hass, mock_bridge_v2, v2_resources_test_data):
) )
# Now generate update events by emitting the json we've sent as incoming events # Now generate update events by emitting the json we've sent as incoming events
for index in range(0, 3): for index, light_id in enumerate(
mock_bridge_v2.api.emit_event( [
"update", mock_bridge_v2.mock_requests[index]["json"] "02cba059-9c2c-4d45-97e4-4f79b1bfbaa1",
) "b3fe71ef-d0ef-48de-9355-d9e604377df0",
"8015b17f-8336-415b-966a-b364bd082397",
]
):
event = {
"id": light_id,
"type": "light",
**mock_bridge_v2.mock_requests[index]["json"],
}
mock_bridge_v2.api.emit_event("update", event)
await hass.async_block_till_done()
await hass.async_block_till_done() await hass.async_block_till_done()
# the light should now be on and have the properties we've set # the light should now be on and have the properties we've set
@ -406,6 +425,12 @@ async def test_grouped_lights(hass, mock_bridge_v2, v2_resources_test_data):
assert mock_bridge_v2.mock_requests[0]["json"]["on"]["on"] is False assert mock_bridge_v2.mock_requests[0]["json"]["on"]["on"] is False
# Now generate update event by emitting the json we've sent as incoming event # Now generate update event by emitting the json we've sent as incoming event
event = {
"id": "f2416154-9607-43ab-a684-4453108a200e",
"type": "grouped_light",
**mock_bridge_v2.mock_requests[0]["json"],
}
mock_bridge_v2.api.emit_event("update", event)
mock_bridge_v2.api.emit_event("update", mock_bridge_v2.mock_requests[0]["json"]) mock_bridge_v2.api.emit_event("update", mock_bridge_v2.mock_requests[0]["json"])
await hass.async_block_till_done() await hass.async_block_till_done()

View File

@ -69,7 +69,12 @@ async def test_switch_turn_off_service(hass, mock_bridge_v2, v2_resources_test_d
assert mock_bridge_v2.mock_requests[0]["json"]["enabled"] is False assert mock_bridge_v2.mock_requests[0]["json"]["enabled"] is False
# Now generate update event by emitting the json we've sent as incoming event # Now generate update event by emitting the json we've sent as incoming event
mock_bridge_v2.api.emit_event("update", mock_bridge_v2.mock_requests[0]["json"]) event = {
"id": "b6896534-016d-4052-8cb4-ef04454df62c",
"type": "motion",
**mock_bridge_v2.mock_requests[0]["json"],
}
mock_bridge_v2.api.emit_event("update", event)
await hass.async_block_till_done() await hass.async_block_till_done()
# the switch should now be off # the switch should now be off