Hier das Script
<?
/*
*******************************
IP-SYMCON Event Scripting
*******************************
File : Chromoflex.ips.php
Trigger : $IPS_VALUE
Interval :
*/
if (!isset($IPS_VALUE)) $IPS_VALUE=NULL;
if($IPS_SENDER == "WebFront")
{
SetValue($IPS_VARIABLE, $IPS_VALUE);
}
define ("Comport", 57225 /*[Serial Port]*/);
$Startbyte = "\xCA"; // StartByte (Muss nicht verändert werden)
$Adresse = "\x00\x00\x00"; // Adresse 0,0,0 = Broadcast
switch ($IPS_VALUE)
{
case '260':
/*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
SLOW COLOR*/
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(0xCE); //Programm. 0xCE startet Programm 2
$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 '261':
/*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
BLOB*/
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 '262':
/*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
USER PRG*/
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(0xD4); //Programm. 0xD4 startet Programm 4
$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 '263':
/*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
LSD*/
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(0xD7); //Programm. 0xD7 startet Programm 5
$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(30567 /*[Chromoflex\Chromoflex\rot]*/ , 255);
SetValue(26490 /*[Chromoflex\Chromoflex\gruen]*/, 255);
SetValue(18687 /*[Chromoflex\Chromoflex\blau]*/, 255);
break;
case '266': // Gelb
SetValue(30567 /*[Chromoflex\Chromoflex\rot]*/ , 255);
SetValue(26490 /*[Chromoflex\Chromoflex\gruen]*/, 255);
SetValue(18687 /*[Chromoflex\Chromoflex\blau]*/, 0);
break;
case '267': // Violett
SetValue(30567 /*[Chromoflex\Chromoflex\rot]*/ , 255);
SetValue(26490 /*[Chromoflex\Chromoflex\gruen]*/, 0);
SetValue(18687 /*[Chromoflex\Chromoflex\blau]*/, 255);
break;
case '268': // Chromoflex ausschalten(Standby) alle Werte auf 0
SetValue(30567 /*[Chromoflex\Chromoflex\rot]*/ , 0);
SetValue(26490 /*[Chromoflex\Chromoflex\gruen]*/, 0);
SetValue(18687 /*[Chromoflex\Chromoflex\blau]*/, 0);
break;
case '269': // Nach Reset startet das Default Programm NORMAL COLOR
Reseten(); // Funktion aufrufen
break;
case '270':
/*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
FIRE*/
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(0xDA); //Programm. 0xDA startet Programm 6
$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 '271':
/*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
FLASH*/
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(0xDD); //Programm. 0xDD startet Programm 7
$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 '272':
/*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
BURST*/
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(0xE0); //Programm. 0xE0 startet Programm 8
$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;
default:
SetValue(13083 /*[Chromoflex\Chromoflex\Programm]*/, 264);
break;
}
// Werte einlesen
$Rot = GetValue(30567 /*[Chromoflex\Chromoflex\rot]*/);
$Gruen = GetValue(26490 /*[Chromoflex\Chromoflex\gruen]*/);
$Blau = GetValue(18687 /*[Chromoflex\Chromoflex\blau]*/);
// 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);
//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(30567 /*[Chromoflex\Chromoflex\rot]*/ , 0);
SetValue(26490 /*[Chromoflex\Chromoflex\gruen]*/, 0);
SetValue(18687 /*[Chromoflex\Chromoflex\blau]*/, 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);
}
?>
Gruß Gunnar