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. Ausgabe von einer Datenbank für E-Mail formatieren

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Ausgabe von einer Datenbank für E-Mail formatieren

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

      Hallo!

      Folgendes Problem, ich bekomme nach einer Abfrage aus der Datenbank (DB-Maria) einen String geliefert der wie folgt aussieht ( [{"Scann-Zeit":"2021-01-07 07:18:15.7038","Ort":"Drucker-Convere"},{"Scann-Zeit":"2021-01-07 07:18:51.2020","Ort": ..................... ,"Ort":"Umsetzer"}] ).
      Diese Meldung wird dann über E-Mail verschickt. Dieser Bandwurm ist aber nicht praktikabel. Wie kann man so eine Meldung so verschicken das diese so aussieht ( Scann-Zeit Drucker-Convere; Scann-Zeit Drucker Drucker1_Drucker2 ... usw.) Eventuell auch als Tabelle:

      Scann-Zeit Drucker-Convere
      Scann-Zeit Drucker-1_Drucker-2
      .
      .
      .
      .
      .

      Bitte um ein paar Tips zum Lösungsansatz!

      F mickym 3 Replies Last reply Reply Quote 0
      • F
        frankyboy73 @helios03 last edited by

        @helios03 Hi, vielleicht hilft dir das hier weiter.
        https://forum.iobroker.net/topic/40242/msg-payload-werte-auslesen
        3.Post umwandeln von Json String in Java Objekt
        und danach als Nachricht so zusammensetzen wie du sie brauchst.

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

          @helios03 said in Ausgabe von einer Datenbank für E-Mail formatieren:

          [{"Scann-Zeit":"2021-01-07 07:18:15.7038","Ort":"Drucker-Convere"},{"Scann-Zeit":"2021-01-07 07:18:51.2020","Ort": ..................... ,"Ort":"Umsetzer"}]

          In Anlehnung an das was @frankyboy73 geschrieben hat - hier mal ein paar Möglichkeiten.

          Deinen String habe ich mal bis auf den unspezifischen Ort in eine Inject Node gepackt da kannst dann selbst experimentieren:

          [	   {	       "Scann-Zeit":"2021-01-07 07:18:15.7038",	       "Ort":"Drucker-Convere"	   },	   {	       "Scann-Zeit":"2021-01-07 07:18:51.2020",	       "Ort":"Umsetzer"	   }	]
          
          1. Mit dem JSON-Parser Node - machst daraus ein Array - das kannst dann über Javascript ggf. schon in eine Tabelle umsetzen
          2. Über eine Split Node kannst Du das Array in einzelne Nachrichten aufteilen
          3. Bei Bedarf kannst Du dann die Nachricht auf einzelne Werte mit dem Druckernamen als Topic verwenden, wenn Du willst.

          Ich habe lediglich bei der HTML-Dastellung mit dem "-" zur Tabellengenerierung ein Problem - deshalb hab ich in dem JAVA Objekt über eine Change-Node Scann-Zeit in Zeit gewandelt. So sieht man gleich, wie man die Change-Node auch zur Stringmanipulation verwendet. 😉

          Zur Ausgabe als Tabelle habe ich dann das Array genommen und eine Template Node verwendet. Wie man das vom Array über den HTML Code in VIS überträgt weiss ich nicht - wobei das Auslesen von Arrays in HTML wahrscheinlich genauso funktioniert und Du das Array nur in einem Datenpunkt zwischenspeichern musst.

          Hier mal der Flow:

          [
              {
                  "id": "206e939b.a2f55c",
                  "type": "inject",
                  "z": "dce8fa20.2e93c8",
                  "name": "",
                  "props": [
                      {
                          "p": "payload"
                      },
                      {
                          "p": "topic",
                          "vt": "str"
                      }
                  ],
                  "repeat": "",
                  "crontab": "",
                  "once": false,
                  "onceDelay": 0.1,
                  "topic": "",
                  "payload": "[\t   {\t       \"Scann-Zeit\":\"2021-01-07 07:18:15.7038\",\t       \"Ort\":\"Drucker-Convere\"\t   },\t   {\t       \"Scann-Zeit\":\"2021-01-07 07:18:51.2020\",\t       \"Ort\":\"Umsetzer\"\t   }\t]",
                  "payloadType": "str",
                  "x": 1240,
                  "y": 540,
                  "wires": [
                      [
                          "c5a9d3e1.3ab8d"
                      ]
                  ]
              },
              {
                  "id": "d401859a.680918",
                  "type": "debug",
                  "z": "dce8fa20.2e93c8",
                  "name": "Einzel-Objekt",
                  "active": true,
                  "tosidebar": true,
                  "console": false,
                  "tostatus": false,
                  "complete": "payload",
                  "targetType": "msg",
                  "statusVal": "",
                  "statusType": "auto",
                  "x": 1970,
                  "y": 540,
                  "wires": []
              },
              {
                  "id": "2d09eb38.da9974",
                  "type": "json",
                  "z": "dce8fa20.2e93c8",
                  "name": "",
                  "property": "payload",
                  "action": "",
                  "pretty": false,
                  "x": 1590,
                  "y": 540,
                  "wires": [
                      [
                          "28510500.b392cc",
                          "c40cab5d.785dc8"
                      ]
                  ]
              },
              {
                  "id": "28510500.b392cc",
                  "type": "split",
                  "z": "dce8fa20.2e93c8",
                  "name": "",
                  "splt": "\\n",
                  "spltType": "str",
                  "arraySplt": 1,
                  "arraySpltType": "len",
                  "stream": false,
                  "addname": "",
                  "x": 1760,
                  "y": 540,
                  "wires": [
                      [
                          "d401859a.680918",
                          "887a951c.d97dc8"
                      ]
                  ]
              },
              {
                  "id": "887a951c.d97dc8",
                  "type": "change",
                  "z": "dce8fa20.2e93c8",
                  "name": "",
                  "rules": [
                      {
                          "t": "set",
                          "p": "topic",
                          "pt": "msg",
                          "to": "payload.Ort",
                          "tot": "msg"
                      },
                      {
                          "t": "set",
                          "p": "payload",
                          "pt": "msg",
                          "to": "payload.Zeit",
                          "tot": "msg"
                      }
                  ],
                  "action": "",
                  "property": "",
                  "from": "",
                  "to": "",
                  "reg": false,
                  "x": 1950,
                  "y": 600,
                  "wires": [
                      [
                          "f890995a.3a2e58"
                      ]
                  ]
              },
              {
                  "id": "f890995a.3a2e58",
                  "type": "debug",
                  "z": "dce8fa20.2e93c8",
                  "name": "Einzelnachrichten",
                  "active": true,
                  "tosidebar": true,
                  "console": false,
                  "tostatus": false,
                  "complete": "payload",
                  "targetType": "msg",
                  "statusVal": "",
                  "statusType": "auto",
                  "x": 2160,
                  "y": 600,
                  "wires": []
              },
              {
                  "id": "c40cab5d.785dc8",
                  "type": "ui_template",
                  "z": "dce8fa20.2e93c8",
                  "group": "921e7aba.1e8358",
                  "name": "HTML Tabelle",
                  "order": 0,
                  "width": "6",
                  "height": "9",
                  "format": "<style>\n.main\n{\n    height:100%;\n    width:100%;\n    /* background:lightblue; */\n        \n}\n\n\n#t01 th {\n     \n  padding: 5px;\n  font-size:120%;\n  color: var(--nr-dashboard-groupTextColor);\n   /* color:#0eb8c0;  */\n}\n#t01 td {\n     \n  padding: 5px;\n\n}\n    \n</style>\n\n<div class=\"main\">\n\n    <table id=\"t01\">\n\n   \n    <tr><th width=150>Scann-Zeit</th><th  width=150>Drucker</th></tr>\n     <tr ng-repeat=\"(key, y) in msg.payload\">\n    <td  align=left>{{y.Zeit}}</td><td align=right>{{y.Ort}}</td>\n    </tr>\n    \n    </table>\n\n\n</div>",
                  "storeOutMessages": false,
                  "fwdInMessages": false,
                  "resendOnRefresh": false,
                  "templateScope": "local",
                  "x": 1950,
                  "y": 700,
                  "wires": [
                      []
                  ]
              },
              {
                  "id": "c5a9d3e1.3ab8d",
                  "type": "change",
                  "z": "dce8fa20.2e93c8",
                  "name": "Scann-Zeit ==> Zeit",
                  "rules": [
                      {
                          "t": "change",
                          "p": "payload",
                          "pt": "msg",
                          "from": "Scann-Zeit",
                          "fromt": "str",
                          "to": "Zeit",
                          "tot": "str"
                      }
                  ],
                  "action": "",
                  "property": "",
                  "from": "",
                  "to": "",
                  "reg": false,
                  "x": 1430,
                  "y": 540,
                  "wires": [
                      [
                          "2d09eb38.da9974"
                      ]
                  ]
              },
              {
                  "id": "921e7aba.1e8358",
                  "type": "ui_group",
                  "name": "Tabelle Test",
                  "tab": "dc25fe35.866f",
                  "order": 2,
                  "disp": true,
                  "width": "6",
                  "collapse": false
              },
              {
                  "id": "dc25fe35.866f",
                  "type": "ui_tab",
                  "name": "Test",
                  "icon": "dashboard",
                  "order": 13,
                  "disabled": false,
                  "hidden": false
              }
          ]
          

          Hier die grafische Darstellung:

          screen.png

          Und hier die Darstellung als HTML Tabelle - hier im NodeRed Dashboard:

          screen.png

          Und zum Schluss noch der Code in der Template Node um zu sehen, wie man aus einem Java-Array so eine Tabelle generiert:

          <div class="main">
          
              <table id="t01">
          
             
              <tr><th width=150>Scann-Zeit</th><th  width=150>Drucker</th></tr>
               <tr ng-repeat="(key, y) in msg.payload">
              <td  align=left>{{y.Zeit}}</td><td align=right>{{y.Ort}}</td>
              </tr>
              
              </table>
          
          
          </div>
          

          Mit dem Bindestrich im Feldnamen Scann-Zeit also "y.Scann-Zeit" bin ich nicht klargekommen - das muss ggf. ein HTML Spezialist sagen, wie man das Sonderzeichen im Feldnamen maskiert.

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

            @helios03
            Ich habe Deine Anforderung ja nochmal gelesen und Du wolltest das ja als E-Mail haben.
            Ich hab mal bisschen rumgespielt - und bin leider guter bzw. gar kein HTML Programmieren, aber ich hab was hinbekommen. 😉

            Leider hat es - analog zum UI Dashboard die Template Node zu nehmen NICHT funktioniert:

            screen.png

            Deshalb hab ich eine function Node gemacht - die den HTML Code erzeugt - aber das können HTML Programmierer sicher viel besser. Die übergibt dann den kompletten HTML Code an eine Mail-Node.

            Der Code in der function Node schaut wie folgt aus:

            var start= ' <!DOCTYPE html> \
            <html xmlns="http://www.w3.org/1999/xhtml"> \
             <head> \
              <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> \
              <meta name="viewport" content="width=device-width, initial-scale=1.0"/> \
            </head> \
            <body style="margin: 0; padding: 0;"> \
             <table border="1" cellpadding="0" cellspacing="0" width="100%"> \
                <tr><th width=150>Scann-Zeit</th><th  width=150>Drucker</th></tr>';
                
            var end= ' </table> \
            </body> \
            </html>';
            
            var output="";
            
            for (var w of msg.payload) {
                    var zeile = "<tr>" + "\n";
                    zeile = zeile + "<td>" + w.Zeit + "</td><td>" + w.Ort +"</td>" + "\n";
                    zeile = zeile + "</tr>"+ "\n";
                output=output+zeile;
            
            }
            msg.payload= start + output + end;
            return msg;
            

            screen.png

            oder im Windows 10 Mail

            screen.png

            Den Betreff kannst Du natürlich ändern in dem Du vorher noch eine entsprechende msg.topic setzt.

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

            Support us

            ioBroker
            Community Adapters
            Donate

            947
            Online

            31.7k
            Users

            79.7k
            Topics

            1.3m
            Posts

            3
            4
            165
            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