Fix unique_id of S0 meters connected to Fronius inverters (#61408)

This commit is contained in:
Matthias Alphart 2021-12-10 00:35:20 +01:00 committed by GitHub
parent 58174eaa4e
commit 4f9d4872a7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 462 additions and 15 deletions

View file

@ -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"