Exemple #1
0
        public static void Main(string[] args)
        {
            string clientId     = "";
            string clientSecret = "";

            string email    = "";
            string password = "";

            TeslaClient.OAuthTokenStore = new FileBasedOAuthTokenStore();

            TeslaClient client = new TeslaClient(email, clientId, clientSecret);

            // If we have logged in previously with the same email address, then we can use this method and refresh tokens,
            // assuming the refresh token hasn't expired.
            client.LoginUsingTokenStoreWithoutPasswordAsync().Wait();
            //client.LoginUsingTokenStoreAsync(password).Wait();
            //client.LoginAsync(password).Wait();

            var vehicles = client.LoadVehicles();

            foreach (TeslaVehicle car in vehicles)
            {
                Console.WriteLine(car.DisplayName + "   VIN: " + car.Vin);
                Console.Write("Waking up...  ");
                car.WakeUp();
                Console.WriteLine("Done");

                var vehicleState = car.LoadVehicleStateStatus();
                if (vehicleState == null)
                {
                    Console.WriteLine("Vehicle state was null!  Is the car not awake?");
                }
                else
                {
                    Console.WriteLine(" Roof state: {0}", vehicleState.PanoramicRoofState);
                    Console.WriteLine(" Odometer: {0}", vehicleState.Odometer);
                }

                var chargeState = car.LoadChargeStateStatus();
                Console.WriteLine($" Desired State of charge: {chargeState.ChargeLimitSoc}%");
                Console.WriteLine($" Scheduled charging time: {chargeState.ScheduledChargingStartTime}");
                car.LoadDriveStateStatus();
                car.LoadClimateStateStatus();
                car.LoadGuiStateStatus();
                car.LoadMobileEnabledStatus();
                var options = car.Options;
                Console.WriteLine($"  Battery size: {options.BatterySize}  Has firmware limit? {(options.BatteryFirmwareLimit.HasValue ? options.BatteryFirmwareLimit.ToString() : false.ToString())}");
                Console.WriteLine($"  Charger limit: {options.ChargerLimit}");
                Console.WriteLine("Climate:");
                var climate = car.LoadClimateStateStatus();
                Console.WriteLine($"  Driver temperature: {climate.DriverTemperatureSetting}  Passenger: {climate.PassengerTemperatureSetting}");
            }

            client.RefreshLoginTokenAndUpdateTokenStoreAsync().Wait();

            Console.WriteLine("Press any key to exit");
            Console.ReadKey();
        }
        public static TeslaClient GetTeslaClient()
        {
            if (cachedClient != null)
            {
                return(cachedClient);
            }
            var client = Load <TeslaClient>("TeslaTizen.res.teslaApiClient.json");

            cachedClient = client;
            return(client);
        }
Exemple #3
0
        public static void Main(string[] args)
        {
            string clientId     = "";
            string clientSecret = "";

            string email    = "";
            string password = "";

            TeslaClient client = new TeslaClient(email, clientId, clientSecret);

            client.Login(password);

            var vehicles = client.LoadVehicles();

            foreach (TeslaVehicle car in vehicles)
            {
                Console.WriteLine(car.Id + " " + car.VIN);
            }

            Console.ReadKey();
        }
Exemple #4
0
        public async Task Start()
        {
            var client = new TeslaClient(true);

            await client.LogInAsync("username", "password");

            if (client.IsLoggedIn)
            {
                var cars = await client.LoadVehiclesAsync();

                var car = cars.FirstOrDefault();

                const bool showUnchanged = true;
                WriteModifiedFields(await client.AnalyzeFieldsAsync <TeslaVehicle>(client.TESLA_SERVER, client.VEHICLES_PATH), showUnchanged);
                WriteModifiedFields(await client.AnalyzeFieldsAsync <ChargeStateStatus>(client.TESLA_SERVER, string.Format(client.CHARGE_STATE_PATH, car.Id)), showUnchanged);
                WriteModifiedFields(await client.AnalyzeFieldsAsync <ClimateStateStatus>(client.TESLA_SERVER, string.Format(client.CLIMATE_STATE_PATH, car.Id)), showUnchanged);
                WriteModifiedFields(await client.AnalyzeFieldsAsync <DriveStateStatus>(client.TESLA_SERVER, string.Format(client.DRIVE_STATE_PATH, car.Id)), showUnchanged);
                WriteModifiedFields(await client.AnalyzeFieldsAsync <GuiSettingsStatus>(client.TESLA_SERVER, string.Format(client.GUI_SETTINGS_PATH, car.Id)), showUnchanged);
                WriteModifiedFields(await client.AnalyzeFieldsAsync <MobileEnabledStatus>(client.TESLA_SERVER, string.Format(client.MOBILE_ENABLED_PATH, car.Id)), showUnchanged);
                WriteModifiedFields(await client.AnalyzeFieldsAsync <VehicleStateStatus>(client.TESLA_SERVER, string.Format(client.VEHICLE_STATE_PATH, car.Id)), showUnchanged);
            }
        }
