Nur zweimal ausführen

Node-RED als CCU3/RaspberryMatic Addon, WebApp, HomeKit, ...

Moderator: Co-Administratoren

Antworten
Shawn26
Beiträge: 55
Registriert: 21.10.2017, 18:10
Hat sich bedankt: 19 Mal
Danksagung erhalten: 1 Mal

Nur zweimal ausführen

Beitrag von Shawn26 » 11.02.2023, 15:28

Hallo Zusammen,

(@Henke) hatte mir hier einen netten Flow zusammengebaut um die Öffnungsdauer meiner Fenster auf dem Dashboard anzuzeigen.
Das ist der dazugehörige Flow.
aktuelle_Situation.jpg
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
    }
]
Vielen Dank ich stehe total auf dem Schlauch..

Shawn26

Antworten

Zurück zu „RedMatic“