Add models to energy sites in Teslemetry (#117419)

* Add models to energy sites and test devices

* Fix device testing

* Revert VIN

* Fix snapshot

* Fix snapshot

* fix snap

* Sort list
This commit is contained in:
Brett Adams 2024-05-24 17:18:22 +10:00 committed by GitHub
parent cb59eb183d
commit 96d9342f13
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 225 additions and 2 deletions

View File

@ -122,6 +122,18 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
),
)
# Add energy device models
for energysite in energysites:
models = set()
for gateway in energysite.info_coordinator.data.get("components_gateways", []):
if gateway.get("part_name"):
models.add(gateway["part_name"])
for battery in energysite.info_coordinator.data.get("components_batteries", []):
if battery.get("part_name"):
models.add(battery["part_name"])
if models:
energysite.device["model"] = ", ".join(sorted(models))
# Setup Platforms
entry.runtime_data = TeslemetryData(vehicles, energysites, scopes)
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)

View File

@ -41,6 +41,44 @@
"battery_type": "ac_powerwall",
"configurable": true,
"grid_services_enabled": false,
"gateways": [
{
"device_id": "gateway-id",
"din": "gateway-din",
"serial_number": "CN00000000J50D",
"part_number": "1152100-14-J",
"part_type": 10,
"part_name": "Tesla Backup Gateway 2",
"is_active": true,
"site_id": "1234-abcd",
"firmware_version": "24.4.0 0fe780c9",
"updated_datetime": "2024-05-14T00:00:00.000Z"
}
],
"batteries": [
{
"device_id": "battery-1-id",
"din": "battery-1-din",
"serial_number": "TG000000001DA5",
"part_number": "3012170-10-B",
"part_type": 2,
"part_name": "Powerwall 2",
"nameplate_max_charge_power": 5000,
"nameplate_max_discharge_power": 5000,
"nameplate_energy": 13500
},
{
"device_id": "battery-2-id",
"din": "battery-2-din",
"serial_number": "TG000000002DA5",
"part_number": "3012170-05-C",
"part_type": 2,
"part_name": "Powerwall 2",
"nameplate_max_charge_power": 5000,
"nameplate_max_discharge_power": 5000,
"nameplate_energy": 13500
}
],
"wall_connectors": [
{
"device_id": "123abc",
@ -59,7 +97,7 @@
"system_alerts_enabled": true
},
"version": "23.44.0 eb113390",
"battery_count": 3,
"battery_count": 2,
"tou_settings": {
"optimization_strategy": "economics",
"schedule": [

View File

@ -5,9 +5,33 @@
dict({
'info': dict({
'backup_reserve_percent': 0,
'battery_count': 3,
'battery_count': 2,
'components_backup': True,
'components_backup_time_remaining_enabled': True,
'components_batteries': list([
dict({
'device_id': 'battery-1-id',
'din': 'battery-1-din',
'nameplate_energy': 13500,
'nameplate_max_charge_power': 5000,
'nameplate_max_discharge_power': 5000,
'part_name': 'Powerwall 2',
'part_number': '3012170-10-B',
'part_type': 2,
'serial_number': 'TG000000001DA5',
}),
dict({
'device_id': 'battery-2-id',
'din': 'battery-2-din',
'nameplate_energy': 13500,
'nameplate_max_charge_power': 5000,
'nameplate_max_discharge_power': 5000,
'part_name': 'Powerwall 2',
'part_number': '3012170-05-C',
'part_type': 2,
'serial_number': 'TG000000002DA5',
}),
]),
'components_battery': True,
'components_battery_solar_offset_view_enabled': True,
'components_battery_type': 'ac_powerwall',
@ -20,6 +44,20 @@
'components_energy_value_subheader': 'Estimated Value',
'components_flex_energy_request_capable': False,
'components_gateway': 'teg',
'components_gateways': list([
dict({
'device_id': 'gateway-id',
'din': 'gateway-din',
'firmware_version': '24.4.0 0fe780c9',
'is_active': True,
'part_name': 'Tesla Backup Gateway 2',
'part_number': '1152100-14-J',
'part_type': 10,
'serial_number': 'CN00000000J50D',
'site_id': '1234-abcd',
'updated_datetime': '2024-05-14T00:00:00.000Z',
}),
]),
'components_grid': True,
'components_grid_services_enabled': False,
'components_load_meter': True,

View File

@ -0,0 +1,121 @@
# serializer version: 1
# name: test_devices[{('teslemetry', '123456')}]
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'configuration_url': 'https://teslemetry.com/console',
'connections': set({
}),
'disabled_by': None,
'entry_type': None,
'hw_version': None,
'id': <ANY>,
'identifiers': set({
tuple(
'teslemetry',
'123456',
),
}),
'is_new': False,
'labels': set({
}),
'manufacturer': 'Tesla',
'model': 'Powerwall 2, Tesla Backup Gateway 2',
'name': 'Energy Site',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': None,
'via_device_id': None,
})
# ---
# name: test_devices[{('teslemetry', 'VINVINVIN')}]
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'configuration_url': 'https://teslemetry.com/console',
'connections': set({
}),
'disabled_by': None,
'entry_type': None,
'hw_version': None,
'id': <ANY>,
'identifiers': set({
tuple(
'teslemetry',
'VINVINVIN',
),
}),
'is_new': False,
'labels': set({
}),
'manufacturer': 'Tesla',
'model': None,
'name': 'Test',
'name_by_user': None,
'serial_number': 'VINVINVIN',
'suggested_area': None,
'sw_version': None,
'via_device_id': None,
})
# ---
# name: test_devices[{('teslemetry', 'abd-123')}]
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'configuration_url': 'https://teslemetry.com/console',
'connections': set({
}),
'disabled_by': None,
'entry_type': None,
'hw_version': None,
'id': <ANY>,
'identifiers': set({
tuple(
'teslemetry',
'abd-123',
),
}),
'is_new': False,
'labels': set({
}),
'manufacturer': 'Tesla',
'model': None,
'name': 'Wall Connector',
'name_by_user': None,
'serial_number': '123',
'suggested_area': None,
'sw_version': None,
'via_device_id': <ANY>,
})
# ---
# name: test_devices[{('teslemetry', 'bcd-234')}]
DeviceRegistryEntrySnapshot({
'area_id': None,
'config_entries': <ANY>,
'configuration_url': 'https://teslemetry.com/console',
'connections': set({
}),
'disabled_by': None,
'entry_type': None,
'hw_version': None,
'id': <ANY>,
'identifiers': set({
tuple(
'teslemetry',
'bcd-234',
),
}),
'is_new': False,
'labels': set({
}),
'manufacturer': 'Tesla',
'model': None,
'name': 'Wall Connector',
'name_by_user': None,
'serial_number': '234',
'suggested_area': None,
'sw_version': None,
'via_device_id': <ANY>,
})
# ---

View File

@ -2,6 +2,7 @@
from freezegun.api import FrozenDateTimeFactory
import pytest
from syrupy import SnapshotAssertion
from tesla_fleet_api.exceptions import (
InvalidToken,
SubscriptionRequired,
@ -14,6 +15,7 @@ from homeassistant.components.teslemetry.models import TeslemetryData
from homeassistant.config_entries import ConfigEntryState
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr
from . import setup_platform
@ -49,6 +51,18 @@ async def test_init_error(
assert entry.state is state
# Test devices
async def test_devices(
hass: HomeAssistant, device_registry: dr.DeviceRegistry, snapshot: SnapshotAssertion
) -> None:
"""Test device registry."""
entry = await setup_platform(hass)
devices = dr.async_entries_for_config_entry(device_registry, entry.entry_id)
for device in devices:
assert device == snapshot(name=f"{device.identifiers}")
# Vehicle Coordinator
async def test_vehicle_refresh_offline(
hass: HomeAssistant, mock_vehicle_data, freezer: FrozenDateTimeFactory