Bump aiounifi to v35 (#79040)

* Update imports
Replace constants with enums

* Import new request objects

* Bump aiounifi to v35
This commit is contained in:
Robert Svensson 2022-09-25 20:08:56 +02:00 committed by GitHub
parent 42bd664305
commit bfd12730f2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 98 additions and 84 deletions

View file

@ -9,8 +9,13 @@ from homeassistant.exceptions import ConfigEntryAuthFailed, ConfigEntryNotReady
from homeassistant.helpers.storage import Store
from homeassistant.helpers.typing import ConfigType
from .const import CONF_CONTROLLER, DOMAIN as UNIFI_DOMAIN, UNIFI_WIRELESS_CLIENTS
from .controller import PLATFORMS, UniFiController, get_unifi_controller
from .const import (
CONF_CONTROLLER,
DOMAIN as UNIFI_DOMAIN,
PLATFORMS,
UNIFI_WIRELESS_CLIENTS,
)
from .controller import UniFiController, get_unifi_controller
from .errors import AuthenticationRequired, CannotConnect
from .services import async_setup_services, async_unload_services

View file

@ -1,9 +1,19 @@
"""Constants for the UniFi Network integration."""
import logging
from homeassistant.const import Platform
LOGGER = logging.getLogger(__package__)
DOMAIN = "unifi"
PLATFORMS = [
Platform.DEVICE_TRACKER,
Platform.SENSOR,
Platform.SWITCH,
Platform.UPDATE,
]
CONF_CONTROLLER = "controller"
CONF_SITE_ID = "site"

View file

@ -14,18 +14,9 @@ from aiounifi.controller import (
DATA_DPI_GROUP,
DATA_DPI_GROUP_REMOVED,
DATA_EVENT,
SIGNAL_CONNECTION_STATE,
SIGNAL_DATA,
)
from aiounifi.events import (
ACCESS_POINT_CONNECTED,
GATEWAY_CONNECTED,
SWITCH_CONNECTED,
WIRED_CLIENT_CONNECTED,
WIRELESS_CLIENT_CONNECTED,
WIRELESS_GUEST_CONNECTED,
)
from aiounifi.websocket import STATE_DISCONNECTED, STATE_RUNNING
from aiounifi.models.event import EventKey
from aiounifi.websocket import WebsocketSignal, WebsocketState
import async_timeout
from homeassistant.config_entries import ConfigEntry
@ -74,6 +65,7 @@ from .const import (
DEFAULT_TRACK_WIRED_CLIENTS,
DOMAIN as UNIFI_DOMAIN,
LOGGER,
PLATFORMS,
UNIFI_WIRELESS_CLIENTS,
)
from .errors import AuthenticationRequired, CannotConnect
@ -81,17 +73,16 @@ from .switch import BLOCK_SWITCH, POE_SWITCH
RETRY_TIMER = 15
CHECK_HEARTBEAT_INTERVAL = timedelta(seconds=1)
PLATFORMS = [Platform.DEVICE_TRACKER, Platform.SENSOR, Platform.SWITCH, Platform.UPDATE]
CLIENT_CONNECTED = (
WIRED_CLIENT_CONNECTED,
WIRELESS_CLIENT_CONNECTED,
WIRELESS_GUEST_CONNECTED,
EventKey.WIRED_CLIENT_CONNECTED,
EventKey.WIRELESS_CLIENT_CONNECTED,
EventKey.WIRELESS_GUEST_CONNECTED,
)
DEVICE_CONNECTED = (
ACCESS_POINT_CONNECTED,
GATEWAY_CONNECTED,
SWITCH_CONNECTED,
EventKey.ACCESS_POINT_CONNECTED,
EventKey.GATEWAY_CONNECTED,
EventKey.SWITCH_CONNECTED,
)
@ -204,15 +195,15 @@ class UniFiController:
@callback
def async_unifi_signalling_callback(self, signal, data):
"""Handle messages back from UniFi library."""
if signal == SIGNAL_CONNECTION_STATE:
if signal == WebsocketSignal.CONNECTION_STATE:
if data == STATE_DISCONNECTED and self.available:
if data == WebsocketState.DISCONNECTED and self.available:
LOGGER.warning("Lost connection to UniFi Network")
if (data == STATE_RUNNING and not self.available) or (
data == STATE_DISCONNECTED and self.available
if (data == WebsocketState.RUNNING and not self.available) or (
data == WebsocketState.DISCONNECTED and self.available
):
self.available = data == STATE_RUNNING
self.available = data == WebsocketState.RUNNING
async_dispatcher_send(self.hass, self.signal_reachable)
if not self.available:
@ -220,7 +211,7 @@ class UniFiController:
else:
LOGGER.info("Connected to UniFi Network")
elif signal == SIGNAL_DATA and data:
elif signal == WebsocketSignal.DATA and data:
if DATA_EVENT in data:
clients_connected = set()
@ -229,16 +220,16 @@ class UniFiController:
for event in data[DATA_EVENT]:
if event.event in CLIENT_CONNECTED:
if event.key in CLIENT_CONNECTED:
clients_connected.add(event.mac)
if not wireless_clients_connected and event.event in (
WIRELESS_CLIENT_CONNECTED,
WIRELESS_GUEST_CONNECTED,
if not wireless_clients_connected and event.key in (
EventKey.WIRELESS_CLIENT_CONNECTED,
EventKey.WIRELESS_GUEST_CONNECTED,
):
wireless_clients_connected = True
elif event.event in DEVICE_CONNECTED:
elif event.key in DEVICE_CONNECTED:
devices_connected.add(event.mac)
if wireless_clients_connected:

View file

@ -3,19 +3,8 @@
from datetime import timedelta
import logging
from aiounifi.api import SOURCE_DATA, SOURCE_EVENT
from aiounifi.events import (
ACCESS_POINT_UPGRADED,
GATEWAY_UPGRADED,
SWITCH_UPGRADED,
WIRED_CLIENT_CONNECTED,
WIRELESS_CLIENT_CONNECTED,
WIRELESS_CLIENT_ROAM,
WIRELESS_CLIENT_ROAMRADIO,
WIRELESS_GUEST_CONNECTED,
WIRELESS_GUEST_ROAM,
WIRELESS_GUEST_ROAMRADIO,
)
from aiounifi.interfaces.api_handlers import SOURCE_DATA, SOURCE_EVENT
from aiounifi.models.event import EventKey
from homeassistant.components.device_tracker import DOMAIN, SourceType
from homeassistant.components.device_tracker.config_entry import ScannerEntity
@ -60,16 +49,14 @@ CLIENT_STATIC_ATTRIBUTES = [
CLIENT_CONNECTED_ALL_ATTRIBUTES = CLIENT_CONNECTED_ATTRIBUTES + CLIENT_STATIC_ATTRIBUTES
DEVICE_UPGRADED = (ACCESS_POINT_UPGRADED, GATEWAY_UPGRADED, SWITCH_UPGRADED)
WIRED_CONNECTION = (WIRED_CLIENT_CONNECTED,)
WIRED_CONNECTION = (EventKey.WIRED_CLIENT_CONNECTED,)
WIRELESS_CONNECTION = (
WIRELESS_CLIENT_CONNECTED,
WIRELESS_CLIENT_ROAM,
WIRELESS_CLIENT_ROAMRADIO,
WIRELESS_GUEST_CONNECTED,
WIRELESS_GUEST_ROAM,
WIRELESS_GUEST_ROAMRADIO,
EventKey.WIRELESS_CLIENT_CONNECTED,
EventKey.WIRELESS_CLIENT_ROAM,
EventKey.WIRELESS_CLIENT_ROAMRADIO,
EventKey.WIRELESS_GUEST_CONNECTED,
EventKey.WIRELESS_GUEST_ROAM,
EventKey.WIRELESS_GUEST_ROAMRADIO,
)
@ -233,8 +220,8 @@ class UniFiClientTracker(UniFiClientBase, ScannerEntity):
and not self._only_listen_to_data_source
):
if (self.is_wired and self.client.event.event in WIRED_CONNECTION) or (
not self.is_wired and self.client.event.event in WIRELESS_CONNECTION
if (self.is_wired and self.client.event.key in WIRED_CONNECTION) or (
not self.is_wired and self.client.event.key in WIRELESS_CONNECTION
):
self._is_connected = True
self.schedule_update = False

View file

@ -3,7 +3,7 @@
"name": "UniFi Network",
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/unifi",
"requirements": ["aiounifi==34"],
"requirements": ["aiounifi==35"],
"codeowners": ["@Kane610"],
"quality_scale": "platinum",
"ssdp": [

View file

@ -1,5 +1,6 @@
"""UniFi Network services."""
from aiounifi.models.client import ClientReconnectRequest, ClientRemoveRequest
import voluptuous as vol
from homeassistant.const import ATTR_DEVICE_ID
@ -77,7 +78,7 @@ async def async_reconnect_client(hass, data) -> None:
):
continue
await controller.api.clients.reconnect(mac)
await controller.api.request(ClientReconnectRequest.create(mac))
async def async_remove_clients(hass, data) -> None:
@ -109,4 +110,4 @@ async def async_remove_clients(hass, data) -> None:
clients_to_remove.append(client.mac)
if clients_to_remove:
await controller.api.clients.remove_clients(macs=clients_to_remove)
await controller.api.request(ClientRemoveRequest.create(clients_to_remove))

View file

@ -8,13 +8,14 @@ Support for controlling deep packet inspection (DPI) restriction groups.
import asyncio
from typing import Any
from aiounifi.api import SOURCE_EVENT
from aiounifi.events import (
WIRED_CLIENT_BLOCKED,
WIRED_CLIENT_UNBLOCKED,
WIRELESS_CLIENT_BLOCKED,
WIRELESS_CLIENT_UNBLOCKED,
from aiounifi.interfaces.api_handlers import SOURCE_EVENT
from aiounifi.models.client import ClientBlockRequest
from aiounifi.models.device import (
DeviceSetOutletRelayRequest,
DeviceSetPoePortModeRequest,
)
from aiounifi.models.dpi_restriction_app import DPIRestrictionAppEnableRequest
from aiounifi.models.event import EventKey
from homeassistant.components.switch import DOMAIN, SwitchDeviceClass, SwitchEntity
from homeassistant.config_entries import ConfigEntry
@ -39,8 +40,8 @@ DPI_SWITCH = "dpi"
POE_SWITCH = "poe"
OUTLET_SWITCH = "outlet"
CLIENT_BLOCKED = (WIRED_CLIENT_BLOCKED, WIRELESS_CLIENT_BLOCKED)
CLIENT_UNBLOCKED = (WIRED_CLIENT_UNBLOCKED, WIRELESS_CLIENT_UNBLOCKED)
CLIENT_BLOCKED = (EventKey.WIRED_CLIENT_BLOCKED, EventKey.WIRELESS_CLIENT_BLOCKED)
CLIENT_UNBLOCKED = (EventKey.WIRED_CLIENT_UNBLOCKED, EventKey.WIRELESS_CLIENT_UNBLOCKED)
async def async_setup_entry(
@ -272,11 +273,19 @@ class UniFiPOEClientSwitch(UniFiClient, SwitchEntity, RestoreEntity):
async def async_turn_on(self, **kwargs: Any) -> None:
"""Enable POE for client."""
await self.device.set_port_poe_mode(self.client.switch_port, self.poe_mode)
await self.controller.api.request(
DeviceSetPoePortModeRequest.create(
self.device, self.client.switch_port, self.poe_mode
)
)
async def async_turn_off(self, **kwargs: Any) -> None:
"""Disable POE for client."""
await self.device.set_port_poe_mode(self.client.switch_port, "off")
await self.controller.api.request(
DeviceSetPoePortModeRequest.create(
self.device, self.client.switch_port, "off"
)
)
@property
def extra_state_attributes(self):
@ -324,9 +333,9 @@ class UniFiBlockClientSwitch(UniFiClient, SwitchEntity):
"""Update the clients state."""
if (
self.client.last_updated == SOURCE_EVENT
and self.client.event.event in CLIENT_BLOCKED + CLIENT_UNBLOCKED
and self.client.event.key in CLIENT_BLOCKED + CLIENT_UNBLOCKED
):
self._is_blocked = self.client.event.event in CLIENT_BLOCKED
self._is_blocked = self.client.event.key in CLIENT_BLOCKED
super().async_update_callback()
@ -337,11 +346,15 @@ class UniFiBlockClientSwitch(UniFiClient, SwitchEntity):
async def async_turn_on(self, **kwargs: Any) -> None:
"""Turn on connectivity for client."""
await self.controller.api.clients.unblock(self.client.mac)
await self.controller.api.request(
ClientBlockRequest.create(self.client.mac, False)
)
async def async_turn_off(self, **kwargs: Any) -> None:
"""Turn off connectivity for client."""
await self.controller.api.clients.block(self.client.mac)
await self.controller.api.request(
ClientBlockRequest.create(self.client.mac, True)
)
@property
def icon(self) -> str:
@ -449,7 +462,9 @@ class UniFiDPIRestrictionSwitch(UniFiBase, SwitchEntity):
"""Restrict access of apps related to DPI group."""
return await asyncio.gather(
*[
self.controller.api.dpi_apps.enable(app_id)
self.controller.api.request(
DPIRestrictionAppEnableRequest.create(app_id, True)
)
for app_id in self._item.dpiapp_ids
]
)
@ -458,7 +473,9 @@ class UniFiDPIRestrictionSwitch(UniFiBase, SwitchEntity):
"""Remove restriction of apps related to DPI group."""
return await asyncio.gather(
*[
self.controller.api.dpi_apps.disable(app_id)
self.controller.api.request(
DPIRestrictionAppEnableRequest.create(app_id, False)
)
for app_id in self._item.dpiapp_ids
]
)
@ -509,11 +526,15 @@ class UniFiOutletSwitch(UniFiBase, SwitchEntity):
async def async_turn_on(self, **kwargs: Any) -> None:
"""Enable outlet relay."""
await self._item.set_outlet_relay_state(self._outlet_index, True)
await self.controller.api.request(
DeviceSetOutletRelayRequest.create(self._item, self._outlet_index, True)
)
async def async_turn_off(self, **kwargs: Any) -> None:
"""Disable outlet relay."""
await self._item.set_outlet_relay_state(self._outlet_index, False)
await self.controller.api.request(
DeviceSetOutletRelayRequest.create(self._item, self._outlet_index, False)
)
@property
def device_info(self) -> DeviceInfo:

View file

@ -4,6 +4,8 @@ from __future__ import annotations
import logging
from typing import Any
from aiounifi.models.device import DeviceUpgradeRequest
from homeassistant.components.update import (
DOMAIN,
UpdateDeviceClass,
@ -136,4 +138,4 @@ class UniFiDeviceUpdateEntity(UniFiBase, UpdateEntity):
self, version: str | None, backup: bool, **kwargs: Any
) -> None:
"""Install an update."""
await self.controller.api.devices.upgrade(self.device.mac)
await self.controller.api.request(DeviceUpgradeRequest.create(self.device.mac))

View file

@ -276,7 +276,7 @@ aiosyncthing==0.5.1
aiotractive==0.5.4
# homeassistant.components.unifi
aiounifi==34
aiounifi==35
# homeassistant.components.vlc_telnet
aiovlc==0.1.0

View file

@ -251,7 +251,7 @@ aiosyncthing==0.5.1
aiotractive==0.5.4
# homeassistant.components.unifi
aiounifi==34
aiounifi==35
# homeassistant.components.vlc_telnet
aiovlc==0.1.0

View file

@ -25,13 +25,10 @@ from homeassistant.components.unifi.const import (
DEFAULT_TRACK_DEVICES,
DEFAULT_TRACK_WIRED_CLIENTS,
DOMAIN as UNIFI_DOMAIN,
PLATFORMS,
UNIFI_WIRELESS_CLIENTS,
)
from homeassistant.components.unifi.controller import (
PLATFORMS,
RETRY_TIMER,
get_unifi_controller,
)
from homeassistant.components.unifi.controller import RETRY_TIMER, get_unifi_controller
from homeassistant.components.unifi.errors import AuthenticationRequired, CannotConnect
from homeassistant.const import (
CONF_HOST,