mirror of https://github.com/home-assistant/core
77 lines
2.4 KiB
Python
77 lines
2.4 KiB
Python
"""Internal discovery service for Escea Fireplace."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from pescea import (
|
|
AbstractDiscoveryService,
|
|
Controller,
|
|
Listener,
|
|
discovery_service as pescea_discovery_service,
|
|
)
|
|
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers.dispatcher import async_dispatcher_send
|
|
|
|
from .const import (
|
|
DATA_DISCOVERY_SERVICE,
|
|
DISPATCH_CONTROLLER_DISCONNECTED,
|
|
DISPATCH_CONTROLLER_DISCOVERED,
|
|
DISPATCH_CONTROLLER_RECONNECTED,
|
|
DISPATCH_CONTROLLER_UPDATE,
|
|
)
|
|
|
|
|
|
class DiscoveryServiceListener(Listener):
|
|
"""Discovery data and interfacing with pescea library."""
|
|
|
|
def __init__(self, hass: HomeAssistant) -> None:
|
|
"""Initialise discovery service."""
|
|
super().__init__()
|
|
self.hass = hass
|
|
|
|
# Listener interface
|
|
def controller_discovered(self, ctrl: Controller) -> None:
|
|
"""Handle new controller discoverery."""
|
|
async_dispatcher_send(self.hass, DISPATCH_CONTROLLER_DISCOVERED, ctrl)
|
|
|
|
def controller_disconnected(self, ctrl: Controller, ex: Exception) -> None:
|
|
"""On disconnect from controller."""
|
|
async_dispatcher_send(self.hass, DISPATCH_CONTROLLER_DISCONNECTED, ctrl, ex)
|
|
|
|
def controller_reconnected(self, ctrl: Controller) -> None:
|
|
"""On reconnect to controller."""
|
|
async_dispatcher_send(self.hass, DISPATCH_CONTROLLER_RECONNECTED, ctrl)
|
|
|
|
def controller_update(self, ctrl: Controller) -> None:
|
|
"""System update message is received from the controller."""
|
|
async_dispatcher_send(self.hass, DISPATCH_CONTROLLER_UPDATE, ctrl)
|
|
|
|
|
|
async def async_start_discovery_service(
|
|
hass: HomeAssistant,
|
|
) -> AbstractDiscoveryService:
|
|
"""Set up the pescea internal discovery."""
|
|
discovery_service = hass.data.get(DATA_DISCOVERY_SERVICE)
|
|
if discovery_service:
|
|
# Already started
|
|
return discovery_service
|
|
|
|
# discovery local services
|
|
listener = DiscoveryServiceListener(hass)
|
|
discovery_service = pescea_discovery_service(listener)
|
|
hass.data[DATA_DISCOVERY_SERVICE] = discovery_service
|
|
|
|
await discovery_service.start_discovery()
|
|
|
|
return discovery_service
|
|
|
|
|
|
async def async_stop_discovery_service(hass: HomeAssistant) -> None:
|
|
"""Stop the discovery service."""
|
|
discovery_service = hass.data.get(DATA_DISCOVERY_SERVICE)
|
|
if not discovery_service:
|
|
return
|
|
|
|
await discovery_service.close()
|
|
del hass.data[DATA_DISCOVERY_SERVICE]
|