Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
if (['asleep', 'offline'].includes(vehicleMetadata.state)) {
// Car is asleep
log('Vehicle is asleep');
setState(VehicleState.Asleep);
if (g_CurrentState != VehicleState.Awoken && Date.now() - g_CarLastSeenAwake < (1000 * 60 * 60 * 3)) {
// Only wake it up to poll data every 3 hours
g_LastPoll = Date.now();
enqueueRequest();
return;
}
// We need to wake up the car
log('Waking vehicle...');
await Tesla.wakeUpAsync(options);
// When this request completes, the vehicle isn't already awoken. It's waking up.
// The official Tesla app then does the vehicle data request repeatedly until it works
}
let result = null;
for (let i = 1; i <= 20; i++) {
// Retry at most 20 times
try {
result = await Tesla.vehicleDataAsync(options);
break; // it worked
} catch (ex) {
log(`Error retrieving vehicle data on request ${i}: ${ex.message}`);
if (i == 20) {
throw ex; // this attempt failed
}
try {
let options = {"authToken": g_BearerToken, "vehicleID": Config.tesla.vehicleId};
// Retrieve vehicle metadata first to determine if we need to wake it up, and for tokens
let vehicle = (await Tesla.vehiclesAsync(options)).find(v => v.id_s == Config.tesla.vehicleId);
if (!vehicle) {
return callback(new Error("Cannot find vehicle"));
}
if (!vehicle.tokens || !vehicle.tokens[0]) {
return callback(new Error("No tokens found"));
}
if (['offline', 'asleep'].includes(vehicle.state)) {
// Wake up the car first
await Tesla.wakeUpAsync(options);
await new Promise(resolve => setTimeout(resolve, 5000));
}
// Get the car's drive state because we need its coordinates
let driveState = await Tesla.driveStateAsync(options);
let latitude = driveState.latitude;
let longitude = driveState.longitude;
let success = false;
let otherVehicleId = vehicle.vehicle_id;
let token = vehicle.tokens[0];
let ws = new WS13.WebSocket("wss://" + Config.tesla.email + ":" + token + "@streaming.vn.teslamotors.com/connect/" + otherVehicleId);
ws.on('connected', () => {
log("WS connected to Tesla API");
});