NEWS
Ausgabe von einer Datenbank für E-Mail formatieren
-
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!
-
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!
@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. -
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!
@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" } ]- Mit dem JSON-Parser Node - machst daraus ein Array - das kannst dann über Javascript ggf. schon in eine Tabelle umsetzen
- Über eine Split Node kannst Du das Array in einzelne Nachrichten aufteilen
- 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:

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

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.
-
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!
@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:

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;
oder im Windows 10 Mail

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