So, hab’ gerade mal ein Skript gebastelt, mit dem ich zumindest mein Testdevice einigermaßen komfortabel ein- und ausschalten und dimmen kann. Leider fehlt mir die Visualisierung, da ich keinen Dimmer habe
Vielleicht macht sich ja jemand die Mühe, das/die Skripte mal zu testen ? [EDIT] Vorher Datensicherung machen g [/Edit]
Geht natürlich nur bei Fernbedienungen, die auf doppelter Kanalzahl stehen !!! Alle anderen können ja sowieso komfortabel dimmen
Also, erstmal das Hauptskript (s. Kommentare bzgl. anzulegende Variablen etc - Instance und andere Skriptnamen müssen natürlich angepasst werden !):
/*
*******************************
IP-SYMCON Event Scripting
*******************************
Trigger: Taste7.Data, Taste7.Status
Voraussetzung: Taste7 fällt nicht nach langem drücken in den Programmiermodus !!
*/
/*
Benutzte Variablen:
Testdevice.Status
Testdevice.Intensity
Variablen, die noch angelegt werden müssen:
Testdevice.lastswitch - Integer
Testdevice.Dim.direction - String
zusätzliche Skripte:
Testdevice_ON
Testdevice_OFF
Testdevice_TOGGLE
*/
$zeit = time();
//Trigger des Skripts ausfindig machen
$trigger = "none";
if (isset($IPS_VARIABLE)) {
$trigger = $IPS_VARIABLE;
}
echo "----- $trigger ----";
//Skript beenden, wenn durch sich selbst getriggert
if(GetValueBoolean("Taste7.Status") == false) {
if ($trigger == "Taste7.Data") {
if(GetValueInteger("Taste7.Data") == 18) {
exit;
}
}
}
//Skript nur ausführen, wenn es nicht in der letzten 1/2 Sekunde gelaufen ist
//Damit kann man dann endlich mal zwischen data=18 und data=21 unterscheiden, ohne
//dass das skript permanent dazwischenfunkt ;-)
$lastrun = GetValueInteger("Testdevice.lastswitch");
$timediff = $zeit - $lastrun;
if ($timediff <= 0.5 ) {
//Taste sofort wieder auf False stellen
if(GetValueBoolean("Taste7.Status") == true) {
SetValueBoolean("Taste7.Status",false);
}
exit;
}
//Wenn über kurz drücken getriggert
if(GetValueBoolean("Taste7.Status") == true) {
if (GetValueInteger("Taste7.Data") == 18) {
//kurz gedrückt -> Ein/Ausschalten
echo "Testdevice toggle";
IPS_RunScript("Testdevice_TOGGLE");
}
}
//}
if ($trigger == "Taste7.Data") {
if (GetValueInteger("Taste7.Data") == 21) {
//Taste lang gedrück -> DIMMEN
//Dimmrichtung des letzten dimmens auslesen
//wenn Zeitabstand Skriptaufruf < 1 Sekunde, dann selbe Richtung dimmen
$richtung = GetValueString("Testdevice.Dim.direction");
if ($richtung == "up") {
$dimwert = 1;
} else {
$dimwert = -1;
}
$alte_intensity = GetValueInteger("Testdevice.Intensity");
if ($timediff <= 1 ) {
//gleiche Richtung
$neuer_dimwert = $alte_intensity + $dimwert;
if ($neuer_dimwert > 16) {
//Endposition erreicht
$neuer_dimwert = 16;
}
if ($neuer_dimwert < 0) {
//Endposition erreicht
$neuer_dimwert = 0;
}
FS20_SetIntensity(38166,$neuer_dimwert,-1);
} else {
//andere Richtung
$neuer_dimwert = $alte_intensity - $dimwert;
FS20_SetIntensity(38166,$neuer_dimwert,-1);
//richtungswechsel in die Variable schreiben
if ($richtung == "up") {
SetValueString("Testdevice.Dim.direction", "down");
} else {
SetValueString("Testdevice.Dim.direction", "up");
}
}
}
}
//Taste wieder auf False setzen
SetValueInteger("Testdevice.lastswitch", $zeit);
SetValueBoolean("Taste7.Status",false);
Toggle-Skript:
/*
*******************************
IP-SYMCON Event Scripting
*******************************
File : Testdevice_TOGGLE.ips.php
Trigger :
Interval :
*/
IPS_LogMessage("TestdeviceSkript","Testdevice TOGGLE");
if (GetValueBoolean("Testdevice.Status") == true) {
IPS_RunScript("Testdevice_OFF");
} else {
IPS_RunScript("Testdevice_ON");
}
und das OFF-Skript (ON schaltet genau andersrum und setzt die Intensity auf 16) :
IPS_LogMessage("TestdeviceSkript","Testdevice OFF");
FS20_SwitchMode(38166,false);