Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Waterfurnace."""
2 
3 from __future__ import annotations
4 
6  ENTITY_ID_FORMAT,
7  SensorDeviceClass,
8  SensorEntity,
9  SensorEntityDescription,
10 )
11 from homeassistant.const import PERCENTAGE, UnitOfPower, UnitOfTemperature
12 from homeassistant.core import HomeAssistant, callback
13 from homeassistant.helpers.dispatcher import async_dispatcher_connect
14 from homeassistant.helpers.entity_platform import AddEntitiesCallback
15 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
16 from homeassistant.util import slugify
17 
18 from . import DOMAIN as WF_DOMAIN, UPDATE_TOPIC, WaterFurnaceData
19 
20 SENSORS = [
21  SensorEntityDescription(name="Furnace Mode", key="mode", icon="mdi:gauge"),
23  name="Total Power",
24  key="totalunitpower",
25  native_unit_of_measurement=UnitOfPower.WATT,
26  device_class=SensorDeviceClass.POWER,
27  ),
29  name="Active Setpoint",
30  key="tstatactivesetpoint",
31  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
32  device_class=SensorDeviceClass.TEMPERATURE,
33  ),
35  name="Leaving Air",
36  key="leavingairtemp",
37  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
38  device_class=SensorDeviceClass.TEMPERATURE,
39  ),
41  name="Room Temp",
42  key="tstatroomtemp",
43  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
44  device_class=SensorDeviceClass.TEMPERATURE,
45  ),
47  name="Loop Temp",
48  key="enteringwatertemp",
49  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
50  device_class=SensorDeviceClass.TEMPERATURE,
51  ),
53  name="Humidity Set Point",
54  key="tstathumidsetpoint",
55  icon="mdi:water-percent",
56  native_unit_of_measurement=PERCENTAGE,
57  ),
59  name="Humidity",
60  key="tstatrelativehumidity",
61  icon="mdi:water-percent",
62  native_unit_of_measurement=PERCENTAGE,
63  ),
65  name="Compressor Power",
66  key="compressorpower",
67  native_unit_of_measurement=UnitOfPower.WATT,
68  device_class=SensorDeviceClass.POWER,
69  ),
71  name="Fan Power",
72  key="fanpower",
73  native_unit_of_measurement=UnitOfPower.WATT,
74  device_class=SensorDeviceClass.POWER,
75  ),
77  name="Aux Power",
78  key="auxpower",
79  native_unit_of_measurement=UnitOfPower.WATT,
80  device_class=SensorDeviceClass.POWER,
81  ),
83  name="Loop Pump Power",
84  key="looppumppower",
85  native_unit_of_measurement=UnitOfPower.WATT,
86  device_class=SensorDeviceClass.POWER,
87  ),
89  name="Compressor Speed", key="actualcompressorspeed", icon="mdi:speedometer"
90  ),
92  name="Fan Speed", key="airflowcurrentspeed", icon="mdi:fan"
93  ),
94 ]
95 
96 
98  hass: HomeAssistant,
99  config: ConfigType,
100  add_entities: AddEntitiesCallback,
101  discovery_info: DiscoveryInfoType | None = None,
102 ) -> None:
103  """Set up the Waterfurnace sensor."""
104  if discovery_info is None:
105  return
106 
107  client = hass.data[WF_DOMAIN]
108 
109  add_entities(WaterFurnaceSensor(client, description) for description in SENSORS)
110 
111 
113  """Implementing the Waterfurnace sensor."""
114 
115  _attr_should_poll = False
116 
117  def __init__(
118  self, client: WaterFurnaceData, description: SensorEntityDescription
119  ) -> None:
120  """Initialize the sensor."""
121  self.clientclient = client
122  self.entity_descriptionentity_description = description
123 
124  # This ensures that the sensors are isolated per waterfurnace unit
125  self.entity_identity_identity_id = ENTITY_ID_FORMAT.format(
126  f"wf_{slugify(self.client.unit)}_{slugify(description.key)}"
127  )
128 
129  async def async_added_to_hass(self) -> None:
130  """Register callbacks."""
131  self.async_on_removeasync_on_remove(
133  self.hasshass, UPDATE_TOPIC, self.async_update_callbackasync_update_callback
134  )
135  )
136 
137  @callback
139  """Update state."""
140  if self.clientclient.data is not None:
141  self._attr_native_value_attr_native_value = getattr(
142  self.clientclient.data, self.entity_descriptionentity_description.key, None
143  )
144  self.async_write_ha_stateasync_write_ha_state()
None __init__(self, WaterFurnaceData client, SensorEntityDescription description)
Definition: sensor.py:119
None async_on_remove(self, CALLBACK_TYPE func)
Definition: entity.py:1331
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:102
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)
Definition: dispatcher.py:103