Hallo Gunnar,
für den Anfang ist das auch nicht gedacht.
Die Fehlermeldungen besagen, dass Du die entsprechende Variablen nicht angelegt hast. Also Variablen R,G,B anlegen. Dimmer kannst Du weglassen und im Script mit // auskommentieren.
Vielleicht solltest Du erstmal einen Schalter mit Variable testen um zusehen was passiert. Zu jeder Aktion gehört eine Variable, die wenn nicht vom System oder automatisch angelegt wird selbst anzulegen ist.
Nimm mal besser dieses Script, muss aber auch angepasst werden.
Das ganze ist steuerbar über Webfront.
<?
/*
*******************************
IP-SYMCON Event Scripting
*******************************
File : Chromoflex.ips.php
Trigger : $IPS_VALUE
Interval :
*/
// Abfragen ob eingeschaltet
$Status = GetValue(21167 /*[Multimedia\Chromoflex\Chromoflex\Status]*/);
if($IPS_SENDER == "WebFront")
{
SetValue($IPS_VARIABLE, $IPS_VALUE);
}
define ("Comport", 35024 /*[Chromoflex]*/);
$Startbyte = "\xCA"; // StartByte (Muss nicht verändert werden)
$Adresse = "\x00\x00\x00"; // Adresse 0,0,0 = Broadcast
switch ($IPS_VALUE)
{
case "1":
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);
break;
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(41478 /*[Multimedia\Chromoflex\Chromoflex]*/, 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(41478 /*[Multimedia\Chromoflex\Chromoflex]*/, true);
return;
}
else
{
SetValue(40117 /*[Multimedia\Chromoflex\Chromoflex\Rot]*/ , 255);
SetValue(37375 /*[Multimedia\Chromoflex\Chromoflex\Grün]*/, 255);
SetValue(31672 /*[Multimedia\Chromoflex\Chromoflex\Blau]*/, 255);
}
break;
case "266": // Gelb
SetValue(40117 /*[Multimedia\Chromoflex\Chromoflex\Rot]*/ , 255);
SetValue(37375 /*[Multimedia\Chromoflex\Chromoflex\Grün]*/, 255);
SetValue(31672 /*[Multimedia\Chromoflex\Chromoflex\Blau]*/, 0);
break;
case "267": // Violett
SetValue(40117 /*[Multimedia\Chromoflex\Chromoflex\Rot]*/ , 255);
SetValue(37375 /*[Multimedia\Chromoflex\Chromoflex\Grün]*/, 0);
SetValue(31672 /*[Multimedia\Chromoflex\Chromoflex\Blau]*/, 255);
break;
case "268": // Chromoflex ausschalten(Standby) alle Werte auf 0
SetValue(40117 /*[Multimedia\Chromoflex\Chromoflex\Rot]*/ , 0);
SetValue(37375 /*[Multimedia\Chromoflex\Chromoflex\Grün]*/, 0);
SetValue(31672 /*[Multimedia\Chromoflex\Chromoflex\Blau]*/, 0);
break;
case "269": // Nach Reset startet das Default Programm
Reseten(); // Funktion aufrufen
break;
default:
SetValue(27515 /*[Multimedia\Chromoflex\Chromoflex\Programm]*/, 264);
break;
}
// Werte einlesen
$Rot = GetValue(40117 /*[Multimedia\Chromoflex\Chromoflex\Rot]*/);
$Gruen = GetValue(37375 /*[Multimedia\Chromoflex\Chromoflex\Grün]*/);
$Blau = GetValue(31672 /*[Multimedia\Chromoflex\Chromoflex\Blau]*/);
// Dimmereingang von 0-100%
$Dimmer = GetValue(48745 /*[Multimedia\Chromoflex\Chromoflex\Dimmer]*/);
// 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(40117 /*[Multimedia\Chromoflex\Chromoflex\Rot]*/ , 0);
SetValue(37375 /*[Multimedia\Chromoflex\Chromoflex\Grün]*/, 0);
SetValue(31672 /*[Multimedia\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);
}
?>