Skip to content

Commit

Permalink
Merge branch 'master' into NET8
Browse files Browse the repository at this point in the history
  • Loading branch information
bassmaster187 committed Jan 22, 2025
2 parents ddbe501 + 7f44860 commit 86b69b5
Show file tree
Hide file tree
Showing 17 changed files with 652 additions and 108 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/dotnet-desktop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ jobs:

# Execute all unit tests in the solution
- name: Execute unit tests
run: dotnet test --filter "UnitTestsGeocode|UnitTestGrafana|UnitTestBase|UnitTestTelemetryParser" --logger trx --logger console UnitTestsTeslalogger\bin\Debug\UnitTestsTeslalogger.dll
run: dotnet test --filter "UnitTestsGeocode|UnitTestGrafana|UnitTestBase|UnitTestTelemetryParser|UnitTestCO2" --logger trx --logger console UnitTestsTeslalogger\bin\Debug\UnitTestsTeslalogger.dll
#run: dotnet vstest /Tests:UnitTestsGeocode /Logger:trx UnitTestsTeslalogger\bin\Debug\UnitTestsTeslalogger.dll

- name: Publish Test Results
Expand All @@ -98,4 +98,4 @@ jobs:
with:
name: Teslalogger
path: TeslaLogger\bin\Debug\TeslaLogger.exe


