Chromoflex RC, FTDI

Hallo Rainer,

vielen Dank für Deine Hilfe, ich habe es leider immer noch nicht kapiert.

Gibt es für Anfänger wie mich auch eine leichte Anleitung wo ich mit üben kann?

Weil ich weiss nicht wo Du hierrauf zugreifts:

SetValue(27515 /[Multimedia\Chromoflex\Chromoflex\Programm]/, 269);
SetValue(40117 /[Multimedia\Chromoflex\Chromoflex\Rot]/ , 0);
SetValue(37375 /[Multimedia\Chromoflex\Chromoflex\Grün]/, 0);
SetValue(31672 /[Multimedia\Chromoflex\Chromoflex\Blau]/, 0);

Was ist 40117 usw., was muss ich da eingeben (Ist das das Programm CF_Edit)?

Mit dem Serial Port habe ich verstanden den habe ich aus getauscht.

Ich habe den Chromoflex direkt an die Serielle Schnitstelle gehängt, und möchte gerne mit IP-Symcon ihn steuern.

Gruß Gunnar

Hallo Gunnar,

ich habe dir mal einen Shot gemacht, dort siehst Du die Zuordnung der Variablen. Diese musst Du von Hand anlegen.

Wie willst Du es denn ansteuern, über Webfront, Dashboard…

Hallo Rainer

Ich wollte es über Webfront darstellen, damit ich es nachher auch von meiner Pronto TSU9400 bedienen kann (wird wohl auch noch dauern bis ich verstanden habe wie ich die Pronto mit einbinde).

Danke für den Shot, ich habe bei mir aber keine FS20 dazwischen, ich wollte das direkt über die serielle Schnittstelle am PC machen, funktioniert auch das?

Gruß Gunnar

Hallo Gunnar,

ich habe bei mir aber keine FS20 dazwischen, ich wollte das direkt über die serielle Schnittstelle am PC machen, funktioniert auch das?
ja sicher geht das :), ich schalte damit nur das Chromo Ein und Aus.
Du musst dann aber eine Dummy-Instanz anlegen.

so sieht es im Moment bei mir im Webfront aus.

Die Variable Programm als eigenes Variablenprofil auch mal als Shot, ebenso der Slider, ist für alle 3 gleich. also 3 mal anlegen je Rot, Blau, Grün.

sliderchromo.png

programmChromo.png

Hallo Rainer

Vielen Dank für Deine Geduld die Du mit mir hast.

Ich wollte jetzt eine Dummy Instanz anlegen, nur wo finde ich die?
In IP-Symcon finde ich nur folgendes (siehe Bild)

Die Dummy Instanz ist zwar in der Dokumentation beschrieben unter
„Modulreferenz“ „Dummy Modul“ aber wie ich die benutzen kann steht da nicht.

Gruß Gunnar

Instanz hinzufügen.JPG

Hallo Gunnar,

ich denke Du nutzt noch nicht die neueste beta.

Beta Downloads - IP-Symcon :: Automatisierungssoftware

Hallo wgreipl

Vielen Dank für den Hinweis, ich hatte noch garnicht mit der Beta gearbeitet.
Jetzt läuft die Beta und siehe da es gibt die Dummy-Instanz :slight_smile:

Hallo Rainer vielen Dank für die Shots, die haben mir sehr weiter geholfen, habe alles umgeschrieben und bekomme immer noch Fehlermeldungen (siehe Anhang)

Gruß Gunnar

Script.JPG

Hallo Gunnar,

den Variablen hast Du im Variablenprofil das Script zugewiesen. Den case1 kannst Du löschen, der war für FS20.

Die case Nummern müssen mit denen im Variablenprofi(Programm) übereinstimmen.

Am besten Du postet mal dein geändertest Script und deine ProgrammVariable(profil). Je nach dem was Du im Script geändert hast, muss die Befehlsreferenz für das Chromo angepasst werden.

Hallo Rainer

Hier der Script

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Chromoflex.ips.php
Trigger  : $IPS_VALUE
Interval : 
*/

// Abfragen ob eingeschaltet
$Status = GetValue(17346);




if($IPS_SENDER == "WebFront")
{
    SetValue($IPS_VARIABLE, $IPS_VALUE);
}

define ("Comport", 28269);

