@Schrubbel
Hallo !
Habe bei mir folgendes Script am laufen.
Im unteren Teil werden noch die Status-Adressen befüllt.
Das Script habe ich selber mal im Forum gefunden. Nach dem Update vom KNX-Adapter von Version 0.9 auf über 1.0 musste ich selber ewig rumprobieren, weil sich die Auswertung des Datenpunktes 3.007 geändert hat.
Hoffe du kannst damit was anfangen
/* ####### Relatives Dimmen von Philips Hue-Lampe oder Gruppe über KNX-Taster #######
#
# Skript reagiert auf Tastendruck eines KNX-Tasters, Auswertung einer Gruppe mit
# DPT-3 (relatives Dimmen).Es wird mit dem Tastendruck hoch bzw. runtergedimmt
# in beliebigen Schritten und Geschwindigkeit. Mit dem Loslassen der Taste wird
# der Vorgang gestoppt.
#
# Erstellt von A.Kos am 07.12.2017
################################################################################## */
// Channel-IDs
var idTaster = "knx.0.virtuelle_Dpt.dimmen.Terrasse_Wand_dimmen"/*Terrasse Wand dimmen*/; // ID der KNX-Gruppe mit DPT-3, z.B. Tastenwippe oder Tastenpaar
var idHueLampe = "hue.0.Philips_hue.Terrasse"/*Philips_hue.Terrasse*/; // ID der Hue-Lampe oder Gruppe
// Konstante zum Anpassen des Dimm-Verhaltens
const REL_DIM_VAL = 20; // Schrittweite beim relativen Dimmen (Achtung, das ist (bei Hue) KEIN %-Wert)
const ABS_DIM_MAX = 254; // Maximaler Absolutwert (Hue: 254)
const ABS_DIM_MIN = 1; // Minimaler Absolutwert (0)
const DIM_DELAY = 500; // Zeit im ms für die einzelnen Dimm-Schritte
// Globale Variablen
var BOOL_stop = 0;
var emergency_counter = 1;
// DimDown Runter-Dimmen
on({id: idTaster, change: "any"} , function(obj) {
//console.log(obj.state.val);
// console.log(obj.state.val.decr_incr);
if (obj.state.val == '0,1') {
BOOL_stop = 0;
emergency_counter = 0;
dimdown(REL_DIM_VAL);
}
});
// DimUp Rauf-Dimmen
on({id: idTaster, change: "any"} , function(obj) {
//console.log(obj.state.val);
//console.log(obj.state.val.decr_incr);
if (obj.state.val == '1,1') {
BOOL_stop = 0
emergency_counter = 0;
dimup(REL_DIM_VAL);
}
});
function dimup(a) {
if (BOOL_stop || getState(idHueLampe+".bri").val >= ABS_DIM_MAX || emergency_counter >= 100) {
console.log("Ende");
BOOL_stop = 0;
return 0;
}
if (getState(idHueLampe+".bri").val <= (ABS_DIM_MAX-REL_DIM_VAL)) {
console.log("erhöhe um " + a + " auf den Wert " + (getState(idHueLampe+".bri").val + a) + " (" + emergency_counter + ")");
setState(idHueLampe+".bri", getState(idHueLampe+".bri").val + a);
setTimeout(function() {
emergency_counter++;
dimup(REL_DIM_VAL);
}, DIM_DELAY);
} else {
console.log("ELSE: erhöhe um " + (ABS_DIM_MAX-getState(idHueLampe+".bri").val) + " auf den Wert " + ABS_DIM_MAX + " (" + emergency_counter + ")");
setState(idHueLampe+".bri",ABS_DIM_MAX);
emergency_counter++;
return 0;
}
}
function dimdown(a) {
if (BOOL_stop || getState(idHueLampe+".bri").val <= ABS_DIM_MIN || emergency_counter >= 100) {
console.log("Ende");
BOOL_stop = 0;
return 0;
}
if (getState(idHueLampe+".bri").val >= (ABS_DIM_MIN+REL_DIM_VAL)) {
console.log("verringere um " + a + " auf den Wert " + (getState(idHueLampe+".bri").val - a) + " (" + emergency_counter + ")");
setState(idHueLampe+".bri", getState(idHueLampe+".bri").val - a);
setTimeout(function() {
emergency_counter++;
dimdown(REL_DIM_VAL);
}, DIM_DELAY);
} else {
console.log("ELSE: verringere um " + (ABS_DIM_MIN+getState(idHueLampe+".bri").val) + " auf den Wert " + ABS_DIM_MIN + " (" + emergency_counter + ")");
setState(idHueLampe+".bri",ABS_DIM_MIN);
emergency_counter++;
return 0;
}
}
// STOP
on({id: idTaster, change: "any"} , function(obj) {
if (obj.state.val == '0,0' || obj.state.val == '1,0' ) {
// Info zum Testen: Diese Code-Zeile kann in der Praxis nicht erreicht werden,
// ohne vorher die Funktion dimup oder dimdown ausgeführt zu haben. D.h. BOOL_stop ist vorher immer 0;
BOOL_stop = 1;
}
});
// HUE-Lampe über GA schalten, Wert für HUE-Lampe wird aus eigenem Datenpunkt geholt
on({id: 'knx.0.virtuelle_Dpt.schalten.Terrasse_Wand_schalten', change: "any"}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
if ((obj.state ? obj.state.val : "") == true) {
setState("hue.0.Philips_hue.Terrasse.command"/*Philips_hue.Terrasse.command*/,getState("javascript.0.Beleuchtung.HUE_Datenpunkte.Ein_Status_Terrasse").val);
} else if ((obj.state ? obj.state.val : "") == false) {
setStateDelayed("hue.0.Philips_hue.Terrasse.on"/*Philips_hue.Terrasse.on*/, false, 100, true);
}
});
// Status-Adresse für Dimmwert in % schreiben wenn sich der Dimmwert geändert hat
on({id: 'hue.0.Philips_hue.Terrasse.level', change: "ne"}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
setState("knx.0.virtuelle_Dpt.Dimmwert_Status.Terrasse_Wand_Dimmwert_Status"/*Terrasse Wand Dimmwert Status*/, parseFloat((obj.state ? obj.state.val : "")));
});
// Status_Adresse für EIN/AUS schreiben wenn Hue über App oder sonstiges eingeschaltet wurde
on({id: 'hue.0.Philips_hue.Terrasse.on', change: "ne"}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
if ((obj.state ? obj.state.val : "") == true) {
setState("knx.0.virtuelle_Dpt.Status.Terrasse_Wand_Status"/*Terrasse Wand Status*/, true);
} else if ((obj.state ? obj.state.val : "") == false) {
setState("knx.0.virtuelle_Dpt.Status.Terrasse_Wand_Status"/*Terrasse Wand Status*/, false);
}
});
LG