14 changes: 13 additions & 1 deletion TeslaLogger/CO2.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ namespace TeslaLogger
public class CO2
{
HashSet<string> supportedCountries = new HashSet<string> { "at", "be", "bg", "ch", "cz", "de", "dk", "ee", "es", "fi", "fr", "gr", "hr", "hu", "it", "lu", "lv", "nl", "no", "pl", "pt" ,"ro", "se", "si", "sk", "uk" };
public bool useCache = true;

static void Log(string msg) {
Logfile.Log(" ** CO2: " + msg);
Expand Down Expand Up @@ -58,7 +59,7 @@ internal int GetData(string country, DateTime dateTime)
string filename = $"week_{year}_{w}.json";
string path = $"EngergyChartData/{country}/{filename}";

if (File.Exists(path))
if (File.Exists(path) && useCache)
content = File.ReadAllText(path);
else
content = GetEnergyChartData(country, filename, writeCache);
Expand Down Expand Up @@ -120,6 +121,9 @@ internal int GetData(string country, DateTime dateTime)
if (data == null)
continue;

if (data.Count <= ix)
continue;

if (data[ix].Type == Newtonsoft.Json.Linq.JTokenType.Null)
continue;

Expand Down Expand Up @@ -197,6 +201,12 @@ private static void GetImport(string country, DateTime dateTime, ref double co2s
string w = wi.ToString("D2");
int year = dateTime.Year;

if (w == "53")
{
year++;
w = "01";
}

string filename = $"week_cbpf_saldo_{year}_{w}.json";
string path = $"EngergyChartData/{country}/{filename}";

Expand Down Expand Up @@ -321,6 +331,8 @@ public static string GetEnergyChartData(string country, string filename, Boolean
resultContent = client.DownloadString(url);

DBHelper.AddMothershipDataToDB("EnergyCharts", start, 0, 0);

Console.WriteLine("Download URL ok: " + url);
}
catch (Exception)
{
Expand Down
43 changes: 39 additions & 4 deletions TeslaLogger/DBHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3382,7 +3382,7 @@ public void StartChargingState(WebHelper wh)
if (car.telemetryParser?.dcCharging == true)
fast_charger_present = true;

int chargeID = GetMaxChargeid(out DateTime chargeStart);
int chargeID = GetMaxChargeid(out DateTime chargeStart, out double? _);
long chargingstateid = 0;
if (wh != null)
{
Expand Down Expand Up @@ -5214,15 +5214,16 @@ id IN(
return 0;
}

private int GetMaxChargeid(out DateTime chargeStart)
public int GetMaxChargeid(out DateTime chargeStart, out double? charge_energy_added)
{
using (MySqlConnection con = new MySqlConnection(DBConnectionstring))
{
con.Open();
using (MySqlCommand cmd = new MySqlCommand(@"
SELECT
id,
datum
datum,
charge_energy_added
FROM
charging
WHERE
Expand All @@ -5239,11 +5240,15 @@ datum DESC
{
chargeStart = DateTime.Now;
}

charge_energy_added = Convert.ToDouble(dr[2]);

return Convert.ToInt32(dr[0], Tools.ciEnUS);
}
}
}
chargeStart = DateTime.Now;
charge_energy_added = null;
return 0;
}

Expand Down Expand Up @@ -6533,7 +6538,7 @@ private void CloseChargingState(int openChargingState)
{
car.Log($"CloseChargingState id:{openChargingState}");
StaticMapService.CreateChargingMapOnChargingCompleted(car.CarInDB);
int chargeID = GetMaxChargeid(out DateTime chargeEnd);
int chargeID = GetMaxChargeid(out DateTime chargeEnd, out double? _);
using (MySqlConnection con = new MySqlConnection(DBConnectionstring))
{
con.Open();
Expand Down Expand Up @@ -7403,5 +7408,35 @@ from pos
}
}
}

internal double GetDrivenKm(DateTime startDate, DateTime endDate)
{
try
{
using (MySqlConnection con = new MySqlConnection(DBConnectionstring + ";Allow User Variables=True"))
{
con.Open();
using (MySqlCommand cmd = new MySqlCommand($@"SELECT max(odometer) - min(odometer)
FROM pos where carid = @carid and
Datum between @startdate and @enddate", con))
{
cmd.Parameters.AddWithValue("@carid", car.CarInDB);
cmd.Parameters.AddWithValue("@startdate", startDate);
cmd.Parameters.AddWithValue("@enddate", endDate);
var odo = cmd.ExecuteScalar();
if (odo != null && double.TryParse(odo.ToString(), out double drivenkm))
{
return drivenkm;
}
}
}
}
catch (Exception ex)
{
Logfile.Log(ex.ToString());
ex.ToExceptionless().Submit();
}
return 0;
}
}
}
4 changes: 2 additions & 2 deletions TeslaLogger/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
// übernehmen, indem Sie "*" eingeben:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.62.9.0")]
[assembly: AssemblyFileVersion("1.62.9.0")]
[assembly: AssemblyVersion("1.62.10.0")]
[assembly: AssemblyFileVersion("1.62.10.0")]

[assembly: InternalsVisibleTo("UnitTestsTeslaloggerNET8")]
[assembly: InternalsVisibleTo("UnitTestsTeslalogger")]
1 change: 1 addition & 0 deletions TeslaLogger/TelemetryConnection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public TelemetryConnection(Car car)
return;

parser = new TelemetryParser(car);
parser.InitFromDB();

t = new Thread(() => { Run(); });
t.Start();
Expand Down
141 changes: 116 additions & 25 deletions TeslaLogger/TelemetryParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public class TelemetryParser
public double lastSoc = 0.0;

public double lastChargingPower = 0.0;
double lastDCChargingPower = 0.0;

public String lastChargeState = "";

Expand Down Expand Up @@ -65,8 +66,35 @@ internal TelemetryParser(Car c)
lastRatedRange = car.CurrentJSON.current_battery_range_km;
}

public void InitFromDB()
{
try
{
car.dbHelper.GetMaxChargeid(out DateTime chargeStart, out double? _charge_energy_added);

double drivenAfterLastCharge = car.dbHelper.GetDrivenKm(chargeStart, DateTime.Now);
if (drivenAfterLastCharge > 0)
{
charge_energy_added = 0;
Log("Driving after last charge: " + drivenAfterLastCharge + " km -> charge_energy_added = 0");
}
else
{
charge_energy_added = _charge_energy_added;
Log("charge_energy_added from DB: " + charge_energy_added);
}
}
catch (Exception ex)
{
Log(ex.ToString());
car.CreateExceptionlessClient(ex).Submit();
}
}

private bool driving;
private bool _acCharging;
private string lastDetailedChargeState;

internal bool dcCharging
{
get => _dcCharging;
Expand Down Expand Up @@ -107,7 +135,7 @@ public bool Driving
{
if (value)
{
charge_energy_added = null;
charge_energy_added = 0;
}

driving = value;
Expand Down Expand Up @@ -357,20 +385,23 @@ private void InsertStates(dynamic j, DateTime d, string resultContent)
if (double.TryParse(v, NumberStyles.Any, CultureInfo.InvariantCulture, out double pressure))
{
pressure = Math.Round(pressure, 2);
switch (suffix)
if (databaseCalls)
{
case "Fl":
car.DbHelper.InsertTPMS(1, pressure, d);
break;
case "Fr":
car.DbHelper.InsertTPMS(2, pressure, d);
break;
case "Rl":
car.DbHelper.InsertTPMS(3, pressure, d);
break;
case "Rr":
car.DbHelper.InsertTPMS(4, pressure, d);
break;
switch (suffix)
{
case "Fl":
car.DbHelper.InsertTPMS(1, pressure, d);
break;
case "Fr":
car.DbHelper.InsertTPMS(2, pressure, d);
break;
case "Rl":
car.DbHelper.InsertTPMS(3, pressure, d);
break;
case "Rr":
car.DbHelper.InsertTPMS(4, pressure, d);
break;
}
}
}
}
Expand Down Expand Up @@ -530,8 +561,20 @@ private void InsertStates(dynamic j, DateTime d, string resultContent)
else if (key == "DetailedChargeState")
{
string DetailedChargeState = value["detailedChargeStateValue"];

if (!String.IsNullOrEmpty(DetailedChargeState))
{
lastDetailedChargeState = DetailedChargeState;

CheckDetailedChargeState(d);

if (IsCharging && DetailedChargeState == "DetailedChargeStateStopped")
{
Log("Stop Charging by DetailedChargeState");
acCharging = false;
dcCharging = false;
}

if (DetailedChargeState.Contains("DetailedChargeStateNoPower") ||
DetailedChargeState.Contains("DetailedChargeStateStarting") ||
DetailedChargeState.Contains("DetailedChargeStateCharging") ||
Expand All @@ -554,6 +597,29 @@ private void InsertStates(dynamic j, DateTime d, string resultContent)
}
}

private void CheckDetailedChargeState(DateTime d)
{
if (!IsCharging && lastDetailedChargeState == "DetailedChargeStateCharging")
{
if (lastFastChargerPresent)
{
if (lastPackCurrent > 1 || lastDCChargingPower > 1)
{
Log("Start DC Charging by DetailedChargeState Packcurrent: " + lastPackCurrent);
StartDCCharging(d);
}
}
else
{
if (lastPackCurrent > 1 || ACChargingPower > 1)
{
Log("Start AC Charging by DetailedChargeState Packcurrent: " + lastPackCurrent);
StartACCharging(d);
}
}
}
}

private void InsertCharging(dynamic j, DateTime d, string resultContent)
{
double ChargingEnergyIn = double.NaN;
Expand Down Expand Up @@ -648,6 +714,7 @@ private void InsertCharging(dynamic j, DateTime d, string resultContent)
string v1 = value["stringValue"];
if (double.TryParse(v1, out double ChargingPower))
{
lastDCChargingPower = ChargingPower;
lastChargingPower = ChargingPower;
car.CurrentJSON.current_charger_power = Math.Round(ChargingPower, 2);
changed = true;
Expand Down Expand Up @@ -881,27 +948,49 @@ private void handleLoginResponse(dynamic j)
{
dynamic response = j["Response"];
dynamic updated_vehicles = response["updated_vehicles"];

if (updated_vehicles == "1")
{
string cfg = j["Config"];
Log("LoginRespone: OK / Config: " + cfg);
return;
}
else

dynamic skipped_vehicles = response["skipped_vehicles"];

if (skipped_vehicles != null)
{
Log("LoginRespone ERROR: " + response);
car.CurrentJSON.FatalError = "Telemetry Login Error!!! Check Logfile!";
car.CurrentJSON.CreateCurrentJSON();
dynamic missing_key = skipped_vehicles["missing_key"];

if (response.ToString().Contains("not_found"))
{
Thread.Sleep(10 * 60 * 1000);
}
else if (response.ToString().Contains("token expired"))
if (missing_key is JArray arrayMissing_key)
{
Log("Login Error: token expired!");
car.webhelper.GetToken();
if (arrayMissing_key?.Count == 1)
{
dynamic mkvin = arrayMissing_key[0];
if (mkvin?.ToString() == car.Vin)
{
Log("LoginRespone: missing_key");
car.CurrentJSON.FatalError = "missing_key";
car.CurrentJSON.CreateCurrentJSON();
return;
}
}
}
}

Log("LoginRespone ERROR: " + response);
car.CurrentJSON.FatalError = "Telemetry Login Error!!! Check Logfile!";
car.CurrentJSON.CreateCurrentJSON();

if (response.ToString().Contains("not_found"))
{
Thread.Sleep(10 * 60 * 1000);
}
else if (response.ToString().Contains("token expired"))
{
Log("Login Error: token expired!");
car.webhelper.GetToken();
}
}
catch (Exception ex)
{
Expand Down Expand Up @@ -1126,6 +1215,8 @@ private void InsertBatteryTable(dynamic j, DateTime date, string resultContent)
lastPackCurrent = d;
lastPackCurrentDate = date;

CheckDetailedChargeState(date);

if (!acCharging && lastChargeState == "Enable")
{
var current = PackCurrent(j, date);
Expand Down
Binary file modified TeslaLogger/bin/TeslaLogger.exe
Binary file not shown.
2 changes: 1 addition & 1 deletion TeslaLogger/bin/changelog.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Version 1.62.9
# Version 1.62.10
- Bugfixes

# Version 1.62.5
Expand Down
Loading

0 comments on commit 86b69b5

Please sign in to comment.