mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 16:57:53 +00:00
Add humidifier support to prometheus (#37112)
* Add humidifier support to promethease * add humidifier dependency * handle dependencies * wrong place * applied suggestions from code review * fix typo * Revert "wrong place" This reverts commit 58e509d767d484e43aa108ca896146e514b79c10. * Revert "handle dependencies" This reverts commit 74bd523e08a32cd906809929f139d6469610f808. * Revert "add humidifier dependency" This reverts commit 8840b378e53d28a86eed5f62a8126769d3f58afe.
This commit is contained in:
parent
3c7f729b15
commit
872140123d
@ -13,6 +13,11 @@ from homeassistant.components.climate.const import (
|
||||
CURRENT_HVAC_ACTIONS,
|
||||
)
|
||||
from homeassistant.components.http import HomeAssistantView
|
||||
from homeassistant.components.humidifier.const import (
|
||||
ATTR_AVAILABLE_MODES,
|
||||
ATTR_HUMIDITY,
|
||||
ATTR_MODE,
|
||||
)
|
||||
from homeassistant.const import (
|
||||
ATTR_DEVICE_CLASS,
|
||||
ATTR_TEMPERATURE,
|
||||
@ -318,6 +323,41 @@ class PrometheusMetrics:
|
||||
float(action == current_action)
|
||||
)
|
||||
|
||||
def _handle_humidifier(self, state):
|
||||
humidifier_target_humidity_percent = state.attributes.get(ATTR_HUMIDITY)
|
||||
if humidifier_target_humidity_percent:
|
||||
metric = self._metric(
|
||||
"humidifier_target_humidity_percent",
|
||||
self.prometheus_cli.Gauge,
|
||||
"Target Relative Humidity",
|
||||
)
|
||||
metric.labels(**self._labels(state)).set(humidifier_target_humidity_percent)
|
||||
|
||||
metric = self._metric(
|
||||
"humidifier_state",
|
||||
self.prometheus_cli.Gauge,
|
||||
"State of the humidifier (0/1)",
|
||||
)
|
||||
try:
|
||||
value = self.state_as_number(state)
|
||||
metric.labels(**self._labels(state)).set(value)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
current_mode = state.attributes.get(ATTR_MODE)
|
||||
available_modes = state.attributes.get(ATTR_AVAILABLE_MODES)
|
||||
if current_mode and available_modes:
|
||||
metric = self._metric(
|
||||
"humidifier_mode",
|
||||
self.prometheus_cli.Gauge,
|
||||
"Humidifier Mode",
|
||||
["mode"],
|
||||
)
|
||||
for mode in available_modes:
|
||||
metric.labels(**dict(self._labels(state), mode=mode)).set(
|
||||
float(mode == current_mode)
|
||||
)
|
||||
|
||||
def _handle_sensor(self, state):
|
||||
unit = self._unit_string(state.attributes.get(ATTR_UNIT_OF_MEASUREMENT))
|
||||
|
||||
|
@ -4,7 +4,7 @@ from dataclasses import dataclass
|
||||
import pytest
|
||||
|
||||
from homeassistant import setup
|
||||
from homeassistant.components import climate, sensor
|
||||
from homeassistant.components import climate, humidifier, sensor
|
||||
from homeassistant.components.demo.sensor import DemoSensor
|
||||
import homeassistant.components.prometheus as prometheus
|
||||
from homeassistant.const import (
|
||||
@ -44,6 +44,10 @@ async def prometheus_client(loop, hass, hass_client):
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
await setup.async_setup_component(
|
||||
hass, humidifier.DOMAIN, {"humidifier": [{"platform": "demo"}]}
|
||||
)
|
||||
|
||||
sensor1 = DemoSensor(
|
||||
None, "Television Energy", 74, None, ENERGY_KILO_WATT_HOUR, None
|
||||
)
|
||||
@ -120,6 +124,31 @@ async def test_view(prometheus_client): # pylint: disable=redefined-outer-name
|
||||
'friendly_name="HeatPump"} 25.0' in body
|
||||
)
|
||||
|
||||
assert (
|
||||
'humidifier_target_humidity_percent{domain="humidifier",'
|
||||
'entity="humidifier.humidifier",'
|
||||
'friendly_name="Humidifier"} 68.0' in body
|
||||
)
|
||||
|
||||
assert (
|
||||
'humidifier_state{domain="humidifier",'
|
||||
'entity="humidifier.dehumidifier",'
|
||||
'friendly_name="Dehumidifier"} 1.0' in body
|
||||
)
|
||||
|
||||
assert (
|
||||
'humidifier_mode{domain="humidifier",'
|
||||
'entity="humidifier.hygrostat",'
|
||||
'friendly_name="Hygrostat",'
|
||||
'mode="home"} 1.0' in body
|
||||
)
|
||||
assert (
|
||||
'humidifier_mode{domain="humidifier",'
|
||||
'entity="humidifier.hygrostat",'
|
||||
'friendly_name="Hygrostat",'
|
||||
'mode="eco"} 0.0' in body
|
||||
)
|
||||
|
||||
assert (
|
||||
'humidity_percent{domain="sensor",'
|
||||
'entity="sensor.outside_humidity",'
|
||||
|
Loading…
x
Reference in New Issue
Block a user