$Startbyte =  "\xCA";          // StartByte (Muss nicht verändert werden)
$Adresse   =  "\x00\x00\x00";  // Adresse 0,0,0 = Broadcast

switch ($IPS_VALUE)
{
    case "260":
 
     break;
   case "261":

     break;
   case "262":

     break;
/*Programmnummer aufrufen 0-7 und 9. Es erfolgt erst ein Reset,
danach wird das Programm mit einer kleinen Verzögerung aufgerufen, diese muss sein, sonst startet das Programm nicht.
Programm = 200+3*Programmnummer. Hier als Beispiel Nr.3, 200 + 3 * 3 = 209 entspricht 0xD1*/

    case "263": // Eigenes Programm(Alarm)
        if(!$Status)
         {
             FS20_SwitchMode(53127, true);
             return;
         }
     else
     {
         Reseten();       // Funktion aufrufen
         IPS_Sleep(750); // 750ms warten, ansonsten starten die Programme nicht(Timing)
         $cmd = chr(0).chr(3).chr(0x7D).chr(0x15).chr(0).chr(0xD1); //Programm. 0xD1 startet Programm 3
         $txt = $Adresse.$cmd;
         $crc = CRC16r($Startbyte.$txt);
         $txt = str_replace(chr(0xCB), chr(0xCB).chr(0x01), $txt);
         $txt = str_replace(chr(0xCA), chr(0xCB).chr(0x00), $txt);
         COMPort_SendText(Comport, $Startbyte.$txt.$crc);
     }
         return;
     break;
    case "265": // Weiß
         if(!$Status)
         {
             FS20_SwitchMode(53127, true);
             return;
         }
     else
     {
        SetValue(36832 , 255);
         SetValue(54808, 255);
         SetValue(54179, 255);
    }
     break;
    case "266": // Gelb
         SetValue(36832 , 255);
         SetValue(54808, 255);
        SetValue(54179, 0);
     break;
    case "267": // Violett
         SetValue(36832 , 255);
         SetValue(54808, 0);
         SetValue(54179, 255);
     break;
    case "268":  // Chromoflex ausschalten(Standby) alle Werte auf 0
         SetValue(36832 , 0);
         SetValue(54808, 0);
         SetValue(54179, 0);
     break;
    case "269":   // Nach Reset startet das Default Programm
         Reseten();   // Funktion aufrufen
     break;
    default:
       SetValue(39876, 264);
      break;
}
// Werte einlesen
$Rot = GetValue(36832);
$Gruen = GetValue(54808);
$Blau = GetValue(54179);

// Dimmereingang von 0-100%
$Dimmer = GetValue(12924);

// Status setzen
$cmd = chr(0).chr(2).chr(0x7E).chr(0x12).chr(0x01);
$txt = $Adresse.$cmd;
$crc = CRC16r($Startbyte.$txt);
$txt = str_replace(chr(0xCB), chr(0xCB).chr(0x01), $txt);
$txt = str_replace(chr(0xCA), chr(0xCB).chr(0x00), $txt);
COMPort_SendText(Comport, $Startbyte.$txt.$crc);

/*
// Track setzen
$cmd = chr(0).chr(3).chr(0x7E).chr(0x11).chr(0x01).chr(0x01);
$txt = $Adresse.$cmd;
$crc = CRC16r($Startbyte.$txt);
$txt = str_replace(chr(0xCB), chr(0xCB).chr(0x01), $txt);
$txt = str_replace(chr(0xCA), chr(0xCB).chr(0x00), $txt);
COMPort_SendText(Comport, $Startbyte.$txt.$crc);

/*
//INKREMENTIERUNG FESTLEGEN -> 255 = sofort, 1 = 2,55ms für Änderungen von 0 auf 255
define('Rot',   255);
define('Gruen', 255);
define('Blau',  255);
$cmd = chr(0).chr(5).chr(0x7E).chr(8).chr(Rot).chr(Gruen).chr(Blau).chr(0x64);
$txt = $Adresse.$cmd;
$crc = CRC16r($Startbyte.$txt);
$txt = str_replace(chr(0xCB), chr(0xCB).chr(0x01), $txt);
$txt = str_replace(chr(0xCA), chr(0xCB).chr(0x00), $txt);
COMPort_SendText(Comport, $Startbyte.$txt.$crc);
*/

