Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. InfluxDB mit Node-RED auslesen und schreiben - so geht's!

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    InfluxDB mit Node-RED auslesen und schreiben - so geht's!

    This topic has been deleted. Only users with topic management privileges can see it.
    • W
      woodbert last edited by

      Ich wollte die Daten, die der ioBroker in der influxDB anlegt, in Node-RED auslesen und dachte mir in meiner Einfalt, dass das "mal so eben" geht. Leider gibt es da ein paar Fallstricke - und anscheinend fand ich nicht die richtigen Suchbegriffe, um hier oder bei Google die Lösung zu finden.

      Ich bin einigermaßen vertraut mit SQL, aber bei influx ist die Philosphie komplett anders und ich stehe immer wieder mal auf dem Schlauch. Vielleicht kann ich hier mit einem kleinen Beitrag anderen eine lange Suche ersparen 😉

      Das Video hätte mir geholfen, aber ich fand es erst später: "Prescient Devices Inc." erklärt es bei YouTube in aller Kürze.

      Worauf dort nicht eingegangen wird und was mir viel Kopfzerbrechen bereitet hat, ist die Angabe der Influx-Version. Ich habe hier eine V 1.8.3, also dachte ich mir, dass ich bei der Konfiguration der influx-Nodes eben [1.8-flux] auswählen muss. Leider wird danach eine einfache Query mit SELECT unmöglich, man muss dann "flux sprechen", eine mir völlig unverständliche Variante zur Abfrage.
      Kurzum: unbedingt [1.x] auswählen:

      2021-11-11-094308 Screenshot .png

      Damit kann man dann wirklich einfache Abfragen machen wie z.B.

      SELECT * FROM test
      

      Wenn man auf die völlig abwegige Idee kommt, den letzten, also aktuellsten Eintrag auszulesen, macht man das so:

      SELECT * FROM test ORDER BY DESC LIMIT 1
      

      (Leider gibt es kein LAST oder ähnliches)

      Ich habe hier ein paar Beispiele zum Rumspielen angelegt, so sieht das aus:

      2021-11-11-093102 Screenshot .png

      Im ersten Inject-Node setze ich als Value mit JSONata einen Zufallswert 0-10, das "measurement" lege ich auch hier fest und nicht im influxdb-out-Node.
      Der Name der Database ist bei mir iobroker, das wird in bei der Konfiguration der DB eingetragen (s.o.).

      Das Auslesen der Daten ist in der mittleren Zeile "dumm", es werden einfach alle ("*") Einträge ausgelesen, das Ergebnis ist ein Array von Objects.

      2021-11-11-101117 Screenshot .png

      In der unteren Zeile ist das intelligent, es wird nur der letzte Eintrag geholt und dann im payload (dem Ergebnis der Query), das erste Objekt und darin das Field "value" abgefragt ("msg.payload[0].value"), damit bekomme ich den Wert, den ich oben reingesteckt habe.

      2021-11-11-101215 Screenshot .png

      "value" ist der Standardname, der für dumm eingestellte payloads von influx gewählt wird. Wer andere fields möchte, findet Beispiele im o.g. Video.

      Viel Erfolg!

      P.S.: Vor dem Installieren des angehängten Flows, muss noch in der Palette "node-red-contrib-influxdb" installiert werden, oder passiert das automatisch??

      flows-2.json

      R 1 Reply Last reply Reply Quote 1
      • R
        rewenode @woodbert last edited by

        @woodbert sagte in InfluxDB mit Node-RED auslesen und schreiben - so geht's!:

        (Leider gibt es kein LAST oder ähnliches)

        Das ist so nicht korrekt. Du kannst LAST() verwenden.

        Auszug aus einem fuction-node von mir:

        let qdevice = msg.payload.device; 
        let qserie  = msg.payload.serie;
        
        
        let query   = `SELECT LAST("value") AS "${qserie}" ` +
                      `FROM "${qdevice}" `;
        
        msg.query = query
        return msg;
        

        Gruß
        Reiner

        W 1 Reply Last reply Reply Quote 0
        • W
          woodbert @rewenode last edited by woodbert

          @rewenode
          Schick, ich danke dir! Habe ich übersehen.

          Um denselben "Output" zu bekommen muss ich dann aber das hier schreiben:

          SELECT LAST(value) AS value FROM test
          

          Ansonsten steht in den Objekten des Arrays "last" als key.

          R 2 Replies Last reply Reply Quote 0
          • R
            rewenode @woodbert last edited by

            @woodbert sagte in InfluxDB mit Node-RED auslesen und schreiben - so geht's!:

            Um denselben "Output" zu bekommen muss ich dann aber das hier schreiben:

            Wird wohl auf den Typ deiner Spalte value ankommen. Bei mir gehts mit "value". Wobei man "value" ja nicht wirklich als Spaltenbezeichner nehmen sollte - mein Fehler.
            Gibt übrigens auch FIRST()

            Und dann sollte man es aus Performacegründen mit GROUP BY kombinieren.
            Siehe hier https://stackoverflow.com/questions/29193898/influxdb-getting-only-last-value-in-query

            Gruß
            Reiner

            W 1 Reply Last reply Reply Quote 0
            • R
              rewenode @woodbert last edited by

              @woodbert Achtung, value (in meinem Beispiel) ist ein Spalte

              Gruß
              Reiner

              1 Reply Last reply Reply Quote 0
              • W
                woodbert @rewenode last edited by

                @rewenode sagte in InfluxDB mit Node-RED auslesen und schreiben - so geht's!:

                Und dann sollte man es aus Performacegründen mit GROUP BY kombinieren.
                Siehe hier https://stackoverflow.com/questions/29193898/influxdb-getting-only-last-value-in-query

                Hmm, ich sage doch, dass ich influx "nicht verstehe" 😉
                Immerhin steht bei stackoverflow, dass die schlechte Performance für InfluxDB v0.8 gilt, vielleicht ist das ja bei v1.8 behoben 😉

                1 Reply Last reply Reply Quote 0
                • M
                  Mauri 0 last edited by

                  @woodbert said in InfluxDB mit Node-RED auslesen und schreiben - so geht's!:

                  In der unteren Zeile ist das intelligent, es wird nur der letzte Eintrag geholt und dann im payload (dem Ergebnis der Query), das erste Objekt und darin das Field "value" abgefragt ("msg.payload[0].value"), damit bekomme ich den Wert, den ich oben reingesteckt habe.

                  Guten Morgen
                  Wo hast du diesen Term "msg.payload[0].value" eingegeben? denn ich möchte wirklich aus dem Array nur die Value als payload haben.... Die Lösung von Dir funktioniert ansonsten (hab den Flow importiert)
                  Danke für eure Antworten!

                  W mickym 2 Replies Last reply Reply Quote 0
                  • W
                    woodbert @Mauri 0 last edited by

                    @mauri-0
                    Was du oben siehst ist die Ausgabe eines debug-nodes.
                    Du kannst das natürlich auch in einen change-node schreiben und in msg.payload füllen.

                    1 Reply Last reply Reply Quote 1
                    • mickym
                      mickym Most Active @Mauri 0 last edited by

                      @mauri-0 Einfach aus dem Debug Fenster den Pfad kopieren und wie @woodbert bereits sagte die payload auf diesen Pfad mittels einer Change Node setzen:

                      666edba9-c4bb-4475-ba41-8fd703dfdc8c-image.png

                      copy path.gif

                      W 1 Reply Last reply Reply Quote 1
                      • W
                        woodbert @mickym last edited by

                        @mickym
                        Danke für die schöne Aufbereitung meines Vorschlags. Am iPhone von unterwegs war mir das doch zu schwierig 😊

                        M 1 Reply Last reply Reply Quote 1
                        • M
                          Mauri 0 @woodbert last edited by

                          @woodbert und @mickym Danke euch für eure Ausführungen!!👍

                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          691
                          Online

                          31.7k
                          Users

                          79.8k
                          Topics

                          1.3m
                          Posts

                          4
                          11
                          6485
                          Loading More Posts
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes
                          Reply
                          • Reply as topic
                          Log in to reply
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                          The ioBroker Community 2014-2023
                          logo