Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for KWB Easyfire."""
2 
3 from __future__ import annotations
4 
5 from pykwb import kwb
6 import voluptuous as vol
7 
9  PLATFORM_SCHEMA as SENSOR_PLATFORM_SCHEMA,
10  SensorEntity,
11 )
12 from homeassistant.const import (
13  CONF_DEVICE,
14  CONF_HOST,
15  CONF_NAME,
16  CONF_PORT,
17  CONF_TYPE,
18  EVENT_HOMEASSISTANT_STOP,
19 )
20 from homeassistant.core import HomeAssistant
22 from homeassistant.helpers.entity_platform import AddEntitiesCallback
23 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
24 
25 DEFAULT_RAW = False
26 DEFAULT_NAME = "KWB"
27 
28 MODE_SERIAL = 0
29 MODE_TCP = 1
30 
31 CONF_RAW = "raw"
32 
33 SERIAL_SCHEMA = SENSOR_PLATFORM_SCHEMA.extend(
34  {
35  vol.Optional(CONF_RAW, default=DEFAULT_RAW): cv.boolean,
36  vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
37  vol.Required(CONF_DEVICE): cv.string,
38  vol.Required(CONF_TYPE): "serial",
39  }
40 )
41 
42 ETHERNET_SCHEMA = SENSOR_PLATFORM_SCHEMA.extend(
43  {
44  vol.Optional(CONF_RAW, default=DEFAULT_RAW): cv.boolean,
45  vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
46  vol.Required(CONF_HOST): cv.string,
47  vol.Required(CONF_PORT): cv.port,
48  vol.Required(CONF_TYPE): "tcp",
49  }
50 )
51 
52 PLATFORM_SCHEMA = vol.Schema(vol.Any(SERIAL_SCHEMA, ETHERNET_SCHEMA))
53 
54 
56  hass: HomeAssistant,
57  config: ConfigType,
58  add_entities: AddEntitiesCallback,
59  discovery_info: DiscoveryInfoType | None = None,
60 ) -> None:
61  """Set up the KWB component."""
62  host = config.get(CONF_HOST)
63  port = config.get(CONF_PORT)
64  device = config.get(CONF_DEVICE)
65  connection_type = config.get(CONF_TYPE)
66  raw = config.get(CONF_RAW)
67  client_name = config.get(CONF_NAME)
68 
69  if connection_type == "serial":
70  easyfire = kwb.KWBEasyfire(MODE_SERIAL, "", 0, device)
71  elif connection_type == "tcp":
72  easyfire = kwb.KWBEasyfire(MODE_TCP, host, port)
73  else:
74  return
75 
76  easyfire.run_thread()
77 
78  hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP, lambda event: easyfire.stop_thread())
79 
81  KWBSensor(easyfire, sensor, client_name)
82  for sensor in easyfire.get_sensors()
83  if (sensor.sensor_type != kwb.PROP_SENSOR_RAW)
84  or (sensor.sensor_type == kwb.PROP_SENSOR_RAW and raw)
85  )
86 
87 
89  """Representation of a KWB Easyfire sensor."""
90 
91  def __init__(self, easyfire, sensor, client_name):
92  """Initialize the KWB sensor."""
93  self._easyfire_easyfire = easyfire
94  self._sensor_sensor = sensor
95  self._client_name_client_name = client_name
96  self._name_name = self._sensor_sensor.name
97 
98  @property
99  def name(self):
100  """Return the name."""
101  return f"{self._client_name} {self._name}"
102 
103  @property
104  def available(self) -> bool:
105  """Return if sensor is available."""
106  return self._sensor_sensor.available
107 
108  @property
109  def native_value(self):
110  """Return the state of value."""
111  if self._sensor_sensor.value is not None and self._sensor_sensor.available:
112  return self._sensor_sensor.value
113  return None
114 
115  @property
117  """Return the unit of measurement of this entity, if any."""
118  return self._sensor_sensor.unit_of_measurement
def __init__(self, easyfire, sensor, client_name)
Definition: sensor.py:91
def add_entities(account, async_add_entities, tracked)
Definition: sensor.py:40
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)
Definition: sensor.py:60