Hallo zusammen,
vor vielen Jahren gab es hier mal die Diskussion zum Thema „Länge eines Tastendrucks ermitteln“
https://www.symcon.de/forum/threads/3859-L%C3%A4nge-eines-Impulses-ermitteln
Nach einer Migration wurden einige der Variablen ersetzt, jedenfalls funktioniert der folgende Code heute nicht mehr:
//Trigger: Boolean Variable!
//Hier die Maximale Zeit angeben, die der Taster gedrückt werden könnte
$maxpushtime=10; //10 Sekunden
function myCode($pushlen)
{
//Hier kommt euer Code rein:
global $IPS_SELF;
IPS_LogMessage($IPS_SELF, "Push Length: ".$pushlen); //KernelLog -> Custom
//Hier ist euer Code zuende
}
//-- Ab hier muss nichts verändert werden!
//Nur Variablen Trigger erlaubt
if($IPS_SENDER != "Variable") { return; }
//Hilfsvariable erstellen, falls nicht vorhanden
$pushtimevar=$IPS_VARIABLE."_PressTime"; //Integer
if(!IPS_VariableExists($pushtimevar)) {
IPS_CreateVariable($pushtimevar, "Integer");
}
//Gleichzeitige Scriptausführung verhindern
if (IPS_SemaphoreEnter($IPS_SELF, $maxpushtime * 1000))
{
if($IPS_VALUE) //Taster gedrückt?
{
SetValueInteger($pushtimevar, time());
} else { //Auswerten wie lange gedrückt wurde
myCode(time()-GetValueInteger($pushtimevar));
}
IPS_SemaphoreLeave($IPS_SELF);
}
Bitteschön
Ich habe daraufhin versucht, die alten Variablen zu ersetzen:
//Trigger: Boolean Variable!
//Hier die Maximale Zeit angeben, die der Taster gedrückt werden könnte
$maxpushtime=10; //10 Sekunden
function myCode($pushlen)
{
//Hier kommt euer Code rein:
Global ${$_IPS['SELF']};
IPS_LogMessage($_IPS['SELF'], "Push Length: ".$pushlen); //KernelLog -> Custom
//Hier ist euer Code zuende
}
//-- Ab hier muss nichts verändert werden!
//Nur Variablen Trigger erlaubt
if($_IPS['SENDER'] != "Variable") { return; }
//Hilfsvariable erstellen, falls nicht vorhanden
$pushtimevar=$_IPS['VARIABLE']."_PressTime"; //Integer
if(!IPS_VariableExists($pushtimevar)) {
$pushtimevar = IPS_CreateVariable(1);
}
if(!$_IPS['VALUE']) {
IPS_Sleep(100);
}
//Gleichzeitige Scriptausführung verhindern
if (IPS_SemaphoreEnter($_IPS['SELF'], $maxpushtime * 1000))
{
if($_IPS['VALUE']) //Taster gedrückt?
{
SetValueInteger($pushtimevar, time());
} else { //Auswerten wie lange gedrückt wurde
myCode(time()-GetValueInteger($pushtimevar));
}
IPS_SemaphoreLeave($_IPS['SELF']);
}
Leider wird mir als pushlength nur die Unixzeit angezeigt, nicht aber die Dauer des Tastendrucks. Als Warnung erhalten ich außerdem noch
10/13/2019, 05:55:24 PM | ScriptEngine | Result for Event 12379
<br />
<b>Warning</b>: Variabletyp stimmt nicht überein in <b>/-</b> on line <b>33</b><br />
Sieht jemand, welchen Fehler ich mache? Über eine Hilfe würde ich mich sehr freuen.
Grüße
Matthias