Ladelog auslesen

Fragen und Antworten zur Software hinter EVSE-WiFi
BrettMendoza
Beiträge: 1
Registriert: Fr 7. Apr 2023, 14:00

Re: Ladelog auslesen

Beitrag von BrettMendoza »

Ja, ich habe getan, was Sie geschrieben haben, und es hat funktioniert.

Mathias
Administrator
Beiträge: 222
Registriert: Di 12. Mai 2020, 09:12

Re: Ladelog auslesen

Beitrag von Mathias »

Hallo Jörg,

kannst du mal deinen Log-Export über die Log-Seite im GUI machen und die Werte, die dort ausgegeben werden zu den entsprechenden Ladungen vergleichen?

Eigentlich sollte der rEnd schon ein "Meter Reading End" sein. Also der Zählerstand beim Beenden des Ladevorgangs, sodass:
rEnd - reading = energy
sein sollte.

Jörg
Beiträge: 23
Registriert: So 7. Nov 2021, 13:42

Re: Ladelog auslesen

Beitrag von Jörg »

Hallo Mathias,

wenn du damit den csv-Export meinst, dann enthält dieser keinen Wert für rEnd, sondern nur diese Felder

Code: Alles auswählen

 Date;Duration;Energy;Price;Costs;StartReading;UID;Username
also die im Prinzip gleichen Felder wie die Ansicht in der GUI nur zusätzlich der Preis pro kWh und die StartReading.

Code: Alles auswählen

 Datum	Dauer	Energie	Kosten	UID	Benutzer
Wenn rEnd als Stopwert des Zählers im Log auftauchen würde wäre das natürlich super, dann würde ich die beiden Werte benutzen um die geladene Menge genau zu berechnen. In der GUI und im Log passiert das bei Energy gerundet auf die zweite Nachkommastelle also auf 10Wh genau.

Grüße
Jörg

Jörg
Beiträge: 23
Registriert: So 7. Nov 2021, 13:42

Re: Ladelog auslesen

Beitrag von Jörg »

Habe eben eine Ladung mal mit Chip gestartet und per Hand über WebUI gestoppt.
Dabei hat er in rEnd den korrekten Zählerstand geschrieben.

Code: Alles auswählen

"duration":8069000,"energy":24.74,"price":29.9,"reading":1441.593,"rEnd":1466.338
scheinbar macht es einen Unterschied, ob der Ladevorgang manuell oder automatisch durch das Fahrzeug beendet wird.

Hier mal ein Eintrag der durch das Fahrzeug selbst bei 80% gestoppt wurde.

Code: Alles auswählen

"duration":8284000,"energy":24.85,"price":29.9,"reading":1416.714,"rEnd":1359.313
Vielleicht hilft dir das bei der Lösung?

Wenn das schwierig abzufangen ist, wäre es vielleicht am einfachsten, die Berechung für energy mit der vollen Genauigkeit auszuführen (3 Nachkommastellen). Dann ist es egal was in rEnd steht, da man den Wert aus energy direkt verwenden könnte. In der WebUI könntest du es ja immer noch mit 2 Nachkommastellen darstellen, falls es dich da stört.

Jörg
Beiträge: 23
Registriert: So 7. Nov 2021, 13:42

Re: Ladelog auslesen

Beitrag von Jörg »

Hier mal die Version des Scripts für ein Linux-System, die soweit für mich funktioniert. Wie gesagt, wäre es schön, wenn zumindest der Wert energy die bestmögliche Genauigkeit enthalten könnte, wenn rEnd nicht zuverlässig mit dem Zählerstand nach Ladeende versorgt werden kann. Das Script muss natürlich ausführbar gesetzt werden und kann dann per Cronjob automatisch in regelmäßigen Abständen laufen (bei mir heißt die Datei script_evse.sh - das kann aber ein beliebiger Name sein).

Hab versucht, das Script einigermaßen verständlich zu kommentieren. Das Ding ist mit Hilfe von ChatGPT entstanden (hab keine Ahnung von Programmierung), ich lege also nicht die Hände dafür ins Feuer, dass da alle Regeln der ordnungsgemäßen Programmierkunst eingehalten wurden :).

