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}"); } } } } }
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}"); } } }