Also, vom Aufbau her ist es nichts besonderes. Ich benutze den AVR-Node von Ulrich Radig (Bausatz) und einen RGB DMX Controller aus eBay (um die 30€). Mit dem beigelegten Programm habe ich die IP Adresse des Nodes auf mein Netz angepasst und schon kann es losgehen. Das Ur-Skript, welches nicht auf meinen Mist gewachsen ist, habe ich noch erweitert:
$hexStr = getvalueformatted(11479 /*[Räume\Wohnzimmer\Wohnwand\Farbe]*/);
$Power = getvalue(11263 /*[Räume\Wohnzimmer\Wohnwand\Power]*/);
$hexStr = preg_replace("/[^0-9A-Fa-f]/", '', $hexStr); // Gets a proper hex string
$rgbArray = array();
if (strlen($hexStr) == 6) { //If a proper hex code, convert using bitwise operation. No overhead... faster
$colorVal = hexdec($hexStr);
$rot = 0xFF & ($colorVal >> 0x10);
$gruen = 0xFF & ($colorVal >> 0x8);
$blau = 0xFF & $colorVal;
} elseif (strlen($hexStr) == 3) { //if shorthand notation, need some string manipulations
$rot = hexdec(str_repeat(substr($hexStr, 0, 1), 2));
$gruen = hexdec(str_repeat(substr($hexStr, 1, 1), 2));
$blau = hexdec(str_repeat(substr($hexStr, 2, 1), 2));
}
/* Art-Net (ArtDMX) with PHP
(c) Stefan <http://www.dmxcontrol.de/forum/index.php?page=User&userID=668>
Licence: CC 3.0 by-nc-sa
Version: 0.1
Tested with: PHP 5.1.2 */
define('CLIENT_IP', '192.168.2.44'); // define IP-Adress of Art-Net Client. Use IP-Adress, no broadcast adress
define('UNIVERSE', 0); // define Art-Net Universe
$socket = NULL;
$dmx = array(); // array of dmx values, each element from chr(0) (off) to chr(255) (full); DMX channel 1 == $dmx[1]
art_open();
art_send();
art_close();
function art_open()
{
echo 'open<br />';
global $socket, $dmx, $rot, $gruen, $blau, $Power;
if(defined('CLIENT_IP')) $socket = fsockopen('udp://' . CLIENT_IP, 0x1936);
if ($Power == TRUE)
{
$dmx[1] = chr($rot); //dimmer red
$dmx[2] = chr($blau); //dimmer blue
$dmx[3] = chr($gruen); //dimmer green
}else
{
$dmx[1] = chr(0); //dimmer red
$dmx[2] = chr(0); //dimmer blue
$dmx[3] = chr(0); //dimmer green
setvalue(11479 /*[Räume\Wohnzimmer\Wohnwand\Farbe]*/, 0);
}
}
function art_send()
{
echo 'send<br />';
global $socket, $dmx;
$buffer = "Art-Net\x00\x00\x50\000\016\x00\x01" . chr(UNIVERSE) . "\x00\x00" . chr(count($dmx)) . join($dmx);
if(defined('CLIENT_IP')) fwrite($socket, $buffer);
}
function art_close()
{
echo 'close <br />';
global $socket;
if(defined('CLIENT_IP')) fclose($socket);
}
Man braucht nur noch eine Integer Variable mit dem hexcolor Profil und dem Aktionsscript:
SetValue($IPS_VARIABLE, $IPS_VALUE);
Weiterhin noch eine Boolean Variable als Art Power Schalter. Das Skript einfach von der Power & Farbvariable triggern, somit rechnet es die Hexfarbe um und schickt die RGB Werte von 0-255 direkt an das Node.
Funktioniert prima und ohne große Verzögerung.
Hoffe etwas geholfen zu haben.