//Farben setzen ==> Set
$cmd = chr(0).chr(5).chr(0x7E).chr(4).chr($Rot).chr($Gruen).chr($Blau).chr($Dimmer);
$txt = $Adresse.$cmd;
$crc = CRC16r($Startbyte.$txt);
$txt = str_replace(chr(0xCB), chr(0xCB).chr(0x01), $txt);
$txt = str_replace(chr(0xCA), chr(0xCB).chr(0x00), $txt);
COMPort_SendText(Comport, $Startbyte.$txt.$crc);

//Level setzen
$cmd = chr(0).chr(5).chr(0x7E).chr(0).chr($Rot).chr($Gruen).chr($Blau).chr($Dimmer);
$txt = $Adresse.$cmd;
$crc = CRC16r($Startbyte.$txt);
$txt = str_replace(chr(0xCB), chr(0xCB).chr(0x01), $txt);
$txt = str_replace(chr(0xCA), chr(0xCB).chr(0x00), $txt);
COMPort_SendText(Comport, $Startbyte.$txt.$crc);


// Funktion zur Checksummenberechnung by HJH
function CRC16r($s)       // CRC16 reverse
{
 $CRCreg = 0xffff << 1;   // Startwert
 $PLYreg = 0xA001 << 1;   // Polynom
 $len = strlen($s);

 for ($cp=0; $cp<$len; $cp++)
 {
  $CRCreg ^= ord($s[$cp]) << 1;
  for ($bp=0; $bp<8; $bp++)
  {
   $CRCreg >>= 1;
   if ($CRCreg & 0x01) $CRCreg ^= $PLYreg;
  }
 }
 $crc = $CRCreg >> 1;
 $crcLo = $crc & 0xff;
 $crcHi = $crc >> 8;
 return chr($crcHi).chr($crcLo);
}


// Funktion Reseten
function Reseten()
{
 SetValue(36832 , 0);
 SetValue(54808, 0);
 SetValue(54179, 0);
 $cmd = chr(0).chr(0).chr(0xFE);
 $txt = "\x00\x00\x00".$cmd;
 $crc = CRC16r("\xCA".$txt);
 $txt = str_replace(chr(0xCB), chr(0xCB).chr(0x01), $txt);
 $txt = str_replace(chr(0xCA), chr(0xCB).chr(0x00), $txt);
 COMPort_SendText(Comport,"\xCA".$txt.$crc);
}

?> 

Und angehängt die Programmvariable

Gruß Gunnar

Sieht gut aus. Wenn du jetzt im Webfront auf eine Farbe klickst, sollte sofern alles richtig eingerichtet ist das Chromo die entsprechende Farbe darstellen.

Wenn nicht, musst Du mal genau beschreiben oder mit Bilder zeigen was Du genau gemacht hast.

Hallo Rainer

Sieht aber leider in wirklichkeit aber garnicht gut aus.
Ich habe vom Webfront mal ein Shot angehängt.
Bei Blau bekomme ich kein Untermenü wie bei Gelb und Rot angezeigt.
Und egal was ich im ich im Menu Programm anklicke bekomme ich die angehängte Fehlerkonsole angezeigt.
Im Menu Programm funktioniert aber wenigstens die Punkte:
Stand By / Standart / Gelb / Violett und bei Manuell kann ich auch die Werte bei Rot oder Grün verändern.
Achja wenn ich beim Status anklicke und auf 1 schaltete, dann funktioniert auch Weiß und Alarm.

Gruß Gunnar

Hallo Gunnar,

wird schon :). Ich gehe jetzt mal von aus das Du kein FS20 benutzt, warum löscht Du es dann nicht.

Mach mal folgendes.

[ol]
[li]alle Variablen die du nicht benötigst löschen[/li][/ol]
Für das Chromo bleiben 4 Integer Variablen übrig, Programm, Rot, Grün, Blau
Ich ändere dir das Script und dann bitte dein altes durch das ersetzen.

Wenn Du auf einen Slider(Farbe) klickst, muss der Wert im Objektbaum unter der entsprechenden Farbe erscheinen.

Mach am besten auch noch einen Shot von deinem Objektbaum.

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Chromoflex.ips.php
Trigger  : $IPS_VALUE
Interval :
*/


if($IPS_SENDER == "WebFront")
{
    SetValue($IPS_VARIABLE, $IPS_VALUE);
}

