4.8 KiB
4.8 KiB
InfluxDB 1.8 SQL Implementation - Dokumentation
Übersicht
Diese Datei (databases/influx_sql.js) implementiert die gleiche Funktionalität wie databases/influx_flux.js, aber für InfluxDB 1.8 mit InfluxQL anstatt Flux-Abfragen.
Wichtige Unterschiede zu InfluxDB 2.0/Flux
Datenschema-Unterschiede
- InfluxDB 1.8: Speichert nur
LA_max,LA_min,LA_eq(alle in dB) - InfluxDB 2.0: Speichert zusätzlich
E10tel_eqals vorberechneten linearen Wert (10^(LA_max/10))
Datenkonvertierung
Da InfluxDB 1.8 kein E10tel_eq Feld hat, wird es zur Laufzeit berechnet:
E10tel_eq = Math.pow(10, LA_max / 10)
Konfiguration
- InfluxDB 1.8: Verwendet Username/Password-Authentifizierung
- InfluxDB 2.0: Verwendet Token-basierte Authentifizierung
- Endpoint:
/queryfür Lesen,/writefür Schreiben (statt/api/v2/...)
Umgebungsvariablen
# InfluxDB 1.8 Konfiguration
INFLUXHOST=localhost
INFLUXPORT=8086
INFLUXUSER=username # Neu für 1.8
INFLUXPASS=password # Neu für 1.8
INFLUXDB=sensor_data # Database statt Bucket
Logarithmische Mittelwertberechnung
Problem
LAmax-Werte sind logarithmische Werte (Dezibel). Ein einfacher arithmetischer Mittelwert ist mathematisch falsch.
Datenschema-Unterschiede
- InfluxDB 1.8: Nur
LA_max(dB) verfügbar →E10tel_eqwird zur Laufzeit berechnet - InfluxDB 2.0:
E10tel_eqbereits als10^(LA_max/10)gespeichert
Implementierung in InfluxDB 1.8
// 1. Konvertierung LA_max → E10tel_eq zur Laufzeit
const e10tel = Math.pow(10, lamax / 10)
// 2. Mittelwert der E10tel-Werte
const e10telMean = e10telValues.reduce((sum, val) => sum + val, 0) / e10telValues.length
// 3. Rückkonvertierung zu dB für n_AVG
const n_AVG = 10.0 * Math.log10(e10telMean)
Dies entspricht exakt der Flux-Version:
|> aggregateWindow(every: 1h, fn: mean, createEmpty: false)
|> map(fn: (r) => ({r with _value: (10.0 * math.log10(x: r._value))}))
Funktionen
fetchActData(opts)
Zweck: Abrufen aktueller/historischer Sensordaten
Parameter:
opts.sensorid: Sensor-IDopts.start: Startzeit (z.B. "now() - 1h")opts.stop: Endzeit (z.B. "now()")opts.sort: Sortierung (1 = aufsteigend, -1 = absteigend)
InfluxQL-Query:
SELECT *
FROM "measurements"
WHERE "sid" = 'sensor_id'
AND time >= start_time
AND time <= stop_time
ORDER BY time ASC/DESC
fetchNoiseAVGData(opts)
Zweck: Berechnung von Lärmstatistiken mit korrekter logarithmischer Mittelwertbildung
Parameter:
opts.sensorid: Sensor-IDopts.start: Startzeitopts.stop: Endzeitopts.peak: Schwellenwert für Peak-Zählung (dB)opts.long: Vollständige Daten (true) oder nur Zusammenfassung (false)
Besonderheiten:
- Verwendet multiple InfluxQL-Queries (da InfluxQL keine komplexen Joins wie Flux unterstützt)
- Kombiniert Ergebnisse in JavaScript
- Korrekte logarithmische Mittelwertberechnung für LAmax-Werte
Flux vs. InfluxQL Mapping
| Flux-Operation | InfluxQL-Äquivalent |
|---|---|
from(bucket) |
FROM "measurement" |
range(start, stop) |
WHERE time >= start AND time <= stop |
filter(fn: (r) => r.sid == "x") |
WHERE "sid" = 'x' |
aggregateWindow(every: 1h, fn: mean) |
GROUP BY time(1h) mit mean() |
pivot() |
Mehrere Spalten in SELECT |
join() |
Multiple Queries + JavaScript-Kombination |
Beispiel-Nutzung
import { fetchActData, fetchNoiseAVGData } from './databases/influx_sql.js'
// Aktuelle Daten abrufen
const actData = await fetchActData({
sensorid: 'noise_001',
start: 'now() - 1h',
stop: 'now()',
sort: 1
})
// Lärmstatistiken mit Peak-Zählung
const noiseStats = await fetchNoiseAVGData({
sensorid: 'noise_001',
start: 'now() - 24h',
stop: 'now()',
peak: 70,
long: false
})
Rückgabewerte
Beide Funktionen geben ein Objekt zurück:
{
err: null, // Fehler oder null
values: [ // Array mit Ergebnissen
{
_time: "2025-10-10T10:00:00.000Z",
// ... weitere Felder je nach Funktion
}
]
}
Migration von Flux zu InfluxQL
- Umgebungsvariablen anpassen (siehe oben)
- Import ändern:
from './databases/influx_flux.js'→from './databases/influx_sql.js' - Funktionsaufrufe bleiben identisch - gleiche Parameter und Rückgabewerte
- InfluxDB-Server auf Version 1.8 umstellen
Vorteile der InfluxQL-Implementierung
- Kompatibilität: Funktioniert mit älteren InfluxDB 1.8 Installationen
- Korrekte Mathematik: Logarithmische Mittelwerte für Dezibel-Werte
- Identische API: Drop-in-Replacement für Flux-Version
- Performance: Optimierte Queries für InfluxDB 1.8