(@Henke) hatte mir hier einen netten Flow zusammengebaut um die Öffnungsdauer meiner Fenster auf dem Dashboard anzuzeigen.
Das ist der dazugehörige Flow.
Nun möchte nach den den zwei Change Regeln bei dem ersten Durchlauf (nämlich bei der Fensteröffnung -> da wird der Dashboard Eintrag mit Datum generiert) und beim letzten Durchlauf (nämlich bei der Fensterschließung -> da wird dann das Datum mit Öffnungsdauer ins Dashboard eingetragen) jeweils eine Mail versenden.
Im besten Falle sogar zwei von Inhalt her unterschiedliche Mails (ansonsten unterscheiden sich die Mails von der Uhrzeit in der Betreffzeile).
Ich bekomme es nur nicht hin. Er schreibt mir entweder überhaupt keine Mail oder regelmäßig im Minuten Takt eine Mail, weil dann wird auch immer der Dashboard Eintrag aktualisiert.
Jemand eine Idee?
Ich habe mal den roten eingerahmten Teil des Flows hinzugefügt.
Code: Alles auswählen
[
{
"id": "9c1fb25108b10ee8",
"type": "subflow",
"name": "Laufzeit",
"info": "",
"category": "",
"in": [
{
"x": 60,
"y": 100,
"wires": [
{
"id": "541b7399c755f316"
}
]
}
],
"out": [
{
"x": 600,
"y": 280,
"wires": [
{
"id": "62bf429dced2f2cf",
"port": 0
}
]
},
{
"x": 600,
"y": 360,
"wires": [
{
"id": "62bf429dced2f2cf",
"port": 1
}
]
}
],
"env": [
{
"name": "Raster",
"type": "num",
"value": "1",
"ui": {
"type": "input",
"opts": {
"types": [
"num"
]
}
}
},
{
"name": "Einheit",
"type": "str",
"value": "min",
"ui": {
"type": "select",
"opts": {
"opts": [
{
"l": {
"de": "sec"
},
"v": "sec"
},
{
"l": {
"de": "Minuten"
},
"v": "min"
},
{
"l": {
"de": "Stunde"
},
"v": "h"
}
]
}
}
}
],
"meta": {},
"color": "#d580d5",
"icon": "node-red-contrib-sun-position/clock-timer-white.svg",
"status": {
"x": 320,
"y": 260,
"wires": [
{
"id": "462592acd0cb3688",
"port": 0
}
]
}
},
{
"id": "62bf429dced2f2cf",
"type": "unsafe-function",
"z": "9c1fb25108b10ee8",
"name": "Laufzeit",
"func": "let payIn = msg.payload;\nlet fName = \"Laufzeit\";\nlet off = { ts: 0, on: false };\nlet start = flow.get(fName) || off;\nif (msg._input) {\n\n if (msg.payload) {\n start = { ts: msg.ts, on: true };\n flow.set(fName, start);\n }\n else {\n if (!start.on)\n return;\n flow.set(fName, off);\n\n }\n msg._input = false;\n}\n\nlet raster = Number(env.get(\"Raster\") || 1);\nlet einheit = env.get(\"Einheit\") || \"min\";\nlet einheitSec = 60;\nswitch (einheit) {\n case \"sec\":\n einheitSec = 1;\n break;\n case \"min\":\n einheitSec = 60;\n break;\n case \"h\":\n einheitSec = 60 * 60;\n break;\n default:\n node.log(\"falsche Einheit\");\n break;\n}\nmsg.delay = 1000 * raster * einheitSec;\nmsg.runSec = Math.round((msg.ts - start.ts) / 1000);\nmsg.payload = Math.round(msg.runSec / einheitSec * 100) / 100;\nmsg.Start = start.ts;\nmsg.End = msg.ts;\nmsg.runMili = msg.ts - start.ts;\n\nlet text = msg.payload + \" \" + einheit;\nnode.status({ fill: \"blue\", shape: \"ring\", text: text });\nif (!payIn)\n return [null, msg];\nreturn msg;",
"outputs": 2,
"noerr": 0,
"x": 420,
"y": 100,
"wires": [
[
"220b4faaf9197e20"
],
[
"519e5d85c5f7a5a5"
]
]
},
{
"id": "220b4faaf9197e20",
"type": "trigger",
"z": "9c1fb25108b10ee8",
"name": "",
"op1": "",
"op2": "true",
"op1type": "nul",
"op2type": "bool",
"duration": "30",
"extend": false,
"overrideDelay": true,
"units": "s",
"reset": "",
"bytopic": "all",
"topic": "topic",
"outputs": 1,
"x": 690,
"y": 140,
"wires": [
[
"573f5ef88a6fd91c"
]
]
},
{
"id": "573f5ef88a6fd91c",
"type": "change",
"z": "9c1fb25108b10ee8",
"name": "",
"rules": [
{
"t": "set",
"p": "ts",
"pt": "msg",
"to": "",
"tot": "date"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 410,
"y": 200,
"wires": [
[
"62bf429dced2f2cf"
]
]
},
{
"id": "519e5d85c5f7a5a5",
"type": "change",
"z": "9c1fb25108b10ee8",
"name": "",
"rules": [
{
"t": "set",
"p": "reset",
"pt": "msg",
"to": "true",
"tot": "bool"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 700,
"y": 100,
"wires": [
[
"220b4faaf9197e20"
]
]
},
{
"id": "462592acd0cb3688",
"type": "status",
"z": "9c1fb25108b10ee8",
"name": "",
"scope": [
"62bf429dced2f2cf"
],
"x": 160,
"y": 260,
"wires": [
[]
]
},
{
"id": "541b7399c755f316",
"type": "change",
"z": "9c1fb25108b10ee8",
"name": "",
"rules": [
{
"t": "set",
"p": "_input",
"pt": "msg",
"to": "true",
"tot": "bool"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 190,
"y": 100,
"wires": [
[
"a7d228d235100b22"
]
]
},
{
"id": "cab19745f777b63a",
"type": "switch",
"z": "9c1fb25108b10ee8",
"name": "",
"property": "ts",
"propertyType": "msg",
"rules": [
{
"t": "istype",
"v": "number",
"vt": "number"
},
{
"t": "else"
}
],
"checkall": "true",
"repair": false,
"outputs": 2,
"x": 150,
"y": 180,
"wires": [
[
"62bf429dced2f2cf"
],
[
"573f5ef88a6fd91c"
]
]
},
{
"id": "a7d228d235100b22",
"type": "unsafe-function",
"z": "9c1fb25108b10ee8",
"name": "Clone Message",
"func": "let newMsg = RED.util.cloneMessage(msg);\nreturn newMsg;\n",
"outputs": 1,
"noerr": 0,
"x": 180,
"y": 140,
"wires": [
[
"cab19745f777b63a"
]
]
},
{
"id": "f0408d7e150674b4",
"type": "subflow:9c1fb25108b10ee8",
"z": "33a818009b11bed3",
"name": "",
"x": 640,
"y": 340,
"wires": [
[
"656e7da92ca18693",
"b873d656505f0f6a"
],
[
"580d2bddeb5b69a6",
"b873d656505f0f6a"
]
]
},
{
"id": "b873d656505f0f6a",
"type": "change",
"z": "33a818009b11bed3",
"name": "",
"rules": [
{
"t": "set",
"p": "StText",
"pt": "msg",
"to": "$fromMillis(Start, '[D01].[M01].[Y0001] [H01]:[m01]', \"+0100\")",
"tot": "jsonata"
},
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "$round(payload,0)",
"tot": "jsonata"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 890,
"y": 340,
"wires": [
[
"b3d1d36dd03e2f76"
]
]
},
{
"id": "b3d1d36dd03e2f76",
"type": "ui_text",
"z": "33a818009b11bed3",
"group": "6a5c9013a39c5882",
"order": 2,
"width": 0,
"height": 0,
"name": "",
"label": "Arbeitszimmer:",
"format": "{{msg.StText}} - {{msg.payload}} min",
"layout": "row-left",
"className": "",
"x": 1100,
"y": 340,
"wires": []
},
{
"id": "6a5c9013a39c5882",
"type": "ui_group",
"name": "Öffnungsdauer Fenster",
"tab": "8153eb0.fe96118",
"order": 1,
"disp": true,
"width": "6",
"collapse": false,
"className": ""
},
{
"id": "8153eb0.fe96118",
"type": "ui_tab",
"name": "Funk",
"icon": "dashboard",
"order": 4
}
]
Shawn26