Home Assistant Unofficial Reference 2024.12.1
discovery.py
Go to the documentation of this file.
1 """Internal discovery service for Escea Fireplace."""
2 
3 from __future__ import annotations
4 
5 from pescea import (
6  AbstractDiscoveryService,
7  Controller,
8  Listener,
9  discovery_service as pescea_discovery_service,
10 )
11 
12 from homeassistant.core import HomeAssistant
13 from homeassistant.helpers.dispatcher import async_dispatcher_send
14 
15 from .const import (
16  DATA_DISCOVERY_SERVICE,
17  DISPATCH_CONTROLLER_DISCONNECTED,
18  DISPATCH_CONTROLLER_DISCOVERED,
19  DISPATCH_CONTROLLER_RECONNECTED,
20  DISPATCH_CONTROLLER_UPDATE,
21 )
22 
23 
24 class DiscoveryServiceListener(Listener):
25  """Discovery data and interfacing with pescea library."""
26 
27  def __init__(self, hass: HomeAssistant) -> None:
28  """Initialise discovery service."""
29  super().__init__()
30  self.hasshass = hass
31 
32  # Listener interface
33  def controller_discovered(self, ctrl: Controller) -> None:
34  """Handle new controller discoverery."""
35  async_dispatcher_send(self.hasshass, DISPATCH_CONTROLLER_DISCOVERED, ctrl)
36 
37  def controller_disconnected(self, ctrl: Controller, ex: Exception) -> None:
38  """On disconnect from controller."""
39  async_dispatcher_send(self.hasshass, DISPATCH_CONTROLLER_DISCONNECTED, ctrl, ex)
40 
41  def controller_reconnected(self, ctrl: Controller) -> None:
42  """On reconnect to controller."""
43  async_dispatcher_send(self.hasshass, DISPATCH_CONTROLLER_RECONNECTED, ctrl)
44 
45  def controller_update(self, ctrl: Controller) -> None:
46  """System update message is received from the controller."""
47  async_dispatcher_send(self.hasshass, DISPATCH_CONTROLLER_UPDATE, ctrl)
48 
49 
51  hass: HomeAssistant,
52 ) -> AbstractDiscoveryService:
53  """Set up the pescea internal discovery."""
54  discovery_service = hass.data.get(DATA_DISCOVERY_SERVICE)
55  if discovery_service:
56  # Already started
57  return discovery_service
58 
59  # discovery local services
60  listener = DiscoveryServiceListener(hass)
61  discovery_service = pescea_discovery_service(listener)
62  hass.data[DATA_DISCOVERY_SERVICE] = discovery_service
63 
64  await discovery_service.start_discovery()
65 
66  return discovery_service
67 
68 
69 async def async_stop_discovery_service(hass: HomeAssistant) -> None:
70  """Stop the discovery service."""
71  discovery_service = hass.data.get(DATA_DISCOVERY_SERVICE)
72  if not discovery_service:
73  return
74 
75  await discovery_service.close()
76  del hass.data[DATA_DISCOVERY_SERVICE]
None controller_disconnected(self, Controller ctrl, Exception ex)
Definition: discovery.py:37
None async_stop_discovery_service(HomeAssistant hass)
Definition: discovery.py:69
AbstractDiscoveryService async_start_discovery_service(HomeAssistant hass)
Definition: discovery.py:52
None async_dispatcher_send(HomeAssistant hass, str signal, *Any args)
Definition: dispatcher.py:193