Inhaltsverzeichnis

7. Daten ins CSV Format konvertieren

Das nachfolgende Beispiel stammt vom LoxForum's User deepflash: https://www.loxforum.com/forum/projektforen/loxberry/plugins/315626-stats4lox-das-statistik-plugin?p=465312#post465312

Anleitung

Das nachfolgende Bash-Skript liest die Influxdb aus und wandelt alle Messkanäle in einzelne csv-Dateien um. Folgende Zeilen müssen angepasst werden:

Das Influxdb Passwort bekommt man über die credentials Datei unter /opt/loxberry/config/stats4lox und die IP ist diejenige vom LoxBerry. Das Skript muss vor dem Ausführen mit chmod +x <scriptname> ausführbar gemacht werden.

Skript

influx2csv.sh
#!/bin/bash
 
export LC_ALL=C # Enforce clean ASCII output
 
INFLUX_HOST="IPLoxberry"
DB_NAME="stats4lox"
USER="stats4lox"
PASSWORD="PW"
 
# Hole alle Measurements als Array
readarray -t MEASUREMENTS < <(
curl -skG "https://$INFLUX_HOST:8086/query?db=$DB_NAME" \
--user "$USER:$PASSWORD" \
--data-urlencode "q=SHOW MEASUREMENTS" \
-H "Accept: application/json" | \
jq -r '.results[0].series[0].values[][0]'
)
 
for MEASUREMENT in "${MEASUREMENTS[@]}"; do
echo "=== Exportiere Measurement: $MEASUREMENT ==="
 
# Roh-CSV mit Zeit und Default Spalte exportieren
curl -sk -G "https://$INFLUX_HOST:8086/query?db=$DB_NAME" \
--user "$USER:$PASSWORD" \
--data-urlencode "q=SELECT time, "Default" FROM "$MEASUREMENT"" \
-H 'Accept: application/csv' > "${MEASUREMENT}_raw.csv"
 
LINECOUNT=$(wc -l < "${MEASUREMENT}_raw.csv")
if [[ "$LINECOUNT" -le 1 ]]; then
echo "!!! Keine Daten für $MEASUREMENT - Überspringe Export"
rm -f "${MEASUREMENT}_raw.csv"
continue
fi
 
# Kopfzeile ersetzen und nur Zeit und Default-Werte extrahieren
{
echo "time,${MEASUREMENT}"
tail -n +2 "${MEASUREMENT}_raw.csv" | awk -F',' '{print $3 "," $4}'
} > "${MEASUREMENT}.csv"
 
rm -f "${MEASUREMENT}_raw.csv"
echo ">>> Export abgeschlossen: ${MEASUREMENT}.csv"
done
 
echo "=== Alle Messungen exportiert ==="