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 = {} vehicle_info = {}
for vin in controller.get_vehicles(): 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(): async def async_update_data():
"""Fetch data from API endpoint.""" """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(): for vehicle in vehicle_info.values():
vin = vehicle[VEHICLE_VIN] 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) # Optionally send an "update" remote command to vehicle (throttled with update_interval)
if config_entry.options.get(CONF_UPDATE_ENABLED, False): if config_entry.options.get(CONF_UPDATE_ENABLED, False):
await update_subaru(vehicle, controller) 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_REMOTE_SERVICE = "has_remote"
VEHICLE_HAS_SAFETY_SERVICE = "has_safety" VEHICLE_HAS_SAFETY_SERVICE = "has_safety"
VEHICLE_LAST_UPDATE = "last_update" VEHICLE_LAST_UPDATE = "last_update"
VEHICLE_STATUS = "status" VEHICLE_STATUS = "vehicle_status"
API_GEN_1 = "g1" API_GEN_1 = "g1"
API_GEN_2 = "g2" API_GEN_2 = "g2"
API_GEN_3 = "g3"
MANUFACTURER = "Subaru" MANUFACTURER = "Subaru"
PLATFORMS = [ PLATFORMS = [

View File

@ -6,5 +6,5 @@
"documentation": "https://www.home-assistant.io/integrations/subaru", "documentation": "https://www.home-assistant.io/integrations/subaru",
"iot_class": "cloud_polling", "iot_class": "cloud_polling",
"loggers": ["stdiomask", "subarulink"], "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 . import get_device_info
from .const import ( from .const import (
API_GEN_2, API_GEN_2,
API_GEN_3,
DOMAIN, DOMAIN,
ENTRY_COORDINATOR, ENTRY_COORDINATOR,
ENTRY_VEHICLES, ENTRY_VEHICLES,
VEHICLE_API_GEN, VEHICLE_API_GEN,
VEHICLE_HAS_EV, VEHICLE_HAS_EV,
VEHICLE_HAS_SAFETY_SERVICE,
VEHICLE_STATUS, VEHICLE_STATUS,
VEHICLE_VIN, VEHICLE_VIN,
) )
@ -51,7 +51,7 @@ FUEL_CONSUMPTION_MILES_PER_GALLON = "mi/gal"
L_PER_GAL = VolumeConverter.convert(1, UnitOfVolume.GALLONS, UnitOfVolume.LITERS) L_PER_GAL = VolumeConverter.convert(1, UnitOfVolume.GALLONS, UnitOfVolume.LITERS)
KM_PER_MI = DistanceConverter.convert(1, UnitOfLength.MILES, UnitOfLength.KILOMETERS) 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 = [ SAFETY_SENSORS = [
SensorEntityDescription( SensorEntityDescription(
key=sc.ODOMETER, 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 = [ API_GEN_2_SENSORS = [
SensorEntityDescription( SensorEntityDescription(
key=sc.AVG_FUEL_CONSUMPTION, 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 = [ EV_SENSORS = [
SensorEntityDescription( SensorEntityDescription(
key=sc.EV_DISTANCE_TO_EMPTY, key=sc.EV_DISTANCE_TO_EMPTY,
@ -156,14 +167,16 @@ def create_vehicle_sensors(
) -> list[SubaruSensor]: ) -> list[SubaruSensor]:
"""Instantiate all available sensors for the vehicle.""" """Instantiate all available sensors for the vehicle."""
sensor_descriptions_to_add = [] 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: if vehicle_info[VEHICLE_API_GEN] in [API_GEN_2, API_GEN_3]:
sensor_descriptions_to_add.extend(API_GEN_2_SENSORS) sensor_descriptions_to_add.extend(API_GEN_2_SENSORS)
if vehicle_info[VEHICLE_HAS_EV]: if vehicle_info[VEHICLE_API_GEN] == API_GEN_3:
sensor_descriptions_to_add.extend(EV_SENSORS) sensor_descriptions_to_add.extend(API_GEN_3_SENSORS)
if vehicle_info[VEHICLE_HAS_EV]:
sensor_descriptions_to_add.extend(EV_SENSORS)
return [ return [
SubaruSensor( SubaruSensor(

View File

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

View File

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

View File

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

View File

@ -17,6 +17,8 @@ from homeassistant.components.subaru.const import (
VEHICLE_HAS_REMOTE_SERVICE, VEHICLE_HAS_REMOTE_SERVICE,
VEHICLE_HAS_REMOTE_START, VEHICLE_HAS_REMOTE_START,
VEHICLE_HAS_SAFETY_SERVICE, VEHICLE_HAS_SAFETY_SERVICE,
VEHICLE_MODEL_NAME,
VEHICLE_MODEL_YEAR,
VEHICLE_NAME, VEHICLE_NAME,
) )
from homeassistant.config_entries import ConfigEntryState 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_GET_VEHICLES = f"{MOCK_API}get_vehicles"
MOCK_API_VIN_TO_NAME = f"{MOCK_API}vin_to_name" 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_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_EV_STATUS = f"{MOCK_API}get_ev_status"
MOCK_API_GET_RES_STATUS = f"{MOCK_API}get_res_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_REMOTE_STATUS = f"{MOCK_API}get_remote_status"
MOCK_API_GET_SAFETY_STATUS = f"{MOCK_API}get_safety_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_GET_DATA = f"{MOCK_API}get_data"
MOCK_API_UPDATE = f"{MOCK_API}update" MOCK_API_UPDATE = f"{MOCK_API}update"
MOCK_API_FETCH = f"{MOCK_API}fetch" MOCK_API_FETCH = f"{MOCK_API}fetch"
@ -114,6 +119,12 @@ async def setup_subaru_config_entry(
), patch( ), patch(
MOCK_API_GET_API_GEN, MOCK_API_GET_API_GEN,
return_value=vehicle_data[VEHICLE_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( ), patch(
MOCK_API_GET_EV_STATUS, MOCK_API_GET_EV_STATUS,
return_value=vehicle_data[VEHICLE_HAS_EV], return_value=vehicle_data[VEHICLE_HAS_EV],
@ -126,6 +137,9 @@ async def setup_subaru_config_entry(
), patch( ), patch(
MOCK_API_GET_SAFETY_STATUS, MOCK_API_GET_SAFETY_STATUS,
return_value=vehicle_data[VEHICLE_HAS_SAFETY_SERVICE], return_value=vehicle_data[VEHICLE_HAS_SAFETY_SERVICE],
), patch(
MOCK_API_GET_SUBSCRIPTION_STATUS,
return_value=True,
), patch( ), patch(
MOCK_API_GET_DATA, MOCK_API_GET_DATA,
return_value=vehicle_status, return_value=vehicle_status,

View File

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

View File

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

View File

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