Exemple #5
0
        public async Task Start()
        {
            var client = new TeslaClient(true);

            await client.LogInAsync("username", "password");

            Console.WriteLine("Logged In: " + client.IsLoggedIn);
            Console.WriteLine();

            if (client.IsLoggedIn)
            {
                var cars = await client.LoadVehiclesAsync();

                if (cars.Count == 0)
                {
                    Console.WriteLine("Error: You do not have access to any vehicles");
                    return;
                }

                Console.WriteLine("Vehicles:");
                foreach (var c in cars)
                {
                    Console.WriteLine(c.Id + " " + c.VIN);
                }

                var car = cars.FirstOrDefault();
                if (car == null)
                {
                    return;
                }

                var a = client.LoadChargeStateStatus(car);
                Console.WriteLine("Charging State: " + a.ChargingState);
                Console.WriteLine("Battery Range: " + a.BatteryRange);
            }
        }
 public ResponseParseTest()
 {
     _client = new TeslaClient(true);
 }
Exemple #7
0
        static async Task <int> Main(string[] args)
        {
            var           showHelp                 = false;
            string        email                    = null;
            string        password                 = null;
            string        accessToken              = null;
            string        vehicleId                = null;
            string        temps                    = null;
            string        chargeLimitRequested     = null;
            List <string> extraArgs                = null;
            bool          resetRequested           = false;
            bool          wakeRequested            = false;
            bool          vehicleDataRequested     = false;
            bool          driveStateRequested      = false;
            bool?         lockRequested            = null;
            bool          honkRequested            = false;
            bool          flashRequested           = false;
            string        hvacSetting              = null;
            bool          remoteStartRequested     = false;
            string        chargePortStateRequested = null;
            string        chargeStateRequested     = null;
            bool          getChargeStateRequested  = false;
            bool          getClimateStateRequested = false;
            bool          guiSettingsRequested     = false;
            bool          getServiceDataRequested  = false;
            string        sentryModeRequested      = null;
            bool          forceAwakeRequested      = false;

            var os = new OptionSet()
            {
                // commands
                { "w|wake", "Wake up the car", v => wakeRequested = v != null },
                { "forcewake", "Wake up the car and wait for it to be awake", v => forceAwakeRequested = v != null },
                { "u|unlockdoors", "Unlock the doors", v => { if (v != null)
                                                              {
                                                                  lockRequested = false;
                                                              }
                  } },
                { "l|lockdoors", "Lock the doors", v => { if (v != null)
                                                          {
                                                              lockRequested = true;
                                                          }
                  } },
                { "honk", "Honk the horn", v => honkRequested = v != null },
                { "f|flash", "Flash the lights", v => flashRequested = v != null },
                { "hvac=", "HVAC (on/off)", v => hvacSetting = v },
                { "t|temp=", "Set HVAC temperature (driver,passenger)", v => temps = v },
                { "chargelimit=", "Set charge limit (%/max/standard)", v => chargeLimitRequested = v },
                { "remotestartdrive", "Start vehicle keyless drive mode", v => remoteStartRequested = v != null },
                { "chargeport=", "Set charge port state (open/closed)", v => chargePortStateRequested = v },
                { "charge=", "Set charging state (on/off)", v => chargeStateRequested = v },
                { "sentrymode=", "Set sentry mode (on/off)", v => sentryModeRequested = v },

                // state and settings
                { "d|vehicledata", "Retrieve vehicle data", v => vehicleDataRequested = v != null },
                { "cs|chargestate", "Retrieve vehicle charging state", v => getChargeStateRequested = v != null },
                { "cls|climatestate", "Retrieve climate state", v => getClimateStateRequested = v != null },
                { "ds|drivestate", "Retrieve vehicle drive state", v => driveStateRequested = v != null },
                { "gui|guisettings", "Retrieve GUI setttings", v => guiSettingsRequested = v != null },
                { "servicedata", "Retrieve service data", v => getServiceDataRequested = v != null },

                // administrative
                { "e|email=", "Tesla account email", v => email = v },
                { "p|password="******"Tesla account password", v => password = v },
                { "a|accesstoken=", "Access token", v => accessToken = v },
                { "vid|vehicleid=", "Vehicle ID", v => vehicleId = v },
                { "r|reset", "Remove default token and vehicle", v => resetRequested = v != null },
                { "h|help", "Show this message and exit", v => showHelp = v != null }
            };

            try
            {
                extraArgs = os.Parse(args);
            }
            catch (OptionException ex)
            {
                Console.WriteLine($"teslactl: {ex.Message}");
                Console.WriteLine("Try 'teslactl --help' for more information.");
            }

            if (showHelp)
            {
                Console.WriteLine("Usage: teslactl [OPTIONS]");
                Console.WriteLine("Control a Tesla car.");
                Console.WriteLine();
                Console.WriteLine("Options:");
                os.WriteOptionDescriptions(Console.Out);

                return(1);
            }

            if (resetRequested)
            {
                DefaultSettings.RemoveFile();
            }

            readConfig();

            _defaultSettings = DefaultSettings.ReadFromFile();

            bool needToUpdateDefaults = false;

            if (vehicleId != null)
            {
                _defaultSettings.VehicleId = vehicleId;
                needToUpdateDefaults       = true;
            }

            if (accessToken != null)
            {
                _defaultSettings.AccessToken = accessToken;
                needToUpdateDefaults         = true;
            }

            var client = new TeslaClient()
            {
                BaseUri = new Uri(_baseUri)
            };

            if (_defaultSettings.AccessToken != null)
            {
                client.AccessToken = _defaultSettings.AccessToken;
            }

            _serializer            = new JsonSerializer();
            _serializer.Formatting = Formatting.Indented;

            // check for user requested auth
            // if auth requested, reauthorize even if we have an existing token
            if (extraArgs.Contains("auth"))
            {
                if (email == null || password == null)
                {
                    Console.Error.WriteLine("auth command requires Tesla username and password");
                    return(1);
                }

                var authResponse = await client.Authenticate(_clientId, _clientSecret, email, password);

                printResults("Authenticate", authResponse);

                _defaultSettings.AccessToken = authResponse.AccessToken;
                needToUpdateDefaults         = true;
            }

            if (_defaultSettings.AccessToken == null)
            {
                // if still no access token, nothing we can do
                return(1);
            }

            client.AccessToken = _defaultSettings.AccessToken;

            var userRequestedListVehicles = extraArgs.Contains("list-vehicles");

            if (extraArgs.Contains("list-vehicles") || _defaultSettings.VehicleId == null)
            {
                var vehicles = await client.QueryVehicles();

                printResults("QueryVehicles", vehicles);

                if (_defaultSettings.VehicleId == null && vehicles.Length > 0)
                {
                    _defaultSettings.VehicleId = vehicles[0].Id.ToString();
                    needToUpdateDefaults       = true;
                }
            }

            if (needToUpdateDefaults)
            {
                _defaultSettings.UpdateFile();
            }

            client.VehicleId = long.Parse(_defaultSettings.VehicleId);

            if (wakeRequested)
            {
                var response = await client.Wake();

                printResults("wake", response);
            }

            if (forceAwakeRequested)
            {
                var isAwake = await client.ForceWake();

                Console.WriteLine("force_awake: {0}", isAwake);
            }

            if (honkRequested)
            {
                await execStandardCommand(client.Honk, "honk_horn");
            }

            if (vehicleDataRequested)
            {
                var vehicleData = await client.QueryVehicleData();

                printResults("vehicle-data", vehicleData);
            }

            if (driveStateRequested)
            {
                var driveState = await client.QueryDriveState();

                printResults("drive-state", driveState);
            }

            if (temps != null)
            {
                int tempDriver;
                int tempPassenger;
                var tempSides = temps.Split(',');
                if (tempSides.Length > 0)
                {
                    tempDriver    = int.Parse(tempSides[0]);
                    tempPassenger = (tempSides.Length > 1) ? int.Parse(tempSides[1]) : tempDriver;

                    var response = await client.SetTemperatureF(tempDriver, tempPassenger);

                    printResults("set-temps", response);
                }
            }

            if (chargeLimitRequested != null)
            {
                CommandResponse response = null;

                if (chargeLimitRequested.ToLower() == "standard")
                {
                    await execStandardCommand(client.SetStandardRangeChargeLimit, "charge_standard");
                }
                else if (chargeLimitRequested.ToLower() == "max")
                {
                    await execStandardCommand(client.SetMaxRangeChargeLimit, "charge_max_range");
                }
                else
                {
                    if (int.TryParse(chargeLimitRequested, out var chargePercent))
                    {
                        response = await client.SetChargeLimit(chargePercent);

                        printResults("set_charge_limit", response);
                    }
                }
            }

            if (lockRequested.HasValue)
            {
                var response = await client.LockDoors(lockRequested.Value);

                printResults("door_lock", response);
            }

            if (flashRequested)
            {
                await execStandardCommand(client.FlashLights, "flash_lights");
            }

            if (hvacSetting != null)
            {
                bool?setting = null;
                if (hvacSetting.ToLower() == "on" || hvacSetting == "1")
                {
                    setting = true;
                }
                else if (hvacSetting.ToLower() == "off" || hvacSetting == "0")
                {
                    setting = false;
                }

                if (setting.HasValue)
                {
                    var response = await client.Hvac(setting.Value);

                    printResults("auto_conditioning", response);
                }
                else
                {
                    Console.Error.WriteLine("auto_conditioning: specify \"on\" or \"off\"");
                }
            }

            if (remoteStartRequested)
            {
                if (password != null)
                {
                    CommandResponse r = await client.RemoteStart(password);

                    printResults("remote_start_drive", r);
                }
                else
                {
                    Console.Error.WriteLine("remote_start_drive: password must be supplied");
                }
            }

            if (chargePortStateRequested != null)
            {
                CommandResponse response = null;

                if (chargePortStateRequested.ToLower() == "open" || chargePortStateRequested == "1")
                {
                    response = await client.ChargePort(true);
                }
                else if (chargePortStateRequested.ToLower() == "closed" || chargePortStateRequested == "0")
                {
                    response = await client.ChargePort(false);
                }
                else
                {
                    Console.Error.WriteLine("chargeportstate must be \"open\" or \"closed\"");
                }

                if (response != null)
                {
                    printResults("chargeport", response);
                }
            }

            if (chargeStateRequested != null)
            {
                if (chargeStateRequested.ToLower() == "start" || chargeStateRequested == "1")
                {
                    await execStandardCommand(client.StartCharging, "charge_start");
                }
                else if (chargeStateRequested.ToLower() == "stop" || chargeStateRequested == "0")
                {
                    await execStandardCommand(client.StopCharging, "charge_stop");
                }
                else
                {
                    Console.Error.WriteLine("charge setting must be \"start\" or \"stop\"");
                }
            }

            if (getChargeStateRequested)
            {
                var response = await client.QueryChargeState();

                printResults("charge-state-data", response);
            }

            if (getClimateStateRequested)
            {
                var response = await client.QueryClimateState();

                printResults("climate-state", response);
            }

            if (guiSettingsRequested)
            {
                var response = await client.QueryGuiSettings();

                printResults("gui-settings", response);
            }

            if (getServiceDataRequested)
            {
                var response = await client.QueryVehicleServiceData();

                printResults("service_data", response);
            }

            if (sentryModeRequested != null)
            {
                var sentryOn = parseBoolean(sentryModeRequested);
                if (sentryOn.HasValue)
                {
                    var response = await client.SentryMode(sentryOn.Value);

                    printResults("set_sentry_mode", response);
                }
                else
                {
                    Console.Error.WriteLine("sentry mode must be \"on\" or \"off\"");
                }
            }

            return(0);
        }
Exemple #8
0
 public FieldAnalysisTest()
 {
     _client = new TeslaClient(true);
 }
Exemple #9
0
        public LoginViewModel()
        {
            Model = new LoginModel();

            _client = new TeslaClient();
        }