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. Node-Red Filter

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    14
    1
    155

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    12
    1
    566

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.7k

Node-Red Filter

Geplant Angeheftet Gesperrt Verschoben Node-Red
58 Beiträge 2 Kommentatoren 4.9k Aufrufe 2 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.
  • R ranzen

    Habe ich auch gemacht. Gerade noch mal überprüft.

    Bildschirmfoto 2024-05-23 um 17.57.41.png

    R Offline
    R Offline
    ranzen
    schrieb am zuletzt editiert von
    #47

    So sieht es jetzt aus:

    Bildschirmfoto 2024-05-23 um 18.00.07.png

    mickymM 1 Antwort Letzte Antwort
    0
    • R ranzen

      Habe ich auch gemacht. Gerade noch mal überprüft.

      Bildschirmfoto 2024-05-23 um 17.57.41.png

      mickymM Offline
      mickymM Offline
      mickym
      Most Active
      schrieb am zuletzt editiert von mickym
      #48

      @ranzen Ich verstehs nicht-Wenn das Objekt das ist was ich unten geschrieben habe,

      Also das hier aus Deine mqtt Node rauskommt.

      c2be912e-7826-47ad-b84f-81039af08528-image.png

      Dann füge direkt die ChangeNode mit den 2 Regeln dahinter.

      So und das funktioniert auch, wie Du siehst, wenn die temperatur -100 ist:

      b57ca950-3e89-4c65-9f73-d8b42ad4c613-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.

      1 Antwort Letzte Antwort
      0
      • R ranzen

        So sieht es jetzt aus:

        Bildschirmfoto 2024-05-23 um 18.00.07.png

        mickymM Offline
        mickymM Offline
        mickym
        Most Active
        schrieb am zuletzt editiert von mickym
        #49

        @ranzen sagte in Node-Red Filter:

        So sieht es jetzt aus:

        Bildschirmfoto 2024-05-23 um 18.00.07.png

        Na das ist doch nur eine Change NOde mit EINER Regel - beide Regeln.

        49e34198-6003-4db7-9fce-80ff85bb9e49-image.png

        86f7156e-ed15-40ab-b9db-42b7f597067b-image.png

        Diese Change Node hier zum IMPORT:

        [{"id":"69bdba3e138433d4","type":"change","z":"289f539dcc33814e","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.uplink_message.decoded_payload","tot":"msg"},{"t":"set","p":"payload","pt":"msg","to":"payload.temperature = -100 ? payload~>|$|{},\"temperature\"| : payload","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":550,"y":6580,"wires":[["9a4ef5f62cf3ee3c"]]}]
        

        hinter deine mqtt Node. Da steht dann change: 2 Regeln und nicht setze msg.payload

        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.

        R 1 Antwort Letzte Antwort
        0
        • mickymM mickym

          @ranzen sagte in Node-Red Filter:

          So sieht es jetzt aus:

          Bildschirmfoto 2024-05-23 um 18.00.07.png

          Na das ist doch nur eine Change NOde mit EINER Regel - beide Regeln.

          49e34198-6003-4db7-9fce-80ff85bb9e49-image.png

          86f7156e-ed15-40ab-b9db-42b7f597067b-image.png

          Diese Change Node hier zum IMPORT:

          [{"id":"69bdba3e138433d4","type":"change","z":"289f539dcc33814e","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.uplink_message.decoded_payload","tot":"msg"},{"t":"set","p":"payload","pt":"msg","to":"payload.temperature = -100 ? payload~>|$|{},\"temperature\"| : payload","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":550,"y":6580,"wires":[["9a4ef5f62cf3ee3c"]]}]
          

          hinter deine mqtt Node. Da steht dann change: 2 Regeln und nicht setze msg.payload

          R Offline
          R Offline
          ranzen
          schrieb am zuletzt editiert von
          #50

          @mickym Ich hatte immer direkt die Regel angepasst. Jetzt habe ich aber trotzdem noch einmal einen IMPORT gemacht.

          Wie gesagt: wann der Wert -100 kommt, weiss ich nicht. Aber sicher ist , dass er mehrfach am Tag kommt. Wenn ich jetzt also 2-3 Tage nichts mehr von ihm sehe, hat Deine Hilfe dafür gesorgt, dass dieses problem nicht mehr aktuell ist.

          Nochmals Danke dafür.

          Wenn es in nächster Zeit wider Erwarten doch noch zu Problemen kommt, melde ich mich einfach noch einmal.

          VG Heiner

          mickymM 1 Antwort Letzte Antwort
          0
          • R ranzen

            @mickym Ich hatte immer direkt die Regel angepasst. Jetzt habe ich aber trotzdem noch einmal einen IMPORT gemacht.

            Wie gesagt: wann der Wert -100 kommt, weiss ich nicht. Aber sicher ist , dass er mehrfach am Tag kommt. Wenn ich jetzt also 2-3 Tage nichts mehr von ihm sehe, hat Deine Hilfe dafür gesorgt, dass dieses problem nicht mehr aktuell ist.

            Nochmals Danke dafür.

            Wenn es in nächster Zeit wider Erwarten doch noch zu Problemen kommt, melde ich mich einfach noch einmal.

            VG Heiner

            mickymM Offline
            mickymM Offline
            mickym
            Most Active
            schrieb am zuletzt editiert von
            #51

            @ranzen OK - sind jetzt beide Regeln in der Change Node?

            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.

            R 1 Antwort Letzte Antwort
            0
            • mickymM mickym

              @ranzen OK - sind jetzt beide Regeln in der Change Node?

              R Offline
              R Offline
              ranzen
              schrieb am zuletzt editiert von
              #52

              @mickym Ja, ich habe meinen alten mit Deinen letzten IMPORT Change Node ersetzt. Es arbeitet jetzt nur der neue.

              R mickymM 2 Antworten Letzte Antwort
              0
              • R ranzen

                @mickym Ja, ich habe meinen alten mit Deinen letzten IMPORT Change Node ersetzt. Es arbeitet jetzt nur der neue.

                R Offline
                R Offline
                ranzen
                schrieb am zuletzt editiert von
                #53

                @ranzen Und die Einträge in der DB sind auch ok. Alles passt.

                R 1 Antwort Letzte Antwort
                0
                • R ranzen

                  @mickym Ja, ich habe meinen alten mit Deinen letzten IMPORT Change Node ersetzt. Es arbeitet jetzt nur der neue.

                  mickymM Offline
                  mickymM Offline
                  mickym
                  Most Active
                  schrieb am zuletzt editiert von
                  #54

                  @ranzen sagte in Node-Red Filter:

                  @mickym Ja, ich habe meinen alten mit Deinen letzten IMPORT Change Node ersetzt. Es arbeitet jetzt nur der neue.

                  Ok - dann schauen wir mal.

                  @ranzen sagte in Node-Red Filter:

                  @ranzen Und die Einträge in der DB sind auch ok. Alles passt.

                  :+1: :+1: :+1:

                  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.

                  R 1 Antwort Letzte Antwort
                  0
                  • R ranzen

                    @ranzen Und die Einträge in der DB sind auch ok. Alles passt.

                    R Offline
                    R Offline
                    ranzen
                    schrieb am zuletzt editiert von
                    #55

                    Hier mal eine Ausgabe mit Grafana:

                    Bildschirmfoto 2024-05-23 um 18.10.57.png

                    1 Antwort Letzte Antwort
                    0
                    • mickymM mickym

                      @ranzen sagte in Node-Red Filter:

                      @mickym Ja, ich habe meinen alten mit Deinen letzten IMPORT Change Node ersetzt. Es arbeitet jetzt nur der neue.

                      Ok - dann schauen wir mal.

                      @ranzen sagte in Node-Red Filter:

                      @ranzen Und die Einträge in der DB sind auch ok. Alles passt.

                      :+1: :+1: :+1:

                      R Offline
                      R Offline
                      ranzen
                      schrieb am zuletzt editiert von
                      #56

                      @mickym Der Fehler mit dem -100 Wert ist bis jetzt noch nicht wieder aufgetreten, somit arbeitet Dein Filter einwandfrei. :+1:

                      Allerdings weiss ich noch nicht genau, wie der Filter

                      payload.temperature = -100 ? payload~>|$|{},"temperature"| : payload
                      

                      genau arbeitet. Kannst Du mir den Code noch mal kurz erklären ?

                      VG

                      mickymM 1 Antwort Letzte Antwort
                      0
                      • R ranzen

                        @mickym Der Fehler mit dem -100 Wert ist bis jetzt noch nicht wieder aufgetreten, somit arbeitet Dein Filter einwandfrei. :+1:

                        Allerdings weiss ich noch nicht genau, wie der Filter

                        payload.temperature = -100 ? payload~>|$|{},"temperature"| : payload
                        

                        genau arbeitet. Kannst Du mir den Code noch mal kurz erklären ?

                        VG

                        mickymM Offline
                        mickymM Offline
                        mickym
                        Most Active
                        schrieb am zuletzt editiert von mickym
                        #57

                        @ranzen Nun das ist JSONATA hier der Link zur Dokumentation!

                        Als erstes prüfen wir also, ob die Eigenschaft temperature des payload-Objektes -100 ist. In JSONATA kannst Du if/then Abfragen nur über den tenären Operator ? : erstellen. Den ternären Operator ? : gibt es aber auch in Javascript.

                        Wenn also payload.temperature (also die Eigenschaft temperature des payload Objektes) - 100 ist, dann mach das was hinter dem Fragezeichen steht, wenn nicht mach das was hinter dem Doppelpunkt steht.

                        https://docs.jsonata.org/programming#conditional-logic

                        9f5b4676-5333-466a-bedc-d34233b0d3e7-image.png

                        Also
                        Wenn payload.temperatur = -100, dann mache

                        payload~>|$|{},"temperature"|
                        

                        sonst lasse das payload Objekt unverändert:

                        payload
                        

                        Nun also zu dem Filter. Die Mächtigkeit von JSONATA ist, dass es alle Objekte auf einer Ebene verändern kann, da selbst wenn das Ergebnis mehrfach existiert automatisch Arrays gebildet werden, ohne dass Du dafür was tun musst. Insofern kann folgendes sowohl auf ein einzelnes Objekt, also auch auf ein Array gleichartiger Objekte verwendet werden.

                        Der Filter

                        payload~>|$|{},"temperature"|
                        

                        ist ein sogenannter Transform Operator:

                        https://docs.jsonata.org/other-operators#-------transform
                        d8c75f26-d47c-4710-ab17-4db21796f575-image.png

                        Das habe ich also nochmal grün markiert. Der transform Operator kann auf ein einzelnes Objekt oder auf ein Array von Objekten angewandt werden.

                        Der Kopf oder der Ausgangspunkt des Objektest ist also Dein payload Objekt und da wir keine untergeordneten Objekte selektieren nehmen wir mit dem $-Zeichen das payload Objekt selbst.

                        https://docs.jsonata.org/programming#built-in-variables

                        dc0a0f2c-baea-441f-af1f-750983c698e4-image.png

                        Nun also zum Transform Operator

                        head ~> | location | update [, delete] |
                        

                        head
                        der head ist also unser payload Objekt

                        payload ~>  |
                        

                        location
                        ist das payload Objekt selbst, also $

                        payload ~>|$|
                        

                        nun kommt es zum update
                        update
                        da wir in dem Objekt nichts updaten wollen, gebe ich ein leeres Objekt mit. Wichtig es wird innerhalb nur die Eigenschaft aktualisiert, aber das ganze Objekt bleibt erhalten. Man kann somit auch neue Eigenschaften in dem Objekt erstellen

                        payload ~>|$|{}|
                        

                        Damit wäre die Syntax schon korrekt, aber das Objekt kommt unverändert raus. Wir wollen aber nun die temperature Eigenschaft aus dem Objekt löschen, deswegen wenden wir hier den optionalen Parameter delete an.

                        delete
                        Der delete Parmater enthält die Eigenschaften, die wir aus dem Objekt entfernen wollen, also in unserem Fall "temperature". Wenn wir mehrere Eigenschaften entfernen wollten, dann müssten wir ein Array von Strings mit allen Eigenschaftsnamen mitgeben.
                        Also schaut mit dem delete Parameter unser transform Operator wir folgt aus:

                         payload~>|$|{},"temperature"|
                        

                        und wir sind fertig.

                        Ich empfehle Dir so was immer im JSONATA- Übungsfenster nachzuvollziehen.
                        Hier der Link mit Deinem payload Objekt: https://try.jsonata.org/PuBUXRbdT

                        Du siehst damit sofort wie der transform Operator sich auswirkt:
                        e44d3f31-8268-4133-aca2-9c9e75f8505b-image.png

                        Wenn Du anstelle die temperature Eigenschaft zu löschen, lieber ein "nicht verfügbar" in Deinem Objekt haben wolltest, dann würde das so aussehen:

                         payload~>|$|{"temperature":"nicht verfügbar"}|
                        

                        1a9512aa-cafb-4161-99a8-5c7cb9f7d02b-image.png

                        Wenn Du aber die Fehler in einer eigenen Eigenschaft erstellen willst und die temperature Eigenschaft trotzdem löschen, willst kannst Du das auch in dem update Objekt machen.

                         payload~>|$|{"error":true},"temperature"|
                        

                        13d63c18-b1de-455c-8a50-734d65e2a8a4-image.png

                        So löscht Du die Eigenschaft "temperature" aus deinem payload Objekt und aktualisierst es gleichzeitig, in dem Du eine neue Eigenschaft "error" hinzufügst und diese auf true setzt.

                        Du kannst natürlich auch die Bedingung im CodeFenster links oben setzen:

                        a2599b0a-a37c-46cc-b959-1d01811e667a-image.png

                        Dann kannst du den temperature Wert links einfach verändern und siehst, dass wenn die temperature nicht -100 ist, der temperature Wert mitkommt.

                        6ed52a87-0835-414f-acc3-9529a2f74bf8-image.png

                        Viel Spaß!!!

                        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.

                        R 1 Antwort Letzte Antwort
                        0
                        • mickymM mickym

                          @ranzen Nun das ist JSONATA hier der Link zur Dokumentation!

                          Als erstes prüfen wir also, ob die Eigenschaft temperature des payload-Objektes -100 ist. In JSONATA kannst Du if/then Abfragen nur über den tenären Operator ? : erstellen. Den ternären Operator ? : gibt es aber auch in Javascript.

                          Wenn also payload.temperature (also die Eigenschaft temperature des payload Objektes) - 100 ist, dann mach das was hinter dem Fragezeichen steht, wenn nicht mach das was hinter dem Doppelpunkt steht.

                          https://docs.jsonata.org/programming#conditional-logic

                          9f5b4676-5333-466a-bedc-d34233b0d3e7-image.png

                          Also
                          Wenn payload.temperatur = -100, dann mache

                          payload~>|$|{},"temperature"|
                          

                          sonst lasse das payload Objekt unverändert:

                          payload
                          

                          Nun also zu dem Filter. Die Mächtigkeit von JSONATA ist, dass es alle Objekte auf einer Ebene verändern kann, da selbst wenn das Ergebnis mehrfach existiert automatisch Arrays gebildet werden, ohne dass Du dafür was tun musst. Insofern kann folgendes sowohl auf ein einzelnes Objekt, also auch auf ein Array gleichartiger Objekte verwendet werden.

                          Der Filter

                          payload~>|$|{},"temperature"|
                          

                          ist ein sogenannter Transform Operator:

                          https://docs.jsonata.org/other-operators#-------transform
                          d8c75f26-d47c-4710-ab17-4db21796f575-image.png

                          Das habe ich also nochmal grün markiert. Der transform Operator kann auf ein einzelnes Objekt oder auf ein Array von Objekten angewandt werden.

                          Der Kopf oder der Ausgangspunkt des Objektest ist also Dein payload Objekt und da wir keine untergeordneten Objekte selektieren nehmen wir mit dem $-Zeichen das payload Objekt selbst.

                          https://docs.jsonata.org/programming#built-in-variables

                          dc0a0f2c-baea-441f-af1f-750983c698e4-image.png

                          Nun also zum Transform Operator

                          head ~> | location | update [, delete] |
                          

                          head
                          der head ist also unser payload Objekt

                          payload ~>  |
                          

                          location
                          ist das payload Objekt selbst, also $

                          payload ~>|$|
                          

                          nun kommt es zum update
                          update
                          da wir in dem Objekt nichts updaten wollen, gebe ich ein leeres Objekt mit. Wichtig es wird innerhalb nur die Eigenschaft aktualisiert, aber das ganze Objekt bleibt erhalten. Man kann somit auch neue Eigenschaften in dem Objekt erstellen

                          payload ~>|$|{}|
                          

                          Damit wäre die Syntax schon korrekt, aber das Objekt kommt unverändert raus. Wir wollen aber nun die temperature Eigenschaft aus dem Objekt löschen, deswegen wenden wir hier den optionalen Parameter delete an.

                          delete
                          Der delete Parmater enthält die Eigenschaften, die wir aus dem Objekt entfernen wollen, also in unserem Fall "temperature". Wenn wir mehrere Eigenschaften entfernen wollten, dann müssten wir ein Array von Strings mit allen Eigenschaftsnamen mitgeben.
                          Also schaut mit dem delete Parameter unser transform Operator wir folgt aus:

                           payload~>|$|{},"temperature"|
                          

                          und wir sind fertig.

                          Ich empfehle Dir so was immer im JSONATA- Übungsfenster nachzuvollziehen.
                          Hier der Link mit Deinem payload Objekt: https://try.jsonata.org/PuBUXRbdT

                          Du siehst damit sofort wie der transform Operator sich auswirkt:
                          e44d3f31-8268-4133-aca2-9c9e75f8505b-image.png

                          Wenn Du anstelle die temperature Eigenschaft zu löschen, lieber ein "nicht verfügbar" in Deinem Objekt haben wolltest, dann würde das so aussehen:

                           payload~>|$|{"temperature":"nicht verfügbar"}|
                          

                          1a9512aa-cafb-4161-99a8-5c7cb9f7d02b-image.png

                          Wenn Du aber die Fehler in einer eigenen Eigenschaft erstellen willst und die temperature Eigenschaft trotzdem löschen, willst kannst Du das auch in dem update Objekt machen.

                           payload~>|$|{"error":true},"temperature"|
                          

                          13d63c18-b1de-455c-8a50-734d65e2a8a4-image.png

                          So löscht Du die Eigenschaft "temperature" aus deinem payload Objekt und aktualisierst es gleichzeitig, in dem Du eine neue Eigenschaft "error" hinzufügst und diese auf true setzt.

                          Du kannst natürlich auch die Bedingung im CodeFenster links oben setzen:

                          a2599b0a-a37c-46cc-b959-1d01811e667a-image.png

                          Dann kannst du den temperature Wert links einfach verändern und siehst, dass wenn die temperature nicht -100 ist, der temperature Wert mitkommt.

                          6ed52a87-0835-414f-acc3-9529a2f74bf8-image.png

                          Viel Spaß!!!

                          R Offline
                          R Offline
                          ranzen
                          schrieb am zuletzt editiert von
                          #58

                          @mickym Vielen Dank für die super Erklärung :clap:

                          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

                          308

                          Online

                          32.5k

                          Benutzer

                          81.8k

                          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