UNPKG

bluelinky2

Version:

An unofficial nodejs API wrapper for Hyundai bluelink

509 lines (485 loc) 11.9 kB
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; }[]; }