mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 12:17:07 +00:00
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:
parent
cb59eb183d
commit
96d9342f13
@ -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)
|
||||
|
@ -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": [
|
||||
|
@ -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,
|
||||
|
121
tests/components/teslemetry/snapshots/test_init.ambr
Normal file
121
tests/components/teslemetry/snapshots/test_init.ambr
Normal 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>,
|
||||
})
|
||||
# ---
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user