Hallo, (hier das 2. Problem)
ich bastele nun schon seit „einigen“ Stunden an zwei Problemen rum. Zum besseren auseinanderhalten mache ich zwei Themen dafür auf (auch wenn es am Ende im gleichen Skript landen soll.
Ziel:
Wenn die Taste auf der Fernbedienung gedrückt wird soll der Befehl nur 1x ausgeführt werden, auch wenn durch zu langes drücken das Datenpaket mehrmals kommt (toggle mit eingebaut)
Umfeld:
Es kommen bei gedrückt halten der Taste auf der FB etwa 3 Datenpakete pro Sekunde vom µC über die RS232 rein.
Es soll aber nur einer innerhalb von ca. 2sek ausgefüht werden.
Script ohne meine Versuche:
<?
$data = GetValueString("TobiInput");
$teile = explode(";", $data);
// Die Sender heißen A, B, C, D usw...
// Das entspricht dann Wohnzimmer, Flur etc...
$sender = $teile[0]{1};
echo "Sender ".$sender."
";
$typ = $teile[0]{2};
if($typ == "i") //i=Infrarot
{
$geraet = rtrim($teile[1]);
$taste = rtrim($teile[2]);
echo "Infrarot ";
echo "Geraetenummer ".$geraet;
echo " Taste *".$taste."*
";
switch($geraet)
{
case "0": // Gerätecode 0
switch($taste)
{
case "32":
echo "rauf";
MBT_WriteCoil(10397 /*[Wago MBT]*/ ,514 /* Ausgang514 = Licht wozi */,true);
break;
IPS_Sleep (500);
MBT_WriteCoil(10397 /*[Wago MBT]*/ ,514 /* Ausgang514 = Licht wozi */,false);
case "02":
echo "02"; // Taste IR Code-02 Gerät-0 mit Toggle-Funktion
$Hilfe02 = GetValueBoolean("HilfVTaste02"); //Hilfsvariable nach $Hilfe02
if ($Hilfe02== False){ //wenn False dann folgendes ausführen
COMPort_SendText(20531 /*[Serial Port 17 / 3-1..4a+b]*/ , "\xffCa\0\1\xfe"); //LCD LED AN
SetValueBoolean("HilfVTaste02",True); //HilfsVariable auf "True" setzen
}
if ($Hilfe02== True){ //wenn True dann folgendes ausführen
COMPort_SendText(20531 /*[Serial Port 17 / 3-1..4a+b]*/ , "\xffCb\0\1\xfe"); //LCD LED AUS
SetValueBoolean("HilfVTaste02",False); //HilfsVariable auf "False" setzen
}
break;
}
}
?>
Gemeint ist der Bereich → case „02“: … …LCD LED AN…
nun meine :o Versuche -erröt- denn er weiß nicht was er kopiert
case "02":
echo "02"; // Taste IR Code-02 Gerät-0 mit Toggle-Funktion
define ("SPERRZEIT", 2); // Wartezeit in Sekunden
if (IPS_GetScriptTimer ($IPS_SELF) == 0)
{ // Timer läuft nicht, Skript darf gestartet werden
IPS_SetScriptTimer ($IPS_SELF, SPERRZEIT);
$Hilfe02 = GetValueBoolean("HilfVTaste02"); //Hilfsvariable nach $Hilfe02
if ($Hilfe02== False){ //wenn False dann folgendes ausführen
COMPort_SendText(20531 /*[Serial Port 17 / 3-1..4a+b]*/ , "\xffCa\0\1\xfe"); //LCD LED AN
SetValueBoolean("HilfVTaste02",True); //HilfsVariable auf "True" setzen
}
if ($Hilfe02== True){ //wenn True dann folgendes ausführen
COMPort_SendText(20531 /*[Serial Port 17 / 3-1..4a+b]*/ , "\xffCb\0\1\xfe"); //LCD LED AUS
SetValueBoolean("HilfVTaste02",False); //HilfsVariable auf "False" setzen
}
else
return;
break;
case "TimerEvent":
IPS_SetScriptTimer($IPS_SELF, 0);
break;
Danke
Jan