NEWS
(Gelöst) Blocky Wert der Helligkeit in drei Stuffen herunterdimmen.
-
ja, danke Euch beiden…
-
Hatte vorher den Fehler gemacht und in drei Timeout Bausteinen die gleiche Zeit belassen `
Deswegen mein Post:
@Homoran:Den verzögert um block drei mal kopieren und mit drei verschiedenen Verzögerungen nacheinander einfügen. `
worauf du meintest, das funktioniere nicht.
@knopers1:habe doch schon oben geschrieben…. da es nicht funktioniert! `
Gruß
Rainer
-
genau das war mein Verständnissproblem. Ich dachte dass es nacheinander abgearbeitet wird. `
Wenn du die Timeouts ineinander schachtelst, werden sie nacheinander ausgeführt und beginnen erst mit Vollendigung des vorherigen. -
@Alcalzone, das hatte ich an sich vor… Kannst Du mir ein Beispiel zeigen wie ich die Timeouts ineinander schachtel kann??
Ich möchte die Timeouts nacheinander abarbeiten.
Werden in meinem Beispiel die Timeouts nacheinander abgearbeitet? oberes Bild?
Darf dann die Zeit gleich bleiben bei "Ausführen Intervall X alle Xsek. bei allen drei Stuffen wo dreifach gedimmt wird? Wenn nacheinander abgearbeitet wird, sollte das möglich sein. zB. alle drei sek....
Zur Zeit stehen dort verschiedenen Zeiten "siehe Bild unten" da offenbar gleichzeitig angetriggert und die Zeit abgezählt wird.
Kann ich mit dem Baustein "stop für zyklische Ausführung in meinem Beispiel die Schleife nur einmal abarbeiten zu lassen?
An sich versuche ich eine einfache EIN/AUS Schleife zu programieren. Es soll in drei Stuffen die Helligkeit verändert werden und zum Schluss soll der Schalter noch EIN oder AUS geschaltet werden.
1526_unbenannt100.png
1526_unbenannt111.png -
Post davor war zum AUS-Schalten… Hier noch ein Blockly zum EIN-Schalten!
1526_unbenannt112.png -
wie wäre es denn hinzukriegen, das die Lampe z.B. innerhalb 1 Stunde sich langsam runter dimmt?
Ansätze:
(Wobei mir die Funktion der wiederhole-Bausteine noch nicht ganz klar ist, wann und in welchen zeitlichen Abstand wiederholt wird. Finde auch keine Beschreibung)
-
(Wobei mir die Funktion der wiederhole-Bausteine noch nicht ganz klar ist, wann und in welchen zeitlichen Abstand wiederholt wird. `
Das wiederholt einfach den Code innerhalb des Mauls x-mal oder bis eine Bedingung erfüllt ist. Wichtig über Timeouts ist zu wissen, dass der Code im Timeout später ausgeführt wird, aber der eigentliche Code wird nicht pausiert.Willst du also im Abstand von 1sek 5 Timer starten, brauchst du eine Zählervariable, die du mit der Schleife hochzählst, z.b. i. Der Timeout braucht dann eine Verzögerung von i*1000ms, damit erzeugst du 5 Timeouts, die nach 1,2,3,4 und 5s ausgeführt werden. Wie das aber in Blockly geht, keine Ahnung…
Dein erster Code ist daher recht problematisch. Du erstellst ca. 1 Minute lang endlos viele Timeouts, die dann nach 1 Minute alle auf einmal den Wert verändern und damit vermutlich die Bedingung nicht mehr erfüllen. Die restlichen Timeouts die bis dahin erstellt wurden, feuern auch noch alle und verändern den Wert weiterhin.
Du erreichst also keinen Dimmvorgang, sondern treibst die CPU-Last deines Hosts in die Höhe. Angenommen, das erstellen eines Timeouts dauert 1ms:
0ms: timeout 1 erstellt 1ms: timeout 2 erstellt 2ms: timeout 3 erstellt ... 60000ms: timeout 60000 erstellt timeout 1 feuert --> Helligkeit reduziert um 2 60001ms: timeout 60001 erstellt timeout 2 feuert --> Helligkeit reduziert um 2 ... 60050ms: timeout 60050 erstellt timeout 50 feuert --> Helligkeit reduziert um 2\. Ist jetzt 0, daher beendet die Schleife, keine weiteren Timeouts ... 120050ms: timeout 60050 feuert
Dein Ziel kann man schematisch wie folgt erreichen:
-
Steuercode (Helligkeit um 1 Stufe reduzieren) in eine Funktion auslagern
-
Einen Timeout auf diese Funktion setzen (1 mal!)
-
In der Funktion prüfen, ob die End-Bedingung erreicht ist, wenn nicht erneut einen Timeout auf die Funktion setzen
-
-
Dein Ziel kann man schematisch wie folgt erreichen:
-
Steuercode (Helligkeit um 1 Stufe reduzieren) in eine Funktion auslagern
-
Einen Timeout auf diese Funktion setzen (1 mal!)
-
In der Funktion prüfen, ob die End-Bedingung erreicht ist, wenn nicht erneut einen Timeout auf die Funktion setzen `
Danke, also so?
var timeout2, timeout3; /** * Beschreibe diese Funktion … */ function dimmen1() { setState("hue.0.Philips_hue.Schlafzimmer.level"/*Philips_hue.Schlafzimmer.level*/, (getState("hue.0.Philips_hue.Schlafzimmer.level").val - 1)); if (getState("hue.0.Philips_hue.Schlafzimmer.level").val > 0) { timeout3 = setTimeout(function () { dimmen1(); }, 60000); } } on({id: 'hue.0.Philips_hue.Schlafzimmer.level', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; while (!(getState("hue.0.Philips_hue.Schlafzimmer.level").val == 0)) { } }); timeout2 = setTimeout(function () { dimmen1(); }, 60000); //JTNDeG1sJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4aHRtbCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMm9uX2V4dCUyMiUyMGlkJTNEJTIycG8tQlBfUHBtY2hUUEJvaEdPJTNEbiUyMiUyMHglM0QlMjIxMyUyMiUyMHklM0QlMjItMTIlMjIlM0UlM0NtdXRhdGlvbiUyMGl0ZW1zJTNEJTIyMSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyQ09ORElUSU9OJTIyJTNFbmUlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkFDS19DT05ESVRJT04lMjIlM0UlM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMk9JRDAlMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIyZmllbGRfb2lkJTIyJTIwaWQlM0QlMjJNN0F2ISUyQzNUJTIzISFoc2hnUHlJaTklMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJvaWQlMjIlM0VodWUuMC5QaGlsaXBzX2h1ZS5TY2hsYWZ6aW1tZXIubGV2ZWwlM0MlMkZmaWVsZCUzRSUzQyUyRnNoYWRvdyUzRSUzQyUyRnZhbHVlJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMlNUQVRFTUVOVCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2xzX3doaWxlVW50aWwlMjIlMjBpZCUzRCUyMnklM0QxWnAtQjdkKU51LSU3RFIlM0F4bldFJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyTU9ERSUyMiUzRVVOVElMJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJCT09MJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybG9naWNfY29tcGFyZSUyMiUyMGlkJTNEJTIyYmUuan5QJTJCb2ZrVHIoelIwUShBJTNEJTIyJTIwaW5saW5lJTNEJTIyZmFsc2UlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPUCUyMiUzRUVRJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyZ2V0X3ZhbHVlJTIyJTIwaWQlM0QlMjJpakghWFghJTVEbiU1RTU5JTNEQ0tTJTVFQiU3QjclMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJBVFRSJTIyJTNFdmFsJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPSUQlMjIlM0VodWUuMC5QaGlsaXBzX2h1ZS5TY2hsYWZ6aW1tZXIubGV2ZWwlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJCJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybWF0aF9udW1iZXIlMjIlMjBpZCUzRCUyMkdMQyU1RSo2RS5ZISUyRk1paiU3QnglN0ROY1ElMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOVU0lMjIlM0UwJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDJTJGYmxvY2slM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0aW1lb3V0c19zZXR0aW1lb3V0JTIyJTIwaWQlM0QlMjIqMiUzRiU1QlNYamxTTSUyQ2lUUChJJTNBWCUyNUklMjIlMjB4JTNEJTIyLTYzJTIyJTIweSUzRCUyMjQxMyUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5BTUUlMjIlM0V0aW1lb3V0MiUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyREVMQVklMjIlM0UxJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJVTklUJTIyJTNFbWluJTNDJTJGZmllbGQlM0UlM0NzdGF0ZW1lbnQlMjBuYW1lJTNEJTIyU1RBVEVNRU5UJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19jYWxsbm9yZXR1cm4lMjIlMjBpZCUzRCUyMiUyMyU2MCglN0IlM0ZVJTNEa3NYMkUtc3VRcH5OUyUyMiUzRSUzQ211dGF0aW9uJTIwbmFtZSUzRCUyMmRpbW1lbjElMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDJTJGYmxvY2slM0UlM0NibG9jayUyMHR5cGUlM0QlMjJwcm9jZWR1cmVzX2RlZm5vcmV0dXJuJTIyJTIwaWQlM0QlMjIlNUQlMjM5bmFzamx+YSUyMzNpZ3ZKJTJDUWlWJTIyJTIweCUzRCUyMi02MyUyMiUyMHklM0QlMjI1MTMlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOQU1FJTIyJTNFZGltbWVuMSUzQyUyRmZpZWxkJTNFJTNDY29tbWVudCUyMHBpbm5lZCUzRCUyMmZhbHNlJTIyJTIwaCUzRCUyMjgwJTIyJTIwdyUzRCUyMjE2MCUyMiUzRUJlc2NocmVpYmUlMjBkaWVzZSUyMEZ1bmt0aW9uJTIwJUUyJTgwJUE2JTNDJTJGY29tbWVudCUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJTVEFDSyUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2wlMjIlMjBpZCUzRCUyMk5VJTIzLm1pcWNQJTJDUCUyQ1AyKTFPKWlUJTIyJTNFJTNDbXV0YXRpb24lMjBkZWxheV9pbnB1dCUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPSUQlMjIlM0VodWUuMC5QaGlsaXBzX2h1ZS5TY2hsYWZ6aW1tZXIubGV2ZWwlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMldJVEhfREVMQVklMjIlM0VGQUxTRSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVkFMVUUlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJtYXRoX2FyaXRobWV0aWMlMjIlMjBpZCUzRCUyMiF2eSUyQm8lNURzQVlBUUNzJTNCd3clNDAlMkZkJTYwJTIyJTIwaW5saW5lJTNEJTIyZmFsc2UlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPUCUyMiUzRU1JTlVTJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBJTIyJTNFJTNDc2hhZG93JTIwdHlwZSUzRCUyMm1hdGhfbnVtYmVyJTIyJTIwaWQlM0QlMjIqTyU1RFN+cWIqJTI1JTJGJTQwZkF1bmslNjAlNDBvayUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5VTSUyMiUzRTElM0MlMkZmaWVsZCUzRSUzQyUyRnNoYWRvdyUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmdldF92YWx1ZSUyMiUyMGlkJTNEJTIyQ3F+bXRPdyF0JTQwLkpxMC0lNDB+JTJDVn4lMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJBVFRSJTIyJTNFdmFsJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPSUQlMjIlM0VodWUuMC5QaGlsaXBzX2h1ZS5TY2hsYWZ6aW1tZXIubGV2ZWwlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJCJTIyJTNFJTNDc2hhZG93JTIwdHlwZSUzRCUyMm1hdGhfbnVtYmVyJTIyJTIwaWQlM0QlMjJ3ajMuYWZNbi5CVCU3REolN0JtSlBNdjQlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOVU0lMjIlM0UxJTNDJTJGZmllbGQlM0UlM0MlMkZzaGFkb3clM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyY29udHJvbHNfaWYlMjIlMjBpZCUzRCUyMmd2SDg0JTdDeXNmS1MlMkIxcG8hJTdEJTQwRWglMjIlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJJRjAlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJsb2dpY19jb21wYXJlJTIyJTIwaWQlM0QlMjIlNDBncE4qc1ZvJTNEanFjKCUzQi4zUXJpeCUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk9QJTIyJTNFR1QlM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkElMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJnZXRfdmFsdWUlMjIlMjBpZCUzRCUyMlZzWkhEQWd0RS5yMSU1QkFIU0xuSmklMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJBVFRSJTIyJTNFdmFsJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPSUQlMjIlM0VodWUuMC5QaGlsaXBzX2h1ZS5TY2hsYWZ6aW1tZXIubGV2ZWwlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJCJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybWF0aF9udW1iZXIlMjIlMjBpZCUzRCUyMmolM0FoJTIzWmgwTUk0ODRLSEo2JTQwS3lQJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyTlVNJTIyJTNFMCUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0NzdGF0ZW1lbnQlMjBuYW1lJTNEJTIyRE8wJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGltZW91dHNfc2V0dGltZW91dCUyMiUyMGlkJTNEJTIyJTNGSUppYVUlMjU4aEU1biUzRkolM0RZJTNGWVYwJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyTkFNRSUyMiUzRXRpbWVvdXQzJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJERUxBWSUyMiUzRTElM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlVOSVQlMjIlM0VtaW4lM0MlMkZmaWVsZCUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJTVEFURU1FTlQlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJwcm9jZWR1cmVzX2NhbGxub3JldHVybiUyMiUyMGlkJTNEJTIyJTdERGglM0YlMkIlN0J1KiU1RCUyQlh5RGlXbCU3Q1UoWiUyMiUzRSUzQ211dGF0aW9uJTIwbmFtZSUzRCUyMmRpbW1lbjElMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZzdGF0ZW1lbnQlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGeG1sJTNF
-
-
komme nicht so wirklich weiter….
Hier mein Blockly: Habe echt keine Ahnung weshalb es nicht funktionieren mag. Sieht jemand von Euch einen Fehler?
Möglicherweise stimmt etwas mit dem Timer nicht. Das EIN in drei Stuffen scheint zu laufen. Das AUS nicht so wirklich....
Der Timer liefert ein "true". Wenn es die Zeit abzählt, kommt in Log ein false. Unter Objekt ID "Timer" sehe ich aber keine Änderung!
Irgendwie hängst sich mein Blockly irgendwie auf, so mein Gefühl...
1526_unbenannt1.png
1526_unbenannt2.png
1526_unbenannt3.png -
Danke, also so? `
Das Blockly sieht gut aus, aber du hast keinen Auslöser, der den Prozess startet, oder?Im JS-Code ist noch ein etwas verlorener Trigger drin, der nix tut außer ne Endlosschleife starten.
-
Möglicherweise stimmt etwas mit dem Timer nicht. Das EIN in drei Stuffen scheint zu laufen. Das AUS nicht so wirklich…. `
Fehlt da was? Ich sehe nichts, wo die Timer-Variable auf True gesetzt wird, um den AUS-Dimmer zu starten. -
Ist klar, es ging mir ja nur um das dimmen. Trigger und sonstige Kosmetik fehlt noch.
Danke
-
Möglicherweise stimmt etwas mit dem Timer nicht. Das EIN in drei Stuffen scheint zu laufen. Das AUS nicht so wirklich….
Fehlt da was? Ich sehe nichts, wo die Timer-Variable auf True gesetzt wird, um den AUS-Dimmer zu starten.
Die Variable "Timer" setzt sich selbst auf "true" mit dem Blockly für "Timer". Zumindest sehe ich im Log ständig ein "true". Wenn ich es manuell setze, kommt in Log für 12000ms ein "false", danach wieder "true".
Mit dem Bewegungsmelder setze ich den Timer auf "false" damit er wieder die Zeit abzählt.
-
Die Variable "Timer" setzt sich selbst auf "true" mit dem Blockly für "Timer" `
Hast du nicht gepostet, aber gut. Füge mal an allen Stellen, wo was abgefragt wird oder gesteuert wird nen Debug-Log ein, dass du nachvollziehen kannst was passiert und was davon funktioniert. Auf den ersten Blick sehe ich nämlich nicht, warum es nicht gehen sollte. -
Danke Dir vorerst…
Habe zwischendurch den Timer Blockly weggelassen und probiere zu Hause so etwas aus... Müsste an sich ohne den Blockly Timer funktionieren.
1526_unbenannt3.png