+ Antworten
Ergebnis 1 bis 3 von 3
  1. #1
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    23,783

    Cool Chromoflex RC III für IP-Symcon 2.5

    Supportdiskussionen zum Script verschoben in Q&A Chromoflex RC III für IP-Symcon 2.5
    Dieses Skript erlaubt es euch alle oder einzelne Geräte über das Chromoflex RC III anzusteuern. Ihr müsst dieses Skript nur genau einmal in eurem System haben. Die Ansteuerung wird über die IPS_RunScriptEx Funktionen gelöst.

    Nachdem ihr das Skript eingerichtet habt, müsst ihr die ID der I/O Instanz anpassen und könnt es direkt danach ausführen. Dadurch wir auf allen Geräten im Net 8 ein zufälliger Farbwert gesetzt. Erneutes Ausführen setzt einen neuen zufälligen Farbwert. Falls dies nicht geschieht, überprüft die ID und die Konfiguration der I/O Instanz.

    Um das Skript durchgehend nutzen zu können, muss ein Start Skript vorhanden sein, welches über Kern Instanzen -> Event Handler eingerichtet werden kann. In dem Start Skript muss folgende Zeile hinzugefügt werden:

    PHP-Code:
    $id 0//Hier die ID vom Hauptskript angeben
    IPS_RunScriptEx($id, Array("Action"=>"Initialize")); 
    Um die Farbwerte setzen zu können kann folgende Funktion genutzt werden, wobei nicht alle Parameter erforderlich sind. Falls Parameter weggelassen werden, sind die Standardwerte wie folgt: (Net = 8, DeviceID = 000000, Werte = 255). Der Parameter D ist der Dimmer und gibt die Helligkeit aller Farbkanäle an.

    PHP-Code:
    $id 0//Hier die ID vom Hauptskript angeben
    IPS_RunScriptEx($id, Array("Net" => 8"DeviceID" => "000000""Action"=>"SetColor""R"=> 255"G" => 255"B" => 255"D" => 255)); 
    Um Programme anzusteuern, kann folgender Code genutzt werden. Dabei kann der Parameter P die Werte 1-18 für die einzelnen Programme und den Wert 0 für das "Aus"-Programm gesetzt werden.

    PHP-Code:
    IPS_RunScriptEx($id, Array("Action"=>"SetProgram""P"=> 6)); 
    Hauptskript, welches nur 1x im System sein muss. (ggf. mehrmals, falls mehrere Chromoflex RC III Gateways im Einsatz sind)
    PHP-Code:
    <?

    //ID der I/O Instanz vom Chromoflex RC III.
    //Konfiguration: 115200, 8, 1, N
    $id 0//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_SELF5000))
                    {
                        
    $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

                        
    FTDI_SendText($idCreatePacket($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_SELF5000))
                    {    
                        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(0x00); //Temp (???)
                                
    break;
                        }

                        
    FTDI_SendText($idCreatePacket($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(0255), "G" => rand(0255), "B" => rand(0255)));
    }

    function 
    Initialize()
    {
        global 
    $id;
        
    FTDI_SetDTR($idtrue);
        
    FTDI_SetRTS($idtrue);
        
    FTDI_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(
             
    0x000xC10x810x400x010xC00x800x410x010xC0,
             
    0x800x410x000xC10x810x400x010xC00x800x41,
             
    0x000xC10x810x400x000xC10x810x400x010xC0,
             
    0x800x410x010xC00x800x410x000xC10x810x40,
             
    0x000xC10x810x400x010xC00x800x410x000xC1,
             
    0x810x400x010xC00x800x410x010xC00x800x41,
             
    0x000xC10x810x400x010xC00x800x410x000xC1,
             
    0x810x400x000xC10x810x400x010xC00x800x41,
             
    0x000xC10x810x400x010xC00x800x410x010xC0,
             
    0x800x410x000xC10x810x400x000xC10x810x40,
             
    0x010xC00x800x410x010xC00x800x410x000xC1,
             
    0x810x400x010xC00x800x410x000xC10x810x40,
             
    0x000xC10x810x400x010xC00x800x410x010xC0,
             
    0x800x410x000xC10x810x400x000xC10x810x40,
             
    0x010xC00x800x410x000xC10x810x400x010xC0,
             
    0x800x410x010xC00x800x410x000xC10x810x40,
             
    0x000xC10x810x400x010xC00x800x410x010xC0,
             
    0x800x410x000xC10x810x400x010xC00x800x41,
             
    0x000xC10x810x400x000xC10x810x400x010xC0,
             
    0x800x410x000xC10x810x400x010xC00x800x41,
             
    0x010xC00x800x410x000xC10x810x400x010xC0,
             
    0x800x410x000xC10x810x400x000xC10x810x40,
             
    0x010xC00x800x410x010xC00x800x410x000xC1,
             
    0x810x400x000xC10x810x400x010xC00x800x41,
             
    0x000xC10x810x400x010xC00x800x410x010xC0,
             
    0x800x410x000xC10x810x40
        
    );

        
    $CRC_TABLE_B = Array(
             
    0x000xC00xC10x010xC30x030x020xC20xC60x06,
             
    0x070xC70x050xC50xC40x040xCC0x0C0x0D0xCD,
             
    0x0F0xCF0xCE0x0E0x0A0xCA0xCB0x0B0xC90x09,
             
    0x080xC80xD80x180x190xD90x1B0xDB0xDA0x1A,
             
    0x1E0xDE0xDF0x1F0xDD0x1D0x1C0xDC0x140xD4,
             
    0xD50x150xD70x170x160xD60xD20x120x130xD3,
             
    0x110xD10xD00x100xF00x300x310xF10x330xF3,
             
    0xF20x320x360xF60xF70x370xF50x350x340xF4,
             
    0x3C0xFC0xFD0x3D0xFF0x3F0x3E0xFE0xFA0x3A,
             
    0x3B0xFB0x390xF90xF80x380x280xE80xE90x29,
             
    0xEB0x2B0x2A0xEA0xEE0x2E0x2F0xEF0x2D0xED,
             
    0xEC0x2C0xE40x240x250xE50x270xE70xE60x26,
             
    0x220xE20xE30x230xE10x210x200xE00xA00x60,
             
    0x610xA10x630xA30xA20x620x660xA60xA70x67,
             
    0xA50x650x640xA40x6C0xAC0xAD0x6D0xAF0x6F,
             
    0x6E0xAE0xAA0x6A0x6B0xAB0x690xA90xA80x68,
             
    0x780xB80xB90x790xBB0x7B0x7A0xBA0xBE0x7E,
             
    0x7F0xBF0x7D0xBD0xBC0x7C0xB40x740x750xB5,
             
    0x770xB70xB60x760x720xB20xB30x730xB10x71,
             
    0x700xB00x500x900x910x510x930x530x520x92,
             
    0x960x560x570x970x550x950x940x540x9C0x5C,
             
    0x5D0x9D0x5F0x9F0x9E0x5E0x5A0x9A0x9B0x5B,
             
    0x990x590x580x980x880x480x490x890x4B0x8B,
             
    0x8A0x4A0x4E0x8E0x8F0x4F0x8D0x4D0x4C0x8C,
             
    0x440x840x850x450x870x470x460x860x820x42,
             
    0x430x830x410x810x800x40
        
    );

        
    $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("\n",trim(chunk_split($x,2)));
        foreach(
    $p as $h)
            
    $s .= chr(hexdec($h));
        return(
    $s);
    }

    ?>
    Geändert von Raketenschnecke (13.03.12 um 11:37 Uhr)

  2. #2
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    23,783

    Als Alternative für das Modul von huelke. Die Auswahl von Programfunktionen kommt irgendwann in den nächsten Wochen.

  3. #3
    Registriert seit
    Oct 2010
    Ort
    HH
    Beiträge
    4,613

    Supportdiskussionen zum obigen Script verschoben in Q&A Chromoflex RC III für IP-Symcon 2.5
    mit gebücktem Gruss
    Raketenschnecke
    IPS-Projekte und -Tools auf
    www.raketenschnecke.net

Ähnliche Themen

  1. Chromoflex RC, FTDI
    Von huelke im Forum Entwicklung mit PHP-SDK/Delphi-SDK
    Antworten: 266
    Letzter Beitrag: 05.07.14, 21:04
  2. Q: Kaufentscheidung Chromoflex iii RC oder IPS-RGBW 868 Starter-Set
    Von jolo im Forum Beleuchtung / Lichttechnik
    Antworten: 11
    Letzter Beitrag: 04.08.11, 10:14
  3. Chromoflex III RC in IPS einbinden!
    Von Beni345 im Forum Beleuchtung / Lichttechnik
    Antworten: 19
    Letzter Beitrag: 28.07.11, 15:56
  4. Chromoflex III RC geht nicht mehr
    Von roadsterhh im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 5
    Letzter Beitrag: 04.09.09, 14:33
  5. Chromoflex III RC
    Von Heidewinkler im Forum Schaufenster
    Antworten: 6
    Letzter Beitrag: 16.01.09, 17:29

Stichworte