Bump subarulink to 0.7.5 (#89162)

This commit is contained in:
Garrett 2023-03-04 16:26:16 -05:00 committed by GitHub
parent 5e2b7c6377
commit 34f8e94ca9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 71 additions and 35 deletions

View File

@ -66,7 +66,8 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
vehicle_info = {}
for vin in controller.get_vehicles():
vehicle_info[vin] = get_vehicle_info(controller, vin)
if controller.get_subscription_status(vin):
vehicle_info[vin] = get_vehicle_info(controller, vin)
async def async_update_data():
"""Fetch data from API endpoint."""
@ -116,10 +117,6 @@ async def refresh_subaru_data(config_entry, vehicle_info, controller):
for vehicle in vehicle_info.values():
vin = vehicle[VEHICLE_VIN]
# Active subscription required
if not vehicle[VEHICLE_HAS_SAFETY_SERVICE]:
continue
# Optionally send an "update" remote command to vehicle (throttled with update_interval)
if config_entry.options.get(CONF_UPDATE_ENABLED, False):
await update_subaru(vehicle, controller)

View File

@ -28,11 +28,12 @@ VEHICLE_HAS_REMOTE_START = "has_res"
VEHICLE_HAS_REMOTE_SERVICE = "has_remote"
VEHICLE_HAS_SAFETY_SERVICE = "has_safety"
VEHICLE_LAST_UPDATE = "last_update"
VEHICLE_STATUS = "status"
VEHICLE_STATUS = "vehicle_status"
API_GEN_1 = "g1"
API_GEN_2 = "g2"
API_GEN_3 = "g3"
MANUFACTURER = "Subaru"
PLATFORMS = [

View File

@ -6,5 +6,5 @@
"documentation": "https://www.home-assistant.io/integrations/subaru",
"iot_class": "cloud_polling",
"loggers": ["stdiomask", "subarulink"],
"requirements": ["subarulink==0.7.0"]
"requirements": ["subarulink==0.7.5"]
}

View File

@ -31,12 +31,12 @@ from homeassistant.util.unit_system import (
from . import get_device_info
from .const import (
API_GEN_2,
API_GEN_3,
DOMAIN,
ENTRY_COORDINATOR,
ENTRY_VEHICLES,
VEHICLE_API_GEN,
VEHICLE_HAS_EV,
VEHICLE_HAS_SAFETY_SERVICE,
VEHICLE_STATUS,
VEHICLE_VIN,
)
@ -51,7 +51,7 @@ FUEL_CONSUMPTION_MILES_PER_GALLON = "mi/gal"
L_PER_GAL = VolumeConverter.convert(1, UnitOfVolume.GALLONS, UnitOfVolume.LITERS)
KM_PER_MI = DistanceConverter.convert(1, UnitOfLength.MILES, UnitOfLength.KILOMETERS)
# Sensor available to "Subaru Safety Plus" subscribers with Gen1 or Gen2 vehicles
# Sensor available for Gen1 or Gen2 vehicles
SAFETY_SENSORS = [
SensorEntityDescription(
key=sc.ODOMETER,
@ -63,7 +63,7 @@ SAFETY_SENSORS = [
),
]
# Sensors available to "Subaru Safety Plus" subscribers with Gen2 vehicles
# Sensors available to subscribers with Gen2/Gen3 vehicles
API_GEN_2_SENSORS = [
SensorEntityDescription(
key=sc.AVG_FUEL_CONSUMPTION,
@ -110,7 +110,18 @@ API_GEN_2_SENSORS = [
),
]
# Sensors available to "Subaru Safety Plus" subscribers with PHEV vehicles
# Sensors available for Gen3 vehicles
API_GEN_3_SENSORS = [
SensorEntityDescription(
key=sc.REMAINING_FUEL_PERCENT,
icon="mdi:gas-station",
name="Fuel level",
native_unit_of_measurement=PERCENTAGE,
state_class=SensorStateClass.MEASUREMENT,
),
]
# Sensors available to subscribers with PHEV vehicles
EV_SENSORS = [
SensorEntityDescription(
key=sc.EV_DISTANCE_TO_EMPTY,
@ -156,14 +167,16 @@ def create_vehicle_sensors(
) -> list[SubaruSensor]:
"""Instantiate all available sensors for the vehicle."""
sensor_descriptions_to_add = []
if vehicle_info[VEHICLE_HAS_SAFETY_SERVICE]:
sensor_descriptions_to_add.extend(SAFETY_SENSORS)
sensor_descriptions_to_add.extend(SAFETY_SENSORS)
if vehicle_info[VEHICLE_API_GEN] == API_GEN_2:
sensor_descriptions_to_add.extend(API_GEN_2_SENSORS)
if vehicle_info[VEHICLE_API_GEN] in [API_GEN_2, API_GEN_3]:
sensor_descriptions_to_add.extend(API_GEN_2_SENSORS)
if vehicle_info[VEHICLE_HAS_EV]:
sensor_descriptions_to_add.extend(EV_SENSORS)
if vehicle_info[VEHICLE_API_GEN] == API_GEN_3:
sensor_descriptions_to_add.extend(API_GEN_3_SENSORS)
if vehicle_info[VEHICLE_HAS_EV]:
sensor_descriptions_to_add.extend(EV_SENSORS)
return [
SubaruSensor(

View File

@ -2434,7 +2434,7 @@ streamlabswater==1.0.1
stringcase==1.2.0
# homeassistant.components.subaru
subarulink==0.7.0
subarulink==0.7.5
# homeassistant.components.solarlog
sunwatcher==0.2.1

View File

@ -1734,7 +1734,7 @@ stookwijzer==1.3.0
stringcase==1.2.0
# homeassistant.components.subaru
subarulink==0.7.0
subarulink==0.7.5
# homeassistant.components.solarlog
sunwatcher==0.2.1

View File

@ -5,22 +5,28 @@ from datetime import datetime, timezone
from homeassistant.components.subaru.const import (
API_GEN_1,
API_GEN_2,
API_GEN_3,
VEHICLE_API_GEN,
VEHICLE_HAS_EV,
VEHICLE_HAS_REMOTE_SERVICE,
VEHICLE_HAS_REMOTE_START,
VEHICLE_HAS_SAFETY_SERVICE,
VEHICLE_MODEL_NAME,
VEHICLE_MODEL_YEAR,
VEHICLE_NAME,
VEHICLE_STATUS,
VEHICLE_VIN,
)
TEST_VIN_1_G1 = "JF2ABCDE6L0000001"
TEST_VIN_2_EV = "JF2ABCDE6L0000002"
TEST_VIN_3_G2 = "JF2ABCDE6L0000003"
TEST_VIN_3_G3 = "JF2ABCDE6L0000003"
VEHICLE_DATA = {
TEST_VIN_1_G1: {
VEHICLE_VIN: TEST_VIN_1_G1,
VEHICLE_MODEL_YEAR: "2017",
VEHICLE_MODEL_NAME: "Outback",
VEHICLE_NAME: "test_vehicle_1",
VEHICLE_HAS_EV: False,
VEHICLE_API_GEN: API_GEN_1,
@ -30,6 +36,8 @@ VEHICLE_DATA = {
},
TEST_VIN_2_EV: {
VEHICLE_VIN: TEST_VIN_2_EV,
VEHICLE_MODEL_YEAR: "2019",
VEHICLE_MODEL_NAME: "Crosstrek",
VEHICLE_NAME: "test_vehicle_2",
VEHICLE_HAS_EV: True,
VEHICLE_API_GEN: API_GEN_2,
@ -37,11 +45,13 @@ VEHICLE_DATA = {
VEHICLE_HAS_REMOTE_SERVICE: True,
VEHICLE_HAS_SAFETY_SERVICE: True,
},
TEST_VIN_3_G2: {
VEHICLE_VIN: TEST_VIN_3_G2,
TEST_VIN_3_G3: {
VEHICLE_VIN: TEST_VIN_3_G3,
VEHICLE_MODEL_YEAR: "2022",
VEHICLE_MODEL_NAME: "Ascent",
VEHICLE_NAME: "test_vehicle_3",
VEHICLE_HAS_EV: False,
VEHICLE_API_GEN: API_GEN_2,
VEHICLE_API_GEN: API_GEN_3,
VEHICLE_HAS_REMOTE_START: True,
VEHICLE_HAS_REMOTE_SERVICE: True,
VEHICLE_HAS_SAFETY_SERVICE: True,
@ -51,7 +61,7 @@ VEHICLE_DATA = {
MOCK_DATETIME = datetime.fromtimestamp(1595560000, timezone.utc)
VEHICLE_STATUS_EV = {
"status": {
VEHICLE_STATUS: {
"AVG_FUEL_CONSUMPTION": 2.3,
"DISTANCE_TO_EMPTY_FUEL": 707,
"DOOR_BOOT_LOCK_STATUS": "UNKNOWN",
@ -120,8 +130,8 @@ VEHICLE_STATUS_EV = {
}
VEHICLE_STATUS_G2 = {
"status": {
VEHICLE_STATUS_G3 = {
VEHICLE_STATUS: {
"AVG_FUEL_CONSUMPTION": 2.3,
"DISTANCE_TO_EMPTY_FUEL": 707,
"DOOR_BOOT_LOCK_STATUS": "UNKNOWN",
@ -136,6 +146,7 @@ VEHICLE_STATUS_G2 = {
"DOOR_REAR_LEFT_POSITION": "CLOSED",
"DOOR_REAR_RIGHT_LOCK_STATUS": "UNKNOWN",
"DOOR_REAR_RIGHT_POSITION": "CLOSED",
"REMAINING_FUEL_PERCENT": 77,
"ODOMETER": 1234,
"POSITION_HEADING_DEGREE": 150,
"POSITION_SPEED_KMPH": "0",

View File

@ -17,6 +17,8 @@ from homeassistant.components.subaru.const import (
VEHICLE_HAS_REMOTE_SERVICE,
VEHICLE_HAS_REMOTE_START,
VEHICLE_HAS_SAFETY_SERVICE,
VEHICLE_MODEL_NAME,
VEHICLE_MODEL_YEAR,
VEHICLE_NAME,
)
from homeassistant.config_entries import ConfigEntryState
@ -40,10 +42,13 @@ MOCK_API_UPDATE_SAVED_PIN = f"{MOCK_API}update_saved_pin"
MOCK_API_GET_VEHICLES = f"{MOCK_API}get_vehicles"
MOCK_API_VIN_TO_NAME = f"{MOCK_API}vin_to_name"
MOCK_API_GET_API_GEN = f"{MOCK_API}get_api_gen"
MOCK_API_GET_MODEL_NAME = f"{MOCK_API}get_model_name"
MOCK_API_GET_MODEL_YEAR = f"{MOCK_API}get_model_year"
MOCK_API_GET_EV_STATUS = f"{MOCK_API}get_ev_status"
MOCK_API_GET_RES_STATUS = f"{MOCK_API}get_res_status"
MOCK_API_GET_REMOTE_STATUS = f"{MOCK_API}get_remote_status"
MOCK_API_GET_SAFETY_STATUS = f"{MOCK_API}get_safety_status"
MOCK_API_GET_SUBSCRIPTION_STATUS = f"{MOCK_API}get_subscription_status"
MOCK_API_GET_DATA = f"{MOCK_API}get_data"
MOCK_API_UPDATE = f"{MOCK_API}update"
MOCK_API_FETCH = f"{MOCK_API}fetch"
@ -114,6 +119,12 @@ async def setup_subaru_config_entry(
), patch(
MOCK_API_GET_API_GEN,
return_value=vehicle_data[VEHICLE_API_GEN],
), patch(
MOCK_API_GET_MODEL_NAME,
return_value=vehicle_data[VEHICLE_MODEL_NAME],
), patch(
MOCK_API_GET_MODEL_YEAR,
return_value=vehicle_data[VEHICLE_MODEL_YEAR],
), patch(
MOCK_API_GET_EV_STATUS,
return_value=vehicle_data[VEHICLE_HAS_EV],
@ -126,6 +137,9 @@ async def setup_subaru_config_entry(
), patch(
MOCK_API_GET_SAFETY_STATUS,
return_value=vehicle_data[VEHICLE_HAS_SAFETY_SERVICE],
), patch(
MOCK_API_GET_SUBSCRIPTION_STATUS,
return_value=True,
), patch(
MOCK_API_GET_DATA,
return_value=vehicle_status,

View File

@ -11,7 +11,7 @@
},
"data": [
{
"status": {
"vehicle_status": {
"AVG_FUEL_CONSUMPTION": 2.3,
"DISTANCE_TO_EMPTY_FUEL": 707,
"DOOR_BOOT_LOCK_STATUS": "UNKNOWN",

View File

@ -10,7 +10,7 @@
"update_enabled": true
},
"data": {
"status": {
"vehicle_status": {
"AVG_FUEL_CONSUMPTION": 2.3,
"DISTANCE_TO_EMPTY_FUEL": 707,
"DOOR_BOOT_LOCK_STATUS": "UNKNOWN",

View File

@ -16,10 +16,10 @@ from homeassistant.setup import async_setup_component
from .api_responses import (
TEST_VIN_1_G1,
TEST_VIN_2_EV,
TEST_VIN_3_G2,
TEST_VIN_3_G3,
VEHICLE_DATA,
VEHICLE_STATUS_EV,
VEHICLE_STATUS_G2,
VEHICLE_STATUS_G3,
)
from .conftest import (
MOCK_API_FETCH,
@ -43,14 +43,14 @@ async def test_setup_ev(hass: HomeAssistant, ev_entry) -> None:
assert check_entry.state is ConfigEntryState.LOADED
async def test_setup_g2(hass: HomeAssistant, subaru_config_entry) -> None:
"""Test setup with a G2 vehcile ."""
async def test_setup_g3(hass: HomeAssistant, subaru_config_entry) -> None:
"""Test setup with a G3 vehicle ."""
await setup_subaru_config_entry(
hass,
subaru_config_entry,
vehicle_list=[TEST_VIN_3_G2],
vehicle_data=VEHICLE_DATA[TEST_VIN_3_G2],
vehicle_status=VEHICLE_STATUS_G2,
vehicle_list=[TEST_VIN_3_G3],
vehicle_data=VEHICLE_DATA[TEST_VIN_3_G3],
vehicle_status=VEHICLE_STATUS_G3,
)
check_entry = hass.config_entries.async_get_entry(subaru_config_entry.entry_id)
assert check_entry