Mit Form Daten zu InfluxDB schreiben

Hallo,
bin neu hier und habe eine Frage zur Umsetzung.

Ich habe aktuell eine InfluxDB laufen und würde gerne dort Manuell Daten aus Node-Red schreiben.
ich habe mir im Dashboard eine Form erstellt. Diese hat zwei Eingabefenster EINGABE A und EINGABE B. Diese Daten sollen dann zu Influx geschrieben werden.
Habe mittlerweile alles möglich versucht, bekomme aber kein Ergebnis zu Stande.
Verwende aktuell Form + Join NODE. Bei Function bin ich wohl gescheitert.
Fehler ist immer objects Objects.
Würde mich über Unterstützung freuen.

Hallo Alex,
poste doch mal Deinen Flow hier; dann können wir uns das anschauen.

Grüße, Ralph

[
    {
        "id": "ae1d1f567967af54",
        "type": "tab",
        "label": "Zählerstand",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "058484bfcfca5c39",
        "type": "join",
        "z": "ae1d1f567967af54",
        "name": "Objekt für InfluxDB",
        "mode": "custom",
        "build": "object",
        "property": "payload",
        "propertyType": "msg",
        "key": "topic",
        "joiner": "\\n",
        "joinerType": "str",
        "accumulate": false,
        "timeout": "",
        "count": "1",
        "reduceRight": false,
        "reduceExp": "",
        "reduceInit": "",
        "reduceInitType": "",
        "reduceFixup": "",
        "x": 830,
        "y": 400,
        "wires": [
            []
        ]
    },
    {
        "id": "3205f6e151b1bb0c",
        "type": "influxdb out",
        "z": "ae1d1f567967af54",
        "influxdb": "72e5611c.85f388",
        "name": "Test-DB",
        "measurement": "Test-DB",
        "precision": "",
        "retentionPolicy": "",
        "database": "db",
        "precisionV18FluxV20": "s",
        "retentionPolicyV18Flux": "",
        "org": "organisation",
        "bucket": "bucket",
        "x": 1160,
        "y": 160,
        "wires": []
    },
    {
        "id": "26606d041b6a39f1",
        "type": "ui_form",
        "z": "ae1d1f567967af54",
        "name": "Gas-Wasser",
        "label": "Eingabe",
        "group": "e3b838f7.b1f5b",
        "order": 14,
        "width": 0,
        "height": 0,
        "options": [
            {
                "label": "Wasser",
                "value": "A",
                "type": "number",
                "required": false,
                "rows": null
            },
            {
                "label": "Gas",
                "value": "B",
                "type": "number",
                "required": false,
                "rows": null
            }
        ],
        "formValue": {
            "A": "",
            "B": ""
        },
        "payload": "",
        "submit": "submit",
        "cancel": "cancel",
        "topic": "topic",
        "topicType": "msg",
        "splitLayout": true,
        "className": "",
        "x": 170,
        "y": 260,
        "wires": [
            [
                "e0e68209bc1c61e0"
            ]
        ]
    },
    {
        "id": "215b61ffa025ba97",
        "type": "debug",
        "z": "ae1d1f567967af54",
        "name": "Zähler Wasser",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 920,
        "y": 120,
        "wires": []
    },
    {
        "id": "e0e68209bc1c61e0",
        "type": "function",
        "z": "ae1d1f567967af54",
        "name": "test",
        "func": "var topic = msg.topic;\nvar payload = msg.payload;\nmsg.topic = \"zaehler\"\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 390,
        "y": 240,
        "wires": [
            [
                "215b61ffa025ba97",
                "3205f6e151b1bb0c"
            ]
        ]
    },
    {
           },
   ]

image

Hallo Alex!
Ich versuche mal zu interpretieren: Du möchtest die beiden Werte getrennt in die DB übertragen. Die Frage wäre dann, wie Du die msg aus Gas-Wasser so auftrennst, dass zwei einzelne msg entstehen. Hab' ich das so richtig verstanden?

Hallo,
ja das wäre die eine Frage. Ich kann es gern auch trennen und einzelne Eingaben tätigen.
Nur wie bekomme ich es in die DB geschrieben um es auch später mit Grafana auszuwerten.
Hast du eine Lösung für mich?

Hallo!
Ich bin mir nicht sicher, ob ich hier helfen kann - da ich das Problem noch nicht erkenne. Nach der Dokumentation des node-red-contrib-influxdb kommen die Daten passend formatiert aus dem ui_form Node heraus:

{"payload":{"A":5,"B":7},"socketid":"kFvclg63kNY2UD5AAAAB","_msgid":"c62599c951adfd90"}

Wo entsteht dann der angesprochene Fehler?

Ich bekomme einen Fehler. In der DB sind keine Werte vorhanden.

Ziel ist es eigentlich 1x im Monat die Werte vom Zähler manuell in die Datenbank zu speichern um dann mit Grafana die Statistik zu machen.

Dafür brauche ich eigentlich nur zwei Spalten/Werte: Datum und der Wert selbst.

Wenn ich von der Form Node den Wert sende, kann es die DB nicht verarbeiten.

ich hoffe ich kann dir hierbei etwas helfen.

