Wo liegt der Fehler ? Semaphore 24055 for ScriptID 24055 was not released

Ich versuche immer noch verzweifelt mit Chromoflex RC III über die Serielle Schnittstelle am PI betreiben (IPS 4.2)

Wenn ich das unten angeführte Skript nutze um zu inialisieren oder über den ColorPicker ( Chromoflex RC Steuerung mit RGB Fader und Color Picker )das ausführe bekomme ich die diese Meldung! Und die LED Stripes lassen sich nicht steuern.

04.05.2017 13:59:08*| ScriptEngine*| Semaphore 24055 for ScriptID 24055 was not released

Ich kann leider garnicht zu ordnen wo der Fehler liegen könnte, kann mir jemand erklären was es das genau mit " Semaphore " auf sich hat

<? 

//ID der I/O Instanz vom Chromoflex RC III. 
//Konfiguration: 115200, 8, 1, N 
$id = 32594 /*[Chromoflex COM]*/; //I/O Instanz 


/******************************************************************************* 

 Copyright 2012, IP-Symcon/meike0_0. Version 1.2.0 - DO NOT MODIFY BELOW THIS LINE! 

********************************************************************************/ 

if($_IPS['SENDER'] == "RunScript") 
{ 
    if(isset($_IPS['Action'])) 
    { 
       switch($_IPS['Action']) 
        { 
           case "Initialize": 
              Initialize(); 
                break; 
            case "SetColor": 
                if(!isset($_IPS['Net'])) 
                    $_IPS['Net'] = 8; 
                if(!isset($_IPS['DeviceID'])) 
                    $_IPS['DeviceID'] = "000000"; 
                if(!isset($_IPS['R'])) 
                    $_IPS['R'] = 0xFF; 
                if(!isset($_IPS['G'])) 
                    $_IPS['G'] = 0xFF; 
                if(!isset($_IPS['B'])) 
                    $_IPS['B'] = 0xFF; 
                if(!isset($_IPS['D'])) 
                    $_IPS['D'] = 0xFF; 

                if(IPS_SemaphoreEnter($_IPS['SELF'],5000)){}else 
                { 
                    $x = ""; 
                    $x .= chr($_IPS['Net']); //Network 
                    $x .= HexToStr($_IPS['DeviceID']); //Remote Serial 
                    $x .= chr(GetSequenceNumber()); 
                    $x .= chr(0xFF).chr(0xFF).chr(0xFE); //PC Serial 

                    $x .= chr(0x80); //Command: Write 
                    $x .= chr(0x01); //RAM Adress (???) 
                    $x .= chr(0x12); //ProgramPC (???) 

                    $x .= chr(max(1, $_IPS['D'])); //Dimmer (0 = ON, 1 = 0%, 255 = 100%) 
                    $x .= chr(0x00); //Index (???) 
                    $x .= chr(0x01); //Dummy (???) 
                    $x .= chr(0xFF); //Temp (???) 

                    $x .= chr($_IPS['R']); //Red 
                    $x .= chr($_IPS['G']); //Green 
                    $x .= chr($_IPS['B']); //Blue 

                    SPRT_SendText($id, CreatePacket($x)); 
                    IPS_Sleep(100); 
                    IPS_SemaphoreLeave($_IPS["SELF"]); 
                } 
               break; 
            case "SetProgram": 
                if(!isset($_IPS['Net'])) 
                    $_IPS['Net'] = 8; 
                if(!isset($_IPS['DeviceID'])) 
                    $_IPS['DeviceID'] = "000000"; 
                if(!isset($_IPS['P'])) 
                    $_IPS['P'] = 0; 
                     
                     
               //   if(!isset($_IPS['D'])) 
             //       $_IPS['D'] = 0xFF; 
                     
                     
                if(IPS_SemaphoreEnter($_IPS['SELF'],5000)){}else 
                { 
                    switch ($_IPS['P']) 
                    { 
                        case 0: //Aus 
                        case 1: //Speichern&Aus 
                        case 2: //Fix Color 
                        case 3: //Color Change 
                        case 4: //Med.Color 
                        case 5: //Slow.Color 
                        case 6: //Blob 
                        case 7: //LSD 
                        case 8: //Fire 
                        case 9: //Flashes 
                        case 10: //Bursts 
                        case 11: //User 1 
                        case 12: //User 2 
                        case 13: //User 3 
                        case 14: //Slow Strobo 
                        case 15: //Strobo 
                        case 16: //Fast Strobo 
                        case 17: //Mix 
                        case 18: //Color 
                            $x = ""; 
                            $x .= chr($_IPS['Net']); //Network 
                            $x .= HexToStr($_IPS['DeviceID']); //Remote Serial 

                            $x .= chr(GetSequenceNumber()); 
                                     $x .= chr(0xFF).chr(0xFF).chr(0xFE); //PC Serial 

                                //     $x .= chr(max(1, $_IPS['D'])); //Dimmer (0 = ON, 1 = 0%, 255 = 100%) 

                                     $x .= chr(0x80); //Index (???) 
                            $x .= chr(0x01); //Dummy (???) 
                            $x .= chr($_IPS['P']); //Temp (???) 
                            $x .= chr(0x00); //Temp (???) 
                            break; 
                    } 

                    SPRT_SendText($id, CreatePacket($x)); 
                    IPS_Sleep(100); 
                    IPS_SemaphoreLeave($_IPS["SELF"]); 
                } 
                break; 
        } 
    } 
} 
if($_IPS['SENDER'] == "Execute") 
{ 
    Initialize(); 
    IPS_Sleep(200); 
    IPS_RunScriptEx($_IPS['SELF'], Array("Action"=>"SetColor", "R"=> rand(0, 255), "G" => rand(0, 255), "B" => rand(0, 255))); 
} 

