NEWS
Blockly Geräte Check
-
Hallo community,
hoffentlich könnt ihr mir mit meinem Blockly-Skript weiter helfen.
Ich habe eine Szene gebaut, die nach dem Kommando (Bedtijd) alle Geräte im Wohnzimmer ausschaltet. Das funktioniert super, manchmal aber werden bestimmte Geräte wieder eingeschaltet (eine Lampe zum Beispiel). Ich weiß noch nicht genau, woran das liegt.
Was ich jetzt mit meinem Skript erreichen möchte, ist, dass nachdem die Szene 'Bedtijd' aktiviert worden ist, in der Nacht regelmäßig geprüft wird, ob die Geräte noch immer ausgeschaltetet sind.
Jetzt habe ich dieses Skript gebaut und wollte es euch mal vorlegen. Ist dies die beste Weise, das Skript zu bauen? Wird es mit den 'Falls-Mache' nicht zu kompliziert?
Schon mal vielen Dank im Voraus fürs Mitdenken!
Grüße
Johan
-
Was du brauchst ist folgendes :
- einen "state" "bedtime_aktiv".
- einen Trigger auf diesen State, der Änderungen des State in eine Variable ("var_bedtime") Schreibt. warum das erklär ich weiter unten
- für jedes Gerät einen Trigger auf "ist grösser als vorher". Darin:
-- die Variable "var_bedtime" abfragen. Wenn die wahr ist: Gerät wieder ausschalten. - In deinem Zeitplan setzt du den State "bedtime_aktiv" auf wahr
- Du brauchst einen 2. Zeitplan um morgens den "bedtime_aktiv" auf falsch zu setzen.
Warum dieses "Gehampel" mit variable "var_bedtime" und dem State "bedtime_aktiv":
- Wenn du in jedem Trigger der Lampen, sprich jedes mal wenn du die Lampe ein/aus schaltest diesen state überprüfst dann erzeugt das eine gewisse Last. Da sich dieser State aber nur 2 mal in 24 stunden ändern sollte ist es besser den Statisch in eine Variable zu holen.
- Wenn du den Status nur in einer Variable hast dann geht der verloren wenn das Skript aus versehen neu gestartet wird.
Da du in dem Beispiel oben nicht das komplette Skript zeigst kann ich nicht sicher sagen ob dein State "BedTijd" schon dem von mir gewünschten "bedtime_aktiv" entspricht. Ich gehe aber im Moment davon aus das das NICHT der Fall ist. Wenn doch (das hängt davon ab wie dein Zeitplan definiert ist), dann wäre das ganze Skript ein Ressourcenfresser.
Warum - wenn alleine das umsetzen von BedTijd innerhalb des angegebenen Zeitraums dazu führt das die Lampen aus gehen dann muss der Zeitplan alle x sekunden laufen. Das muss er aber nicht, statt dessen kannst du einfacher einen Trigger direkt auf den Status BedTijd setzen, und dann darin als erstes die Uhrzeit Prüfen. Ist sie ausserhalb des Zeitplans dann keine Anpassung, ist sie innerhalb, dann Licht aus.
Ansonsten machst Du da ein Paar unnötige Klimmzüge:
- die ganzen "falls wert von x = wahr" können weg, du kannst einfach direkt die Werte mit "falsch" ansteuern. Wenn die schon "falsch" sind passiert im Zweifelsfall nichts.
Wenn Du Lust / Zeit hast kannst du ja heute nachmittag / frühen Abend (gegen 16/17:00 Uhr) in den ioBroker discord kommen - da können wir uns das gesamte Skript mal gemeinsam anschauen, incl. einiger Hinweise auf mögliche Verbesserungen / Alternativen.
A.
-
@johan2009 sagte in Blockly Geräte Check:
Ich habe eine Szene gebaut
mit iobroker.scenes?
dann kannst du doch den Datenpunkt is true o.ä. (der den Zustand der Szene anzeigt) überprüfen und wenn der nicht true ist die Szene wieder auf true setzen -
@Johan2009 Wie bereits in Discord erklärt (hier noch mal für die "Nachwelt"), so würde das Script nach dem Vorschlag von @Asgothian aussehen:
Bei "Object ID" dann Deine Werte wie im Kommentar daneben gezeigt einsetzen (die habe ich ja nicht) und den mittleren Teil für jede Lampe wiederholen, das war's.@Asgothian Korrigier mich, wenn ich Dich falsch verstanden haben sollte aber so macht's für mich Sinn.
-
Ich habe den Vorschlag in ein Skript umgesetzt. Wenn ich das so sehe, dann ist es genau das, was @Homoran gemeint hat. Heute oder morgen werde ich testen ob alles funktioniert.
Vielen Dank an alle für die Hilfe!
Johan