[
    {
        "id": "1e144523d41cf2c2",
        "type": "ui_form",
        "z": "c2279a350607882c",
        "name": "",
        "label": "",
        "group": "ec48ea8.9196518",
        "order": 11,
        "width": 0,
        "height": 0,
        "options": [
            {
                "label": "Wasser",
                "value": "wasser",
                "type": "number",
                "required": false,
                "rows": null
            },
            {
                "label": "Gas",
                "value": "gas",
                "type": "number",
                "required": false,
                "rows": null
            }
        ],
        "formValue": {
            "wasser": "",
            "gas": ""
        },
        "payload": "",
        "submit": "submit",
        "cancel": "cancel",
        "topic": "topic",
        "topicType": "msg",
        "splitLayout": "",
        "className": "",
        "x": 750,
        "y": 1120,
        "wires": [
            [
                "b5a4ca7067ee4caf",
                "2e47e3732cf47c5f"
            ]
        ]
    },
    {
        "id": "b5a4ca7067ee4caf",
        "type": "debug",
        "z": "c2279a350607882c",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "x": 950,
        "y": 1060,
        "wires": []
    },
    {
        "id": "c24655e129d375b8",
        "type": "influxdb out",
        "z": "c2279a350607882c",
        "influxdb": "eeb221fb.ab27f",
        "name": "",
        "measurement": "test",
        "precision": "",
        "retentionPolicy": "",
        "database": "database",
        "precisionV18FluxV20": "ms",
        "retentionPolicyV18Flux": "",
        "org": "organisation",
        "bucket": "bucket",
        "x": 1180,
        "y": 1160,
        "wires": []
    },
    {
        "id": "2e47e3732cf47c5f",
        "type": "change",
        "z": "c2279a350607882c",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "fields.timestamp",
                "pt": "msg",
                "to": "",
                "tot": "date"
            },
            {
                "t": "set",
                "p": "fields.wasser",
                "pt": "msg",
                "to": "payload.wasser",
                "tot": "msg"
            },
            {
                "t": "set",
                "p": "fields.gas",
                "pt": "msg",
                "to": "payload.gas",
                "tot": "msg"
            },
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "$append(fields,tags)",
                "tot": "jsonata"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 950,
        "y": 1160,
        "wires": [
            [
                "c24655e129d375b8"
            ]
        ]
    },
    {
        "id": "ec48ea8.9196518",
        "type": "ui_group",
        "name": "gas-wasser",
        "tab": "1cd8ae7ddb7d49a6",
        "order": 7,
        "disp": true,
        "width": "15",
        "collapse": false,
        "className": ""
    },
    {
        "id": "eeb221fb.ab27f",
        "type": "influxdb",
        "hostname": "192.168.178.115",
        "port": "8086",
        "protocol": "http",
        "database": "test",
        "name": "test",
        "usetls": false,
        "tls": "d50d0c9f.31e858",
        "influxdbVersion": "1.x",
        "url": "http://localhost:8086",
        "rejectUnauthorized": true
    },
    {
        "id": "1cd8ae7ddb7d49a6",
        "type": "ui_tab",
        "name": "GasWasser",
        "icon": "dashboard",
        "disabled": false,
        "hidden": false
    },
    {
        "id": "d50d0c9f.31e858",
        "type": "tls-config",
        "name": "",
        "cert": "",
        "key": "",
        "ca": "",
        "certname": "",
        "keyname": "",
        "caname": "",
        "servername": "",
        "verifyservercert": false
    }
]

Bildschirmfoto 2022-11-02 um 22.52.29

Bildschirmfoto 2022-11-02 um 22.50.59

Bildschirmfoto 2022-11-02 um 22.52.38


hierbei müssten allerdings immer beide Werte (Gas und Wasser) eingetragen.. schöner wäre ja auch noch eine Lösung für ein und/entweder/oder.
Trägt man jetzt nur einen Wert ein, dann wird dieser leider noch nicht in der Datenbank gespeichert.
(Aber gut - ich mach das hier so zum ersten mal ^^)

Hallo MrThiemann,

vielen Dank. Das ist genau das, was ich versucht habe darzustellen.

Bin aber nicht zu dem Change Node gegangen.

Grundsätzlich werden beide Werte bei mir eingetragen.

Wäre ggf. auch eigene Datumseingabe möglich? So, dass auch Rückwirkende Eingaben möglich wären?

VG

Hy, hat etwas gedauert...

also du könntest in der form-node ein Element mit dem Typ "Datum" hinzufügen.

In der change-node setzt du dann ein msg.fields.datum zu msg.value.datum ein.
Dann wird dir auch eine Spalte "Datum" in der Datenbank angezeigt.

[
    {
        "id": "aab735e3d2456f99",
        "type": "change",
        "z": "c2279a350607882c",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "fields.timestamp",
                "pt": "msg",
                "to": "",
                "tot": "date"
            },
            {
                "t": "set",
                "p": "fields.wasser",
                "pt": "msg",
                "to": "payload.wasser",
                "tot": "msg"
            },
            {
                "t": "set",
                "p": "fields.gas",
                "pt": "msg",
                "to": "payload.gas",
                "tot": "msg"
            },
            {
                "t": "set",
                "p": "fields.datum",
                "pt": "msg",
                "to": "payload.datum",
                "tot": "msg"
            },
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "$append(fields,tags)",
                "tot": "jsonata"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 450,
        "y": 860,
        "wires": [
            [
                "483848884b8388ed"
            ]
        ]
    }
]

Guten morgen, habe es mal so angepasst. Dann spukt die Datenbank folgende Werte aus

Wie kann ich die Spalte Eingabedatum nur einmal darstellen?
EDIT: GELÖST:

Eventuell noch hier ein Anmerkung. Ich habe den Timestamp entfernt und nur das Datum Feld ich der Nutzung.

1 Like