Das Script erkennt, ob ein Ladevorgang läuft (duration und energy stehen beide auf 0) und erzeugt dann keinen Eintrag in der csv-Datei. Erst wenn kein Ladevorgang läuft, werden die fehlenden Einträge in der csv-Datei ergänzt. Weiterhin erstellt sie beim ersten Start die backup.csv zumindest mit Überschriften, für den Fall, dass gerade ein Ladevorgang laufen sollte. Also nicht wundern, wenn sie in dem Fall bis auf die Überschriften leer ist.

Vielleicht findet es ja noch der ein oder andere hilfreich. Bei mir läuft das auf einem Intel NUC Homeserver unter Ubuntu Server 22.04.

Was dort benötigt wird zur Bearbeitung von json-Dateien, ist "jq". Das wird installiert per
sudo apt update
sudo apt install -y jq

Code: Alles auswählen

#!/bin/bash

# Pfade zu Dateien definieren - für xxx.xxx.xxx.xxx die IP Adresse deines evse-Wifi eingeben und den gewünschten 
# Pfad zur backup.csv
# diese backup.csv sollte noch [b]nicht [/b]existieren und der Name kann natürlich auch nach Wunsch angepasst 
# werden in der Zeile csv_file......
json_file="http://xxx.xxx.xxx.xxx/getLog"
csv_file="/dein/Pfad/backup.csv"

# Letzten verarbeiteten Zeitstempel auslesen oder Standardwert setzen
if [ ! -f "$csv_file" ]; then
  last_timestamp="0"
else
  last_timestamp=$(tail -1 "$csv_file" | cut -d ";" -f 8 | tr -d '"')
  if [ "$last_timestamp" == "timestamp_original" ]; then
    last_timestamp="0"
  fi
fi

# JSON-Datei in CSV-Datei konvertieren und neue Einträge hinzufügen
# hier können natürlich auch die Überschriften nach Wunsch angepasst werden. Die Werte entsprechen folgenden aus
# dem json-file unter http://xxx.xxx.xxx.xxx/getLog
# Datum - timestamp, konvertiert in menschenlesbares Format
# Ladedauer (H:M:S) - duration, konvertiert in menschenlesbares Format
# geladene kWh - energy
# Strompreis (Cent/kWh) - price
# Startwert Zähler (kWh) - reading
# gestartet durch ChipID bzw. Vehicle/GUI - uid
# Username - username
# timestamp_original - timestamp

if [ ! -f "$csv_file" ]; then
  echo "Datum;Ladedauer (H:M:S);geladene kWh;Strompreis (Cent/kWh);Startwert Zähler (kWh);gestartet durch ChipID bzw. Vehicle/GUI;Username;timestamp_original" > "$csv_file"
fi

json_data=$(curl -s "$json_file")

last_entry_duration=$(echo "$json_data" | jq -r '.list[-1].duration')
last_entry_energy=$(echo "$json_data" | jq -r '.list[-1].energy')

if [[ $last_entry_duration -ne 0 || $last_entry_energy -ne 0 ]]; then
  # JSON-Datei in CSV-Datei konvertieren und neue Einträge hinzufügen
  curl -s "$json_file" | jq -r --arg last_timestamp "$last_timestamp" '.list[] | select(.timestamp > ($last_timestamp | tonumber)) | [(.timestamp | tonumber | strftime("%Y-%m-%d %H:%M:%S")), ((.duration / 1000) | strftime("%H:%M:%S")), (.energy | tostring | gsub("\\."; "~")), (.price | tostring | gsub("\\."; "~")), (.reading | tostring | gsub("\\."; "~")), .uid, .username, (.timestamp | tostring)] | @csv' | sed 's/,/;/g; s/~/,/g' >> "$csv_file"
fi

Jörg
Beiträge: 23
Registriert: So 7. Nov 2021, 13:42

Re: Ladelog auslesen

Beitrag von Jörg »

@Mathias
kann es sein, dass sich der Haken bei API Call einfach selbst "deaktiviert". Hatte jetzt nach längerer Zeit mal die csv aus meinem Script kontrolliert und gesehen, dass dort länger nichts passiert ist. Grund war wieder dieser "not found" Fehler aufgrund des nicht gesetzten Hakens. Ein Update seit damals hatte ich nicht ausgeführt, daran kann es also nicht liegen.
Jörg hat geschrieben:
Di 28. Mär 2023, 07:52
Hallo Mathias,
kaum macht man's richtig, schon klappts :). Danke dir!

Viele Grüße
Jörg

Antworten