Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Node-Red
  5. NodeRED Logging mit InfluxDB 2.0

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.1k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

NodeRED Logging mit InfluxDB 2.0

Geplant Angeheftet Gesperrt Verschoben Node-Red
14 Beiträge 4 Kommentatoren 1.8k Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M Offline
    M Offline
    michisa86888
    schrieb am zuletzt editiert von michisa86888
    #1

    Hallo zusammen,
    ich würde gerne meine Heizung die über Mqtt sendet über NodeRED aufbereiten damit mit InfluxDB geloggt werden kann, und später dann für Grafana verwendet werden kann.

    Habe nun die einzelnen mqttin nodes angelegt und die Werte sehe ich dann auch in der Debug Ausgabe. Nun will ich diese über ein funktion Node so aufbereiten das alles unter z.B. measuremt HargassnerHSV läuft. Wie kann ich das ganze über eine function Node realisieren? Oder brauch ich für jedes mqttin eine extra function und auch influxdb Note?
    Unbenannt.JPG

    Marc BergM mickymM 2 Antworten Letzte Antwort
    0
    • M michisa86888

      Hallo zusammen,
      ich würde gerne meine Heizung die über Mqtt sendet über NodeRED aufbereiten damit mit InfluxDB geloggt werden kann, und später dann für Grafana verwendet werden kann.

      Habe nun die einzelnen mqttin nodes angelegt und die Werte sehe ich dann auch in der Debug Ausgabe. Nun will ich diese über ein funktion Node so aufbereiten das alles unter z.B. measuremt HargassnerHSV läuft. Wie kann ich das ganze über eine function Node realisieren? Oder brauch ich für jedes mqttin eine extra function und auch influxdb Note?
      Unbenannt.JPG

      Marc BergM Offline
      Marc BergM Offline
      Marc Berg
      Most Active
      schrieb am zuletzt editiert von Marc Berg
      #2

      @michisa86888
      Ich glaube kaum, dass dir hier jemand direkt helfen kann, wenn du nicht offenlegst, wie der Payload aussieht.

      Abgesehen davon würde ich die zu loggenden Daten einfach in manuell angelegte Datenpunkte schreiben und mit dem influxdb Adapter wegschreiben. Das finde ich einfacher und weniger fehleranfällig. Außerdem hast du die DP gleich parat, wenn du auf dieser Basis noch andere Dinge automatisieren willst.

      NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+RabbitMQ+Grafana

      Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

      Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

      1 Antwort Letzte Antwort
      0
      • M michisa86888

        Hallo zusammen,
        ich würde gerne meine Heizung die über Mqtt sendet über NodeRED aufbereiten damit mit InfluxDB geloggt werden kann, und später dann für Grafana verwendet werden kann.

        Habe nun die einzelnen mqttin nodes angelegt und die Werte sehe ich dann auch in der Debug Ausgabe. Nun will ich diese über ein funktion Node so aufbereiten das alles unter z.B. measuremt HargassnerHSV läuft. Wie kann ich das ganze über eine function Node realisieren? Oder brauch ich für jedes mqttin eine extra function und auch influxdb Note?
        Unbenannt.JPG

        mickymM Online
        mickymM Online
        mickym
        Most Active
        schrieb am zuletzt editiert von mickym
        #3

        @michisa86888 Ich verstehe nicht warum Du wieder function Nodes verwenden willst. Ich versteh es einfach nicht, man will doch nicht alles codieren?

        Es geht doch erst mal darum, wie Du Deine Daten aufbereiten willst. Wenn Du keine Tags verwenden willst, dann schreibst Du doch einfach ein Objekt in die InfluxDB Node.

        a5d69b3a-d542-4773-9675-39ad0915869f-image.png

        Also schau - wie Du das aufbauen willst und versuche function Nodes wenn immer möglich zu vermeiden, sonst kannst ja gleich codieren.

        Wenn Du nur fields brauchst, musst doch nur ein Objekt schreiben:

        Wenn Du tags mit haben willst, dann halt ein Array mit 2 Objekten (einmal fields und einmal tags).

        Ist also in meinen Augen vollständiger Schwachsinn hier mit einer function Node zu arbeiten.

        Im Prinzip musst du doch nur die payload auf den Feldnamen verschieben.

        dfe38630-0189-4c03-a490-67d346653e32-image.png

        8ff2c867-42f9-4214-8ef7-63fa7e04245b-image.png

        Wenn Du aus dem mqtt-topic automatisiert den Feldnamen extrahieren kannst, dann langt natürlich eine Change Node. Function Nodes hier zu nutzen ist einfach nur ....

        Du willst ja nicht ein Objekt mit allen Feldern haben, sondern die Daten so loggen wie sie reinkommen.

        Wenn Du unbedingt codieren willst mit function Nodes - dann musst halt mit einem switch und dem topic alles codieren:

        e623c20c-4229-4ac2-93fb-4486e4254c6c-image.png

        Ich finde es halt nur :astonished:

        switch (msg.topic) {
            case "Außentemp":
                // code block
                msg.payload = { "aussentemp": msg.payload }
                break;
            case "Boilertemp":
                // code block
                msg.payload = {"boilertemp" : msg.payload}
                break;
        }
        return msg;
        

        7a03055d-5f27-4bf7-9599-181c3d6509a1-image.png

        ================================================

        Wenn man die End-Topics aus dem MQTT direkt als Feldnamen verwenden kann, dann kann man das auch alles mit einer Change Node realisieren:

        c744b888-9db4-418b-9472-ae3d78b9da54-image.png

        Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

        M 1 Antwort Letzte Antwort
        0
        • mickymM mickym

          @michisa86888 Ich verstehe nicht warum Du wieder function Nodes verwenden willst. Ich versteh es einfach nicht, man will doch nicht alles codieren?

          Es geht doch erst mal darum, wie Du Deine Daten aufbereiten willst. Wenn Du keine Tags verwenden willst, dann schreibst Du doch einfach ein Objekt in die InfluxDB Node.

          a5d69b3a-d542-4773-9675-39ad0915869f-image.png

          Also schau - wie Du das aufbauen willst und versuche function Nodes wenn immer möglich zu vermeiden, sonst kannst ja gleich codieren.

          Wenn Du nur fields brauchst, musst doch nur ein Objekt schreiben:

          Wenn Du tags mit haben willst, dann halt ein Array mit 2 Objekten (einmal fields und einmal tags).

          Ist also in meinen Augen vollständiger Schwachsinn hier mit einer function Node zu arbeiten.

          Im Prinzip musst du doch nur die payload auf den Feldnamen verschieben.

          dfe38630-0189-4c03-a490-67d346653e32-image.png

          8ff2c867-42f9-4214-8ef7-63fa7e04245b-image.png

          Wenn Du aus dem mqtt-topic automatisiert den Feldnamen extrahieren kannst, dann langt natürlich eine Change Node. Function Nodes hier zu nutzen ist einfach nur ....

          Du willst ja nicht ein Objekt mit allen Feldern haben, sondern die Daten so loggen wie sie reinkommen.

          Wenn Du unbedingt codieren willst mit function Nodes - dann musst halt mit einem switch und dem topic alles codieren:

          e623c20c-4229-4ac2-93fb-4486e4254c6c-image.png

          Ich finde es halt nur :astonished:

          switch (msg.topic) {
              case "Außentemp":
                  // code block
                  msg.payload = { "aussentemp": msg.payload }
                  break;
              case "Boilertemp":
                  // code block
                  msg.payload = {"boilertemp" : msg.payload}
                  break;
          }
          return msg;
          

          7a03055d-5f27-4bf7-9599-181c3d6509a1-image.png

          ================================================

          Wenn man die End-Topics aus dem MQTT direkt als Feldnamen verwenden kann, dann kann man das auch alles mit einer Change Node realisieren:

          c744b888-9db4-418b-9472-ae3d78b9da54-image.png

          M Offline
          M Offline
          mike1976
          schrieb am zuletzt editiert von mike1976
          #4

          @mickym
          Sorry das ich jetzt mal ganz blöd frage:

          Filter 1 ist = _measurment (sagen wir mal, "Quelle")
          Filter 2 ist = _field (Namen der Temperaturen)

          so ich würde aber gerne noch 1 bis 2 filterwörter in die Nachricht einabuen?
          Wie müsste das dann ausehen?

          Würde gerne den wert zb, in diesen FIlter schreiben:

           "ms/sec" + "," + "Info=" + "log1" + "," + "Ort=" + "Dach" + "," + "Gerät=" + "" + " " + "L3=" + l3 + " " + time
          

          der L3 wert wäre dann also in: Field _measurment: ms/sec -> Field Info: log1 -> Field Ort: Dach -> Field Gerät: L3

          Hoffe ich habe mich so einigermassen verständlich asugedrückt 😁

          mickymM 1 Antwort Letzte Antwort
          0
          • M mike1976

            @mickym
            Sorry das ich jetzt mal ganz blöd frage:

            Filter 1 ist = _measurment (sagen wir mal, "Quelle")
            Filter 2 ist = _field (Namen der Temperaturen)

            so ich würde aber gerne noch 1 bis 2 filterwörter in die Nachricht einabuen?
            Wie müsste das dann ausehen?

            Würde gerne den wert zb, in diesen FIlter schreiben:

             "ms/sec" + "," + "Info=" + "log1" + "," + "Ort=" + "Dach" + "," + "Gerät=" + "" + " " + "L3=" + l3 + " " + time
            

            der L3 wert wäre dann also in: Field _measurment: ms/sec -> Field Info: log1 -> Field Ort: Dach -> Field Gerät: L3

            Hoffe ich habe mich so einigermassen verständlich asugedrückt 😁

            mickymM Online
            mickymM Online
            mickym
            Most Active
            schrieb am zuletzt editiert von mickym
            #5

            @mike1976 Ehrlich gesagt - verstehe ich nicht was Du meinst oder was Du willst - und ob Du das Prinzip verstanden hast.

            Wenn Du Ausgaben filtern willst, dann musst Du dich mit der Flux Sprache ab Version 2 - da bin ich ganz schlecht. Kannst Du aber ggf. die Syntax aus der GUI ermitteln.

            Ansonsten definierst Du das measurement in der Node selbst. Du kannst dann in dem measurement - je nachdem wieviel unterschiedliche Arten Du misst - das designen. Du könntest zwar 2 Felder verwenden - aber eigentlich würde man ggf. besser designen - nur die Temperatur und den Ort.

            Also überleg Dir alle Felder die mit jeder Nachricht kommen und nutze lieber Tags für den Ort. Time ist unsinnig, weil diese ja in einer Influx-DB automatisch enthalten ist.

            Wenn ein Gerät zum Beipsiel temperatur und luftfeuchtigkeit misst, dann hast Du als Felder Luftfeuchtigkeit und Temperatur, als Tag zum Beispiel den Ort.

            Die Filter in der GUI sind missverständlich.

            Measurement - ist vielmehr die Art der Messung und der Typ des Gerätes
            Field = Felder die von einem Gerät kommen
            Tag = frei definierbar - könnte Dein Ort sein, woher das Gerät kommt.

            Das ganze wird dann über 2 Arrays wie beschrieben definiert. Felder sind also Messungen, Tags haben beschreibenden Charakter. Hier ein Beispiel:

            71896a65-e2e9-4d83-b8b9-19781fa5416c-image.png

            measurement = ist quasi Deine Tabelle
            field = sind Spalten/Felder in der Tabelle - hier Temperatur, Luftfeuchtigkeit
            tag = Raum (frei beschreibbar) um Messungen zu gruppieren.

            Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

            M 1 Antwort Letzte Antwort
            0
            • mickymM mickym

              @mike1976 Ehrlich gesagt - verstehe ich nicht was Du meinst oder was Du willst - und ob Du das Prinzip verstanden hast.

              Wenn Du Ausgaben filtern willst, dann musst Du dich mit der Flux Sprache ab Version 2 - da bin ich ganz schlecht. Kannst Du aber ggf. die Syntax aus der GUI ermitteln.

              Ansonsten definierst Du das measurement in der Node selbst. Du kannst dann in dem measurement - je nachdem wieviel unterschiedliche Arten Du misst - das designen. Du könntest zwar 2 Felder verwenden - aber eigentlich würde man ggf. besser designen - nur die Temperatur und den Ort.

              Also überleg Dir alle Felder die mit jeder Nachricht kommen und nutze lieber Tags für den Ort. Time ist unsinnig, weil diese ja in einer Influx-DB automatisch enthalten ist.

              Wenn ein Gerät zum Beipsiel temperatur und luftfeuchtigkeit misst, dann hast Du als Felder Luftfeuchtigkeit und Temperatur, als Tag zum Beispiel den Ort.

              Die Filter in der GUI sind missverständlich.

              Measurement - ist vielmehr die Art der Messung und der Typ des Gerätes
              Field = Felder die von einem Gerät kommen
              Tag = frei definierbar - könnte Dein Ort sein, woher das Gerät kommt.

              Das ganze wird dann über 2 Arrays wie beschrieben definiert. Felder sind also Messungen, Tags haben beschreibenden Charakter. Hier ein Beispiel:

              71896a65-e2e9-4d83-b8b9-19781fa5416c-image.png

              measurement = ist quasi Deine Tabelle
              field = sind Spalten/Felder in der Tabelle - hier Temperatur, Luftfeuchtigkeit
              tag = Raum (frei beschreibbar) um Messungen zu gruppieren.

              M Offline
              M Offline
              mike1976
              schrieb am zuletzt editiert von mike1976
              #6

              @mickym
              hm... Also die Filter machen mich fertig :-)
              measurement sollte doch eigentlich die Mess/Einheit sein.

              Okay habe gerade dein Beispiel gestestet, kommt so ca. hin.
              measurement ist eindeutig 2 deutig :-)

              Ich logge auf einem Anderen Pi werte (auch mit Node-red) da schreibe sie aber in eine Textdatei, diese importiere ich 1x täglich per telegraf in Influx.
              Da habe ich mir die Textdatei (Syntax) so zusammen gebaut:

              "ms/sec" + "," + "Info=" + "log1" + "," + "Ort=" + "Dach" + "," + "Gerät=" + "" + " " + "L3=" + l3 + " "
              

              da legt Influx Brav die Filter so an, dachte mit Node-Red direkt bringe ich das auch rüber.

              Wollte es bei diesem Pi direkt Testen mit der Influx-node (wegen echtzeit log)
              Aber mit deinem Vorschlag/Lösung kann ich zur not auch leben.

              Danke für deine schnelle Antwort.
              LG

              Bezüglich Timestamp, da hast natürlich recht, war noch vom Testen drinn.

              Bin noch beim Testen um die Optimale Lösung zu finden.

              mickymM 1 Antwort Letzte Antwort
              0
              • M mike1976

                @mickym
                hm... Also die Filter machen mich fertig :-)
                measurement sollte doch eigentlich die Mess/Einheit sein.

                Okay habe gerade dein Beispiel gestestet, kommt so ca. hin.
                measurement ist eindeutig 2 deutig :-)

                Ich logge auf einem Anderen Pi werte (auch mit Node-red) da schreibe sie aber in eine Textdatei, diese importiere ich 1x täglich per telegraf in Influx.
                Da habe ich mir die Textdatei (Syntax) so zusammen gebaut:

                "ms/sec" + "," + "Info=" + "log1" + "," + "Ort=" + "Dach" + "," + "Gerät=" + "" + " " + "L3=" + l3 + " "
                

                da legt Influx Brav die Filter so an, dachte mit Node-Red direkt bringe ich das auch rüber.

                Wollte es bei diesem Pi direkt Testen mit der Influx-node (wegen echtzeit log)
                Aber mit deinem Vorschlag/Lösung kann ich zur not auch leben.

                Danke für deine schnelle Antwort.
                LG

                Bezüglich Timestamp, da hast natürlich recht, war noch vom Testen drinn.

                Bin noch beim Testen um die Optimale Lösung zu finden.

                mickymM Online
                mickymM Online
                mickym
                Most Active
                schrieb am zuletzt editiert von
                #7

                @mike1976 Wie gesagt - ist einfacher - wenn Du Deine Textdatei postest bzw. die Daten um einen vernünftigen Vorschlag zu machen.

                Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                M 1 Antwort Letzte Antwort
                0
                • mickymM mickym

                  @mike1976 Wie gesagt - ist einfacher - wenn Du Deine Textdatei postest bzw. die Daten um einen vernünftigen Vorschlag zu machen.

                  M Offline
                  M Offline
                  mike1976
                  schrieb am zuletzt editiert von mike1976
                  #8

                  @mickym
                  so sieht es mit der Textdatei aus:

                  influx home.png

                  man sieht dann auch schön die Beschriftung in dem Graph.

                  so sieht die datei aus:
                  Leistung Zuhaus Tag-2024-02-12.txt

                  Hoffe es ist jetzt besser verstädlich.

                  1 Antwort Letzte Antwort
                  0
                  • mickymM Online
                    mickymM Online
                    mickym
                    Most Active
                    schrieb am zuletzt editiert von
                    #9

                    @mike1976 Na bei dem Gesamt bin ich mir nicht sicher. Aber ich denke ich würde wohl bei dieser Konstellation,

                    w,Info=1min,Ort=Zuhause,Standort=VerteilerEG L3=156.2 1707692455004000000
                    w,Info=1min,Ort=Zuhause,Standort=VerteilerEG L2=5 1707692460008000000
                    w,Info=1min,Ort=Zuhause,Standort=VerteilerEG L1=132.2 1707692460008000000
                    w,Info=1min,Ort=Zuhause,Standort=VerteilerEG gesammt=293.4 1707692460008000000
                    

                    wenn nur gesammt, L1-L3 und was dahinter steht ist wohl ein timestamp und kann ignoriert werden - die anderen Teile würde ich als tags verwenden. Ich probiere mal einen kleinen Flow- um das mit einer InjectNode zu simulieren.

                    Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                    M 1 Antwort Letzte Antwort
                    0
                    • mickymM mickym

                      @mike1976 Na bei dem Gesamt bin ich mir nicht sicher. Aber ich denke ich würde wohl bei dieser Konstellation,

                      w,Info=1min,Ort=Zuhause,Standort=VerteilerEG L3=156.2 1707692455004000000
                      w,Info=1min,Ort=Zuhause,Standort=VerteilerEG L2=5 1707692460008000000
                      w,Info=1min,Ort=Zuhause,Standort=VerteilerEG L1=132.2 1707692460008000000
                      w,Info=1min,Ort=Zuhause,Standort=VerteilerEG gesammt=293.4 1707692460008000000
                      

                      wenn nur gesammt, L1-L3 und was dahinter steht ist wohl ein timestamp und kann ignoriert werden - die anderen Teile würde ich als tags verwenden. Ich probiere mal einen kleinen Flow- um das mit einer InjectNode zu simulieren.

                      M Offline
                      M Offline
                      mike1976
                      schrieb am zuletzt editiert von mike1976
                      #10

                      @mickym
                      den timestamp brauche ich ja nur in der textdatei damit influx weis wann der wert geloggt wurde.
                      Das Format des timestamp ist in diesem fall "ns" da influx standart bei text file import "ns" hat.

                      Habe jetzt mal folgende funktin getestet:

                      msg.topic="InfluxData"
                      let l1=global.get('leistung_l1')
                      let l2=global.get('leistung_l2')
                      let l3=global.get('leistung_l3')
                      let gesammt=global.get('leistung')
                      let time=global.get('timestamp')
                      
                      msg.payload= [
                      
                              {
                              "L1": l1,
                              "L2": l2,
                              "L3": l3,        
                              "Gesammt": gesammt
                              },
                              {
                              "Info": "1min",
                              "Ort": "Zuhause",
                              "Standort": "VerteilerEG"
                      
                              }]       
                      
                      
                      
                      return msg;
                      

                      Ergebins:

                      influx home 2.png

                      Kommt der Sache Schon sehr nahe :-)

                      Danke für deinen Denk anstoß

                      LG

                      mickymM 1 Antwort Letzte Antwort
                      0
                      • M mike1976

                        @mickym
                        den timestamp brauche ich ja nur in der textdatei damit influx weis wann der wert geloggt wurde.
                        Das Format des timestamp ist in diesem fall "ns" da influx standart bei text file import "ns" hat.

                        Habe jetzt mal folgende funktin getestet:

                        msg.topic="InfluxData"
                        let l1=global.get('leistung_l1')
                        let l2=global.get('leistung_l2')
                        let l3=global.get('leistung_l3')
                        let gesammt=global.get('leistung')
                        let time=global.get('timestamp')
                        
                        msg.payload= [
                        
                                {
                                "L1": l1,
                                "L2": l2,
                                "L3": l3,        
                                "Gesammt": gesammt
                                },
                                {
                                "Info": "1min",
                                "Ort": "Zuhause",
                                "Standort": "VerteilerEG"
                        
                                }]       
                        
                        
                        
                        return msg;
                        

                        Ergebins:

                        influx home 2.png

                        Kommt der Sache Schon sehr nahe :-)

                        Danke für deinen Denk anstoß

                        LG

                        mickymM Online
                        mickymM Online
                        mickym
                        Most Active
                        schrieb am zuletzt editiert von mickym
                        #11

                        @mike1976 Genau - das sollte es sein nur ist ja Dein l1, l2 etc. in unterschiedl. Datensätzen - ich werde mal was versuchen ohne function nodes.

                        Schau mal, ob Dir der Flow hilft:

                        cde12446-1ce3-43cc-bb70-9b3fda88d2f6-image.png

                        [{"id":"d3afebbee1d3ec66","type":"inject","z":"5ad55a7b0d4580eb","name":"trigger","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":170,"y":2380,"wires":[["5b6cb80943fdfd9c"]]},{"id":"5b6cb80943fdfd9c","type":"template","z":"5ad55a7b0d4580eb","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"w,Info=1min,Ort=Zuhause,Standort=VerteilerEG L3=156.2 1707692455004000000\nw,Info=1min,Ort=Zuhause,Standort=VerteilerEG L2=5 1707692460008000000\nw,Info=1min,Ort=Zuhause,Standort=VerteilerEG L1=132.2 1707692460008000000\nw,Info=1min,Ort=Zuhause,Standort=VerteilerEG gesammt=293.4 1707692460008000000","output":"str","x":320,"y":2380,"wires":[["49edc1b856184d32","a12ffaac172399ff"]]},{"id":"49edc1b856184d32","type":"debug","z":"5ad55a7b0d4580eb","name":"Input","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":490,"y":2340,"wires":[]},{"id":"a12ffaac172399ff","type":"csv","z":"5ad55a7b0d4580eb","name":"","sep":" ","hdrin":"","hdrout":"none","multi":"mult","ret":"\\n","temp":"tags,data,ts","skip":"0","strings":true,"include_empty_strings":"","include_null_values":"","x":490,"y":2380,"wires":[["8d3b69a0890d633e"]]},{"id":"f0189a352393d30a","type":"debug","z":"5ad55a7b0d4580eb","name":"Array for Influx","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":920,"y":2320,"wires":[]},{"id":"8d3b69a0890d633e","type":"change","z":"5ad55a7b0d4580eb","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.{\t   \"measurement\":\"textfile\",\t   \"fields\":{\t       $split(data,\"=\")[0]: $split(data,\"=\")[1]\t   },\t   \"tags\":{\t       \"Info\":(tags~>/Info=(.*?),/).groups[0],\t       \"Ort\":(tags~>/Ort=(.*?),/).groups[0],\t       \"Standort\":(tags~>/Standort=(.*)/).groups[0]\t   },\t   \"timestamp\":ts\t}","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":670,"y":2380,"wires":[["f0189a352393d30a","ad7e3d4485de600e"]]}]
                        

                        hier ist der Link zum Ausprobieren von JSONATA: https://try.jsonata.org/1Ec_JbVT_
                        mit Deinen Daten aus der CSV Node:

                        c792e0af-2ff0-4c9c-a6d2-4a962dfb0934-image.png

                        Evetuell musst Du dann die Influx Batch Node verwenden, wenn Du den timestamp mit geben willst.

                        5b290b9f-8f7e-463b-a387-10ab53bea459-image.png

                        Dann muss allerdings das Objekt komplexer dargestellt werden. Bin mir nicht sicher aber ich ändere den Flow nochmal mit dem timestamp für die Batchverarbeitung.

                        Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                        mickymM 1 Antwort Letzte Antwort
                        0
                        • mickymM mickym

                          @mike1976 Genau - das sollte es sein nur ist ja Dein l1, l2 etc. in unterschiedl. Datensätzen - ich werde mal was versuchen ohne function nodes.

                          Schau mal, ob Dir der Flow hilft:

                          cde12446-1ce3-43cc-bb70-9b3fda88d2f6-image.png

                          [{"id":"d3afebbee1d3ec66","type":"inject","z":"5ad55a7b0d4580eb","name":"trigger","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":170,"y":2380,"wires":[["5b6cb80943fdfd9c"]]},{"id":"5b6cb80943fdfd9c","type":"template","z":"5ad55a7b0d4580eb","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"w,Info=1min,Ort=Zuhause,Standort=VerteilerEG L3=156.2 1707692455004000000\nw,Info=1min,Ort=Zuhause,Standort=VerteilerEG L2=5 1707692460008000000\nw,Info=1min,Ort=Zuhause,Standort=VerteilerEG L1=132.2 1707692460008000000\nw,Info=1min,Ort=Zuhause,Standort=VerteilerEG gesammt=293.4 1707692460008000000","output":"str","x":320,"y":2380,"wires":[["49edc1b856184d32","a12ffaac172399ff"]]},{"id":"49edc1b856184d32","type":"debug","z":"5ad55a7b0d4580eb","name":"Input","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":490,"y":2340,"wires":[]},{"id":"a12ffaac172399ff","type":"csv","z":"5ad55a7b0d4580eb","name":"","sep":" ","hdrin":"","hdrout":"none","multi":"mult","ret":"\\n","temp":"tags,data,ts","skip":"0","strings":true,"include_empty_strings":"","include_null_values":"","x":490,"y":2380,"wires":[["8d3b69a0890d633e"]]},{"id":"f0189a352393d30a","type":"debug","z":"5ad55a7b0d4580eb","name":"Array for Influx","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":920,"y":2320,"wires":[]},{"id":"8d3b69a0890d633e","type":"change","z":"5ad55a7b0d4580eb","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.{\t   \"measurement\":\"textfile\",\t   \"fields\":{\t       $split(data,\"=\")[0]: $split(data,\"=\")[1]\t   },\t   \"tags\":{\t       \"Info\":(tags~>/Info=(.*?),/).groups[0],\t       \"Ort\":(tags~>/Ort=(.*?),/).groups[0],\t       \"Standort\":(tags~>/Standort=(.*)/).groups[0]\t   },\t   \"timestamp\":ts\t}","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":670,"y":2380,"wires":[["f0189a352393d30a","ad7e3d4485de600e"]]}]
                          

                          hier ist der Link zum Ausprobieren von JSONATA: https://try.jsonata.org/1Ec_JbVT_
                          mit Deinen Daten aus der CSV Node:

                          c792e0af-2ff0-4c9c-a6d2-4a962dfb0934-image.png

                          Evetuell musst Du dann die Influx Batch Node verwenden, wenn Du den timestamp mit geben willst.

                          5b290b9f-8f7e-463b-a387-10ab53bea459-image.png

                          Dann muss allerdings das Objekt komplexer dargestellt werden. Bin mir nicht sicher aber ich ändere den Flow nochmal mit dem timestamp für die Batchverarbeitung.

                          mickymM Online
                          mickymM Online
                          mickym
                          Most Active
                          schrieb am zuletzt editiert von mickym
                          #12

                          So hier mal ein Flow um Deine Textdaten mit Übernahme der Timestamps via Batch Node (die braucht man wohl, um den Timestamp zu übernehmen)

                          f3ab6717-dff6-4f8b-a275-797c60154b29-image.png

                          Hier der Flow:

                          de4c01ef-05f4-4e13-86e0-84a625eefbfc-image.png
                          Wichtig ist, dass Du bei Dein Timestamp mit der Einheit in der Node stimmt also bei Dir anscheinend Nanosekunden:

                          9d7ebcc2-bea2-4cbd-87a7-5fa243d99cdc-image.png

                          Und hier zum Import:

                          [{"id":"108b7d476c65f996","type":"inject","z":"5ad55a7b0d4580eb","name":"trigger","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":210,"y":2540,"wires":[["08d0613c649c80b4"]]},{"id":"08d0613c649c80b4","type":"template","z":"5ad55a7b0d4580eb","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"w,Info=1min,Ort=Zuhause,Standort=VerteilerEG L3=156.2 1707692455004000000\nw,Info=1min,Ort=Zuhause,Standort=VerteilerEG L2=5 1707692460008000000\nw,Info=1min,Ort=Zuhause,Standort=VerteilerEG L1=132.2 1707692460008000000\nw,Info=1min,Ort=Zuhause,Standort=VerteilerEG gesammt=293.4 1707692460008000000","output":"str","x":360,"y":2540,"wires":[["acbcf020990f69a3","10e58d987e9b5665"]]},{"id":"acbcf020990f69a3","type":"debug","z":"5ad55a7b0d4580eb","name":"Input","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":530,"y":2500,"wires":[]},{"id":"10e58d987e9b5665","type":"csv","z":"5ad55a7b0d4580eb","name":"","sep":" ","hdrin":"","hdrout":"none","multi":"mult","ret":"\\n","temp":"tags,data,ts","skip":"0","strings":true,"include_empty_strings":"","include_null_values":"","x":530,"y":2540,"wires":[["084a40eb306c40db"]]},{"id":"084a40eb306c40db","type":"change","z":"5ad55a7b0d4580eb","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.{\t \"measurement\":\"textfile\",\t \"fields\":{\t $split(data,\"=\")[0]: $split(data,\"=\")[1]\t },\t \"tags\":{\t \"Info\":(tags~>/Info=(.*?),/).groups[0],\t \"Ort\":(tags~>/Ort=(.*?),/).groups[0],\t \"Standort\":(tags~>/Standort=(.*)/).groups[0]\t },\t \"timestamp\":ts\t}","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":710,"y":2540,"wires":[["aea41aa4fef0a8eb"]]},{"id":"aea41aa4fef0a8eb","type":"debug","z":"5ad55a7b0d4580eb","name":"Array for Influx","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":960,"y":2480,"wires":[]}]
                          

                          Es sieht jedenfalls so aus, als ob der timestamp damit übernommen wird:

                          1cbc1584-ad79-4243-ba62-e09a2fdf6eb3-image.png

                          Der Vollständigkeit nochmal das JSONATA zum Spielen: https://try.jsonata.org/vg-2ha01s

                          Das mit dem leeren Standort ist im Exportcode bereits korrigiert

                          Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                          M 1 Antwort Letzte Antwort
                          0
                          • mickymM mickym

                            So hier mal ein Flow um Deine Textdaten mit Übernahme der Timestamps via Batch Node (die braucht man wohl, um den Timestamp zu übernehmen)

                            f3ab6717-dff6-4f8b-a275-797c60154b29-image.png

                            Hier der Flow:

                            de4c01ef-05f4-4e13-86e0-84a625eefbfc-image.png
                            Wichtig ist, dass Du bei Dein Timestamp mit der Einheit in der Node stimmt also bei Dir anscheinend Nanosekunden:

                            9d7ebcc2-bea2-4cbd-87a7-5fa243d99cdc-image.png

                            Und hier zum Import:

                            [{"id":"108b7d476c65f996","type":"inject","z":"5ad55a7b0d4580eb","name":"trigger","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":210,"y":2540,"wires":[["08d0613c649c80b4"]]},{"id":"08d0613c649c80b4","type":"template","z":"5ad55a7b0d4580eb","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"w,Info=1min,Ort=Zuhause,Standort=VerteilerEG L3=156.2 1707692455004000000\nw,Info=1min,Ort=Zuhause,Standort=VerteilerEG L2=5 1707692460008000000\nw,Info=1min,Ort=Zuhause,Standort=VerteilerEG L1=132.2 1707692460008000000\nw,Info=1min,Ort=Zuhause,Standort=VerteilerEG gesammt=293.4 1707692460008000000","output":"str","x":360,"y":2540,"wires":[["acbcf020990f69a3","10e58d987e9b5665"]]},{"id":"acbcf020990f69a3","type":"debug","z":"5ad55a7b0d4580eb","name":"Input","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":530,"y":2500,"wires":[]},{"id":"10e58d987e9b5665","type":"csv","z":"5ad55a7b0d4580eb","name":"","sep":" ","hdrin":"","hdrout":"none","multi":"mult","ret":"\\n","temp":"tags,data,ts","skip":"0","strings":true,"include_empty_strings":"","include_null_values":"","x":530,"y":2540,"wires":[["084a40eb306c40db"]]},{"id":"084a40eb306c40db","type":"change","z":"5ad55a7b0d4580eb","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.{\t \"measurement\":\"textfile\",\t \"fields\":{\t $split(data,\"=\")[0]: $split(data,\"=\")[1]\t },\t \"tags\":{\t \"Info\":(tags~>/Info=(.*?),/).groups[0],\t \"Ort\":(tags~>/Ort=(.*?),/).groups[0],\t \"Standort\":(tags~>/Standort=(.*)/).groups[0]\t },\t \"timestamp\":ts\t}","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":710,"y":2540,"wires":[["aea41aa4fef0a8eb"]]},{"id":"aea41aa4fef0a8eb","type":"debug","z":"5ad55a7b0d4580eb","name":"Array for Influx","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":960,"y":2480,"wires":[]}]
                            

                            Es sieht jedenfalls so aus, als ob der timestamp damit übernommen wird:

                            1cbc1584-ad79-4243-ba62-e09a2fdf6eb3-image.png

                            Der Vollständigkeit nochmal das JSONATA zum Spielen: https://try.jsonata.org/vg-2ha01s

                            Das mit dem leeren Standort ist im Exportcode bereits korrigiert

                            M Offline
                            M Offline
                            mike1976
                            schrieb am zuletzt editiert von
                            #13

                            @mickym
                            Hallo, sorry erst jetzt wieder Zeit gehabt.

                            Vielen Dank für dein Test Flow.
                            Leider ist anscheinend bei der Kommunikation was danebengegangen.

                            Ich lese nicht die Textdatei ein, die wird separat gespeichert. Das war nur ein Muster wie Influx die daten annimmt.

                            Ich schreiben die Werte jetzt, sowie du im oberen Post von mir sehen kannst, in der Funtkion, direkt von einer Globalen Variable in Flux rein.

                            Aber alles gut, mit der Funktion geht es eigentlich genau so wie ich das haben will.

                            Wieso bist du eigentlich so gegen die Funktion-Node?

                            mickymM 1 Antwort Letzte Antwort
                            0
                            • M mike1976

                              @mickym
                              Hallo, sorry erst jetzt wieder Zeit gehabt.

                              Vielen Dank für dein Test Flow.
                              Leider ist anscheinend bei der Kommunikation was danebengegangen.

                              Ich lese nicht die Textdatei ein, die wird separat gespeichert. Das war nur ein Muster wie Influx die daten annimmt.

                              Ich schreiben die Werte jetzt, sowie du im oberen Post von mir sehen kannst, in der Funtkion, direkt von einer Globalen Variable in Flux rein.

                              Aber alles gut, mit der Funktion geht es eigentlich genau so wie ich das haben will.

                              Wieso bist du eigentlich so gegen die Funktion-Node?

                              mickymM Online
                              mickymM Online
                              mickym
                              Most Active
                              schrieb am zuletzt editiert von mickym
                              #14

                              @mike1976 sagte in NodeRED Logging mit InfluxDB 2.0:

                              Wieso bist du eigentlich so gegen die Funktion-Node?

                              Weil Du im Prinzip einen kompletten Flow in Javascript in eine function Node packen kannst und du damit den Sinn von Node Red der grafischen Programmierung mit seinen Debugging Möglichkeiten ad absurdum führst. Viel Spaß bei Debuggen in einer Function Node. Außerdem ist JSONATA so genial - dass Du damit ein Viertel des Codes brauchst, den Du mit Javascript brauchst.

                              Es gibt bestimmte Funktionen, wie den NodeKontext, das nutzen externen NodeJS Module oder asynchrone Verarbeitung für die man function Nodes braucht und es sinnvoll ist, diese zu nutzen. Alles andere geht mit Standardnodes einfacher, kürzer insbesondere mit der genialen JSONATA implementierung.

                              Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                              1 Antwort Letzte Antwort
                              0
                              Antworten
                              • In einem neuen Thema antworten
                              Anmelden zum Antworten
                              • Älteste zuerst
                              • Neuste zuerst
                              • Meiste Stimmen


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              719

                              Online

                              32.5k

                              Benutzer

                              81.6k

                              Themen

                              1.3m

                              Beiträge
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                              ioBroker Community 2014-2025
                              logo
                              • Anmelden

                              • Du hast noch kein Konto? Registrieren

                              • Anmelden oder registrieren, um zu suchen
                              • Erster Beitrag
                                Letzter Beitrag
                              0
                              • Home
                              • Aktuell
                              • Tags
                              • Ungelesen 0
                              • Kategorien
                              • Unreplied
                              • Beliebt
                              • GitHub
                              • Docu
                              • Hilfe