NEWS
[gelöst] up/Down Dimmen über einen Taster
-
Hallo zusammen,
ich bastel gerade an einem Script, dass mir das Dimmen einer Lampe über gedrückten Taster (Homematic) ermöglichen soll.
So lange der Taster gehalten wird, wird ein Datenpunkt immer wieder aktualisiert. Ich habe es soweit geschafft, dass dann auch hoch oder runter gedimmt wird.
Jetzt möchte ich gerne noch, dass wenn der Taster losgelassen wird und erneut gedrückt wird die Richtung geändert wird.Hier ein Auszug aus meinem Script:
function lichtfinn1dim() { if (down){ setState(idLichtFinn1dim, getState(idLichtFinn1dim).val - 15); } else { setState(idLichtFinn1dim, getState(idLichtFinn1dim).val + 15); } }; on({id: idTasterFinn + ".2.PRESS_CONT", change: "any"}, function (obj) { if(obj.state.val) { if(timerpause) clearTimeout(timerpause); timerdimm = setInterval(lichtfinn1dim, 200); } else { // Loslassen clearInterval(timerdimm); down = !down; timerpause = setTimeout(function() {down = !down}, 1000); } });
Wenn ich jetzt drückt wird das licht Heller. Aber nach einem erneuten drücken wird es nicht dunkler. Hat jemand einen Tipp was ich machen kann ?
Kann es sein, dass es daran liegt, dass der Datenpunkt immer auf true steht und nur aktualisiert wird?
Dann ist bestimmt dieser Teil nicht korrekt:if(obj.state.val) {
Vielen Dank
-
@mctom Wenn die Variable down in mehreren Funktionen verwendet wird, muss sie global (außerhalb der Funktionen) deklariert werden oder der Wert muss an die aufgerufene Funktion übergeben werden.
-
Hi, danke für deine Info.
Die variable hab eich außerhalb deklariert. Hatte es nur nicht mir hier rein kopiert. -
@mctom Bevor wir rumrätseln, wie sich PRESS_CONT verhält, logge den Datenpunkt bei jeder Aktualisierung.
on({id: idTasterFinn + ".2.PRESS_CONT"}, function (obj) { log('PRESS_CONT: ' + obj.state.val); });
-
@paul53 sagte in Dimmen über ein Taster:
on({id: idTasterFinn + ".2.PRESS_CONT"}, function (obj) { log('PRESS_CONT: ' + obj.state.val); });
Danke für deine Hilfe.
Hier das Log File:2019-03-30 07:45:36.901 - info: javascript.2 script.js.Test.Test_Taster: PRESS_CONT: true 2019-03-30 07:45:37.105 - info: javascript.2 script.js.Test.Test_Taster: PRESS_CONT: true 2019-03-30 07:45:37.368 - info: javascript.2 script.js.Test.Test_Taster: PRESS_CONT: true 2019-03-30 07:45:37.629 - info: javascript.2 script.js.Test.Test_Taster: PRESS_CONT: true 2019-03-30 07:45:37.872 - info: javascript.2 script.js.Test.Test_Taster: PRESS_CONT: true 2019-03-30 07:45:38.126 - info: javascript.2 script.js.Test.Test_Taster: PRESS_CONT: true 2019-03-30 07:45:38.411 - info: javascript.2 script.js.Test.Test_Taster: PRESS_CONT: true 2019-03-30 07:45:38.634 - info: javascript.2 script.js.Test.Test_Taster: PRESS_CONT: true 2019-03-30 07:45:38.871 - info: javascript.2 script.js.Test.Test_Taster: PRESS_CONT: true 2019-03-30 07:45:39.138 - info: javascript.2 script.js.Test.Test_Taster: PRESS_CONT: true 2019-03-30 07:45:39.385 - info: javascript.2 script.js.Test.Test_Taster: PRESS_CONT: true 2019-03-30 07:45:39.640 - info: javascript.2 script.js.Test.Test_Taster: PRESS_CONT: true
-
@mctom Das Log zeigt, dass während eines langen Tastendrucks alle ca. 250 ms eine Aktualisierung erfolgt und der Wert true bleibt. Damit ist eine Abfrage
if(obj.state.val) {
sinnlos und man kann sich das Intervall sparen, denn das liefert der Datenpunkt.
on({id: idTasterFinn + ".2.PRESS_CONT"}, function () { lichtfinn1dim(); if(timerpause) clearTimeout(timerpause); timerpause = setTimeout(function() { down = !down; timerpause = null; }, 600); });
-
Es funktioniert. Vielen Dank fūr deine Hilfe.
-