Example #1
0
        public static async Task ExecuteCommand(string email, string password, bool getLast = false, string fileName = null, string url = null)
        {
            var lc = new LeafLib.LeafClient(email, password);

            BatteryStatusRecordsRequestResult bsr         = null;
            UserLoginRequestResult            loginResult = null;

            try {
                Console.WriteLine("Getting InitialApp_v2 result...");
                var iar = await lc.InitialApp_v2();

                if (iar.BasePrm != lc.basePrm_blowfishEcbKey)
                {
                    Console.WriteLine($"BasePrm from InitialApp_v2 has changed, which means the password hash has to be updated!");
                    Console.ReadKey();
                    return;
                }

                Console.WriteLine("Logging in...");
                loginResult = await lc.LogIn();

                if (!getLast)
                {
                    Console.WriteLine("Requesting battery status check...");
                    var requestBatteryStatusCheckResult = await lc.RequestBatteryStatusCheck();

                    Console.WriteLine("Waiting for battery status check to finish...");
                    var wait = await lc.WaitForBatteryStatusCheckResult(requestBatteryStatusCheckResult.ResultKey);

                    Console.WriteLine("Getting battery status record...");
                    bsr = await lc.GetBatteryStatusRecord();
                }
            } catch (Exception e) {
                Console.WriteLine($"Could not get data from Nissan Connect!");
                Console.WriteLine($"Error: {e.Message}");
            }

            if (bsr == null)
            {
                try {
                    Console.WriteLine("Getting battery status record...");
                    bsr = await lc.GetBatteryStatusRecord();
                } catch (Exception e) {
                    Console.WriteLine($"Error: {e.Message}");
                }
            }

            if (bsr == null)
            {
                Console.WriteLine("Could not get the last battery status record.");
                Console.WriteLine("Exiting...");
                return;
            }

            var json = JsonConvert.SerializeObject(new NissanLeafStatusDto {
                BatteryCapacity           = bsr?.BatteryStatusRecord?.BatteryStatus?.BatteryCapacity?.StringToInt() ?? 0,
                BatteryRemainingAmount    = bsr?.BatteryStatusRecord?.BatteryStatus?.BatteryRemainingAmount.StringToInt() ?? 0,
                BatteryRemainingAmountkWH = bsr?.BatteryStatusRecord?.BatteryStatus?.BatteryRemainingAmountkWH.StringToInt() ?? 0,
                BatteryRemainingAmountWH  = bsr?.BatteryStatusRecord?.BatteryStatus?.BatteryRemainingAmountWH.StringToInt() ?? 0,
                CruisingRangeAcOff        = bsr?.BatteryStatusRecord?.CruisingRangeAcOff.StringToInt() ?? 0,
                CruisingRangeAcOn         = bsr?.BatteryStatusRecord?.CruisingRangeAcOn.StringToInt() ?? 0,
                MinutesToFull             = bsr?.BatteryStatusRecord?.TimeRequiredToFull?.TotalMinutesToFull ?? 0,
                MinutesToFull200          = bsr?.BatteryStatusRecord?.TimeRequiredToFull200?.TotalMinutesToFull ?? 0,
                MinutesToFull200_6kW      = bsr?.BatteryStatusRecord?.TimeRequiredToFull200_6kW?.TotalMinutesToFull ?? 0,
                NickName       = loginResult?.VehicleInfoList.VehicleInfoWithCustomSessionId.FirstOrDefault().NickName,
                Vin            = loginResult?.VehicleInfoList.VehicleInfoWithCustomSessionId.FirstOrDefault().Vin,
                PluginState    = bsr?.BatteryStatusRecord?.PluginState,
                ChargingStatus = bsr.BatteryStatusRecord?.BatteryStatus?.BatteryChargingStatus,
                StateOfCharge  = bsr?.BatteryStatusRecord?.BatteryStatus?.StateOfCharge?.Percent?.StringToInt() ?? 0,
                Timestamp      = bsr?.BatteryStatusRecord?.NotificationDateAndTime ?? DateTime.MinValue
            }, Formatting.Indented);

            Console.WriteLine("\nRetrieved data:\n");
            Console.WriteLine(json);

            if (!string.IsNullOrWhiteSpace(fileName))
            {
                try {
                    Console.WriteLine($"\nOutputting JSON data to '{fileName}'.");
                    File.WriteAllText(fileName, json);
                } catch (Exception e) {
                    Console.WriteLine($"Error: {e.Message}");
                }
            }

            if (!string.IsNullOrWhiteSpace(url))
            {
                var urls = url.Split(',');

                if (urls.Any())
                {
                    foreach (var u in urls)
                    {
                        try {
                            Console.WriteLine($"\nPosting JSON data to '{u}'.");

                            var client = new HttpClient();

                            var result = await client.PostAsync(u, new StringContent(json, Encoding.UTF8, "application/json"));
                        } catch (Exception e) {
                            Console.WriteLine($"Error: {e.Message}");
                        }
                    }
                }
            }
        }
