NEWS
Benötige Hilfe bei Blockly
-
Habe es mit folgendem Skript unter JS 4.1.12 getestet:
"Test.Button" um 12:03:20 Uhr betätigt und bis 12:08 Uhr gewartet.
-
Im Prinzip sieht mein Rolladen-Skript ja so aus (nur dass jeden Morgen der Zeitplan mit einer anderen Zeit gesetzt wird).
Mein Problem ist nun, dass am Folgetag die Rolläden aber doppelt angesteuert werden (am Zeitstempel von "letzte Änderung" und "letzte Aktualisierung" zu sehen). Und zwar einmal nach der neuen Zeit und dann nochmal nach der Zeit vom Vortag. Sieht fast so aus als würden dann 2 Zeitpläne ablaufen.Bei der Rolladensteuerung am Abend (gleicher Skirptaufbau wie für die Steuerung am Morgen) ist es noch deutlicher zu erkennen (da die Tage ja länger werden und die Rolläden später heruntergehen sollen). Da werden die Rolläden ständig zu früh geschlossen und zwar nach der Zeit vom Vortag bzw. Vorvortag etc....und dann nochmal angesteuert mit der eigentlich richtigen Zeit (wieder am Zeitstempel zu erkennen).
Bei einer Debugausgabe ist mir auch aufgefallen, dass ich 2 mal den gleichen Debugeintrag hatte im Abstand von 2,1 Sekunden. Läuft da vielleicht das ganze Skript doppelt ab? Aber selbst wenn das Skript doppelt abläuft müsste doch 2 mal die "neue" Zeit übernommen werden und nicht einmal die "alte" und einmal die "neue".
Bin Ratlos.....
-
@MarkusP Bei Verwendung des Variablenbezeichners schedule, wird der Zeitplan nicht gelöscht und ein weiterer hinzugefügt. Das geht immer so weiter.
Ändere den Variablenbezeichner und starte anschließend ioBroker neu, um alle Zeitpläne, die noch irgendwo gespeichert sind, zu löschen. -
@MarkusP Warum machst du das mit einem Zeitplan? Ich verstehe die Funktion nicht. Sollen die Rollläden zu bleiben wenn man nicht "Guten Morgen sagt"? Wenn man es sagst, sollen sie erst zu einer bestimmten Zeit öffnen? Also was ist das Ziel?
-
Also Ziel ist folgendes:
Situation 1 es ist jemand zuhause (Status Abwesend = false):
Wenn ich "Guten Morgen" sage soll folgendes berücksichtigt werden:
Sonnenaufgang schon vorbei oder noch dunkel?
Uhrzeit ist vor oder nach 7 Uhr?- Wenn es im Sommer schon um 5 Uhr hell wird (und ich ab und zu schon um 5 aufstehe) sollen die Rolläden nicht gleich hoch gehen sondern bis 7 Uhr warten.
- Wenn ich um 5 Uhr aufstehe und es aber im tiefsten Winter erst um 8 Uhr hell wird, sollen die Rolläden erst nach Sonnenaufgang-Ende öffnen
- Wenn ich am Wochenende lange schlafe und ich nach 7 Uhr "Guten Morgen" sage und es schon hell ist sollen die Rolläden in 15 Minuten öffnen.
Den Zeitplan verwende ich, da ich ja nicht vorhersagen kann wann ich am nächsten Tag "Guten Morgen" sagen will.
Man könnte höchstens die verbleibende Zeit seit "guten Morgen" bis Sonnenaufgang berechnen und dann einen "Timer" starten.Hoffe das ist irgendwie verständlich ausgedrückt.
-
Ich könnte natürlich anstelle des Zeitplans einfach einen Astrotrigger verwenden nur habe ich dann die Befürchtung, dass dieser auch jeden Tag nochmals gestartet wird. Irgendwo habe ich mal gelese, dass man keine Trigger innerhalb von Triggern verwenden soll wobei "Zeitplan" ja auch ein Trigger ist.
-
@MarkusP Ich würde mit "Guten Morgen" einfach einen Datenpunkt auf 'true' setzen und den Rest mit dem Astrotrigger bzw. einem Timeout machen. Nach dem Öffnen den Datenpunkt wieder auf 'false' setzen.
Also wenn Datenpunkt = true und Sonnenaufgang = true -> Rollladen auf in 15 Minuten.
So sollten die Rollläden frühestens 15 Minuten nach Sonnenaufgang hochgehen, bzw. 15 Minuten nachdem du "Guten Morgen" gesagt hast.
-
@MarkusP sagte:
anstelle des Zeitplans einfach einen Astrotrigger verwenden nur habe ich dann die Befürchtung, dass dieser auch jeden Tag nochmals gestartet wird.
Die Befürchtung ist richtig, denn Astro-Trigger lassen sich nicht löschen.
@MarkusP sagte in Benötige Hilfe bei Blockly:
Irgendwo habe ich mal gelese, dass man keine Trigger innerhalb von Triggern verwenden soll wobei "Zeitplan" ja auch ein Trigger ist.
Das stimmt im Prinzip, allerdings kann man einen Zeitplan innerhalb eines Datenpunkt-Triggers verwenden, wenn man den Zeitplan vor erneutem Setzen löscht.
-
Mein Skript für die Rolläden am Morgen sieht nun so aus:
Die zusammengefalteten Blöcke betreffen nur die Ansteuerung der einzelnen Rolläden und von Werten, die der reinen Information gelten. Habe das einfach der Überischt halber mal reduziert. Die Zeitverzögerungen habe ich eingebaut da ich befürchte, dass mir die Variablen vielleicht nicht schnell genug aktualsiert werden und möglicherweise alte Werte vom Vortag an den Zeitplan übergeben werden.
Zur Funktion:
-
Wenn ich "Guten Morgen" sage wird der Wert "GutenMorgenGesagt" = true.
-
Die Variable "UhrzeitRolladenOeffnen" wird auf eine mit einem anderen Skript berechnete Uhrzeit gesetzt.
-
2 Sekunden danach wird der Inhalt der Variablen auf 2 Variablen namens "Stunden" und "Minuten" aufgeteilt.
-
Wenn "Dunkel_fuer_Rolladen" = wahr (über ein weiteres Skript gesteuert), dann wird Zeitplan "Plan1" mit den Werten aus den Variablen "Stunden" und "Minuten" gesetzt und läuft irgendwann ab
-
Beim Ablauf von "Plan1" stoppt sich dieser selbst und sollte eigentlich am nächsten Tag nicht mehr zur gleichen Zeit auslösen (bzw. evtl. mit einer neuen Zeit auslösen)
-
Sollte "Dunkel_fuer_Rolladen" = false sein, wird verglichen ob die Zeit kleiner oder gleich 7 Uhr ist.
-
Wenn ja, dann öffnen die Rolläden um 7.01 Uhr, wobei sich der "Plan2" wieder selbst stoppt.
-
Wenn es nun aber später als 7 Uhr ist, öffnen die Rolläden 15 Minuten später.
Sieht das Skript nun so aus als sollte es funktionieren oder habe ich irgendwo einen Fehler? Bin mir einfach nicht sicher, ob die einzelnen Zeitpläne auch tatsächlich angehalten werden und sich mit neuen Zeiten "befüllen" lassen können.
-
-
Setze mal zusätzlich unmittelbar vor die Zeitpläne ein zugehöriges stop PlanN. Das ist erforderlich, wenn Du mehr als einmal am Tag "Guten Morgen" sagst.
-
Du meinst so?
-
-
OK, macht Sinn. Danke dir bzw Euch. Ich werde in 2 Tagen berichten ob es funktioniert oder ob an Tag 2 die Rolläden zur falschen Zeit von Tag 1 öffnen
-
Nach 2 Tagen kann ich nun sagen, dass das Skript bzw. beide (auch für abendliche Rolladensteuerung) funktionieren. Ich hab nun aber das Problem, dass die Skripte nach einem Tag anfangen doppelt zu laufen.
Das ist die Debugausgabe im Log von heute Abend. Die Uhrzeit für den Zeitplan wurde 2x gesetzt. Ich weiß nicht wie ich mir das erklären soll.