define ("Comport", 28269);

$Startbyte =  "\xCA";          // StartByte (Muss nicht verändert werden)
$Adresse   =  "\x00\x00\x00";  // Adresse 0,0,0 = Broadcast

switch ($IPS_VALUE)
{
    case "260":

     break;
   case "261":

     break;
   case "262":

     break;
/*Programmnummer aufrufen 0-7 und 9. Es erfolgt erst ein Reset,
danach wird das Programm mit einer kleinen Verzögerung aufgerufen, diese muss sein, sonst startet das Programm nicht.
Programm = 200+3*Programmnummer. Hier als Beispiel Nr.3, 200 + 3 * 3 = 209 entspricht 0xD1*/

    case "263": // Eigenes Programm(Alarm)
        
         Reseten();       // Funktion aufrufen
         IPS_Sleep(750); // 750ms warten, ansonsten starten die Programme nicht(Timing)
         $cmd = chr(0).chr(3).chr(0x7D).chr(0x15).chr(0).chr(0xD1); //Programm. 0xD1 startet Programm 3
         $txt = $Adresse.$cmd;
         $crc = CRC16r($Startbyte.$txt);
         $txt = str_replace(chr(0xCB), chr(0xCB).chr(0x01), $txt);
         $txt = str_replace(chr(0xCA), chr(0xCB).chr(0x00), $txt);
         COMPort_SendText(Comport, $Startbyte.$txt.$crc);
    
         return;
     break;
    case "265": // Weiß
         SetValue(36832 , 255);
         SetValue(54808, 255);
         SetValue(54179, 255);
    
     break;
    case "266": // Gelb
         SetValue(36832 , 255);
         SetValue(54808, 255);
        SetValue(54179, 0);
     break;
    case "267": // Violett
         SetValue(36832 , 255);
         SetValue(54808, 0);
         SetValue(54179, 255);
     break;
    case "268":  // Chromoflex ausschalten(Standby) alle Werte auf 0
         SetValue(36832 , 0);
         SetValue(54808, 0);
         SetValue(54179, 0);
     break;
    case "269":   // Nach Reset startet das Default Programm
         Reseten();   // Funktion aufrufen
     break;
    default:
       SetValue(39876, 264);
      break;
}
// Werte einlesen
$Rot = GetValue(36832);
$Gruen = GetValue(54808);
$Blau = GetValue(54179);


// Status setzen
$cmd = chr(0).chr(2).chr(0x7E).chr(0x12).chr(0x01);
$txt = $Adresse.$cmd;
$crc = CRC16r($Startbyte.$txt);
$txt = str_replace(chr(0xCB), chr(0xCB).chr(0x01), $txt);
$txt = str_replace(chr(0xCA), chr(0xCB).chr(0x00), $txt);
COMPort_SendText(Comport, $Startbyte.$txt.$crc);

/*
// Track setzen
$cmd = chr(0).chr(3).chr(0x7E).chr(0x11).chr(0x01).chr(0x01);
$txt = $Adresse.$cmd;
$crc = CRC16r($Startbyte.$txt);
$txt = str_replace(chr(0xCB), chr(0xCB).chr(0x01), $txt);
$txt = str_replace(chr(0xCA), chr(0xCB).chr(0x00), $txt);
COMPort_SendText(Comport, $Startbyte.$txt.$crc);

/*
//INKREMENTIERUNG FESTLEGEN -> 255 = sofort, 1 = 2,55ms für Änderungen von 0 auf 255
define('Rot',   255);
define('Gruen', 255);
define('Blau',  255);
$cmd = chr(0).chr(5).chr(0x7E).chr(8).chr(Rot).chr(Gruen).chr(Blau).chr(0x64);
$txt = $Adresse.$cmd;
$crc = CRC16r($Startbyte.$txt);
$txt = str_replace(chr(0xCB), chr(0xCB).chr(0x01), $txt);
$txt = str_replace(chr(0xCA), chr(0xCB).chr(0x00), $txt);
COMPort_SendText(Comport, $Startbyte.$txt.$crc);
*/

//Farben setzen ==> Set
$cmd = chr(0).chr(4).chr(0x7E).chr(4).chr($Rot).chr($Gruen).chr($Blau);
$txt = $Adresse.$cmd;
$crc = CRC16r($Startbyte.$txt);
$txt = str_replace(chr(0xCB), chr(0xCB).chr(0x01), $txt);
$txt = str_replace(chr(0xCA), chr(0xCB).chr(0x00), $txt);
COMPort_SendText(Comport, $Startbyte.$txt.$crc);

//Level setzen
$cmd = chr(0).chr(4).chr(0x7E).chr(0).chr($Rot).chr($Gruen).chr($Blau);
$txt = $Adresse.$cmd;
$crc = CRC16r($Startbyte.$txt);
$txt = str_replace(chr(0xCB), chr(0xCB).chr(0x01), $txt);
$txt = str_replace(chr(0xCA), chr(0xCB).chr(0x00), $txt);
COMPort_SendText(Comport, $Startbyte.$txt.$crc);


// Funktion zur Checksummenberechnung by HJH
function CRC16r($s)       // CRC16 reverse
{
 $CRCreg = 0xffff << 1;   // Startwert
 $PLYreg = 0xA001 << 1;   // Polynom
 $len = strlen($s);

 for ($cp=0; $cp<$len; $cp++)
 {
  $CRCreg ^= ord($s[$cp]) << 1;
  for ($bp=0; $bp<8; $bp++)
  {
   $CRCreg >>= 1;
   if ($CRCreg & 0x01) $CRCreg ^= $PLYreg;
  }
 }
 $crc = $CRCreg >> 1;
 $crcLo = $crc & 0xff;
 $crcHi = $crc >> 8;
 return chr($crcHi).chr($crcLo);
}


// Funktion Reseten
function Reseten()
{
 SetValue(36832 , 0);
 SetValue(54808, 0);
 SetValue(54179, 0);
 $cmd = chr(0).chr(0).chr(0xFE);
 $txt = "\x00\x00\x00".$cmd;
 $crc = CRC16r("\xCA".$txt);
 $txt = str_replace(chr(0xCB), chr(0xCB).chr(0x01), $txt);
 $txt = str_replace(chr(0xCA), chr(0xCB).chr(0x00), $txt);
 COMPort_SendText(Comport,"\xCA".$txt.$crc);
}

?>

Hallo Rainer

Vielen Dank das Du Dir soviel Zeit für mich nimmst.

Habe den Script ausgetauscht und alle überflüssigen Sachen gelöscht.
Bei der Farbe Blau ist immer noch nichts zusehen. bekomme auch immer noch bei jeden klick egal wo eine Fehlermeldung (Fehlerkonsole.jpg)
Wenn ich im Webfront auf Chromoflex (Script) klicke, bekomme die Fehlermeldung (Fehler_Script_Chromo.JPG).

Gruß Gunnar

Fehlerkonsole.JPG

Hallo Gunnar,

bring mal Ordnung in das wirrwarr :smiley:

Leg dir mal eine Kategorie an z.B. Chromoflex. Dort ziehst Du das Dummymodul und die Variablen Programm, Rot, Grün, Blau und das Script rein.
Überprüfe noch mal ob alle Variablem dem Script zugeordnet sind.

Auf das Script wird nicht mehr geklickt, auch nicht auf ausführen. Mach mal einen rechtsklick auf das Script => Objekt bearbeiten => Optionen, Haken Versteckt anklicken und OK.

Hallo Rainer

Habe eine Katogorie angelegt und alles verschoben (siehe Shot).
Ich weis glaube auch warum nichts bei Blau angezeigt wird, in der variable war kein min/max Wert mehr vorhanden.
Leider testen kann ich es nicht mehr, seit dem ich alles in die Kategorie verschoben habe wird es nicht mehr im Webfront angezeigt.

Gruß Gunnar

Hallo,
unter Chromoflex Dummy müssen auch die Verlinkungen rein. Dann solltest Du sie wieder sehen im WF.

Das Dummymodul ist ja auch nicht in der Kategorie Chromoflex.

Hallo Uwe

Danke.
Ist jetzt im Webfront wieder da, und beim Blauen wird auch was angezeigt.
Nur es ist immer noch die Fehlerkonsole beim jeden klicken da.

Gruß Gunnar

Jetzt nimm das Script und zieh es auf das Dummy :confused:

Ist auch geschehen, aber die Fehlerkonsole meldet sich immer noch,
zwar nur mit der Uhrzeit.

Gruß Gunnar

Fehlerkonsole.PNG