2-Kanal-WiFi Tasmota Relay schalten

Nun habe ich sowohl mit Tasmota, als auch mit shelly verschiedene WiFi Relais angetestet und mich bei Platzknappen Verhältnissen in Holmen oder hinter Verkleidungen für die Shellys entschieden.
Nun taucht aber folgendes Problem auf: Ich nutze 2 Shellys über jeweils einen Taster die nach einer vorbestimmten Zeit oder erreichen eines Ereignisses wieder abfallen sollen. Über den VanPi klappt das auch sehr gut, wenn ich die Shellys aus dem SWITCH Menü schalte. Taste ich mit dem angebundenen Taster erkennt das zwar auch das Programm und zeigt mir den Schaltzustand, leider wird der Scheduler nicht gestartet und das Relais bleibt nach Ablauf des Timers an.

Hollo Mischa
hast du eine Lösung???
Ich habe leider keinen Pi 4 mehr, und muss mich mit demm 3er rumschlagen, da finde ich die Timer nicht. Aber ich vermute mal das du den Timer direkt ansprechen musst, Wenn das so ist wie bei der Heizung, dann Startest du den Timer und der schakltet das Relai. wenn der Timer eingeschaltet ist, und du die Heizung einschaltest kommt eine Warnmeldung. “Attention Heater-Timer is on, this will override you start”
Gruß
Arno

Hey Arno,
was ist mit deinem pi4 passiert? Also ich nutze die aktuelle Beta, da gibt es einen switch Scheduler mit Auto Off , der funktioniert nach mehreren Tests überhaupt nicht mit den wifi Relais, obwohl er ein pop up ausgibt mit auto off nach x-Minuten, direkt nach dem einschalten…ich versuche mal “anleihen” aus dem Heater Menü zu holen, guter Tip!

Hallo Mischa
ich habe meinen I2c Bus zerschossen.
jetzt muss ich mit einem Pi 3 rumspielen bis der 4er wieder lieferbar ist.
ich habe mal mit eine Abschaltverzögerung rumgebastelt. Fals die dir weiter hilft
grafik Mit einstellbarer Einheit
grafik und Zeit, 0-60
grafik

