M8-R16: expose hot water to HA Energy
This commit is contained in:
@@ -2788,7 +2788,11 @@ def test_m8_catalog_has_source_meter_and_thermal_entities_disabled(energy_db) ->
|
||||
assert entries[f"meter.{heating.uuid}.total"].entity.unit == "GJ"
|
||||
assert entries[f"meter.{heating.uuid}.total"].entity.device_class == "energy"
|
||||
assert entries[f"meter.{water.uuid}.total"].entity.unit == "m³"
|
||||
assert entries[f"meter.{water.uuid}.total"].entity.device_class == "volume"
|
||||
for suffix in ("total", "today"):
|
||||
water_entity = entries[f"meter.{water.uuid}.{suffix}"].entity
|
||||
assert water_entity.device_class == "water"
|
||||
assert water_entity.unit == "m³"
|
||||
assert water_entity.state_class == "total_increasing"
|
||||
assert entries[f"meter.{electricity.uuid}.total"].entity.unit == "kWh"
|
||||
assert entries[f"meter.{electricity.uuid}.total"].entity.device_class == "energy"
|
||||
assert entries[f"meter.{electricity.uuid}.today"].entity.state_class == "total_increasing"
|
||||
@@ -2812,6 +2816,31 @@ def test_m8_catalog_has_source_meter_and_thermal_entities_disabled(energy_db) ->
|
||||
assert all(entry.entity.unit == "EUR" and entry.entity.device_class == "monetary" for entry in thermal)
|
||||
|
||||
|
||||
def test_m8_hot_water_discovery_payload_is_ha_energy_compatible(energy_db) -> None:
|
||||
"""Hot-water Meter discovery exposes the exact HA Energy Water metadata."""
|
||||
from app.integrations.expose import build_catalog
|
||||
from app.services.ha_discovery import build_discovery_payload
|
||||
|
||||
now = datetime.now(timezone.utc)
|
||||
with Session(energy_db) as session:
|
||||
_source, _channel, meter = _make_thermal_source_and_meter(session, "hot_water", now)
|
||||
session.commit()
|
||||
entries = {item.entity.key: item.entity for item in build_catalog(session)}
|
||||
|
||||
for suffix in ("total", "today"):
|
||||
entity = entries[f"meter.{meter.uuid}.{suffix}"]
|
||||
topic, payload = build_discovery_payload(entity, "homeassistant")
|
||||
assert payload["device_class"] == "water"
|
||||
assert payload["unit_of_measurement"] == "m³"
|
||||
assert payload["state_class"] == "total_increasing"
|
||||
assert payload["unique_id"] == f"{meter.uuid}_meter_{meter.uuid}_{suffix}"
|
||||
assert payload["device"]["identifiers"] == [f"home-automation:meter:{meter.uuid}"]
|
||||
assert topic == (
|
||||
f"homeassistant/sensor/{meter.uuid.replace('-', '_')}/"
|
||||
f"meter_{meter.uuid.replace('-', '_')}_{suffix}/config"
|
||||
)
|
||||
|
||||
|
||||
def test_m8_meter_getter_hides_stale_or_offline_source(energy_db) -> None:
|
||||
from app.integrations.expose import build_catalog
|
||||
|
||||
|
||||
Reference in New Issue
Block a user