Example #2
0
        public static async Task ExecuteCommand(string email, string password, bool getLast = false, string fileName = null)
        {
            var lc = new LeafLib.LeafClient(email, password);

            BatteryStatusRecordsRequestResult bsr = null;

            try {
                Console.WriteLine("Logging in...");
                var loginResult = await lc.LogIn();

                if (!getLast)
                {
                    Console.WriteLine("Requesting battery status check...");
                    var requestBatteryStatusCheckResult = await lc.RequestBatteryStatusCheck();

                    Console.WriteLine("Waiting for battery status check to finish...");
                    var wait = await lc.WaitForBatteryStatusCheckResult(requestBatteryStatusCheckResult.ResultKey);

                    Console.WriteLine("Getting battery status record...");
                    bsr = await lc.GetBatteryStatusRecord();
                }
            } catch (Exception e) {
                Console.WriteLine($"Could not get data from Nissan Connect!");
                Console.WriteLine($"Error: {e.Message}");
            }

            if (bsr == null)
            {
                try {
                    Console.WriteLine("Getting battery status record...");
                    bsr = await lc.GetBatteryStatusRecord();
                } catch (Exception e) {
                    Console.WriteLine($"Error: {e.Message}");
                }
            }

            if (bsr == null)
            {
                Console.WriteLine("Could not get the last battery status record.");
                Console.WriteLine("Exiting...");
                return;
            }

            var jsonData = new {
                TimeStampUtc    = bsr?.BatteryStatusRecord?.NotificationDateAndTime.ToString("dd\\/MM\\/yy HH\\:mm"),
                TimeStamp       = bsr?.BatteryStatusRecord?.NotificationDateAndTimeAsLocal.ToString("dd\\/MM\\/yy HH\\:mm"),
                BatteryCapacity = bsr?.BatteryStatusRecord?.BatteryStatus?.BatteryCapacity,
                ChargingStatus  = bsr?.BatteryStatusRecord?.BatteryStatus?.BatteryChargingStatus,
                SoC             = bsr?.BatteryStatusRecord?.BatteryStatus?.StateOfCharge?.Percent,
                PluginState     = bsr?.BatteryStatusRecord?.PluginState,
                Range           = bsr?.BatteryStatusRecord?.CruisingRangeAcOff,
                RangeAc         = bsr?.BatteryStatusRecord?.CruisingRangeAcOn,
                ChargeTime      = $"{bsr?.BatteryStatusRecord?.TimeRequiredToFull200?.HourRequiredToFull}:{bsr?.BatteryStatusRecord?.TimeRequiredToFull200?.MinutesRequiredToFull}",
            };

            var json = JsonConvert.SerializeObject(jsonData, Formatting.Indented);

            Console.WriteLine("\nRetrieved data:\n");
            Console.WriteLine(json);

            if (!string.IsNullOrWhiteSpace(fileName))
            {
                try {
                    Console.WriteLine($"\nOutputting JSON data to '{fileName}'.");
                    File.WriteAllText(fileName, json);
                } catch (Exception e) {
                    Console.WriteLine($"Error: {e.Message}");
                }
            }
        }