[
    {
        "id": "eb42bd7916a2b1b9",
        "type": "delay",
        "z": "e3a599a1214f61b0",
        "name": "Timer1",
        "pauseType": "delayv",
        "timeout": "5",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "allowrate": false,
        "outputs": 1,
        "x": 530,
        "y": 140,
        "wires": [
            [
                "3ae53124a8874e07"
            ]
        ]
    },
    {
        "id": "25d8204eb6f7a31c",
        "type": "change",
        "z": "e3a599a1214f61b0",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "delay",
                "pt": "msg",
                "to": "Timer1delayTime",
                "tot": "flow"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 350,
        "y": 140,
        "wires": [
            [
                "eb42bd7916a2b1b9"
            ]
        ]
    },
    {
        "id": "697f5aa2d1644ffa",
        "type": "change",
        "z": "e3a599a1214f61b0",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "Timer1delayTime",
                "pt": "flow",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1080,
        "y": 220,
        "wires": [
            []
        ]
    },
    {
        "id": "ca934cec2faf798e",
        "type": "inject",
        "z": "e3a599a1214f61b0",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "true",
        "payloadType": "bool",
        "x": 150,
        "y": 100,
        "wires": [
            [
                "25d8204eb6f7a31c",
                "12054f695ae5443c",
                "be59f5babb409688",
                "d6a59518e06421b6"
            ]
        ]
    },
    {
        "id": "ea32776f9b1512f9",
        "type": "ui_numeric",
        "z": "e3a599a1214f61b0",
        "name": "Zeit Timer1",
        "label": "Zeit Timer1",
        "tooltip": "",
        "group": "227c5252ee14c7e1",
        "order": 2,
        "width": 0,
        "height": 0,
        "wrap": false,
        "passthru": true,
        "topic": "topic",
        "topicType": "msg",
        "format": "{{value}}",
        "min": 0,
        "max": "60",
        "step": 1,
        "className": "",
        "x": 490,
        "y": 220,
        "wires": [
            [
                "8745749223a6a77c"
            ]
        ]
    },
    {
        "id": "cceba668d981aa89",
        "type": "function",
        "z": "e3a599a1214f61b0",
        "name": "multiplizieren",
        "func": "smh  = flow.get(\"Timer1smh\");\nmsg.payload = (msg.payload * smh);\nreturn msg;\n\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 850,
        "y": 220,
        "wires": [
            [
                "697f5aa2d1644ffa"
            ]
        ]
    },
    {
        "id": "3ae53124a8874e07",
        "type": "change",
        "z": "e3a599a1214f61b0",
        "name": "",
        "rules": [
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "true",
                "fromt": "bool",
                "to": "false",
                "tot": "bool"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 720,
        "y": 140,
        "wires": [
            [
                "12054f695ae5443c",
                "be59f5babb409688",
                "d6a59518e06421b6"
            ]
        ]
    },
    {
        "id": "12054f695ae5443c",
        "type": "debug",
        "z": "e3a599a1214f61b0",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 1290,
        "y": 80,
        "wires": []
    },
    {
        "id": "3d8a928a3d3bda84",
        "type": "function",
        "z": "e3a599a1214f61b0",
        "name": "flow set ",
        "func": "\n\nflow.set(\"Timer1delay\", msg.payload);\n  \nreturn msg\n  \n  ",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 840,
        "y": 260,
        "wires": [
            [
                "d17e797869d6dd4b"
            ]
        ]
    },
    {
        "id": "a89ae5ca79a4d51c",
        "type": "inject",
        "z": "e3a599a1214f61b0",
        "name": "",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": "10",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 150,
        "y": 220,
        "wires": [
            [
                "b8da688517a12eab",
                "7ba3407e8c851308",
                "b5e1f6d09c95a3b3",
                "b6a7bde3c47d0155",
                "aceb9bae431c75b4"
            ]
        ]
    },
    {
        "id": "b8da688517a12eab",
        "type": "function",
        "z": "e3a599a1214f61b0",
        "name": "flow get",
        "func": "var delay = flow.get(\"Timer1delay\");\nmsg.payload = delay;    \nreturn msg\n  \n  ",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 320,
        "y": 220,
        "wires": [
            [
                "ea32776f9b1512f9",
                "cceba668d981aa89"
            ]
        ]
    },
    {
        "id": "f0ae64ae6bce027a",
        "type": "ui_dropdown",
        "z": "e3a599a1214f61b0",
        "name": "Einheit Timer1",
        "label": "Einheit Timer1",
        "tooltip": "",
        "place": "Select option",
        "group": "227c5252ee14c7e1",
        "order": 1,
        "width": 0,
        "height": 0,
        "passthru": true,
        "multiple": false,
        "options": [
            {
                "label": "Sekunde",
                "value": 1000,
                "type": "num"
            },
            {
                "label": "Minute",
                "value": 60000,
                "type": "num"
            },
            {
                "label": "Stunde",
                "value": 360000,
                "type": "num"
            }
        ],
        "payload": "",
        "topic": "topic",
        "topicType": "msg",
        "className": "",
        "x": 500,
        "y": 300,
        "wires": [
            [
                "4bcfd7b1d3610e0e"
            ]
        ]
    },
    {
        "id": "4bcfd7b1d3610e0e",
        "type": "function",
        "z": "e3a599a1214f61b0",
        "name": "flow set ",
        "func": "if (msg.payload < 1000)\nflow.set (\"Timer1smh\",1000)\nelse\nflow.set(\"Timer1smh\", msg.payload);\n  \nreturn msg\n  \n  ",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 840,
        "y": 300,
        "wires": [
            [
                "5a10466ebb9161cb"
            ]
        ]
    },
    {
        "id": "7ba3407e8c851308",
        "type": "function",
        "z": "e3a599a1214f61b0",
        "name": "flow get",
        "func": "var smh = flow.get(\"Timer1smh\");\nmsg.payload = smh;    \nreturn msg\n  \n  ",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 320,
        "y": 300,
        "wires": [
            [
                "f0ae64ae6bce027a"
            ]
        ]
    },
    {
        "id": "d17e797869d6dd4b",
        "type": "file",
        "z": "e3a599a1214f61b0",
        "name": "",
        "filename": "pekaway/Timer1Zeit",
        "appendNewline": false,
        "createDir": true,
        "overwriteFile": "true",
        "encoding": "none",
        "x": 1040,
        "y": 260,
        "wires": [
            []
        ]
    },
    {
        "id": "5a10466ebb9161cb",
        "type": "file",
        "z": "e3a599a1214f61b0",
        "name": "",
        "filename": "pekaway/Timer1Einheit",
        "appendNewline": false,
        "createDir": true,
        "overwriteFile": "true",
        "encoding": "none",
        "x": 1050,
        "y": 300,
        "wires": [
            []
        ]
    },
    {
        "id": "b5e1f6d09c95a3b3",
        "type": "file in",
        "z": "e3a599a1214f61b0",
        "name": "",
        "filename": "pekaway/Timer1Zeit",
        "format": "utf8",
        "chunk": false,
        "sendError": false,
        "encoding": "none",
        "allProps": false,
        "x": 380,
        "y": 260,
        "wires": [
            [
                "8745749223a6a77c"
            ]
        ]
    },
    {
        "id": "b6a7bde3c47d0155",
        "type": "file in",
        "z": "e3a599a1214f61b0",
        "name": "",
        "filename": "pekaway/Timer1Einheit",
        "format": "utf8",
        "chunk": false,
        "sendError": false,
        "encoding": "none",
        "allProps": false,
        "x": 370,
        "y": 340,
        "wires": [
            [
                "bd3df05131f518a7"
            ]
        ]
    },
    {
        "id": "f442ba7d916ce76f",
        "type": "switch",
        "z": "e3a599a1214f61b0",
        "name": "",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "true"
            },
            {
                "t": "false"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 1090,
        "y": 140,
        "wires": [
            [
                "1e5b1deaf8b74c56"
            ],
            [
                "fd7c631b771a803a"
            ]
        ]
    },
    {
        "id": "1e5b1deaf8b74c56",
        "type": "debug",
        "z": "e3a599a1214f61b0",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 1290,
        "y": 120,
        "wires": []
    },
    {
        "id": "fd7c631b771a803a",
        "type": "debug",
        "z": "e3a599a1214f61b0",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "payload",
        "statusType": "auto",
        "x": 1290,
        "y": 160,
        "wires": []
    },
    {
        "id": "be59f5babb409688",
        "type": "function",
        "z": "e3a599a1214f61b0",
        "name": "",
        "func": "\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 940,
        "y": 140,
        "wires": [
            [
                "f442ba7d916ce76f"
            ]
        ]
    },
    {
        "id": "aceb9bae431c75b4",
        "type": "delay",
        "z": "e3a599a1214f61b0",
        "name": "",
        "pauseType": "delay",
        "timeout": "2",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "allowrate": false,
        "outputs": 1,
        "x": 140,
        "y": 260,
        "wires": [
            [
                "b8da688517a12eab",
                "b5e1f6d09c95a3b3",
                "7ba3407e8c851308",
                "b6a7bde3c47d0155"
            ]
        ]
    },
    {
        "id": "bd3df05131f518a7",
        "type": "function",
        "z": "e3a599a1214f61b0",
        "name": "",
        "func": "msg.payload = Number((msg.payload));\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 620,
        "y": 340,
        "wires": [
            [
                "4bcfd7b1d3610e0e"
            ]
        ]
    },
    {
        "id": "8745749223a6a77c",
        "type": "function",
        "z": "e3a599a1214f61b0",
        "name": "",
        "func": "msg.payload = Number((msg.payload));\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 680,
        "y": 220,
        "wires": [
            [
                "cceba668d981aa89",
                "3d8a928a3d3bda84"
            ]
        ]
    },
    {
        "id": "d6a59518e06421b6",
        "type": "link out",
        "z": "e3a599a1214f61b0",
        "name": "",
        "mode": "link",
        "links": [
            "afbb8dda.ffe6c"
        ],
        "x": 1245,
        "y": 40,
        "wires": []
    },
    {
        "id": "262b73d6a709678b",
        "type": "comment",
        "z": "e3a599a1214f61b0",
        "name": "hier kommt der Eingang dran",
        "info": "",
        "x": 220,
        "y": 40,
        "wires": []
    },
    {
        "id": "a7dc8d88174d0af0",
        "type": "comment",
        "z": "e3a599a1214f61b0",
        "name": "und hier kommt irgendwo der Ausgang",
        "info": "",
        "x": 1410,
        "y": 120,
        "wires": []
    },
    {
        "id": "227c5252ee14c7e1",
        "type": "ui_group",
        "name": "Timer",
        "tab": "7a7cc0e9d64688e7",
        "order": 7,
        "disp": true,
        "width": "6",
        "collapse": false,
        "className": ""
    },
    {
        "id": "7a7cc0e9d64688e7",
        "type": "ui_tab",
        "name": "Meine Konfig",
        "icon": "dashboard",
        "order": 18,
        "disabled": false,
        "hidden": false
    }
]

Moin Mischa

Erst mal Danke für den „Panzer“ :wink:
Ich hab den natürlich sofort ausprobiert.
Das was die Jungs da mit dem Timer programmiert haben ist schon echt geil. :+1: :+1: :+1:
Wobei mir meine Aufteilung mit Sekunde, Minute, Stunde besser gefällt.
Die Sekunde könnte man auch weglassen, braucht wahrscheinlich eh keiner.
Ich habe mir an den Eingang von Wrelay 1-mal ein paar Injekt-Nodes gebaut True und False.
Und eine Hand voll Debugs um zu sehen was das Dingen macht.
grafik
Da kommt ja dein Shelly auch rein. Und wenn du True drückst, geht nach der eingestellten Zeit das Relais auch aus, wenn du während der Zeit False drückst geht es auch wieder aus.
Ich vermute das dein Shelly beim drücken True sendet und beim loslassen False.
Dann wird der Timer sofort wieder gestoppt.
Häng mal ein Debug hinter den link in und prüfe das mal, was da reinkommt.
Die Einstellung des Timer findet auf der Config Seite statt.
grafik
Im MQTT API wird Tasmota und Shelly gefiltert, und im Convert string to boolean, wird auf True, und False gefiltert, und zum Wifi Relay geschickt.
grafik
Du könntest wenn das stimmt was ich mir denke so ein Switch hinter den Link in, und nur true durchlassen. False läuft im unteren Ausgang ins leere.
grafik
Gruß Arno

1 Like

Hey Arno! Freut mich, dass der Pi gut gelandet ist, auf dem lief vorher Venus OS und ich brauchte eine robuste “Verpackung” da der mit Kabelbindern hinter der Verkleidung steckte, soll er dir gute Dienste leisten!
Das mit dem true/false ist ein guter Tip, das probiere ich heute Abend gleich mal aus.
Interessanterweise funktioniert der Scheduler mit fest definierten an und abschaltzeiten einwandfrei, auch wenn ich den Shelly zwischendurch manuell schalte.
Die ursprüngliche Idee war, mit dem Auto Off die Eigenschaft des Bordnetzsteuergerätes zu simulieren, bestimmte Verbraucher nach z.B. “Zündung aus” von der Batterie zu trennen oder bestimmte Ereignisse als Trigger zu nehmen.

viele Grüße