NEWS
[Gelöst]Unplausible Werte in influxDB editieren ?
-
Hallo,
ich habe heute unplausible Werte (viel zu hoch) in meine InfuxDB bekommen, via Covid Adapter.
Damit ist die Grafana Langzeit Darstellung unbrauchbar geworden.
Gibt es eine einfache Möglichkeit die Werte zu editieren? Ähnlich wie bei MySQL? -
@Aiouh ja, du kannst einzelne Messungen in der Datenbank löschen
select * from "coronavirus-statistics.0.Canada.testsPerOneMillion" where value > 32000
diese nun angezeigten, kannst du mittels timestamp löschen, (timestamp ersetzen)
delete from "coronavirus-statistics.0.Canada.testsPerOneMillion" where time =15xxxxxxxx000000000
-
@crunchip said in Unplausible Werte in influxDB editieren ?:
select * from "coronavirus-statistics.0.Canada.testsPerOneMillion" where value > 32000
Danke, Das hört sich doch sehr gut an und... wo geb ich die statements ein ? Habe ja kein PHPmyAdmin für Influx .
-
@Aiouh wo geb ich die statements ein ? Habe ja kein PHPmyAdmin für Influx .
Auf der Console..
- influx
user@server:~$ influx Connected to http://localhost:8086 version 1.8.0 InfluxDB shell version: 1.8.0 >
-
show databases
-
use meinedatenbank
-
delete from usw.
-
-
Ich bin ein "Held"
Die ersten Werte hatte ich prima gelöscht bekommen.
Nun habe ich wieder völlig unplausible Werte drin, hab die auch selektiert, wollte aber beim Löschen einen Datumsbereich angeben und habe zu früh auf return gedrückt
(geht das überhaupt mit time >xxx and < yyy ?)
In dem Fall wäre es wohl cleverer gewesen einfach den Wert 17202 zu nehmen.
Habe mir damit jedenfalls alle Werte der Spalte gelöscht.
Kann ich nur diese Spalte aus dem Backup von Heute Nacht zurückholen? Falls ja, was ich doch hoffe... wie?
Danke, wie immer schon mal im Voraus> select * from "coronavirus-statistics.0.United_States.casesPerOneMillion" where value > 5600 name: coronavirus-statistics.0.United_States.casesPerOneMillion time ack from q value ---- --- ---- - ----- 1590713129797000000 true system.adapter.coronavirus-statistics.0 0 17202 1590714040876000000 true system.adapter.influxdb.0 0 17202 1590714918364000000 true system.adapter.influxdb.0 0 17202 1590715826299000000 true system.adapter.influxdb.0 0 17202 1590716721392000000 true system.adapter.influxdb.0 0 17202 1590717636510000000 true system.adapter.influxdb.0 0 17202 1590718522607000000 true system.adapter.influxdb.0 0 17202 1590719434556000000 true system.adapter.influxdb.0 0 17202 1590720324229000000 true system.adapter.influxdb.0 0 17202 1590721227213000000 true system.adapter.influxdb.0 0 17202 1590722126271000000 true system.adapter.influxdb.0 0 17202 1590723028462000000 true system.adapter.influxdb.0 0 17202 1590723917665000000 true system.adapter.influxdb.0 0 17202 1590724829708000000 true system.adapter.influxdb.0 0 17202 1590725728538000000 true system.adapter.influxdb.0 0 17202 1590726625993000000 true system.adapter.influxdb.0 0 17202 1590727523429000000 true system.adapter.influxdb.0 0 17202 1590728439777000000 true system.adapter.influxdb.0 0 17202 1590729321488000000 true system.adapter.influxdb.0 0 17202 1590730227769000000 true system.adapter.influxdb.0 0 17202 1590731127299000000 true system.adapter.influxdb.0 0 17202 1590732031127000000 true system.adapter.influxdb.0 0 17202 1590732928645000000 true system.adapter.influxdb.0 0 17202 > delete from "coronavirus-statistics.0.United_States.casesPerOneMillion" where time > 1590713129797
-
Dazu wäre es interessant zu erfahren, wie Du ein Backup Deiner Iflux-Datenbank machst... Da die Influxdb ein eigenständiges Programm auf Deinem Rechner darstellt unterliegt das backuppen der Datenbank Deiner Handarbeit und nicht z.B. dem backitup-Adapter des ioBroker. Es gibt Lösungen für das Backup der Datenbank - google liebt dich. Aber so lange Du das nicht eingestellt hast sind Deine Daten imho verloren...
-
Hilft Dir wahrscheinlich auch nicht mehr - aber ich habe in meiner Iobroker Dietpi VM Instanz ein influxdb_backup.sh Script erstellt, dass hat nur eine Zeile...:
sudo influxd backup -portable -database iobroker -host 127.0.0.1:8088 /tmp/iobroker_influx_backup
iobroker ist der Name der Datenbank - ein Restore des Backups/meiner kompletter Wetterstation-Daten hat schon einwandfrei funktioniert...
Werde dieses "manuelle" Backup noch zeitnah automatisieren. Leider macht es noch nicht der Backitup Adapter....
-
@XxJooO
Hi, ich mache bister kein extra Datenbank Backup, sondern ein komplettes des virtuellen Servers auf dem die DB läuft. Der ioBroker wird jede Nacht mit BackitUp und zusätzlich der Server per VM Imagebackup gesichert.
Zu Dumm dass ich vor meinen Löschversuchen kein Backup gezogen habe. Normalerweise mach ich sowas auch in meiner Testumgebung, dafür hab ich sie ja, warum nicht auch dieses mal ? Einfach nicht aufgepasst.
Auf jeden Fall wieder dazu gelernt. -
@crunchip Hallo, ich nochmal...
Ich versuche gerade alle Werte unter einem bestimmten Wert zu löschen> delete from "javascript.0.Eigene_Datenpunkte.Zisterne_Volumen" where value < 7500 ERR: shard 61: fields not supported in WHERE clause during deletion
das klappt so noch nicht. Da es sich um mehrere hundert Werte handelt, die wahllos über Wochen verstreut sind, ist das Löschen mit "timestamp" echt mühsam.
Gibt es keine andere Lösung ? -
-
siehe https://docs.influxdata.com/influxdb/v1.8/query_language/manage-database/#delete-series-with-delete
DELETE does not support fields in the WHERE clauseAlternative:
- Export der Daten als CSV
- In Excel importieren
- Werte mit kleiner 7500 entfernen
- Neue Daten mit INSERT wieder in die Datenbank schreiben
Was ist falsch an den 7500 Litern in der Zisterne?
-
Danke, wenn ich das script hinbekomme und damit künftig die falschen Werte vermeiden kann, tue ich mir das mit Export-Cleanup-Insert an, vorher eher nicht.
Tja, falsch daran ist, dass ich immer wieder Spitzen nach unten bekomme die eben falsch sind.
Woher die kommen weiss ich nicht. Wolte die falschen Werte per script abfangen, das klappt aber noch nicht (mein Jscript know how ist quasi Null. Ich mach hier trial and error).https://forum.iobroker.net/topic/33837/zulauf-einer-zisterne-in-liter-h-berechnen/35
Vielleicht stelle ich auch den ioBroker komplett um auf MySQL, dort funktioniert "normales" SQL... muss mal lesen ob es da Nachteile gibt
-
zeig doch mal Dein Skript. Spontan fällt mir ein, dass gerade an warmen Tagen Kondenswasser entweder die Messung durch Kurzschluss verfälscht oder eben der Abstand nicht korrekt gemessen werden kann, wenn Wasser auf dem Sensor steht...
Zum Skript fällt mir spontan ein:
Ich würde nicht den gemessenen Wert loggen, da Du ja sonst nicht verhindern kannst, dass er geloggt wurde, bevor Du ihn auf Plausibilität geprüft hast. Ich würde also eine Hilfsvariable loggen, die immer bei einer Werteänderung neu befüllt wird. Nur dann wenn der Wert =0 oder wenn der Wert in einer bestimmten Zeit um mehr als x-dm abgenommen hat, den letzten Wert davor in die Hilfsvariable nehmen und die aktuelle Messung ignorieren. Nur so als Denkanstoß...Grüße
-
@XxJooO Der Sensor ist ein sehr präziser Drucksensor, der wird (hoffe ich) keine Fehler produzieren. Ich vermute eher dass das mit dem Script, Laufzeiten, timeouts, Einfluss durch andere Scripts...zu tun hat.
Bin natürlich für jede Hilfe dankbar (die mir das von die beschriebene Verfahren "zusammenbaut", denn Programmieren kann ich nicht )
So siehts aus:const idSpannung = 'modbus.2.holdingRegisters.9_Zisterne_Füllhöhe_U'; const idHoehe = 'javascript.0.Eigene_Datenpunkte.Zisterne_Füllhöhe'; const idVol = 'javascript.0.Eigene_Datenpunkte.Zisterne_Volumen'; const idFluss = 'javascript.0.Eigene_Datenpunkte.Zisterne_Zufluss'; const L = 49.735; // Länge in dm const R = 8; // Radius in dm function u2h(U) { let h = (U-120) /24; // a und b durch konstante Werte ersetzen if(h > 2 * R) h = 2 * R; setState(idHoehe, Math.round(h * 100) / 10, true); // in cm mit 1 Nachkommastelle return h; // in dm } function h2V(h) { let V = L * (R * R * Math.acos(1 - h / R) - (R - h) * Math.sqrt(h * (2 * R - h))); setState(idVol, Math.round(V), true); return V; // in l } var h = u2h(getState(idSpannung).val); var lastV = h2V(h); var timer = null; var lc = getState(idSpannung).lc; on(idSpannung, function(dp) { h = u2h(dp.state.val); let V = h2V(h); if(V > lastV) { let fluss = 3600000 * (V - lastV) / (dp.state.lc - lc); // l/h lastV = V; lc = dp.state.lc; setState(idFluss, Math.round(fluss), true); if(timer) clearTimeout(timer); timer = setTimeout(function() { setState(idFluss, 0, true); timer = null; }, 1800000); // 30 Minuten } });
-
-
Nun habe ich wieder völlig unplausible Werte drin, hab die auch selektiert, wollte aber beim Löschen einen Datumsbereich angeben und habe zu früh auf return gedrückt
(geht das überhaupt mit time >xxx and < yyy ?)Ja das geht, hab das gleiche Problem gehabt und hab es mit dem Befehl im InfluxDBStudio löschen können.
DELETE from "Strom_Schlafzimmer_Tagesverbrauch" where time > '2020-11-02T13:34:00Z' and time < '2020-11-03T07:33:00Z'
-
@Michi_Pi DANKE !