Chromoflex RC III + USB Dongle am Pi?

Hallo hat schon jemand das oben beschriebene Zenario am laufen?

Würde mich freuen wenn ich da ein paar Informationen bekommen könnte habe im Forum bis jetzt noch Nix gefunden.
Unter Windows ist jetzt perfekt, allerdings kann ich es nicht direkt übernehmen da es beim Pi ja wohl keine direkte FTDI Ansteuerung gibt oder? Hat jemand schon irgendwelche Skripte die er zu Verfügung stellen kann/würde?

Hallo Mastershort,

habe das Script in Serial geändert und funktioniert super.

Ja leider ist kein ftdi möglich. Dies wäre mir auch viele lieber.

Grüße

Oli

Mit der Serialen Sache habe ich noch nicht ganz auf dem Schirm!?

Kannst du mir ganz kurz eine kleine Einweisung geben?

Bzw. Dein Script mir kurz andeuten! Ich habe sonst den ColorPicker von Nickblue genommen? Hast du das Script angepasst ?

Hi,

hier kommt mal meine RGB_Control.php

<?

//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);
}

?>

Grüße

Oli

Danke Olli !
Aber ein paar Fragen habe ich noch! Wenn das Ok ist? Ich habe jetzt lange nix mehr gemacht!

Folgendes habe ich bis jetzt gemacht.

  • USB Dongle an Pi gesteckt

  • I/O Serial Port angelegt Port = ttyUSB0

  • Dein Script angelegt oben die ID Des Serial Ports eingesetzt!!

Wo sage dem Script jetzt noch das genau das Chromoflex RC Modul ist was angesprochen werden soll!!

Wenn ich das script ausführe dann müsste was passieren, oder ?

Hi Mastershort,

ich würde dir mal folgenden Eintrag hier im Forum vorschlagen.

Chromoflex RC Steuerung mit RGB Fader und Color Picker

Solltest du Probleme haben, einfach melden.

Grüße

Oli

Genau das hatte ich vorher am laufen aber halt auf einem Windows Client!
Nach dem ich das Hirn eingeschaltet habe, habe ich das Problem auch gefunden! Der Fehler war so blöd, das ich es garnicht sagen mag :eek: !!

Ich hatte die BaudRate bei dem Serial Port noch nicht umgestellt, sie stand noch auf 9600!!:eek:

Ich bin dir Super dankbar für das Skript und deine Hilfe!

Hallo oheidinger

ich hatte eine ganze Zeit am laufen. Hätte es aufgrund von einem Umbau abgebaut! Und zwischenzeitlich auch aus IPS entfernt.

Jetzt wollte ich es wieder an den Start bringen und funktioniert wider nicht. Ich kann alles installieren etc. aber es wird anscheint nix über die Serielle Schnittstelle gesendet.

Hast du deins noch unter 4.2 am laufen?