@thecloudseeker/homebridge-skoda 0.1.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/README.md +42 -26
- package/config.schema.json +148 -69
- package/dist/accessory/services/battery.d.ts +21 -0
- package/dist/accessory/services/battery.js +38 -1
- package/dist/accessory/services/battery.js.map +1 -1
- package/dist/accessory/services/body.d.ts +5 -6
- package/dist/accessory/services/body.js +45 -8
- package/dist/accessory/services/body.js.map +1 -1
- package/dist/accessory/services/charging.js +31 -13
- package/dist/accessory/services/charging.js.map +1 -1
- package/dist/accessory/services/climate.js +51 -23
- package/dist/accessory/services/climate.js.map +1 -1
- package/dist/accessory/services/common.d.ts +10 -5
- package/dist/accessory/services/common.js +17 -8
- package/dist/accessory/services/common.js.map +1 -1
- package/dist/accessory/vehicleAccessory.d.ts +11 -2
- package/dist/accessory/vehicleAccessory.js +54 -5
- package/dist/accessory/vehicleAccessory.js.map +1 -1
- package/dist/api/client.d.ts +2 -2
- package/dist/api/client.js +8 -6
- package/dist/api/client.js.map +1 -1
- package/dist/api/rateBudget.d.ts +3 -3
- package/dist/api/rateBudget.js +1 -1
- package/dist/config.d.ts +10 -4
- package/dist/config.js +24 -8
- package/dist/config.js.map +1 -1
- package/dist/platform.js +19 -25
- package/dist/platform.js.map +1 -1
- package/dist/vehicle/mapping.d.ts +12 -0
- package/dist/vehicle/mapping.js +42 -0
- package/dist/vehicle/mapping.js.map +1 -1
- package/dist/vehicle/snapshot.js +47 -0
- package/dist/vehicle/snapshot.js.map +1 -1
- package/dist/vehicle/vehicleController.d.ts +30 -10
- package/dist/vehicle/vehicleController.js +92 -30
- package/dist/vehicle/vehicleController.js.map +1 -1
- package/package.json +1 -1
package/dist/api/client.js
CHANGED
|
@@ -17,9 +17,9 @@ export class SkodaApiClient {
|
|
|
17
17
|
this.fetchImpl = options.fetch ?? fetch;
|
|
18
18
|
}
|
|
19
19
|
/** `GET /api/v1/vehicles/{vin}` with an explicit `include`, so unsupported parts are reported as errors. */
|
|
20
|
-
async getVehicle(
|
|
20
|
+
async getVehicle(parts = VEHICLE_PARTS) {
|
|
21
21
|
const query = `?include=${parts.map(encodeURIComponent).join(",")}`;
|
|
22
|
-
const response = await this.request("GET", "",
|
|
22
|
+
const response = await this.request("GET", "", "poll", undefined, query);
|
|
23
23
|
return (await response.json());
|
|
24
24
|
}
|
|
25
25
|
startCharging() {
|
|
@@ -95,14 +95,16 @@ export class SkodaApiClient {
|
|
|
95
95
|
return response;
|
|
96
96
|
}
|
|
97
97
|
const retryAfterSeconds = parseRetryAfter(response.headers.get("Retry-After"));
|
|
98
|
+
const problem = await readProblem(response);
|
|
99
|
+
const problemType = parseProblemType(problem?.type);
|
|
98
100
|
if (response.status === 401 ||
|
|
99
101
|
response.status === 403 ||
|
|
100
|
-
response.status === 429
|
|
101
|
-
|
|
102
|
+
(response.status === 429 &&
|
|
103
|
+
problemType !== "vehicle-not-accepting-requests")) {
|
|
104
|
+
// Documented: 401 and 403 do not consume quota, and a rejected 429 does not prolong the
|
|
105
|
+
// window. Every other response counts, including one the vehicle declined.
|
|
102
106
|
budget.refund();
|
|
103
107
|
}
|
|
104
|
-
const problem = await readProblem(response);
|
|
105
|
-
const problemType = parseProblemType(problem?.type);
|
|
106
108
|
if (response.status === 429 &&
|
|
107
109
|
problemType !== "vehicle-not-accepting-requests") {
|
|
108
110
|
budget.blockUntil(Date.now() + (retryAfterSeconds ?? 60) * 1000);
|
package/dist/api/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAMrB,OAAO,EACL,aAAa,GAMd,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,MAAM,gBAAgB,GAAG,0CAA0C,CAAC;AAC3E,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAelC;;;;GAIG;AACH,MAAM,OAAO,cAAc;IAII;IAHZ,OAAO,CAAS;IAChB,SAAS,CAAe;IAEzC,YAA6B,OAA8B;QAA9B,YAAO,GAAP,OAAO,CAAuB;QACzD,IAAI,CAAC,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;IAC1C,CAAC;IAED,4GAA4G;IAC5G,KAAK,CAAC,UAAU,CACd,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
|
package/dist/api/rateBudget.d.ts
CHANGED
|
@@ -7,13 +7,13 @@
|
|
|
7
7
|
*
|
|
8
8
|
* The budget keeps its own sliding window of sent requests and additionally trusts what the server
|
|
9
9
|
* reports. It always uses the stricter of both. Regular polls must leave `reserve` slots free so
|
|
10
|
-
* commands
|
|
10
|
+
* commands still go through.
|
|
11
11
|
*/
|
|
12
12
|
export declare const DEFAULT_RATE_LIMIT = 20;
|
|
13
13
|
export declare const DEFAULT_COMMAND_RESERVE = 4;
|
|
14
14
|
export declare const RATE_WINDOW_MS: number;
|
|
15
|
-
/** `poll` must respect the command reserve; `command`
|
|
16
|
-
export type RequestKind = "poll" | "
|
|
15
|
+
/** `poll` must respect the command reserve; `command` may use it. */
|
|
16
|
+
export type RequestKind = "poll" | "command";
|
|
17
17
|
export interface RateLimitHeaders {
|
|
18
18
|
limit?: number;
|
|
19
19
|
remaining?: number;
|
package/dist/api/rateBudget.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* The budget keeps its own sliding window of sent requests and additionally trusts what the server
|
|
9
9
|
* reports. It always uses the stricter of both. Regular polls must leave `reserve` slots free so
|
|
10
|
-
* commands
|
|
10
|
+
* commands still go through.
|
|
11
11
|
*/
|
|
12
12
|
export const DEFAULT_RATE_LIMIT = 20;
|
|
13
13
|
export const DEFAULT_COMMAND_RESERVE = 4;
|
package/dist/config.d.ts
CHANGED
|
@@ -3,6 +3,10 @@ export interface FeatureToggles {
|
|
|
3
3
|
battery: boolean;
|
|
4
4
|
/** Humidity sensor that mirrors the state of charge, for automations. */
|
|
5
5
|
stateOfChargeSensor: boolean;
|
|
6
|
+
/** Battery service with the fuel level, for combustion vehicles. */
|
|
7
|
+
fuelLevel: boolean;
|
|
8
|
+
/** Humidity sensor that mirrors the fuel level, for automations. */
|
|
9
|
+
fuelLevelSensor: boolean;
|
|
6
10
|
/** Outlet to start and stop charging. */
|
|
7
11
|
charging: boolean;
|
|
8
12
|
/** Lightbulb whose brightness sets the charging limit. */
|
|
@@ -22,6 +26,12 @@ export interface FeatureToggles {
|
|
|
22
26
|
sunroof: boolean;
|
|
23
27
|
/** Contact sensor that is closed while the vehicle is locked. */
|
|
24
28
|
lock: boolean;
|
|
29
|
+
/** Contact sensor that is open while the lights are on. */
|
|
30
|
+
lights: boolean;
|
|
31
|
+
/** Contact sensor that is open while the front or rear window heating is on. */
|
|
32
|
+
windowHeating: boolean;
|
|
33
|
+
/** Contact sensor that is closed while the charging cable is locked. */
|
|
34
|
+
plugLock: boolean;
|
|
25
35
|
}
|
|
26
36
|
export declare const DEFAULT_FEATURES: Readonly<FeatureToggles>;
|
|
27
37
|
export interface HomeLocation {
|
|
@@ -33,8 +43,6 @@ export interface VehicleSettings {
|
|
|
33
43
|
name: string;
|
|
34
44
|
vin: string;
|
|
35
45
|
token: string;
|
|
36
|
-
/** Separate key for commands; falls back to `token`. */
|
|
37
|
-
commandToken: string | undefined;
|
|
38
46
|
spin: string | undefined;
|
|
39
47
|
home: HomeLocation | undefined;
|
|
40
48
|
pollingIntervalMinutes: number;
|
|
@@ -43,7 +51,6 @@ export interface VehicleSettings {
|
|
|
43
51
|
climateTemperature: number;
|
|
44
52
|
airConditioningWithoutExternalPower: boolean | undefined;
|
|
45
53
|
auxiliaryHeatingDurationMinutes: number | undefined;
|
|
46
|
-
commandRefreshDelaySeconds: number;
|
|
47
54
|
features: FeatureToggles;
|
|
48
55
|
}
|
|
49
56
|
export declare const DEFAULT_POLLING_INTERVAL_MINUTES = 5;
|
|
@@ -56,7 +63,6 @@ export declare const DEFAULT_CLIMATE_TEMPERATURE = 21;
|
|
|
56
63
|
export declare const CLIMATE_TEMPERATURE_MIN = 16;
|
|
57
64
|
export declare const CLIMATE_TEMPERATURE_MAX = 29.5;
|
|
58
65
|
export declare const CLIMATE_TEMPERATURE_STEP = 0.5;
|
|
59
|
-
export declare const DEFAULT_COMMAND_REFRESH_DELAY_SECONDS = 90;
|
|
60
66
|
export type ConfigResult = {
|
|
61
67
|
ok: true;
|
|
62
68
|
settings: VehicleSettings;
|
package/dist/config.js
CHANGED
|
@@ -3,6 +3,8 @@ import { maskVin } from "./util/redact.js";
|
|
|
3
3
|
export const DEFAULT_FEATURES = {
|
|
4
4
|
battery: true,
|
|
5
5
|
stateOfChargeSensor: false,
|
|
6
|
+
fuelLevel: true,
|
|
7
|
+
fuelLevelSensor: false,
|
|
6
8
|
charging: true,
|
|
7
9
|
chargingLimit: true,
|
|
8
10
|
climate: true,
|
|
@@ -15,6 +17,9 @@ export const DEFAULT_FEATURES = {
|
|
|
15
17
|
bonnet: true,
|
|
16
18
|
sunroof: true,
|
|
17
19
|
lock: true,
|
|
20
|
+
lights: false,
|
|
21
|
+
windowHeating: false,
|
|
22
|
+
plugLock: false,
|
|
18
23
|
};
|
|
19
24
|
export const DEFAULT_POLLING_INTERVAL_MINUTES = 5;
|
|
20
25
|
export const MIN_POLLING_INTERVAL_MINUTES = minimumPollingIntervalMinutes(DEFAULT_RATE_LIMIT, DEFAULT_COMMAND_RESERVE);
|
|
@@ -26,7 +31,9 @@ export const DEFAULT_CLIMATE_TEMPERATURE = 21;
|
|
|
26
31
|
export const CLIMATE_TEMPERATURE_MIN = 16;
|
|
27
32
|
export const CLIMATE_TEMPERATURE_MAX = 29.5;
|
|
28
33
|
export const CLIMATE_TEMPERATURE_STEP = 0.5;
|
|
29
|
-
|
|
34
|
+
/** Options of earlier versions that are ignored now: a second key brings no extra requests, and
|
|
35
|
+
* the expected state after a command makes an extra refresh unnecessary. */
|
|
36
|
+
const REMOVED_OPTIONS = ["commandToken", "commandRefreshDelaySeconds"];
|
|
30
37
|
const VIN_PATTERN = /^[A-HJ-NPR-Z0-9]{17}$/;
|
|
31
38
|
const isObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
32
39
|
function optionalString(value) {
|
|
@@ -91,8 +98,11 @@ export function parseVehicleConfig(raw, index) {
|
|
|
91
98
|
pollingIntervalMinutes = Math.min(pollingIntervalMinutes, MAX_POLLING_INTERVAL_MINUTES);
|
|
92
99
|
const climateTemperature = clampTemperature(optionalNumber(raw.climateTemperature) ?? DEFAULT_CLIMATE_TEMPERATURE);
|
|
93
100
|
const lowBatteryThreshold = clamp(optionalNumber(raw.lowBatteryThreshold) ?? DEFAULT_LOW_BATTERY_THRESHOLD, 0, 100);
|
|
94
|
-
const
|
|
95
|
-
|
|
101
|
+
for (const removed of REMOVED_OPTIONS) {
|
|
102
|
+
if (raw[removed] !== undefined) {
|
|
103
|
+
warnings.push(`${label}.${removed} is no longer used and can be removed from the config`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
96
106
|
const auxiliaryHeatingDuration = optionalNumber(raw.auxiliaryHeatingDurationMinutes);
|
|
97
107
|
if (errors.length > 0 || !vin || !token) {
|
|
98
108
|
return { ok: false, errors };
|
|
@@ -104,19 +114,15 @@ export function parseVehicleConfig(raw, index) {
|
|
|
104
114
|
name: optionalString(raw.name) ?? `Škoda ${vin.slice(-4)}`,
|
|
105
115
|
vin,
|
|
106
116
|
token,
|
|
107
|
-
commandToken: optionalString(raw.commandToken),
|
|
108
117
|
spin,
|
|
109
118
|
home,
|
|
110
119
|
pollingIntervalMinutes,
|
|
111
120
|
lowBatteryThreshold,
|
|
112
121
|
climateTemperature,
|
|
113
|
-
airConditioningWithoutExternalPower:
|
|
114
|
-
? raw.airConditioningWithoutExternalPower
|
|
115
|
-
: undefined,
|
|
122
|
+
airConditioningWithoutExternalPower: parseAllowance(raw.airConditioningWithoutExternalPower),
|
|
116
123
|
auxiliaryHeatingDurationMinutes: auxiliaryHeatingDuration === undefined
|
|
117
124
|
? undefined
|
|
118
125
|
: clamp(Math.round(auxiliaryHeatingDuration), 1, 60),
|
|
119
|
-
commandRefreshDelaySeconds,
|
|
120
126
|
features,
|
|
121
127
|
},
|
|
122
128
|
};
|
|
@@ -141,6 +147,16 @@ function parseHome(raw, label, errors) {
|
|
|
141
147
|
const radiusMeters = Math.max(10, optionalNumber(raw.radiusMeters) ?? DEFAULT_HOME_RADIUS_METERS);
|
|
142
148
|
return { latitude, longitude, radiusMeters };
|
|
143
149
|
}
|
|
150
|
+
/** `"allow"` / `"deny"` from the Homebridge UI, or a boolean from configs written before 0.3.0. */
|
|
151
|
+
function parseAllowance(value) {
|
|
152
|
+
if (typeof value === "boolean") {
|
|
153
|
+
return value;
|
|
154
|
+
}
|
|
155
|
+
if (value === "allow") {
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
return value === "deny" ? false : undefined;
|
|
159
|
+
}
|
|
144
160
|
function clamp(value, min, max) {
|
|
145
161
|
return Math.min(max, Math.max(min, value));
|
|
146
162
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,6BAA6B,GAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/platform.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SkodaApiClient } from "./api/client.js";
|
|
2
|
-
import { RateBudget } from "./api/rateBudget.js";
|
|
2
|
+
import { DEFAULT_RATE_LIMIT, RateBudget } from "./api/rateBudget.js";
|
|
3
3
|
import { parseVehicleConfig } from "./config.js";
|
|
4
4
|
import { VehicleAccessory } from "./accessory/vehicleAccessory.js";
|
|
5
5
|
import { PLATFORM_NAME, PLUGIN_NAME, PLUGIN_VERSION } from "./settings.js";
|
|
@@ -53,7 +53,6 @@ export class SkodaPlatform {
|
|
|
53
53
|
activeUuids.add(uuid);
|
|
54
54
|
const log = createVehicleLogger(this.log, settings.name, settings.vin, [
|
|
55
55
|
settings.token,
|
|
56
|
-
settings.commandToken,
|
|
57
56
|
settings.spin,
|
|
58
57
|
]);
|
|
59
58
|
for (const warning of result.warnings) {
|
|
@@ -73,42 +72,34 @@ export class SkodaPlatform {
|
|
|
73
72
|
setUpVehicle(settings, uuid, log) {
|
|
74
73
|
const cached = this.cachedAccessories.get(uuid);
|
|
75
74
|
const accessory = cached ?? new this.api.platformAccessory(settings.name, uuid);
|
|
76
|
-
|
|
77
|
-
const budget = new RateBudget();
|
|
78
|
-
const userAgent = `homebridge-skoda/${PLUGIN_VERSION}`;
|
|
79
|
-
const keyExpiry = (label) => (expiresAt) => {
|
|
80
|
-
controller.noteKeyExpiry(label, expiresAt);
|
|
81
|
-
};
|
|
82
|
-
const pollClient = new SkodaApiClient({
|
|
75
|
+
const client = new SkodaApiClient({
|
|
83
76
|
token: settings.token,
|
|
84
77
|
vin: settings.vin,
|
|
85
|
-
budget,
|
|
86
|
-
userAgent
|
|
87
|
-
onKeyExpiry:
|
|
78
|
+
budget: new RateBudget(),
|
|
79
|
+
userAgent: `homebridge-skoda/${PLUGIN_VERSION}`,
|
|
80
|
+
onKeyExpiry: (expiresAt) => {
|
|
81
|
+
controller.noteKeyExpiry("API key", expiresAt);
|
|
82
|
+
},
|
|
88
83
|
});
|
|
89
|
-
const commandClient = settings.commandToken
|
|
90
|
-
? new SkodaApiClient({
|
|
91
|
-
token: settings.commandToken,
|
|
92
|
-
vin: settings.vin,
|
|
93
|
-
budget,
|
|
94
|
-
userAgent,
|
|
95
|
-
onKeyExpiry: keyExpiry("command API key"),
|
|
96
|
-
})
|
|
97
|
-
: pollClient;
|
|
98
84
|
const controller = new VehicleController({
|
|
99
|
-
|
|
100
|
-
commandClient,
|
|
85
|
+
client,
|
|
101
86
|
log,
|
|
102
87
|
pollingIntervalMinutes: settings.pollingIntervalMinutes,
|
|
103
|
-
commandRefreshDelaySeconds: settings.commandRefreshDelaySeconds,
|
|
104
88
|
});
|
|
105
89
|
this.controllers.push(controller);
|
|
90
|
+
// A new vehicle is saved with its services when it is registered below.
|
|
91
|
+
let registered = cached !== undefined;
|
|
106
92
|
new VehicleAccessory({
|
|
107
93
|
hap: this.api.hap,
|
|
108
94
|
accessory,
|
|
109
95
|
controller,
|
|
110
96
|
settings,
|
|
111
97
|
log,
|
|
98
|
+
onServicesChanged: () => {
|
|
99
|
+
if (registered) {
|
|
100
|
+
this.api.updatePlatformAccessories([accessory]);
|
|
101
|
+
}
|
|
102
|
+
},
|
|
112
103
|
});
|
|
113
104
|
if (!cached) {
|
|
114
105
|
// A new vehicle is published once the first poll has created its services. Services added
|
|
@@ -119,13 +110,16 @@ export class SkodaPlatform {
|
|
|
119
110
|
return;
|
|
120
111
|
}
|
|
121
112
|
unsubscribe();
|
|
113
|
+
registered = true;
|
|
122
114
|
this.api.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [
|
|
123
115
|
accessory,
|
|
124
116
|
]);
|
|
125
117
|
log.info("Added vehicle");
|
|
126
118
|
});
|
|
127
119
|
}
|
|
128
|
-
|
|
120
|
+
const pollsPerHour = Math.ceil(60 / settings.pollingIntervalMinutes);
|
|
121
|
+
log.info(`Polling every ${settings.pollingIntervalMinutes} min (${pollsPerHour} of ${DEFAULT_RATE_LIMIT} requests per hour, ` +
|
|
122
|
+
`${Math.max(0, DEFAULT_RATE_LIMIT - pollsPerHour)} left for commands)`);
|
|
129
123
|
controller.start();
|
|
130
124
|
}
|
|
131
125
|
}
|
package/dist/platform.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,13 @@ import type { TargetTemperature, Vehicle } from "../api/types.js";
|
|
|
7
7
|
export declare function stateOfCharge(vehicle: Vehicle): number | undefined;
|
|
8
8
|
export declare function isCharging(vehicle: Vehicle): boolean | undefined;
|
|
9
9
|
export declare function isPlugConnected(vehicle: Vehicle): boolean | undefined;
|
|
10
|
+
/** Fuel level of the combustion engine; the electric range of a hybrid does not count. */
|
|
11
|
+
export declare function fuelLevel(vehicle: Vehicle): number | undefined;
|
|
12
|
+
export interface FuelValues {
|
|
13
|
+
level: number | undefined;
|
|
14
|
+
low: boolean | undefined;
|
|
15
|
+
}
|
|
16
|
+
export declare function fuelValues(vehicle: Vehicle, lowThreshold: number): FuelValues;
|
|
10
17
|
export interface BatteryValues {
|
|
11
18
|
level: number | undefined;
|
|
12
19
|
charging: boolean | undefined;
|
|
@@ -24,6 +31,10 @@ export interface ClimateValues {
|
|
|
24
31
|
targetCelsius: number | undefined;
|
|
25
32
|
}
|
|
26
33
|
export declare function climateValues(vehicle: Vehicle): ClimateValues;
|
|
34
|
+
/** On while the front or rear window heating runs; unknown unless one of them reports ON or OFF. */
|
|
35
|
+
export declare function isWindowHeatingOn(vehicle: Vehicle): boolean | undefined;
|
|
36
|
+
/** Whether the charging cable plugs are locked; unknown when the vehicle reports no value. */
|
|
37
|
+
export declare function isPlugLocked(vehicle: Vehicle): boolean | undefined;
|
|
27
38
|
export declare function isAuxiliaryHeatingOn(vehicle: Vehicle): boolean | undefined;
|
|
28
39
|
export declare function isActiveVentilationOn(vehicle: Vehicle): boolean | undefined;
|
|
29
40
|
/** "At home": parked within the radius. A vehicle in motion is not at home. */
|
|
@@ -35,5 +46,6 @@ export interface BodyValues {
|
|
|
35
46
|
bonnetOpen: boolean | undefined;
|
|
36
47
|
sunroofOpen: boolean | undefined;
|
|
37
48
|
locked: boolean | undefined;
|
|
49
|
+
lightsOn: boolean | undefined;
|
|
38
50
|
}
|
|
39
51
|
export declare function bodyValues(vehicle: Vehicle): BodyValues;
|
package/dist/vehicle/mapping.js
CHANGED
|
@@ -46,6 +46,22 @@ export function isPlugConnected(vehicle) {
|
|
|
46
46
|
? true
|
|
47
47
|
: undefined;
|
|
48
48
|
}
|
|
49
|
+
/** Fuel level of the combustion engine; the electric range of a hybrid does not count. */
|
|
50
|
+
export function fuelLevel(vehicle) {
|
|
51
|
+
const level = [
|
|
52
|
+
vehicle.fuelStatus?.primaryEngineRange,
|
|
53
|
+
vehicle.fuelStatus?.secondaryEngineRange,
|
|
54
|
+
].find((range) => range?.engineType !== "ELECTRIC" &&
|
|
55
|
+
range?.currentFuelLevelInPercent !== undefined)?.currentFuelLevelInPercent;
|
|
56
|
+
return level === undefined ? undefined : clampPercent(level);
|
|
57
|
+
}
|
|
58
|
+
export function fuelValues(vehicle, lowThreshold) {
|
|
59
|
+
const level = fuelLevel(vehicle);
|
|
60
|
+
return {
|
|
61
|
+
level,
|
|
62
|
+
low: level === undefined ? undefined : level < lowThreshold,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
49
65
|
export function batteryValues(vehicle, lowBatteryThreshold) {
|
|
50
66
|
const level = stateOfCharge(vehicle);
|
|
51
67
|
return {
|
|
@@ -99,6 +115,25 @@ function isRunning(state) {
|
|
|
99
115
|
}
|
|
100
116
|
return state !== undefined && RUNNING_STATES.has(state) ? true : undefined;
|
|
101
117
|
}
|
|
118
|
+
/** On while the front or rear window heating runs; unknown unless one of them reports ON or OFF. */
|
|
119
|
+
export function isWindowHeatingOn(vehicle) {
|
|
120
|
+
const heating = vehicle.airConditioning?.windowHeating;
|
|
121
|
+
const states = [heating?.front, heating?.rear].map(onOff);
|
|
122
|
+
if (states.includes(true)) {
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
return states.includes(false) ? false : undefined;
|
|
126
|
+
}
|
|
127
|
+
/** Whether the charging cable plugs are locked; unknown when the vehicle reports no value. */
|
|
128
|
+
export function isPlugLocked(vehicle) {
|
|
129
|
+
switch (vehicle.charging?.status?.plugLockState) {
|
|
130
|
+
case "LOCKED":
|
|
131
|
+
return true;
|
|
132
|
+
case "UNLOCKED":
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
102
137
|
export function isAuxiliaryHeatingOn(vehicle) {
|
|
103
138
|
return isRunning(vehicle.auxiliaryHeating?.state);
|
|
104
139
|
}
|
|
@@ -135,8 +170,15 @@ export function bodyValues(vehicle) {
|
|
|
135
170
|
bonnetOpen: isOpen(detail?.bonnet),
|
|
136
171
|
sunroofOpen: isOpen(detail?.sunroof),
|
|
137
172
|
locked: lockState(vehicle),
|
|
173
|
+
lightsOn: onOff(overall?.lights),
|
|
138
174
|
};
|
|
139
175
|
}
|
|
176
|
+
function onOff(value) {
|
|
177
|
+
if (value === "ON") {
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
return value === "OFF" ? false : undefined;
|
|
181
|
+
}
|
|
140
182
|
function lockState(vehicle) {
|
|
141
183
|
const overall = vehicle.status?.overall;
|
|
142
184
|
// reliableLockStatus reports UNLOCKED only for MOD4 vehicles, so fall back to `locked`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapping.js","sourceRoot":"","sources":["../../src/vehicle/mapping.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,2FAA2F;AAC3F,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,eAAe;IACf,YAAY;IACZ,oBAAoB;IACpB,aAAa;IACb,sBAAsB;CACvB,CAAC,CAAC;AAEH,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,MAAM,YAAY,GAChB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,CAAC;IAC5D,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,YAAY,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,MAAM,GAAG;QACb,OAAO,CAAC,UAAU,EAAE,kBAAkB;QACtC,OAAO,CAAC,UAAU,EAAE,oBAAoB;KACzC,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAC1B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,UAAU,CAC5C,EAAE,mBAAmB,CAAC;IACvB,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC;IAC9C,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,KAAK,SAAS,IAAI,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC;QAC1D,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;IACxC,QAAQ,MAAM,EAAE,mBAAmB,EAAE,CAAC;QACpC,KAAK,WAAW;YACd,OAAO,IAAI,CAAC;QACd,KAAK,cAAc;YACjB,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,kGAAkG;IAClG,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,CAAC;IAC5B,IAAI,KAAK,KAAK,eAAe,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,KAAK,KAAK,UAAU;QACzB,CAAC,KAAK,KAAK,SAAS,IAAI,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvD,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAQD,MAAM,UAAU,aAAa,CAC3B,OAAgB,EAChB,mBAA2B;IAE3B,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO;QACL,KAAK;QACL,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC;QAC7B,GAAG,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,mBAAmB;KACnE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,4BAA4B,CAAC;AAClE,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,WAA0C;IAE1C,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,WAAW,CAAC,IAAI,KAAK,YAAY;QACtC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;QACpC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC;AACxB,CAAC;AAUD,MAAM,aAAa,GAA+C;IAChE,GAAG,EAAE,UAAU;IACf,SAAS,EAAE,UAAU;IACrB,WAAW,EAAE,MAAM;IACnB,OAAO,EAAE,SAAS;IAClB,iBAAiB,EAAE,SAAS;IAC5B,UAAU,EAAE,SAAS;IACrB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC;IACnC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtD,OAAO;QACL,MAAM,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU;QAC5D,IAAI;QACJ,aAAa,EAAE,SAAS,CAAC,EAAE,EAAE,iBAAiB,CAAC;KAChD,CAAC;AACJ,CAAC;AAED,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IAC7B,YAAY;IACZ,SAAS;IACT,mBAAmB;IACnB,aAAa;CACd,CAAC,CAAC;AAEH,SAAS,SAAS,CAAC,KAA+B;IAChD,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,KAAK,KAAK,SAAS,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO,SAAS,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO,SAAS,CAAC,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;AACrD,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,QAAQ,CACtB,OAAgB,EAChB,IAAkB;IAElB,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;IACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC5D,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,cAAc,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,MAAM,CAAC,KAAyB;IACvC,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;
|
|
1
|
+
{"version":3,"file":"mapping.js","sourceRoot":"","sources":["../../src/vehicle/mapping.ts"],"names":[],"mappings":"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"}
|
package/dist/vehicle/snapshot.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { fuelLevel } from "./mapping.js";
|
|
1
2
|
/** Prefix of the `errors[].type` codes that describe each part. */
|
|
2
3
|
const ERROR_PREFIX = {
|
|
3
4
|
status: "VEHICLE_STATUS",
|
|
@@ -55,6 +56,28 @@ function statusFieldSupport(snapshot, read) {
|
|
|
55
56
|
const value = read(snapshot.vehicle);
|
|
56
57
|
return value !== undefined && value !== "UNSUPPORTED";
|
|
57
58
|
}
|
|
59
|
+
/** `true` once a combustion fuel level is reported; a missing field alone is unknown. */
|
|
60
|
+
function fuelLevelSupport(snapshot) {
|
|
61
|
+
const support = partSupport(snapshot, "fuelStatus");
|
|
62
|
+
if (support !== true) {
|
|
63
|
+
return support;
|
|
64
|
+
}
|
|
65
|
+
return fuelLevel(snapshot.vehicle) === undefined ? undefined : true;
|
|
66
|
+
}
|
|
67
|
+
function windowHeatingSupport(snapshot) {
|
|
68
|
+
const support = partSupport(snapshot, "airConditioning");
|
|
69
|
+
if (support !== true) {
|
|
70
|
+
return support;
|
|
71
|
+
}
|
|
72
|
+
const heating = snapshot.vehicle.airConditioning?.windowHeating;
|
|
73
|
+
const states = [heating?.front, heating?.rear];
|
|
74
|
+
if (states.every((state) => state === "UNSUPPORTED")) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
return states.some((state) => state === "ON" || state === "OFF")
|
|
78
|
+
? true
|
|
79
|
+
: undefined;
|
|
80
|
+
}
|
|
58
81
|
/**
|
|
59
82
|
* Whether the vehicle supports a feature. `undefined` means "cannot tell right now"; callers keep
|
|
60
83
|
* whatever they had, so a transient outage never removes services from HomeKit.
|
|
@@ -64,6 +87,16 @@ export function featureSupport(snapshot, feature) {
|
|
|
64
87
|
case "battery":
|
|
65
88
|
case "stateOfChargeSensor":
|
|
66
89
|
return partSupport(snapshot, "charging");
|
|
90
|
+
case "fuelLevel": {
|
|
91
|
+
// Vehicles with a high-voltage battery show it in the battery service instead.
|
|
92
|
+
const charging = partSupport(snapshot, "charging");
|
|
93
|
+
if (charging !== false) {
|
|
94
|
+
return charging === true ? false : undefined;
|
|
95
|
+
}
|
|
96
|
+
return fuelLevelSupport(snapshot);
|
|
97
|
+
}
|
|
98
|
+
case "fuelLevelSensor":
|
|
99
|
+
return fuelLevelSupport(snapshot);
|
|
67
100
|
case "charging":
|
|
68
101
|
return operationSupport(snapshot, "startCharging", "stopCharging");
|
|
69
102
|
case "chargingLimit":
|
|
@@ -86,6 +119,20 @@ export function featureSupport(snapshot, feature) {
|
|
|
86
119
|
return statusFieldSupport(snapshot, (v) => v.status?.detail.bonnet);
|
|
87
120
|
case "sunroof":
|
|
88
121
|
return statusFieldSupport(snapshot, (v) => v.status?.detail.sunroof);
|
|
122
|
+
case "lights":
|
|
123
|
+
return statusFieldSupport(snapshot, (v) => v.status?.overall.lights);
|
|
124
|
+
case "windowHeating":
|
|
125
|
+
return windowHeatingSupport(snapshot);
|
|
126
|
+
case "plugLock": {
|
|
127
|
+
const support = partSupport(snapshot, "charging");
|
|
128
|
+
if (support !== true) {
|
|
129
|
+
return support;
|
|
130
|
+
}
|
|
131
|
+
// Omitted when the vehicle reports no usable value, which is not "unsupported".
|
|
132
|
+
return snapshot.vehicle.charging?.status?.plugLockState === undefined
|
|
133
|
+
? undefined
|
|
134
|
+
: true;
|
|
135
|
+
}
|
|
89
136
|
case "lock":
|
|
90
137
|
return statusFieldSupport(snapshot, (v) => v.status?.overall.reliableLockStatus ?? v.status?.overall.locked);
|
|
91
138
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/vehicle/snapshot.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/vehicle/snapshot.ts"],"names":[],"mappings":"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"}
|