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. JSON String in Template Node richtig darstellen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    JSON String in Template Node richtig darstellen

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

      Hallo zusammen,

      ich bekomme vom Device Watcher Adapter im JSON Format die entsprechenden Devices, welche Battery Low haben.

      Die zwei Werte (Gerätename + Batterie Stand) möchte ich nun in einem Template Node darstellen.

      Allerdings zeigt er mir die Werte verständlicherweise (die beiden Werte gemäß der Filterung hintereinander) wie folgt an:
      "Der Batteriezustand von Gerät1,Gerät2 (57%,50%) erreicht einen kritischen Wert!"

      Ich möchte es aber so dargestellt haben:
      "Der Batteriezustand von Gerät1 (57%), Gerät2 (50%) erreicht einen kritischen Wert!"

      Da es hier bestimmt auch eine Lösung mit JSONata gibt aber ich da noch nicht so fit bin, weißt du @mickym vielleicht ja die Lösung?

      Hier mein aktueller Flow:


      [
      {
      "id": "1da12527d3e1843f",
      "type": "tab",
      "label": "Flow 1",
      "disabled": false,
      "info": "",
      "env": []
      },
      {
      "id": "c169efb724969657",
      "type": "template",
      "z": "1da12527d3e1843f",
      "name": "Mail-Inhalt",
      "field": "payload",
      "fieldType": "msg",
      "format": "handlebars",
      "syntax": "mustache",
      "template": "Der Batteriezustand von {{payload.Device}} ({{payload.Battery}}) erreicht einen kritischen Wert!",
      "output": "str",
      "x": 1010,
      "y": 220,
      "wires": [
      [
      "88f9223b01ab08fd"
      ]
      ]
      },
      {
      "id": "a2c52a446f37f88d",
      "type": "change",
      "z": "1da12527d3e1843f",
      "name": "Filtere JSON",
      "rules": [
      {
      "t": "set",
      "p": "payload.Device",
      "pt": "msg",
      "to": "payload.Device",
      "tot": "jsonata"
      },
      {
      "t": "set",
      "p": "payload.Battery",
      "pt": "msg",
      "to": "payload.Battery",
      "tot": "jsonata"
      }
      ],
      "action": "",
      "property": "",
      "from": "",
      "to": "",
      "reg": false,
      "x": 790,
      "y": 220,
      "wires": [
      [
      "c169efb724969657"
      ]
      ]
      },
      {
      "id": "a0cd2bf8b245d058",
      "type": "json",
      "z": "1da12527d3e1843f",
      "name": "",
      "property": "payload",
      "action": "",
      "pretty": false,
      "x": 610,
      "y": 220,
      "wires": [
      [
      "a2c52a446f37f88d"
      ]
      ]
      },
      {
      "id": "88f9223b01ab08fd",
      "type": "debug",
      "z": "1da12527d3e1843f",
      "name": "debug 36",
      "active": true,
      "tosidebar": true,
      "console": false,
      "tostatus": false,
      "complete": "false",
      "statusVal": "",
      "statusType": "auto",
      "x": 1200,
      "y": 220,
      "wires": []
      },
      {
      "id": "e564bd6bd0b59b98",
      "type": "inject",
      "z": "1da12527d3e1843f",
      "name": "",
      "props": [
      {
      "p": "payload"
      },
      {
      "p": "topic",
      "vt": "str"
      }
      ],
      "repeat": "",
      "crontab": "",
      "once": false,
      "onceDelay": 0.1,
      "topic": "",
      "payload": "[{"Device":"Gerät1","Adapter":"Zigbee","Battery":"57%"},{"Device":"Gerät2","Adapter":"Zigbee","Battery":"50%"}]",
      "payloadType": "str",
      "x": 430,
      "y": 220,
      "wires": [
      [
      "a0cd2bf8b245d058"
      ]
      ]
      }
      ]

      SG

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

        @_r_a_l_f_ Wenn ihr Euch bitte angewöhnen könnt, Code auch in CodeTags zu setzen, dann kann man damit was anfangen. So aber nicht.

        Code-Tags.gif

        Dann bekommt man nur Mist - weil der Browser interpretiert und man muss sich alles manuell selektieren.
        Das Ergebnis sieht dann so aus:

        459c56ca-357d-43f6-af2c-1003049abdb1-image.png

        Ich geh aber mal davon aus, dass dieses Array als Daten eingebunden werden soll?

        [{"Device":"Gerät1","Adapter":"Zigbee","Battery":"57%"},{"Device":"Gerät2","Adapter":"Zigbee","Battery":"50%"}]
        

        Tipp:

        Am sichersten, dass es funktioniert ist, wenn man das was man im Thread veröffentlicht, auch mal versucht selbst zu importieren. 🙄

        mickym _ 2 Replies Last reply Reply Quote 0
        • mickym
          mickym Most Active @mickym last edited by mickym

          @_r_a_l_f_ sagte in JSON String in Template Node richtig darstellen:

          Da es hier bestimmt auch eine Lösung mit JSONata gibt

          payload.{"Device" : Device & " (" & Battery & ")"}.Device~>$join(", ")
          

          Aber man braucht nicht unbedingt JSONATA 😭 😭 😭 - das macht die Template Node aufgrund der mächtigen Angular Bibliothek von selbst. Allerdings muss man aufgrund des Satzbaus das Komma wieder manuell wegmachen - insofern kommt es auf das Gleiche raus, ob man die payload vor oder nach der template Node bearbeitet .

          da0dfd59-7de6-43ea-887e-63138a53bd6f-image.png

          [
             {
                 "id": "ef75720b1a71bf20",
                 "type": "inject",
                 "z": "517cd16e4d7e6ae4",
                 "name": "",
                 "props": [
                     {
                         "p": "payload"
                     }
                 ],
                 "repeat": "",
                 "crontab": "",
                 "once": false,
                 "onceDelay": 0.1,
                 "topic": "",
                 "payload": "[{\"Device\":\"Gerät1\",\"Adapter\":\"Zigbee\",\"Battery\":\"57%\"},{\"Device\":\"Gerät2\",\"Adapter\":\"Zigbee\",\"Battery\":\"50%\"}]",
                 "payloadType": "json",
                 "x": 230,
                 "y": 180,
                 "wires": [
                     [
                         "ae9de2e6db70ec69",
                         "93dc32f8450adc37",
                         "c55c281c7cb2915e"
                     ]
                 ]
             },
             {
                 "id": "ae9de2e6db70ec69",
                 "type": "template",
                 "z": "517cd16e4d7e6ae4",
                 "name": "",
                 "field": "payload",
                 "fieldType": "msg",
                 "format": "handlebars",
                 "syntax": "mustache",
                 "template": "Der Batteriezustand von {{#payload}}{{Device}} ({{Battery}}), {{/payload}}erreicht einen kritischen Wert!",
                 "output": "str",
                 "x": 380,
                 "y": 140,
                 "wires": [
                     [
                         "988a5707fe883b52"
                     ]
                 ]
             },
             {
                 "id": "93dc32f8450adc37",
                 "type": "debug",
                 "z": "517cd16e4d7e6ae4",
                 "name": "Eingabe",
                 "active": true,
                 "tosidebar": true,
                 "console": false,
                 "tostatus": false,
                 "complete": "payload",
                 "targetType": "msg",
                 "statusVal": "",
                 "statusType": "auto",
                 "x": 400,
                 "y": 180,
                 "wires": []
             },
             {
                 "id": "5817f636b1aec86a",
                 "type": "debug",
                 "z": "517cd16e4d7e6ae4",
                 "name": "Ausgabe",
                 "active": true,
                 "tosidebar": true,
                 "console": false,
                 "tostatus": false,
                 "complete": "payload",
                 "targetType": "msg",
                 "statusVal": "",
                 "statusType": "auto",
                 "x": 780,
                 "y": 180,
                 "wires": []
             },
             {
                 "id": "988a5707fe883b52",
                 "type": "change",
                 "z": "517cd16e4d7e6ae4",
                 "name": "",
                 "rules": [
                     {
                         "t": "change",
                         "p": "payload",
                         "pt": "msg",
                         "from": ", erreicht",
                         "fromt": "str",
                         "to": " erreicht",
                         "tot": "str"
                     }
                 ],
                 "action": "",
                 "property": "",
                 "from": "",
                 "to": "",
                 "reg": false,
                 "x": 580,
                 "y": 140,
                 "wires": [
                     [
                         "5817f636b1aec86a"
                     ]
                 ]
             },
             {
                 "id": "c55c281c7cb2915e",
                 "type": "change",
                 "z": "517cd16e4d7e6ae4",
                 "name": "",
                 "rules": [
                     {
                         "t": "set",
                         "p": "payload",
                         "pt": "msg",
                         "to": "payload.{\"Device\" : Device & \" (\" & Battery & \")\"}.Device~>$join(\", \")",
                         "tot": "jsonata"
                     }
                 ],
                 "action": "",
                 "property": "",
                 "from": "",
                 "to": "",
                 "reg": false,
                 "x": 410,
                 "y": 220,
                 "wires": [
                     [
                         "60763b5ce4fdcf48"
                     ]
                 ]
             },
             {
                 "id": "60763b5ce4fdcf48",
                 "type": "template",
                 "z": "517cd16e4d7e6ae4",
                 "name": "",
                 "field": "payload",
                 "fieldType": "msg",
                 "format": "handlebars",
                 "syntax": "mustache",
                 "template": "Der Batteriezustand von {{payload}} erreicht einen kritischen Wert!",
                 "output": "str",
                 "x": 620,
                 "y": 220,
                 "wires": [
                     [
                         "5817f636b1aec86a"
                     ]
                 ]
             }
          ]
          

          Wenn man sich sowas hingegen HTML formatiert als Tabelle für eine e-Mail oder eine Webseite oder template Node ausgeben lassen will - dann kommt man auch nur mit der template Node hin.

          d5a7e117-3ebc-44e4-8019-439c54329a37-image.png

          ist jetzt nicht superschön - aber dient nur zur Demo, dass man dann alles in einer Template Node abhandeln kann (wenn man nicht auf deutsche Grammatik Rücksicht nehmen muss. 🙂 ) - Dann braucht es auch kein JSONATA. 🙄 🙄 🙄 😭 😳

          c69ee5f4-c89f-4767-83e6-b8155143f383-image.png

          [
             {
                 "id": "2500550bf4260472",
                 "type": "debug",
                 "z": "517cd16e4d7e6ae4",
                 "name": "HTML Tabelle",
                 "active": true,
                 "tosidebar": true,
                 "console": false,
                 "tostatus": false,
                 "complete": "payload",
                 "targetType": "msg",
                 "statusVal": "",
                 "statusType": "auto",
                 "x": 640,
                 "y": 440,
                 "wires": []
             },
             {
                 "id": "83a2de4af3c4d7d3",
                 "type": "inject",
                 "z": "517cd16e4d7e6ae4",
                 "name": "",
                 "props": [
                     {
                         "p": "payload"
                     },
                     {
                         "p": "topic",
                         "vt": "str"
                     }
                 ],
                 "repeat": "",
                 "crontab": "",
                 "once": false,
                 "onceDelay": 0.1,
                 "topic": "Test",
                 "payload": "[{\"Device\":\"Gerät1\",\"Adapter\":\"Zigbee\",\"Battery\":\"57%\"},{\"Device\":\"Gerät2\",\"Adapter\":\"Zigbee\",\"Battery\":\"50%\"}]",
                 "payloadType": "json",
                 "x": 310,
                 "y": 440,
                 "wires": [
                     [
                         "e88eb3fa7c14f96e"
                     ]
                 ]
             },
             {
                 "id": "e88eb3fa7c14f96e",
                 "type": "template",
                 "z": "517cd16e4d7e6ae4",
                 "name": "",
                 "field": "payload",
                 "fieldType": "msg",
                 "format": "handlebars",
                 "syntax": "mustache",
                 "template": "<style>\n    table,\n    th,\n    td {\n        border: 1px solid black;\n        border-collapse: collapse;\n    }\n\n    th,\n    td {\n        padding: 5px;\n        text-align: center;\n    }\n</style>\n\n<center>\n    <h3>Für folgende Geräte erreicht der Batteriezustand ein kritisches Niveau:</h3>\n    <table>\n        <tr>\n            <th>Gerät</th>\n            <th>Batteriezustand</th>\n        </tr>\n        {{#payload}}\n        <tr>\n            <td>{{Device}}</td>\n            <td>{{Battery}}</td>\n        </tr>\n        {{/payload}}\n    </table>\n</center>",
                 "output": "str",
                 "x": 460,
                 "y": 440,
                 "wires": [
                     [
                         "2500550bf4260472"
                     ]
                 ]
             }
          ]
          

          Das geht natürlich auch als reiner Text (wie gesagt - die zusätzlich Node war nur wegen der Grammatik notwendig)

          77a803e5-b286-43be-8518-89cf98c70932-image.png

          [
             {
                 "id": "32cf0e766d1b9a85",
                 "type": "debug",
                 "z": "517cd16e4d7e6ae4",
                 "name": "Test",
                 "active": true,
                 "tosidebar": true,
                 "console": false,
                 "tostatus": false,
                 "complete": "payload",
                 "targetType": "msg",
                 "statusVal": "",
                 "statusType": "auto",
                 "x": 550,
                 "y": 680,
                 "wires": []
             },
             {
                 "id": "d3c52e80d77fc3ee",
                 "type": "inject",
                 "z": "517cd16e4d7e6ae4",
                 "name": "",
                 "props": [
                     {
                         "p": "payload"
                     },
                     {
                         "p": "topic",
                         "vt": "str"
                     }
                 ],
                 "repeat": "",
                 "crontab": "",
                 "once": false,
                 "onceDelay": 0.1,
                 "topic": "Test",
                 "payload": "[{\"Device\":\"Gerät1\",\"Adapter\":\"Zigbee\",\"Battery\":\"57%\"},{\"Device\":\"Gerät2\",\"Adapter\":\"Zigbee\",\"Battery\":\"50%\"}]",
                 "payloadType": "json",
                 "x": 250,
                 "y": 680,
                 "wires": [
                     [
                         "da27b511ccda886d"
                     ]
                 ]
             },
             {
                 "id": "da27b511ccda886d",
                 "type": "template",
                 "z": "517cd16e4d7e6ae4",
                 "name": "",
                 "field": "payload",
                 "fieldType": "msg",
                 "format": "handlebars",
                 "syntax": "mustache",
                 "template": "Folgende Geräte weisen ein kritisches Batterieniveau auf:\n{{#payload}}\n{{Device}} mit {{Battery}} der Batteriekapazität\n{{/payload}}\n",
                 "output": "str",
                 "x": 400,
                 "y": 680,
                 "wires": [
                     [
                         "32cf0e766d1b9a85"
                     ]
                 ]
             }
          ]
          

          _ 1 Reply Last reply Reply Quote 0
          • _
            _R_A_L_F_ @mickym last edited by

            @mickym Oh je, das tut mir leid 😞 Da schaue ich nächstes mal drauf, dass das nicht mehr passiert.

            1 Reply Last reply Reply Quote 0
            • _
              _R_A_L_F_ @mickym last edited by

              @mickym Ansonsten wie immer super gelöst 🙂 Genau so sollte es aussehen, aber wie gesagt, da muss man immer erst darauf kommen, wie einfach es dann doch teilweise geht:

              Folgende Geräte weisen ein kritisches Batterieniveau auf:
              {{#payload}}
              {{Device}} mit {{Battery}} der Batteriekapazität
              {{/payload}}
              

              Auch was die HTML Tabelle angeht ein guter Tipp 🙂

              Vielen Dank an der Stelle für die Hilfe und ausführliche Erklärung 🙂

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

                @_r_a_l_f_ sagte in JSON String in Template Node richtig darstellen:

                wie einfach es dann doch teilweise geht:

                Na das ist halt NodeRed. 😉 😉 bzw. Angular.

                Aber das kommt ja auch nicht von mir. Hin und wieder mal bei Steve vorbeischauen - hilft:

                https://stevesnoderedguide.com/node-red-template-node

                _ 1 Reply Last reply Reply Quote 0
                • _
                  _R_A_L_F_ @mickym last edited by

                  @mickym Stimmt, bei Steve steht im Grunde genau so die Lösung:
                  5b70db34-57a4-4004-8f1a-1ac02edfa21d-image.png

                  Werde ich berücksichtigen beim nächsten mal. Vielen Dank

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  908
                  Online

                  31.7k
                  Users

                  79.7k
                  Topics

                  1.3m
                  Posts

                  2
                  7
                  346
                  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