Fix unique_id of S0 meters connected to Fronius inverters (#61408)
This commit is contained in:
parent
58174eaa4e
commit
4f9d4872a7
12 changed files with 462 additions and 15 deletions
|
@ -1,4 +1,5 @@
|
|||
"""Tests for the Fronius sensor platform."""
|
||||
from homeassistant.components.fronius.const import DOMAIN
|
||||
from homeassistant.components.fronius.coordinator import (
|
||||
FroniusInverterUpdateCoordinator,
|
||||
FroniusMeterUpdateCoordinator,
|
||||
|
@ -6,6 +7,7 @@ from homeassistant.components.fronius.coordinator import (
|
|||
)
|
||||
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
|
||||
from homeassistant.const import STATE_UNKNOWN
|
||||
from homeassistant.helpers import device_registry as dr
|
||||
from homeassistant.util import dt
|
||||
|
||||
from . import enable_all_entities, mock_responses, setup_fronius_integration
|
||||
|
@ -371,7 +373,9 @@ async def test_gen24_storage(hass, aioclient_mock):
|
|||
assert state.state == str(expected_state)
|
||||
|
||||
mock_responses(aioclient_mock, fixture_set="gen24_storage")
|
||||
config_entry = await setup_fronius_integration(hass, is_logger=False)
|
||||
config_entry = await setup_fronius_integration(
|
||||
hass, is_logger=False, unique_id="12345678"
|
||||
)
|
||||
|
||||
assert len(hass.states.async_all(domain_filter=SENSOR_DOMAIN)) == 36
|
||||
await enable_all_entities(
|
||||
|
@ -469,3 +473,133 @@ async def test_gen24_storage(hass, aioclient_mock):
|
|||
assert_state("sensor.temperature_cell_fronius_storage_0_http_fronius", 21.5)
|
||||
assert_state("sensor.capacity_designed_fronius_storage_0_http_fronius", 16588)
|
||||
assert_state("sensor.voltage_dc_fronius_storage_0_http_fronius", 0.0)
|
||||
|
||||
# Devices
|
||||
device_registry = dr.async_get(hass)
|
||||
|
||||
solar_net = device_registry.async_get_device(
|
||||
identifiers={(DOMAIN, "solar_net_12345678")}
|
||||
)
|
||||
assert solar_net.configuration_url == "http://fronius"
|
||||
assert solar_net.manufacturer == "Fronius"
|
||||
assert solar_net.name == "SolarNet"
|
||||
|
||||
inverter_1 = device_registry.async_get_device(identifiers={(DOMAIN, "12345678")})
|
||||
assert inverter_1.manufacturer == "Fronius"
|
||||
assert inverter_1.model == "Gen24"
|
||||
assert inverter_1.name == "Gen24 Storage"
|
||||
|
||||
meter = device_registry.async_get_device(identifiers={(DOMAIN, "1234567890")})
|
||||
assert meter.manufacturer == "Fronius"
|
||||
assert meter.model == "Smart Meter TS 65A-3"
|
||||
assert meter.name == "Smart Meter TS 65A-3"
|
||||
|
||||
ohmpilot = device_registry.async_get_device(identifiers={(DOMAIN, "23456789")})
|
||||
assert ohmpilot.manufacturer == "Fronius"
|
||||
assert ohmpilot.model == "Ohmpilot 6"
|
||||
assert ohmpilot.name == "Ohmpilot"
|
||||
assert ohmpilot.sw_version == "1.0.25-3"
|
||||
|
||||
storage = device_registry.async_get_device(
|
||||
identifiers={(DOMAIN, "P030T020Z2001234567 ")}
|
||||
)
|
||||
assert storage.manufacturer == "BYD"
|
||||
assert storage.model == "BYD Battery-Box Premium HV"
|
||||
assert storage.name == "BYD Battery-Box Premium HV"
|
||||
|
||||
|
||||
async def test_primo_s0(hass, aioclient_mock):
|
||||
"""Test Fronius Primo dual inverter with S0 meter entities."""
|
||||
|
||||
def assert_state(entity_id, expected_state):
|
||||
state = hass.states.get(entity_id)
|
||||
assert state
|
||||
assert state.state == str(expected_state)
|
||||
|
||||
mock_responses(aioclient_mock, fixture_set="primo_s0", inverter_ids=[1, 2])
|
||||
config_entry = await setup_fronius_integration(hass, is_logger=True)
|
||||
|
||||
assert len(hass.states.async_all(domain_filter=SENSOR_DOMAIN)) == 30
|
||||
await enable_all_entities(
|
||||
hass, config_entry.entry_id, FroniusMeterUpdateCoordinator.default_interval
|
||||
)
|
||||
assert len(hass.states.async_all(domain_filter=SENSOR_DOMAIN)) == 41
|
||||
# logger
|
||||
assert_state("sensor.cash_factor_fronius_logger_info_0_http_fronius", 1)
|
||||
assert_state("sensor.co2_factor_fronius_logger_info_0_http_fronius", 0.53)
|
||||
assert_state("sensor.delivery_factor_fronius_logger_info_0_http_fronius", 1)
|
||||
# inverter 1
|
||||
assert_state("sensor.energy_total_fronius_inverter_1_http_fronius", 17114940)
|
||||
assert_state("sensor.energy_day_fronius_inverter_1_http_fronius", 22504)
|
||||
assert_state("sensor.voltage_dc_fronius_inverter_1_http_fronius", 452.3)
|
||||
assert_state("sensor.power_ac_fronius_inverter_1_http_fronius", 862)
|
||||
assert_state("sensor.error_code_fronius_inverter_1_http_fronius", 0)
|
||||
assert_state("sensor.current_dc_fronius_inverter_1_http_fronius", 4.23)
|
||||
assert_state("sensor.status_code_fronius_inverter_1_http_fronius", 7)
|
||||
assert_state("sensor.energy_year_fronius_inverter_1_http_fronius", 7532755.5)
|
||||
assert_state("sensor.current_ac_fronius_inverter_1_http_fronius", 3.85)
|
||||
assert_state("sensor.voltage_ac_fronius_inverter_1_http_fronius", 223.9)
|
||||
assert_state("sensor.frequency_ac_fronius_inverter_1_http_fronius", 60)
|
||||
assert_state("sensor.led_color_fronius_inverter_1_http_fronius", 2)
|
||||
assert_state("sensor.led_state_fronius_inverter_1_http_fronius", 0)
|
||||
# inverter 2
|
||||
assert_state("sensor.energy_total_fronius_inverter_2_http_fronius", 5796010)
|
||||
assert_state("sensor.energy_day_fronius_inverter_2_http_fronius", 14237)
|
||||
assert_state("sensor.voltage_dc_fronius_inverter_2_http_fronius", 329.5)
|
||||
assert_state("sensor.power_ac_fronius_inverter_2_http_fronius", 296)
|
||||
assert_state("sensor.error_code_fronius_inverter_2_http_fronius", 0)
|
||||
assert_state("sensor.current_dc_fronius_inverter_2_http_fronius", 0.97)
|
||||
assert_state("sensor.status_code_fronius_inverter_2_http_fronius", 7)
|
||||
assert_state("sensor.energy_year_fronius_inverter_2_http_fronius", 3596193.25)
|
||||
assert_state("sensor.current_ac_fronius_inverter_2_http_fronius", 1.32)
|
||||
assert_state("sensor.voltage_ac_fronius_inverter_2_http_fronius", 223.6)
|
||||
assert_state("sensor.frequency_ac_fronius_inverter_2_http_fronius", 60.01)
|
||||
assert_state("sensor.led_color_fronius_inverter_2_http_fronius", 2)
|
||||
assert_state("sensor.led_state_fronius_inverter_2_http_fronius", 0)
|
||||
# meter
|
||||
assert_state("sensor.meter_location_fronius_meter_0_http_fronius", 1)
|
||||
assert_state("sensor.power_real_fronius_meter_0_http_fronius", -2216.7487)
|
||||
# power_flow
|
||||
assert_state("sensor.power_load_fronius_power_flow_0_http_fronius", -2218.9349)
|
||||
assert_state(
|
||||
"sensor.power_battery_fronius_power_flow_0_http_fronius", STATE_UNKNOWN
|
||||
)
|
||||
assert_state("sensor.meter_mode_fronius_power_flow_0_http_fronius", "vague-meter")
|
||||
assert_state("sensor.power_photovoltaics_fronius_power_flow_0_http_fronius", 1834)
|
||||
assert_state("sensor.power_grid_fronius_power_flow_0_http_fronius", 384.9349)
|
||||
assert_state(
|
||||
"sensor.relative_self_consumption_fronius_power_flow_0_http_fronius", 100
|
||||
)
|
||||
assert_state("sensor.relative_autonomy_fronius_power_flow_0_http_fronius", 82.6523)
|
||||
assert_state("sensor.energy_total_fronius_power_flow_0_http_fronius", 22910919.5)
|
||||
assert_state("sensor.energy_day_fronius_power_flow_0_http_fronius", 36724)
|
||||
assert_state("sensor.energy_year_fronius_power_flow_0_http_fronius", 11128933.25)
|
||||
|
||||
# Devices
|
||||
device_registry = dr.async_get(hass)
|
||||
|
||||
solar_net = device_registry.async_get_device(
|
||||
identifiers={(DOMAIN, "solar_net_123.4567890")}
|
||||
)
|
||||
assert solar_net.configuration_url == "http://fronius"
|
||||
assert solar_net.manufacturer == "Fronius"
|
||||
assert solar_net.model == "fronius-datamanager-card"
|
||||
assert solar_net.name == "SolarNet"
|
||||
assert solar_net.sw_version == "3.18.7-1"
|
||||
|
||||
inverter_1 = device_registry.async_get_device(identifiers={(DOMAIN, "123456")})
|
||||
assert inverter_1.manufacturer == "Fronius"
|
||||
assert inverter_1.model == "Primo 5.0-1"
|
||||
assert inverter_1.name == "Primo 5.0-1"
|
||||
|
||||
inverter_2 = device_registry.async_get_device(identifiers={(DOMAIN, "234567")})
|
||||
assert inverter_2.manufacturer == "Fronius"
|
||||
assert inverter_2.model == "Primo 3.0-1"
|
||||
assert inverter_2.name == "Primo 3.0-1"
|
||||
|
||||
meter = device_registry.async_get_device(
|
||||
identifiers={(DOMAIN, "solar_net_123.4567890:S0 Meter at inverter 1")}
|
||||
)
|
||||
assert meter.manufacturer == "Fronius"
|
||||
assert meter.model == "S0 Meter at inverter 1"
|
||||
assert meter.name == "S0 Meter at inverter 1"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue