Re: Ladelog auslesen
Verfasst: Fr 7. Apr 2023, 14:09
Ja, ich habe getan, was Sie geschrieben haben, und es hat funktioniert.
Plattform für den Austausch über Themen rund um EVSE-WiFi
https://board.evse-wifi.de/
Code: Alles auswählen
Date;Duration;Energy;Price;Costs;StartReading;UID;Username
Code: Alles auswählen
Datum Dauer Energie Kosten UID Benutzer
Code: Alles auswählen
"duration":8069000,"energy":24.74,"price":29.9,"reading":1441.593,"rEnd":1466.338
Code: Alles auswählen
"duration":8284000,"energy":24.85,"price":29.9,"reading":1416.714,"rEnd":1359.313
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