function Initialize() 
{ 
    global $id; 
     SPRT_SetDTR($id, true); 
     SPRT_SetRTS($id, true); 

   SPRT_SendText($id, "!n0701\r"); 
} 

function GetSequenceNumber() 
{ 
    //32-47 Sequence Number (0..15 + 32) 
    $seq_id = 25812 /*[Scripte_oli\Scripte\Licht\RGB_Control\Sequence Number]*/;//CreateVariableByIdent($_IPS['SELF'], "SequenceNumber", "Sequence Number", 1); 
    $seq = GetValue($seq_id); 
    $seq = ($seq+1) % 16; 
    SetValue($seq_id, $seq); 
    return $seq + 32; 
} 

function CreateVariableByIdent($id, $ident, $name, $type) 
 { 
     $vid = @IPS_GetObjectIDByIdent($ident, $id); 
     if($vid === false) 
     { 
         $vid = IPS_CreateVariable($type); 
         IPS_SetParent($vid, $id); 
         IPS_SetName($vid, $name); 
         IPS_SetIdent($vid, $ident); 
         IPS_SetInfo($vid, "this variable was created by script #".$_IPS['SELF']); 
     } 
     return $vid; 
} 

function CreatePacket($data) 
{ 
    return "!x0000".StrToHex(Chr(strlen($data)+2)).StrToHex($data).StrToHex(MakeCRC($data))."\r\r"; 
} 

function MakeCRC($data) 
{ 
    // Fast generation of CRC by using a table... 
    $CRC_TABLE_A = Array( 
         0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 
         0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 
         0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 
         0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 
         0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 
         0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 
         0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 
         0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 
         0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 
         0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 
         0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 
         0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 
         0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 
         0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 
         0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 
         0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 
         0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 
         0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 
         0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 
         0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 
         0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 
         0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 
         0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 
         0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 
         0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 
         0x80, 0x41, 0x00, 0xC1, 0x81, 0x40 
    ); 

    $CRC_TABLE_B = Array( 
         0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 
         0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 
         0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 
         0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 
         0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 
         0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 
         0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 
         0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 
         0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 
         0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 
         0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 
         0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 
         0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 
         0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 
         0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 
         0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 
         0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 
         0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 
         0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 
         0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 
         0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 
         0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 
         0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, 
         0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, 
         0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 
         0x43, 0x83, 0x41, 0x81, 0x80, 0x40 
    ); 

    $CRC_A = 0xFF; 
    $CRC_B = 0xFF; 

    for($i=0; $i<strlen($data); $i++) 
    { 
       $INDEX = $CRC_A ^ Ord($data{$i}); 
       $CRC_A = $CRC_TABLE_A[$INDEX] ^ $CRC_B; 
       $CRC_B = $CRC_TABLE_B[$INDEX]; 
    } 
    return Chr($CRC_B) . Chr($CRC_A); 
} 

//Copy&Paste from php.net (http://php.net/manual/de/function.hexdec.php) 
function StrToHex($x) { 
    $s = ''; 
    $p = str_split($x); 
    foreach($p as $c) 
        $s .= strtolower(sprintf("%02X",ord($c))); 
    return($s); 
} 

function HexToStr($x) { 
    $s = ''; 
    $p = explode("
",trim(chunk_split($x,2))); 
    foreach($p as $h) 
        $s .= chr(hexdec($h)); 
    return($s); 
} 

?>

Das Semaphore sichert den exklusiven Zugriff auf die serielle Schnittstellen. Nicht das mehrere Skripts gleichzeitig schreiben wollen und die Reihenfolge durcheinander bringen.
Ich habe ja viel mit Chromoflex gemacht, aber das ist so lange her und seitdem läuft es ohne Probleme von Version zu Version. Bis auf die SPRT_Sendtext Änderung.
Wo der Fehler herkommt kann ich erst mal nicht sagen. Muss mich mal wieder rein lesen aber mein Script sieht schon ein klein wenig anders aus. Ich hänge es mal ran. Vielleicht hilft es erst mal weiter.

<?

//ID der I/O Instanz vom Chromoflex RC III.
//Konfiguration: 115200, 8, 1, N
$id = 13432 /*[Serial Port VCP_USB-ChromoflexRC]*/; //I/O Instanz

/*******************************************************************************

 Copyright 2012, IP-Symcon/meike0_0. Version 1.2.0 - DO NOT MODIFY BELOW THIS LINE!

********************************************************************************/

if($_IPS['SENDER'] == "RunScript")
{
    if(isset($_IPS['Action']))
    {
       switch($_IPS['Action'])
        {
           case "Initialize":
              Initialize();
                break;
            case "SetColor":
                if(!isset($_IPS['Net']))
                    $_IPS['Net'] = 8;
                if(!isset($_IPS['DeviceID']))
                    $_IPS['DeviceID'] = "000000";
                if(!isset($_IPS['R']))
                    $_IPS['R'] = 0xFF;
                if(!isset($_IPS['G']))
                    $_IPS['G'] = 0xFF;
                if(!isset($_IPS['B']))
                    $_IPS['B'] = 0xFF;
                if(!isset($_IPS['D']))
                    $_IPS['D'] = 0xFF;

                if(IPS_SemaphoreEnter($_IPS['SELF'], 5000))
                {
                    $x = "";
                    $x .= chr($_IPS['Net']); //Network
                    $x .= HexToStr($_IPS['DeviceID']); //Remote Serial
                    $x .= chr(GetSequenceNumber());
                    $x .= chr(0xFF).chr(0xFF).chr(0xFE); //PC Serial

                    $x .= chr(0x80); //Command: Write
                    $x .= chr(0x01); //RAM Adress (???)
                    $x .= chr(0x12); //ProgramPC (???)

                    $x .= chr(max(1, $_IPS['D'])); //Dimmer (0 = ON, 1 = 0%, 255 = 100%)
                    $x .= chr(0x00); //Index (???)
                    $x .= chr(0x01); //Dummy (???)
                    $x .= chr(0xFF); //Temp (???)

                    $x .= chr($_IPS['R']); //Red
                    $x .= chr($_IPS['G']); //Green
                    $x .= chr($_IPS['B']); //Blue

                    SPRT_SendText($id, CreatePacket($x));
                    IPS_Sleep(100);
                    IPS_SemaphoreLeave($_IPS['SELF']);
                }
               break;
            case "SetProgram":
                if(!isset($_IPS['Net']))
                    $_IPS['Net'] = 8;
                if(!isset($_IPS['DeviceID']))
                    $_IPS['DeviceID'] = "000000";
                if(!isset($_IPS['P']))
                    $_IPS['P'] = 0;

                if(IPS_SemaphoreEnter($_IPS['SELF'], 5000))
                {
                    switch ($_IPS['P'])
                    {
                        case 0: //Aus
                        case 1: //Speichern&Aus
                        case 2: //Fix Color
                        case 3: //Color Change
                        case 4: //Med.Color
                        case 5: //Slow.Color
                        case 6: //Blob
                        case 7: //LSD
                        case 8: //Fire
                        case 9: //Flashes
                        case 10: //Bursts
                        case 11: //User 1
                        case 12: //User 2
                        case 13: //User 3
                        case 14: //Slow Strobo
                        case 15: //Strobo
                        case 16: //Fast Strobo
                        case 17: //Mix
                        case 18: //Color
                            $x = "";
                            $x .= chr($_IPS['Net']); //Network
                            $x .= HexToStr($_IPS['DeviceID']); //Remote Serial

                            $x .= chr(GetSequenceNumber());
                            $x .= chr(0xFF).chr(0xFF).chr(0xFE); //PC Serial
                            $x .= chr(0x80); //Index (???)
                            $x .= chr(0x01); //Dummy (???)
                            $x .= chr($_IPS['P']); //Temp (???)
                            $x .= chr(max(1, $_IPS['D'])); //Dimmwert (ALT: $x .= chr(0x00); //Temp (???))
                            break;
                    }

                    SPRT_SendText($id, CreatePacket($x));
                    IPS_Sleep(100);
                    IPS_SemaphoreLeave($_IPS['SELF']);
                }
                break;
        }
    }
}
if($_IPS['SENDER'] == "Execute")
{
    Initialize();
    IPS_Sleep(200);
    IPS_RunScriptEx($_IPS['SELF'], Array("Action"=>"SetColor", "R"=> rand(0, 255), "G" => rand(0, 255), "B" => rand(0, 255)));
}

function Initialize()
{
    global $id;
    SPRT_SetDTR($id, true);
    SPRT_SetRTS($id, true);
    SPRT_SendText($id, "!n0701\r");
}

function GetSequenceNumber()
{
    //32-47 Sequence Number (0..15 + 32)
    $seq_id = CreateVariableByIdent($_IPS['SELF'], "SequenceNumber", "Sequence Number", 1);
    $seq = GetValue($seq_id);
    $seq = ($seq+1) % 16;
    SetValue($seq_id, $seq);
    return $seq + 32;
}

function CreateVariableByIdent($id, $ident, $name, $type)
 {
     $vid = @IPS_GetObjectIDByIdent($ident, $id);
     if($vid === false)
     {
         $vid = IPS_CreateVariable($type);
         IPS_SetParent($vid, $id);
         IPS_SetName($vid, $name);
         IPS_SetIdent($vid, $ident);
         IPS_SetInfo($vid, "this variable was created by script #".$_IPS['SELF']);
     }
     return $vid;
}

function CreatePacket($data)
{
    return "!x0000".StrToHex(Chr(strlen($data)+2)).StrToHex($data).StrToHex(MakeCRC($data))."\r\r";
}

function MakeCRC($data)
{
    // Fast generation of CRC by using a table...
    $CRC_TABLE_A = Array(
         0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
         0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
         0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
         0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
         0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
         0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
         0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
         0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
         0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
         0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
         0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
         0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
         0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
         0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
         0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
         0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
         0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
         0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
         0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
         0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
         0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
         0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
         0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
         0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
         0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
         0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
    );

    $CRC_TABLE_B = Array(
         0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,
         0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
         0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
         0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,
         0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,
         0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
         0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,
         0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,
         0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
         0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,
         0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,
         0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
         0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
         0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
         0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
         0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,
         0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,
         0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
         0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,
         0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,
         0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
         0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,
         0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,
         0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
         0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,
         0x43, 0x83, 0x41, 0x81, 0x80, 0x40
    );

    $CRC_A = 0xFF;
    $CRC_B = 0xFF;

    for($i=0; $i<strlen($data); $i++)
    {
       $INDEX = $CRC_A ^ Ord($data{$i});
       $CRC_A = $CRC_TABLE_A[$INDEX] ^ $CRC_B;
       $CRC_B = $CRC_TABLE_B[$INDEX];
    }
    return Chr($CRC_B) . Chr($CRC_A);
}

//Copy&Paste from php.net (http://php.net/manual/de/function.hexdec.php)
function StrToHex($x) {
    $s = '';
    $p = str_split($x);
    foreach($p as $c)
        $s .= strtolower(sprintf("%02X",ord($c)));
    return($s);
}

function HexToStr($x) {
    $s = '';
    $p = explode("
",trim(chunk_split($x,2)));
    foreach($p as $h)
        $s .= chr(hexdec($h));
    return($s);
}

?>

PS: Dieses else hinter if(IPS_Semaphore… Wo kommt das her?

Das frage ich mich auch gerade wo das her kommt! :confused:

Wenn ich es jetzt probiere ohne das else. Kann ich genau einmal die Farbe wechseln, danach passiert nichts mehr.

Aber die Meldung Semaphore 24055 for ScriptID 24055 was not released

taucht nicht mehr auf!

Nutzt du auch den pi mit IPS 4.2? Würde gerne wissen warum ich es nur einmal schalten kann und dann nicht mehr :confused:

Nein. Mein System läuft unter Win10. Aber ich habe ein Pi Testsystem da kann ich am Wochenende mal probieren. Unsere Scripte sind aber an mehren Stellen unterschiedlich. Hast du dort auch geschaut?

Ja habe ich gesehen.

Ich habe es auch mal mit deinem Skript (Angepasst an meine Variablen) probiert! Hat leider keinen Unterschied gebracht.

Das wäre cool wenn du das mal ausprobieren könntest.

Es funktioniert, aber bitte nicht fragen warum? Wie so oft auf einmal, auf einmal ging es.

Warum? :smiley:

Ist die Sache damit erledigt? Oder soll ich noch was probieren?

Ja hat sich erledigt! Danke schön! :slight_smile: