NEWS
[gelöst] Funktion des influxdb-Befehl deleteAll
-
Hallo,
ich habe eine Frage zum Verständnis des deleteAll-Befehls für influxdb. In der Readme für delete state steht:
To delete ALL history data for some data point execute:
sendTo('influxdb.0', 'deleteAll', [ {id: 'mbus.0.counter.xxx'}, {id: 'mbus.0.counter.yyy'} ], result => console.log('deleted'));
Ziel soll sein, dass der Inhalt, also alle Messdaten des measurements "0_userdata.0.Strom.Netzbezug_clean" gelöscht werden.
Mein Code:
sendTo('influxdb.0', 'deleteAll', [ {id: '0_userdata.0.Strom.Netzbezug_clean'} ], result => console.log('deleted'));
Was aber passiert ist, dass anschließend die vaules lediglich mit "0" beschrieben werden. Im Log steht "deleted", aber diese Einträge sind im Log alle rot geschrieben.
In dem Fall entspricht also delete nicht dem von mir erwarteten Löschen der Daten. Ich möchte gerne den o.g. DP als temporären DP benutzen, eine Reihe über einen Filter da rein schreiben, anschließend was mit dieser Reihe machen und am Ende alle Mesurements in dem DP löschen, damit ich ihn neu beschreiben kann. In influx 1.x gab es die drop-Funktion, und die hat gemacht, was ich möchte. Allerdings kann ich die im influxdb-Adapter für influxDB2 nicht verwenden. Kann ich das anders hinbekommen?
Vielen Dank!
Jo -
Kann ich nicht nachvollziehen. Gib mal noch ein par Details preis:
- Adapterversion
- Datentyp
- Konfiguration der Instanz (Fields oder Tags)
- wo genau siehst du die "0"?
-
@marc-berg, oha, viele Fragen...
influxdb.0 v4.0.2
javascript.0 v8.0.3
js-controller 5.0.19
Node.js v18.20.2
NPM 10.5.0Datentyp des Objektes, das geholt wird
{ "common": { "name": "Netzbezug", "desc": "Manuell erzeugt", "role": "state", "type": "number", "read": true, "write": true, "def": 0, "custom": { "influxdb.0": { "enabled": true, "storageType": "Number", "aliasId": "Netzbezug", "debounceTime": 0, "blockTime": 0, "changesOnly": false, "changesRelogInterval": 0, "changesMinDelta": "0", "ignoreBelowNumber": "", "disableSkippedValueLogging": false, "enableDebugLogs": false, "debounce": "1000" } }, "unit": "W" }, "type": "state", "native": {}, "_id": "0_userdata.0.Strom.Netzbezug", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" }, "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1680665954663 }
Wird durch die influxdb-Abfrage geschrieben in
{ "common": { "name": "Netzbezug_clean", "desc": "Manuell erzeugt", "role": "state", "type": "number", "read": true, "write": true, "def": 0, "custom": { "influxdb.0": { "enabled": true, "storageType": "Number", "aliasId": "", "debounceTime": 0, "blockTime": 0, "changesOnly": true, "changesRelogInterval": "0", "changesMinDelta": "0", "ignoreBelowNumber": "0", "disableSkippedValueLogging": false, "enableDebugLogs": false, "debounce": "1000", "ignoreAboveNumber": "12000" } } }, "type": "state", "native": {}, "_id": "0_userdata.0.Strom.Netzbezug_clean", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" }, "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1712441907497 }
Konfiguration der Instanz (Fields oder Tags) - weiß ich leider nicht, was Du da meinst?
Die 0 sehe ich, wenn ich nach dem Versuch mit dem o.a. JS die Daten zu deleten, in die Tabelle schaue:
Gekommen sind sie von hier:
Dir wird auffallen, dass die timestamps unterschiedlich sind. Der Arbeitsablauf war wie folgt:
- Hole die Daten der letzten zwei Stunden aus dem DP "0_userdata.0.Strom.Netzbezug"
- Sind die values kleiner als 10, dann schreibe in den DP "0_userdata.0.Strom.Netzbezug_clean"
Das hat wohl soweit funktioniert. - dann lösche den Inhalt des DP "0_userdata.0.Strom.Netzbezug_clean", um eine andere Abfrage zu generieren mit dem o.a. Script.
Dabei wurden die Messpunkte in "0_userdata.0.Strom.Netzbezug_clean" mit dem Wert 0 beschrieben.
Erreichen möchte ich, dass in "0_userdata.0.Strom.Netzbezug_clean" keine Messwerte mehr sind, damit der DP bei der nächsten Abfrage wieder als temp-DP genutzt werden kann.Frage also: wie sieht ein JS aus, das alle Messwerte löscht?
Vielen Dank
Jo -
@xxjooo sagte in Funktion des influxdb-Befehl deleteAll:
Die 0 sehe ich, wenn ich nach dem Versuch mit dem o.a. JS die Daten zu deleten, in die Tabelle schaue:
Gekommen sind sie von hier:
Dir wird auffallen, dass die timestamps unterschiedlich sind.
Nein, das fällt mir nicht auf, weil du 2x dasselbe Image eingefügt hast.
dann lösche den Inhalt des DP "0_userdata.0.Strom.Netzbezug_clean", um eine andere Abfrage zu generieren mit dem o.a. Script.
Dabei wurden die Messpunkte in "0_userdata.0.Strom.Netzbezug_clean" mit dem Wert 0 beschrieben.Sehr mysteriös, denn die Funktion "deleteAll" gibt es gar nicht her, bestehende Werte zu ändern.
Frage also: wie sieht ein JS aus, das alle Messwerte löscht?
Das ist schon korrekt so, wie du es gemacht hast (ist ja kein Hexenwerk). Ich habe versucht, deine Konstellation so genau wie möglich nachzustellen. In jedem Fall werden bei mir alle Daten gelöscht.
Vielleicht es es nur ein Anzeigeproblem. Siehst die Daten direkt in der Datenbank? Kannst du Daten über die Oberfläche löschen?
-
danke für den letzten Hinweis, das kannte ich noch nicht. Werde versuchen, das in den nächsten Tagen noch einmal nachzustellen.
Ich habe auch noch einmal versucht, im Log nachzusehen, was eigentlich passiert ist. Im Log stehen dann viel mehr Fehler, als in der Konsole angezeigt wurden. Deshalb probiere ich es nochmal von vorne und muss dann auch das Log genauer beobachten.
Vielen Dank
JoPS: Das Löschen der Daten über die Oberfläche hat schon einmal funktioniert.
-
also manche Probleme sind vielleicht mit dem Geist der Elektronen erklärbar...
Nachdem ich es jetzt noch ein paar Mal mit immer dem gleichen Ergebnis probiert habe, habe ich der gesamten Proxmox-Maschine ihre Updates verpasst und alles neu gestartet - obwohl ich das einmal im Monat mache.
Und siehe, das Skript löscht jetzt die Daten wie gewünscht, der DP ist leer. Und auch vorher angezeigte Fehler im Log sind nicht mehr da.
Setze das auf gelöst.
Vielen Dank und Grüße