NEWS
(Gelöst) Blocky Wert der Helligkeit in drei Stuffen herunterdimmen.
-
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