bluelinky2
Version:
An unofficial nodejs API wrapper for Hyundai bluelink
509 lines (485 loc) • 11.9 kB
text/typescript
import { REGION } from '../constants';
export type Brand = 'kia' | 'hyundai';
// config
export interface BlueLinkyConfig {
username: string | undefined;
password: string | undefined;
region: REGION | undefined;
brand: Brand;
autoLogin?: boolean;
pin: string | undefined;
vin?: string | undefined;
vehicleId?: string | undefined;
}
export interface BluelinkVehicle {
name: string;
vin: string;
type: string;
}
export interface Session {
accessToken?: string;
refreshToken?: string;
controlToken?: string;
deviceId?: string;
tokenExpiresAt: number;
controlTokenExpiresAt?: number;
}
export enum EVPlugTypes {
UNPLUGED = 0,
FAST = 1,
PORTABLE = 2,
STATION = 3
}
export enum EVChargeModeTypes {
FAST = 0,
SLOW = 1,
}
// Status remapped
export interface VehicleStatus {
engine: {
ignition: boolean;
batteryCharge?: number;
charging?: boolean;
timeToFullCharge?: unknown;
range: number;
rangeGas?: number;
rangeEV?: number;
plugedTo? : EVPlugTypes;
estimatedCurrentChargeDuration?: number;
estimatedFastChargeDuration?: number;
estimatedPortableChargeDuration?: number;
estimatedStationChargeDuration?: number;
batteryCharge12v?: number;
batteryChargeHV?: number;
accessory: boolean;
};
climate: {
active: boolean;
steeringwheelHeat: boolean;
sideMirrorHeat: boolean;
rearWindowHeat: boolean;
temperatureSetpoint: number;
temperatureUnit: number;
defrost: boolean;
};
chassis: {
hoodOpen: boolean;
trunkOpen: boolean;
locked: boolean;
openDoors: {
frontRight: boolean;
frontLeft: boolean;
backLeft: boolean;
backRight: boolean;
};
tirePressureWarningLamp: {
rearLeft: boolean;
frontLeft: boolean;
frontRight: boolean;
rearRight: boolean;
all: boolean;
};
};
lastupdate: Date|null
}
// TODO: fix/update
export interface FullVehicleStatus {
vehicleLocation: {
coord: { lat: number; lon: number; alt: number; type: number };
head: number;
speed: { value: number; unit: number };
accuracy: { hdop: number; pdop: number };
time: string;
};
odometer: { value: number, unit: number };
vehicleStatus: {
time: string;
airCtrlOn: boolean;
engine: boolean;
doorLock: boolean;
doorOpen: { frontRight: number; frontLeft: number; backLeft: number; backRight: number };
trunkOpen: boolean;
airTemp: { unit: number; hvacTempType: number; value: string };
defrost: boolean;
acc: boolean;
ign3: boolean;
hoodOpen: boolean;
transCond: boolean;
steerWheelHeat: number;
sideBackWindowHeat: number;
tirePressureLamp: {
tirePressureWarningLampAll: number;
tirePressureWarningLampFL: number;
tirePressureWarningLampFR: number;
tirePressureWarningLampRL: number;
tirePressureWarningLampRR: number;
};
battery: { batSoc: number; batState: number; };
evStatus: {
batteryCharge: boolean;
batteryStatus: number;
batteryPlugin: number;
remainTime2: {
etc1: { value: number; unit: number; };
etc2: { value: number; unit: number; };
etc3: { value: number; unit: number; };
atc: { value: number; unit: number; };
};
drvDistance: [
{
rangeByFuel: {
gasModeRange: { value: number; unit: number };
evModeRange: { value: number; unit: number };
totalAvailableRange: { value: number; unit: number };
};
type: number;
}
];
// "reservChargeInfos": {
// "reservChargeInfo": {
// "reservChargeInfoDetail": {
// "reservInfo": {
// "day": [
// 1,
// 2,
// 3,
// 4,
// 5
// ],
// "time": {
// "time": "0800",
// "timeSection": 0
// }
// },
// "reservChargeSet": true,
// "reservFatcSet": {
// "defrost": false,
// "airTemp": {
// "value": "00H",
// "unit": 0,
// "hvacTempType": 1
// },
// "airCtrl": 0,
// "heating1": 0
// }
// }
// },
// "offpeakPowerInfo": {
// "offPeakPowerTime1": {
// "starttime": {
// "time": "1200",
// "timeSection": 0
// },
// "endtime": {
// "time": "1200",
// "timeSection": 0
// }
// },
// "offPeakPowerFlag": 1
// },
// "reserveChargeInfo2": {
// "reservChargeInfoDetail": {
// "reservInfo": {
// "day": [
// 9
// ],
// "time": {
// "time": "1200",
// "timeSection": 0
// }
// },
// "reservChargeSet": false,
// "reservFatcSet": {
// "defrost": false,
// "airTemp": {
// "value": "00H",
// "unit": 0,
// "hvacTempType": 1
// },
// "airCtrl": 0,
// "heating1": 0
// }
// }
// },
// "reservFlag": 0,
// "ect": {
// "start": {
// "day": 9,
// "time": {
// "time": "1200",
// "timeSection": 0
// }
// },
// "end": {
// "day": 9,
// "time": {
// "time": "1200",
// "timeSection": 0
// }
// }
// },
// "targetSOClist": [
// {
// "targetSOClevel": 90,
// "dte": {
// "rangeByFuel": {
// "evModeRange": {
// "value": 392,
// "unit": 1
// },
// "totalAvailableRange": {
// "value": 392,
// "unit": 1
// }
// },
// "type": 2
// },
// "plugType": 0
// },
// {
// "targetSOClevel": 80,
// "dte": {
// "rangeByFuel": {
// "evModeRange": {
// "value": 345,
// "unit": 1
// },
// "totalAvailableRange": {
// "value": 345,
// "unit": 1
// }
// },
// "type": 2
// },
// "plugType": 1
// }
// ]
// }
};
}
}
// TODO: remove
// =======
// Rough mapping of the raw status that might no be the same for all regions
export interface RawVehicleStatus {
lastStatusDate: string;
dateTime: string;
acc: boolean;
trunkOpen: boolean;
doorLock: boolean;
defrostStatus: string;
transCond: boolean;
doorLockStatus: string;
doorOpen: { frontRight: number; frontLeft: number; backLeft: number; backRight: number };
airCtrlOn: boolean;
airTempUnit: string;
airTemp: { unit: number; hvacTempType: number; value: string };
battery: {
batSignalReferenceValue: unknown;
batSoc: number;
batState: number;
sjbDeliveryMode: number;
};
ign3: boolean;
ignitionStatus: string;
lowFuelLight: boolean;
sideBackWindowHeat: number;
dte: { unit: number; value: number };
engine: boolean;
defrost: boolean;
hoodOpen: boolean;
airConditionStatus: string;
steerWheelHeat: number;
tirePressureLamp: {
tirePressureWarningLampRearLeft: number;
tirePressureWarningLampFrontLeft: number;
tirePressureWarningLampFrontRight: number;
tirePressureWarningLampAll: number;
tirePressureWarningLampRearRight: number;
};
trunkOpenStatus: string;
evStatus: {
batteryCharge: boolean;
batteryStatus: number;
batteryPlugin: number;
remainTime2: {
etc1: { value: number; unit: number };
etc2: { value: number; unit: number };
etc3: { value: number; unit: number };
atc: { value: number; unit: number };
};
drvDistance: [
{
rangeByFuel: {
gasModeRange: { value: number; unit: number };
evModeRange: { value: number; unit: number };
totalAvailableRange: { value: number; unit: number };
};
type: number;
}
];
};
remoteIgnition: boolean;
seatHeaterVentInfo: unknown;
sleepModeCheck: boolean;
lampWireStatus: {
headLamp: unknown;
stopLamp: unknown;
turnSignalLamp: unknown;
};
windowOpen: unknown;
engineRuntime: unknown;
}
// Vehicle Info
export interface VehicleInfo {
vehicleId: string;
nickName: string;
modelCode: string;
modelName: string;
modelYear: string;
fuelKindCode: string;
trim: string;
engine: string;
exteriorColor: string;
dtcCount: number;
subscriptionStatus: string;
subscriptionEndDate: string;
overviewMessage: string;
odometer: number;
odometerUnit: number;
defaultVehicle: boolean;
enrollmentStatus: string;
genType: string;
transmissionType: string;
vin: string;
}
export interface VehicleFeatureEntry {
category: string;
features: [
{
featureName: string;
features: [
{
subFeatureName: string;
subFeatureValue: string;
}
];
}
];
}
// Location
export interface VehicleLocation {
latitude: number;
longitude: number;
altitude: number;
speed: {
unit: number;
value: number;
};
heading: number;
}
export interface VehicleOdometer {
unit: number;
value: number;
}
export interface VehicleStatusOptions {
refresh: boolean;
parsed: boolean;
}
// VEHICLE COMMANDS /////////////////////////////////////////////
export interface VehicleCommandResponse {
responseCode: number; // 0 is success
responseDesc: string;
}
export interface VehicleStartOptions {
airCtrl?: boolean | string;
igniOnDuration: number;
airTempvalue?: number;
defrost?: boolean | string;
heating1?: boolean | string;
}
export interface VehicleClimateOptions {
defrost: boolean;
windscreenHeating: boolean;
temperature: number;
unit: string;
}
export interface VehicleRegisterOptions {
nickname: string;
name: string;
vin: string;
regDate: string;
brandIndicator: string;
regId: string;
id: string;
generation: string;
}
export type DeepPartial<T> = {
[P in keyof T]?: DeepPartial<T[P]>;
};
export interface VehicleMonthlyReport {
start: string; // format YYYYMMDD, eg: 20210210
end: string; // format YYYYMMDD, eg: 20210312
driving: {
distance: number;
startCount: number;
durations: {
drive: number;
idle: number;
}
},
breakdown: {
ecuIdx: string;
ecuStatus: string;
}[],
vehicleStatus: {
tpms: boolean;
tirePressure: {
all: boolean;
}
}
}
export interface VehicleTargetSOC {
type: EVChargeModeTypes;
distance: number;
targetLevel: number;
}
export interface VehicleMonthTrip {
days: Array<{ dayRaw: string; date?: Date; tripsCount: number }>;
durations: {
drive: number;
idle: number;
};
speed: {
avg: number;
max: number;
};
distance: number;
}
export interface VehicleDayTrip {
dayRaw: string;
tripsCount: number;
distance: number;
durations: {
drive: number;
idle: number;
};
speed: {
avg: number;
max: number;
};
trips: {
timeRaw: string;
start: Date;
end: Date;
durations: {
drive: number;
idle: number;
};
speed: {
avg: number;
max: number;
};
distance: number;
}[];
}