mirror of
https://github.com/home-assistant/core.git
synced 2025-07-09 14:27:07 +00:00
dsmr: migrate hourly_gas_meter_reading to mbus device (#123149)
This commit is contained in:
parent
b45fe0ec73
commit
a7fbac5185
@ -439,7 +439,9 @@ def rename_old_gas_to_mbus(
|
|||||||
entries = er.async_entries_for_device(ent_reg, device_id)
|
entries = er.async_entries_for_device(ent_reg, device_id)
|
||||||
|
|
||||||
for entity in entries:
|
for entity in entries:
|
||||||
if entity.unique_id.endswith("belgium_5min_gas_meter_reading"):
|
if entity.unique_id.endswith(
|
||||||
|
"belgium_5min_gas_meter_reading"
|
||||||
|
) or entity.unique_id.endswith("hourly_gas_meter_reading"):
|
||||||
try:
|
try:
|
||||||
ent_reg.async_update_entity(
|
ent_reg.async_update_entity(
|
||||||
entity.entity_id,
|
entity.entity_id,
|
||||||
|
@ -119,6 +119,106 @@ async def test_migrate_gas_to_mbus(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def test_migrate_hourly_gas_to_mbus(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
entity_registry: er.EntityRegistry,
|
||||||
|
device_registry: dr.DeviceRegistry,
|
||||||
|
dsmr_connection_fixture: tuple[MagicMock, MagicMock, MagicMock],
|
||||||
|
) -> None:
|
||||||
|
"""Test migration of unique_id."""
|
||||||
|
(connection_factory, transport, protocol) = dsmr_connection_fixture
|
||||||
|
|
||||||
|
mock_entry = MockConfigEntry(
|
||||||
|
domain=DOMAIN,
|
||||||
|
unique_id="/dev/ttyUSB0",
|
||||||
|
data={
|
||||||
|
"port": "/dev/ttyUSB0",
|
||||||
|
"dsmr_version": "5",
|
||||||
|
"serial_id": "1234",
|
||||||
|
"serial_id_gas": "4730303738353635363037343639323231",
|
||||||
|
},
|
||||||
|
options={
|
||||||
|
"time_between_update": 0,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
mock_entry.add_to_hass(hass)
|
||||||
|
|
||||||
|
old_unique_id = "4730303738353635363037343639323231_hourly_gas_meter_reading"
|
||||||
|
|
||||||
|
device = device_registry.async_get_or_create(
|
||||||
|
config_entry_id=mock_entry.entry_id,
|
||||||
|
identifiers={(DOMAIN, mock_entry.entry_id)},
|
||||||
|
name="Gas Meter",
|
||||||
|
)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
entity: er.RegistryEntry = entity_registry.async_get_or_create(
|
||||||
|
suggested_object_id="gas_meter_reading",
|
||||||
|
disabled_by=None,
|
||||||
|
domain=SENSOR_DOMAIN,
|
||||||
|
platform=DOMAIN,
|
||||||
|
device_id=device.id,
|
||||||
|
unique_id=old_unique_id,
|
||||||
|
config_entry=mock_entry,
|
||||||
|
)
|
||||||
|
assert entity.unique_id == old_unique_id
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
telegram = Telegram()
|
||||||
|
telegram.add(
|
||||||
|
MBUS_DEVICE_TYPE,
|
||||||
|
CosemObject((0, 1), [{"value": "003", "unit": ""}]),
|
||||||
|
"MBUS_DEVICE_TYPE",
|
||||||
|
)
|
||||||
|
telegram.add(
|
||||||
|
MBUS_EQUIPMENT_IDENTIFIER,
|
||||||
|
CosemObject(
|
||||||
|
(0, 1),
|
||||||
|
[{"value": "4730303738353635363037343639323231", "unit": ""}],
|
||||||
|
),
|
||||||
|
"MBUS_EQUIPMENT_IDENTIFIER",
|
||||||
|
)
|
||||||
|
telegram.add(
|
||||||
|
MBUS_METER_READING,
|
||||||
|
MBusObject(
|
||||||
|
(0, 1),
|
||||||
|
[
|
||||||
|
{"value": datetime.datetime.fromtimestamp(1722749707)},
|
||||||
|
{"value": Decimal(778.963), "unit": "m3"},
|
||||||
|
],
|
||||||
|
),
|
||||||
|
"MBUS_METER_READING",
|
||||||
|
)
|
||||||
|
|
||||||
|
assert await hass.config_entries.async_setup(mock_entry.entry_id)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
telegram_callback = connection_factory.call_args_list[0][0][2]
|
||||||
|
|
||||||
|
# simulate a telegram pushed from the smartmeter and parsed by dsmr_parser
|
||||||
|
telegram_callback(telegram)
|
||||||
|
|
||||||
|
# after receiving telegram entities need to have the chance to be created
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
dev_entities = er.async_entries_for_device(
|
||||||
|
entity_registry, device.id, include_disabled_entities=True
|
||||||
|
)
|
||||||
|
assert not dev_entities
|
||||||
|
|
||||||
|
assert (
|
||||||
|
entity_registry.async_get_entity_id(SENSOR_DOMAIN, DOMAIN, old_unique_id)
|
||||||
|
is None
|
||||||
|
)
|
||||||
|
assert (
|
||||||
|
entity_registry.async_get_entity_id(
|
||||||
|
SENSOR_DOMAIN, DOMAIN, "4730303738353635363037343639323231"
|
||||||
|
)
|
||||||
|
== "sensor.gas_meter_reading"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
async def test_migrate_gas_to_mbus_exists(
|
async def test_migrate_gas_to_mbus_exists(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
entity_registry: er.EntityRegistry,
|
entity_registry: er.EntityRegistry,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user