public async Task <List <NissanLeafDevice> > LoginAsync(string username, string password)
        {
            var request = new RestRequest("UserLoginRequest.php");

            request.AddParameter("RegionCode", "NE");
            request.AddParameter("UserId", username);
            request.AddParameter("Password", _encryptionService.Encrypt(password, _basePrm));
            request.AddParameter("initial_app_strings", "geORNtsZe5I4lRGjG9GZiA");

            var response = await _restClient.ExecutePostTaskAsync <LoginResponse>(request).ConfigureAwait(false);

            var devices = new List <NissanLeafDevice>();

            _timezone = response.Data.CustomerInfo.Timezone;

            foreach (var vehicleInfo in response.Data.VehicleInfoList.vehicleInfo)
            {
                var device = new NissanLeafDevice(
                    vehicleInfo.vin,
                    response.Data.vehicle.profile.dcmId,
                    vehicleInfo.nickname,
                    response.Data.vehicle.profile.modelyear)
                {
                    CustomSessionId = vehicleInfo.custom_sessionid
                };
                devices.Add(device);
            }

            return(devices);
        }
        public async Task <BatteryStatus> GetBatteryStatusAsync(NissanLeafDevice device, CancellationToken cancellationToken)
        {
            var checkRequest = new RestRequest("BatteryStatusCheckRequest.php");

            checkRequest.AddParameter("RegionCode", "NE");
            checkRequest.AddParameter("VIN", device.Vin);
            checkRequest.AddParameter("custom_sessionid", device.CustomSessionId);

            var checkResponse = await _restClient.PostTaskAsync <BatteryStatusCheckResponse>(checkRequest).ConfigureAwait(false);

            while (!cancellationToken.IsCancellationRequested)
            {
                var resultRequest = new RestRequest("BatteryStatusCheckResultRequest.php");
                resultRequest.AddParameter("RegionCode", "NE");
                resultRequest.AddParameter("VIN", device.Vin);
                resultRequest.AddParameter("custom_sessionid", device.CustomSessionId);
                resultRequest.AddParameter("resultKey", checkResponse.resultKey);

                var resultResponse = await _restClient.PostTaskAsync <BatteryStatusResultResponse>(resultRequest).ConfigureAwait(false);

                if (resultResponse.responseFlag == "1")
                {
                    return(CreateBatteryStatus(resultResponse));
                }

                await Task.Delay(TimeSpan.FromSeconds(10), cancellationToken).ContinueWith(_ => { }).ConfigureAwait(false);
            }

            return(null);
        }
        public async Task DeactivateClimateControl(NissanLeafDevice device)
        {
            var request = new RestRequest("ACRemoteOffRequest.php");

            request.AddParameter("RegionCode", "NE");
            request.AddParameter("VIN", device.Vin);
            request.AddParameter("custom_sessionid", device.CustomSessionId);

            await _restClient.ExecutePostTaskAsync(request).ConfigureAwait(false);
        }
        public async Task StartCharging(NissanLeafDevice device)
        {
            var request = new RestRequest("BatteryRemoteChargingRequest.php");

            request.AddParameter("RegionCode", "NE");
            request.AddParameter("VIN", device.Vin);
            request.AddParameter("custom_sessionid", device.CustomSessionId);
            request.AddParameter("tz", _timezone);
            request.AddParameter("ExecuteTime", DateTime.Today.ToString("yyyy-MM-dd"));

            await _restClient.ExecutePostTaskAsync(request).ConfigureAwait(false);
        }
        public void StopClimateControl(NissanLeafDevice device)
        {
            var action = GetActions(device).Single(a => a.Name.Equals("Stop climate control", StringComparison.Ordinal));

            StartActionInNewTask(device, action, new Dictionary <string, string>());
        }
        public void StartCharging(NissanLeafDevice device)
        {
            var action = GetActions(device).Single(a => a.Name.Equals("Start charging", StringComparison.Ordinal));

            StartActionInNewTask(device, action, new Dictionary <string, string>());
        }
Example #7
0
 public NissanLeafScriptObject(NissanLeafDevice device, INissanLeafGateway gateway)
 {
     _device  = device;
     _gateway = gateway;
 }