NEWS
Timer erstellen und bei Bedarf wieder löschen
-
Hi,
ich habe vor einigen Tagen angefangen mit node-red ein paar Spielerein umzusetzen, das klappte auch soweit ganz gut. Und nach den ersten Erfolgen kommen nun die Schwierigkeiten.Ich möchte gerne über eine Visualisierung einen Timer setzen, ausführen lassen und bei Bedarf wieder löschen. Auch soll das Ganze nach Auslösung automatisch wieder zurückgestzt werden.
Ich habe meine Versuche mal hier angehängt, vielleicht habt ihr ja ne Idee oder @mickym ne Lösung.
[ { "id": "76c099af.f7c52", "type": "tab", "label": "Ausschalttimer TV Lilly", "disabled": false, "info": "" }, { "id": "adff7635.984818", "type": "debug", "z": "76c099af.f7c52", "name": "Datenpunkt", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 750, "y": 200, "wires": [] }, { "id": "b3cbeec.9653d1", "type": "eztimer", "z": "76c099af.f7c52", "name": "ezTimer", "debug": false, "autoname": "17:00", "tag": "eztimer", "topic": "", "suspended": false, "sendEventsOnSuspend": false, "latLongSource": "manual", "latLongHaZone": "zone.home", "lat": "", "lon": "", "timerType": "2", "startupMessage": false, "ontype": "2", "ontimesun": "dawn", "ontimetod": "17:00", "onpropertytype": "msg", "onproperty": "payload", "onvaluetype": "bool", "onvalue": "false", "onoffset": 0, "onrandomoffset": 0, "onsuppressrepeats": false, "offtype": "9", "offtimesun": "dusk", "offtimetod": "dusk", "offduration": "00:01:00", "offpropertytype": "msg", "offproperty": "payload", "offvaluetype": "num", "offvalue": 0, "offoffset": 0, "offrandomoffset": 0, "offsuppressrepeats": false, "resend": false, "resendInterval": "0s", "mon": true, "tue": true, "wed": true, "thu": true, "fri": true, "sat": true, "sun": true, "x": 740, "y": 280, "wires": [ [ "ddd97179.004ab", "dd1f8133.ac2198", "8feae351.fbf7d8" ] ] }, { "id": "ddd97179.004ab", "type": "debug", "z": "76c099af.f7c52", "name": "nach eztimer", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 1060, "y": 200, "wires": [] }, { "id": "9e2ab0ca.693f78", "type": "ioBroker get", "z": "76c099af.f7c52", "name": "Ausschaltzeit Lilly", "topic": "0_userdata.0.Diverses.virtuelle_Schalter.Ausschaltzeit_Lilly", "attrname": "payload", "payloadType": "value", "x": 430, "y": 200, "wires": [ [ "adff7635.984818", "ba93ec83.f49e98" ] ] }, { "id": "3ef3689.4c42f18", "type": "inject", "z": "76c099af.f7c52", "name": "", "props": [ { "p": "payload" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "{\"action\":\"off\"}", "payloadType": "json", "x": 210, "y": 340, "wires": [ [ "e3396ad2.8a8328", "b3cbeec.9653d1" ] ] }, { "id": "ba93ec83.f49e98", "type": "change", "z": "76c099af.f7c52", "name": "ontime generieren", "rules": [ { "t": "move", "p": "payload", "pt": "msg", "to": "payload.ontime", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 430, "y": 280, "wires": [ [ "36108e1.c58e772", "b3cbeec.9653d1" ] ] }, { "id": "36108e1.c58e772", "type": "debug", "z": "76c099af.f7c52", "name": "change", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 740, "y": 240, "wires": [] }, { "id": "d88f8ced.6c6dc8", "type": "ioBroker in", "z": "76c099af.f7c52", "name": "Timer betätigt", "topic": "0_userdata.0.Diverses.virtuelle_Schalter.Ausschalttimer_Lilly", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "false", "x": 130, "y": 140, "wires": [ [ "586cbd7d.346c44", "68be1b0d.a93644", "12a4c986.404ebe" ] ] }, { "id": "dd1f8133.ac2198", "type": "ioBroker out", "z": "76c099af.f7c52", "name": "", "topic": "0_userdata.0.Diverses.virtuelle_Schalter.Ausschalttimer_Lilly", "ack": "false", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 1210, "y": 280, "wires": [] }, { "id": "586cbd7d.346c44", "type": "switch", "z": "76c099af.f7c52", "name": "only true", "property": "payload", "propertyType": "msg", "rules": [ { "t": "true" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 400, "y": 140, "wires": [ [ "9e2ab0ca.693f78" ] ] }, { "id": "4d2e5d98.8e7514", "type": "ioBroker out", "z": "76c099af.f7c52", "name": "SD Fensterbank aus", "topic": "sonoff.0.Steckdose Fensterbank.POWER", "ack": "false", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 1080, "y": 340, "wires": [] }, { "id": "e3396ad2.8a8328", "type": "change", "z": "76c099af.f7c52", "name": "ezTimer aus", "rules": [ { "t": "move", "p": "payload", "pt": "msg", "to": "payload.action.off", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 450, "y": 340, "wires": [ [ "305d3a73.f20cde" ] ] }, { "id": "553dd69d.196ac", "type": "inject", "z": "76c099af.f7c52", "name": "", "props": [ { "p": "payload" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "true", "payloadType": "bool", "x": 150, "y": 200, "wires": [ [ "9e2ab0ca.693f78" ] ] }, { "id": "305d3a73.f20cde", "type": "debug", "z": "76c099af.f7c52", "name": "Timer aus", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 750, "y": 340, "wires": [] }, { "id": "c1cd0f62.9c1588", "type": "function", "z": "76c099af.f7c52", "name": "&", "func": "context.global.myVars = context.global.myVars || {};\ncontext.global.myVars[msg.topic] = msg.payload;\n\nmsg.topic = 'AND';\nmsg.payload = (parseInt(context.global.myVars.A, 10) &&\n parseInt(context.global.myVars.B, 10));\n\nif (msg.payload) return msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 970, "y": 520, "wires": [ [ "20fe2e57.0d18f2", "31cdef55.b0a18" ] ] }, { "id": "20fe2e57.0d18f2", "type": "change", "z": "76c099af.f7c52", "name": "Testausgabe", "rules": [ { "t": "change", "p": "payload", "pt": "msg", "from": "1", "fromt": "num", "to": "true", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1110, "y": 520, "wires": [ [] ] }, { "id": "68be1b0d.a93644", "type": "change", "z": "76c099af.f7c52", "name": "", "rules": [ { "t": "change", "p": "payload", "pt": "msg", "from": "true", "fromt": "bool", "to": "1", "tot": "num" }, { "t": "change", "p": "payload", "pt": "msg", "from": "false", "fromt": "bool", "to": "0", "tot": "num" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 770, "y": 540, "wires": [ [ "c1cd0f62.9c1588", "733b6163.8d03a8" ] ] }, { "id": "733b6163.8d03a8", "type": "debug", "z": "76c099af.f7c52", "name": "nach Regeländerung 2", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 1050, "y": 620, "wires": [] }, { "id": "353fea2.b330796", "type": "debug", "z": "76c099af.f7c52", "name": "nach Regeländerung 1", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 1050, "y": 460, "wires": [] }, { "id": "31cdef55.b0a18", "type": "debug", "z": "76c099af.f7c52", "name": "nach UND Verknüpfung", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 1150, "y": 560, "wires": [] }, { "id": "8feae351.fbf7d8", "type": "change", "z": "76c099af.f7c52", "name": "", "rules": [ { "t": "change", "p": "payload", "pt": "msg", "from": "false", "fromt": "bool", "to": "1", "tot": "num" }, { "t": "change", "p": "payload", "pt": "msg", "from": "true", "fromt": "bool", "to": "0", "tot": "num" }, { "t": "change", "p": "topic", "pt": "msg", "from": "*", "fromt": "str", "to": "A", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 770, "y": 500, "wires": [ [ "c1cd0f62.9c1588", "353fea2.b330796" ] ] }, { "id": "12a4c986.404ebe", "type": "debug", "z": "76c099af.f7c52", "name": "Timer an/aus", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 420, "y": 100, "wires": [] } ]
-
@michmein
Nach etwas suchen und weiteren Versuchen habe ich eine Lösung gefunden.[ { "id": "76c099af.f7c52", "type": "tab", "label": "Ausschalttimer TV Lilly", "disabled": false, "info": "" }, { "id": "b3cbeec.9653d1", "type": "eztimer", "z": "76c099af.f7c52", "name": "ezTimer", "debug": false, "autoname": "17:00", "tag": "eztimer", "topic": "", "suspended": false, "sendEventsOnSuspend": false, "latLongSource": "manual", "latLongHaZone": "zone.home", "lat": "", "lon": "", "timerType": "2", "startupMessage": false, "ontype": "2", "ontimesun": "dawn", "ontimetod": "17:00", "onpropertytype": "msg", "onproperty": "payload", "onvaluetype": "bool", "onvalue": "true", "onoffset": 0, "onrandomoffset": 0, "onsuppressrepeats": false, "offtype": "9", "offtimesun": "dusk", "offtimetod": "dusk", "offduration": "00:01:00", "offpropertytype": "msg", "offproperty": "payload", "offvaluetype": "num", "offvalue": 0, "offoffset": 0, "offrandomoffset": 0, "offsuppressrepeats": false, "resend": false, "resendInterval": "0s", "mon": true, "tue": true, "wed": true, "thu": true, "fri": true, "sat": true, "sun": true, "x": 500, "y": 200, "wires": [ [ "488b354d.6eb57c", "794819e5.e5cdf8" ] ] }, { "id": "9e2ab0ca.693f78", "type": "ioBroker get", "z": "76c099af.f7c52", "name": "Ausschaltzeit Lilly", "topic": "0_userdata.0.Diverses.virtuelle_Schalter.Ausschaltzeit_Lilly", "attrname": "payload", "payloadType": "value", "x": 310, "y": 140, "wires": [ [ "ba93ec83.f49e98" ] ] }, { "id": "ba93ec83.f49e98", "type": "change", "z": "76c099af.f7c52", "name": "ontime generieren", "rules": [ { "t": "move", "p": "payload", "pt": "msg", "to": "payload.ontime", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 310, "y": 200, "wires": [ [ "b3cbeec.9653d1" ] ] }, { "id": "d88f8ced.6c6dc8", "type": "ioBroker in", "z": "76c099af.f7c52", "name": "Timer on/off", "topic": "0_userdata.0.Diverses.virtuelle_Schalter.Ausschalttimer_Lilly", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "false", "x": 170, "y": 80, "wires": [ [ "586cbd7d.346c44", "488b354d.6eb57c" ] ] }, { "id": "dd1f8133.ac2198", "type": "ioBroker out", "z": "76c099af.f7c52", "name": "Timer on/off", "topic": "0_userdata.0.Diverses.virtuelle_Schalter.Ausschalttimer_Lilly", "ack": "false", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 550, "y": 80, "wires": [] }, { "id": "586cbd7d.346c44", "type": "switch", "z": "76c099af.f7c52", "name": "only true", "property": "payload", "propertyType": "msg", "rules": [ { "t": "true" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 340, "y": 80, "wires": [ [ "9e2ab0ca.693f78" ] ] }, { "id": "4d2e5d98.8e7514", "type": "ioBroker out", "z": "76c099af.f7c52", "name": "SD Lilly TV", "topic": "sonoff.0.Steckdose TV Lilly.POWER", "ack": "false", "autoCreate": "false", "stateName": "", "role": "", "payloadType": "", "readonly": "", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 730, "y": 320, "wires": [] }, { "id": "31cdef55.b0a18", "type": "debug", "z": "76c099af.f7c52", "name": "nach UND Verknüpfung", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 590, "y": 280, "wires": [] }, { "id": "488b354d.6eb57c", "type": "BooleanLogicUltimate", "z": "76c099af.f7c52", "name": "AND", "filtertrue": "onlytrue", "persist": true, "sInitializeWith": "WaitForPayload", "triggertopic": "trigger", "outputtriggeredby": "all", "inputCount": 2, "topic": "result", "restrictinputevaluation": true, "x": 340, "y": 340, "wires": [ [ "31cdef55.b0a18", "7ca43ca5.c344b4" ], [], [] ] }, { "id": "794819e5.e5cdf8", "type": "change", "z": "76c099af.f7c52", "name": "true > false", "rules": [ { "t": "change", "p": "payload", "pt": "msg", "from": "true", "fromt": "bool", "to": "false", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 330, "y": 260, "wires": [ [ "dd1f8133.ac2198", "488b354d.6eb57c" ] ] }, { "id": "7ca43ca5.c344b4", "type": "change", "z": "76c099af.f7c52", "name": "true > false", "rules": [ { "t": "change", "p": "payload", "pt": "msg", "from": "true", "fromt": "bool", "to": "false", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 550, "y": 320, "wires": [ [ "4d2e5d98.8e7514" ] ] } ]
-
@michmein Nun ich habe mich mal Deines Flows angenommen und in men Standalon System importiert - da hatte ich zufälligerweise noch die EZ-Timer Nodes drin - aus meinem produktiven System sind die rausgeflogen, weil crontab plus viel leistungsfähiger ist - also würde ich mir überlegen, ob ich mit diesen Nodes weiter machen würde.
Ich habs mal nachvollzogen und die iobroker Nodes für den Flow mal ausgetauscht um das Ganze auf dem Standalone System zu testen und eben nachzuvollziehen. Im Prinzip funktioniert es ja erst mal - man muss sich halt in die Funktionsweise von dem eztimer einarbeiten.
Hier mal ein Testflow ohne die iobroker Nodes - der aber ansonsten Deinem Flow entspricht:
Vielleicht können wir uns ja mal dann an dem Flow orientieren, wobei ich den EZ-Timer nicht mehr so toll finde. Da ist cronplus wesentlich leistungsfähiger, aber egal - wichtig ist ja erst mal was Du erreichen willst und deshalb hab ich mal lehrerhaft
in Deinem Flow rumgekrizelt:
Die Node funktioniert erst mal so, wie sie soll - sieht man an den grünen Ausgaben, aber was das Ganze rechts unten soll, das erschließt sich mir auch mit viel Fantasie nicht - deshalb mal die die ???. Aber vielleicht kannst Du ja Erklärungen liefern, was was soll und warum Du manches so gemacht hast. Auch die Action off - einmal direkt in den Timer und dann isoliert in eine Change Node um zu sehen, was man da macht - die ist ja isoliert?
-
@michmein sagte in Timer erstellen und bei Bedarf wieder löschen:
@michmein
Nach etwas suchen und weiteren Versuchen habe ich eine Lösung gefunden.und schon wieder jemand, der eine Logik-Node installiert.
Na gut dann bin ich raus - dann hast Du ja eine Lösung.
Und bekanntlich führen ja viele Wege nach Rom.
-
@mickym
Erstmal vielen Dank für deine Mühen!
Ich habe an dem ganzen nun schon ein paar Stunden verbracht gehabt und es war immer so das ich den ezTimer nicht zurücksetzen konnte, wenn er einmal gestellt war blieb er so und sein Event zur eingegeben Zeit ausgegeben. Dann habe ich eine "uraltes" Script von bluefox im Forum gefunden (das sind deine "???" aus deiner ersten Antwort) und habe das getestet. Aber auch dies führte nicht zu meinem Ergebnis.
Schlußendlich habe ich das Logik-Node installiert und damit klappt nun mein gewünschtes Szenario.und schon wieder jemand, der eine Logik-Node installiert.
Was genau soll das bedeuten? Spricht etwas gegen die Logik-Nodes oder magst du sie einfach nicht?
... Da ist cronplus wesentlich leistungsfähiger, aber egal ...
Den habe ich auch installiert, konnte aber nichts wirklich finden wie dieser "extern" mit einer Zeit bestückt werden kann.
-
@michmein sagte in Timer erstellen und bei Bedarf wieder löschen:
@mickym
Erstmal vielen Dank für deine Mühen!
Ich habe an dem ganzen nun schon ein paar Stunden verbracht gehabt und es war immer so das ich den ezTimer nicht zurücksetzen konnte, wenn er einmal gestellt war blieb er so und sein Event zur eingegeben Zeit ausgegeben. Dann habe ich eine "uraltes" Script von bluefox im Forum gefunden (das sind deine "???" aus deiner ersten Antwort) und habe das getestet. Aber auch dies führte nicht zu meinem Ergebnis.
Schlußendlich habe ich das Logik-Node installiert und damit klappt nun mein gewünschtes Szenario.und schon wieder jemand, der eine Logik-Node installiert.
Was genau soll das bedeuten? Spricht etwas gegen die Logik-Nodes oder magst du sie einfach nicht?
Ja ich mag sie nicht.
- Ich bin generell gegen Nodes oder Adapter, die nichts weiter machen, als bereits vorhandene Informationen aufzubereiten, die man aber mit wenigen Handgriffen auch aus dem Standardbaukasten zusammensetzen kann. Wenn man dann mal solche Bausteine hat, dann speichere ich mir die als Flows oder einzelne Nodes in meiner lokalen Biblothek von NodeRed ab und habe sie dann schnell zur Verfügung.
In diesem Post - ist vielleicht nicht für Deinen speziellen Fall relevant, habe ich mal alle Möglichen Verknüfungen mit ChangeNodes und JSONATA zusammgefasst um logisch Eigenschaften eines Javascripts zu überprüfen:
... Da ist cronplus wesentlich leistungsfähiger, aber egal ...
Den habe ich auch installiert, konnte aber nichts wirklich finden wie dieser "extern" mit einer Zeit bestückt werden kann.
Na dann muss man auch mal die Hilfe lesen zu der Node - ich schau mal ob es in der BEschreibung auch drin steht. Nee steht nur in der Hilfe zu dieser Node.
Also neben der Superflexibilität des crontab systems,Wenn Du mal unter Date sequenz nachschaust, dann kannst Du in die crontab nicht nur cron Ausdrücke, sondern sogar ein Liste oder ein Array von Datums, angeben:
Ich nutze zum Beispiel die Datesequenz um über Nachrichten den Fernsehkanal zu einer bestimmten Zeit zu wechseln, wenn ich eine Sendung sehen möchte.
Außerdem siehst Du bei der crontab auch genauso wie beim eztimer was als nächsten passiert im Status.
Im Übrigen gibt die Hilfe Dir sogar 2 Beispiele wie Du die Node extern bestücken kannst:
Zwar nicht das Date, aber solar oder cron events kannst Du auch über die payload einspeisen und müssen nicht in der Node gespeichert werden.
Du kannst sogar in der Node über die
view dynamic schedules anschauen, welcher Ereignisse Du über die payload dynamisch konfiguriert hast.
Hier auch ein paar Beispiele, die ich mir selbst gemacht habe:
In der Kommentar-Node findest Du noch ein paar zusätzliche Kommandos, die ich mir aus dem Quellcode der Node gezogen habe.
Für mich ist das die genialste Timer Node ever .
- Da kommt kein Bigtimer mit und der EZ-Timer schon gleich 2 mal nicht.
Im Übrigen kannst Du beliebig viele Scheduler erstellen in einer Node, externe und interne Scheduler mischen und auch die Payload festlegen, die verschickt werden soll. Also flexibler geht eigentlich kaum noch.
-
Hi @mickym,
vielen Dank für deine sehr Ausführlichen Erklärungen und Beispiele.Ich habe mir dein Beispiel mal importiert und werde es mir anschauen und versuchen zu verstehen.
Das alles sind meine ersten Gehversuche und es fühlt sich vorerst gut an Erfolge sehen zu können. Node-red bietet scheinbar sehr viele Möglichkeiten die ich zur Zeit offensichtlich noch nicht benötige und auch nicht annähernd überblicken kann. Mal schauen was die Zukunft da so bringen wird. -
@mickym Hi, die Crontab Plus habe ich mir jetzt auch mal angeschaut. Vor allem die Möglichkeit per Input Zeiten zu setzen hört sich gut an.
Leider hänge ich gerade bei meiner Umsetzung, ne Wecker Zeit aus dem Alexa 2 Adapter auszulesen und da rein zu bekommen.
Mein Ziel ist, per Alexa einen Wecker zu stellen, dann die Zeit auszulesen und dann ne bestimmte Zeit (z.B. 30 Minuten) vorher die Heizung im Bad hoch zu fahren.
Ich habe 3 Datenpunkte zur Verfügung, einer ob der Alarm eingeschlatet ist, dann die Uhrzeit des Alarms und ob er ausgelöst ist.
Wenn ein Alarm hinzugefügt wird bzw. true wird, will ich die Zeit abfragen und die dann minus 30 Minuten an den Timer weitergeben. Den True Wert und die Zeitabfrage kriege ich hin, nur weiß ich nicht wie ich die Zeit in den Timer kriege. Wenn ich mit deinem Beispiel die Zeit sende gibts ne Fehlermeldung, wahrscheinlich weil das Datum fehlt?
-
Hi @frankyboy73,
ich kann dir bei deiner Fragestellung vielleicht helfen, allerdings nicht in Verbindung mit dem "cron-plus" sondern nur mit Hilfe des "eztimer". -
@michmein sagte in Timer erstellen und bei Bedarf wieder löschen:
Hi, vielen Dank. Wie sieht denn deine Ausgabe von der Get Node "Ausschaltzeit Lilly" aus, bzw. was für ein Format hat die Zeit?
Bei mir sieht das so aus.
Bevor ich mir noch nen zusätzlichen Timer installiere will ich lieber sichergehen ob das auch passt. -
So sieht es bei mir aus
und hier die Raw Daten des Zeit-DP
EDIT: mit z.B. 19:00:00 wie in deinem DP funktioert es auch
-
@frankyboy73 Ja - wenn kein festes Dateobjekt vorhanden ist, sprich das Datum fehlt - würde ich auch eher mit der cron expression arbeiten, das ist eigenlich ganz easy.
Ich habe mal Deine 17:00:00 einfach in eine Inject Node verpackt. Du kannst den Scheduler entweder komplett dynamisch verwalten oder aber wie Du teilweise in der Node definieren und dann von aussen manipulieren.
Wenn Du mit Cron arbeitest - musst Du halt den Scheduler nach jeder Ausführung manuell stoppen, sonst gibt es den Alarm halt täglich.
Wenn Du lieber mit absoluten Datums arbeiten willst - dann machst Du halt Deinen Alarm zu einem vollständigen Date Objekt.
Habe Dir mal hier einen Flow gemacht - der dann auch noch Deine 30 Minuten vom Alarm abzieht.
-
@mickym Hi, vielen Dank dafür. So habe ich mir das vorgestell. Ich mache das jetzt komplett dynamisch, also Timer hinzufügen und dann wieder löschen, je nach dem von welchem Echo der Wecker ist dann mit verschiedenen Namen. Und die Boost Zeit gebe ich als payload vor.
Das einzige was mir aufgefallen ist, da die 30 Minuten nach der Morgen Abfrage abgezogen werden, ist es theretisch möglich einen Timer in der Vergangenheit zu setzen. Aber das ist egal, 30 Minuten vorher ist es eh zu spät für den Boost. Ist auch eher dafür gedacht, das das Badezimmer morgens bei aufstehen schön warm ist.
@MichMein vielen Dank für deinen Lösungsvorschlag und deine Debug Ausgabe. Ich versuche es aber erst mal mit dem Crontab
-
@frankyboy73 sehr gerne.
Ich werde meinen Timer auch irgendwann auf cron-plus umstellen, aber zur Zeit bastel ich an anderen Baustellen und mit dem eztimer funktioniert es ja erstmal. -
@frankyboy73 sagte in Timer erstellen und bei Bedarf wieder löschen:
Das einzige was mir aufgefallen ist, da die 30 Minuten nach der Morgen Abfrage abgezogen werden, ist es theretisch möglich einen Timer in der Vergangenheit zu setzen.
Erwischt - da hast Du natürlich Recht - aber ich trau Dir zu dass Du es auch selbst so umstellst, dass Du die letzte Node vor den Switch stellst- Du musst dann nur die Formatausgabe an die beiden $moments in den Changen Nodes nach dem morgen angeben.
Ist ja eigentlich auch logischer.
Ich habs mal korrigiert:
Freut mich immer sowas gemeinsam zu entwickeln.
-
@mickym Ja, war da schon am rumprobieren, aber irgendwie habe ich das mit der Formatausgabe nicht auf dem Schirm gehabt. Jetzt wo ich deine Lösung sehe leuchtet es mir ein. Danke