RGBW dimmen - Wago DMX

Moin Moin,

ich habe eine kleines Problem.
Ich besitze ein Wago 750-881 mit einer RS485 Karte die als DMX-Controller arbeitet.
Im Wago Programm werden nur die Känale angegeben für die Farben RGBW.
Der Wert wird als Byte außen angeschrieben.

Im IPS möchte ich jetzt gerne einzelne Fest Farbwerte einstellen . ( Kein Problem klappt auch)
Als weiteres soll mit einen Farbpicker gearbeitet werden für eine Individuelle Auswahl. ( Klappt auch mehr oder weniger )
Nun sollen die Werte aber auch gedimmt werden.
Da fängt mein Problem an.
Runter dimmen kann ich immer aber ich komme nicht wieder auf den Ursprungswert zurück.
Ich muss erst wieder die Farbe anwählen damit wieder der Grundwert hergestellt ist, dann kann ich auch wieder runterdimmen.

Wenn ich nachher zu Hause bin Stelle ich auch mal einen derzeitigen Code ein.

Aber vielleicht kennt einer schon eine Lösung :slight_smile:

Besten Dank

Also das ist derzeit noch ein Test-Skript :confused:


<?
SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);

$va_hex = dechex(getvalue(47232 /*[Zimmer\Wohnzimmer\Strip_Decke_Rechts\RgbStrip]*/));
$dim = GetValue(36735 /*[Zimmer\Wohnzimmer\Strip_Decke_Rechts\Helligkeit]*/);

IF ( $_IPS['VARIABLE'] == 35424 /*[Zimmer\Wohnzimmer\Strip_Decke_Rechts\Farben_Re]*/)
{
/*Rot*/
 IF ( $_IPS['VALUE'] == 1 ){
$Rot 	= 255;
$Gruen 	= 0;
$Blau 	= 0;
}                        
/*Blau*/
 IF ( $_IPS['VALUE'] == 2 ){
$Rot 	= 0;
$Gruen 	= 0;
$Blau 	= 255;
}
/*Grün*/
iF ( $_IPS['VALUE'] == 3 ){
$Rot 	= 0;
$Gruen 	= 255;
$Blau 	= 0;
}
/*Gelb*/
iF ( $_IPS['VALUE'] == 4 ){
$Rot 	= 255;
$Gruen 	= 255;
$Blau 	= 0;
}
/*PINK*/
iF ( $_IPS['VALUE'] == 5 ){
$Rot 	= 255;
$Gruen 	= 0;
$Blau 	= 93;
}
/*WEIß*/
iF ( $_IPS['VALUE'] == 6 ){
$Rot 	= 255;
$Gruen 	= 255;
$Blau 	= 255;
}
}

IF ( $_IPS['VARIABLE'] == 47232 )
{
   if(strlen($va_hex) == 6) {
      $Rot = hexdec(substr($va_hex,0,2));
      $Gruen = hexdec(substr($va_hex,2,2));
      $Blau = hexdec(substr($va_hex,4,2));
   } 
   if(strlen($va_hex) == 4){
      $Gruen = hexdec(substr($va_hex,0,2));
      $Blau = hexdec(substr($va_hex,2,2));
      $Rot = 0;
   }
    if(strlen($va_hex) == 2){
      $Blau = hexdec(substr($va_hex,0,2));
      $Rot = 0;
      $Gruen = 0;
   }
 	if(strlen($va_hex) == 1){
      $Blau = 0;
      $Rot = 0;
      $Gruen = 0;
   }
   }
   
   
$la = strlen($va_hex);

/* Grundwert vorm Dimmen herstellen*/

$rdim = round( $Rot  * 	( $dim / 100 ));
$gdim = round( $Gruen * ( $dim / 100 ));
$bdim = round( $Blau  * ( $dim / 100 ));






SetValue(47232 /*[Zimmer\Wohnzimmer\Strip_Decke_Rechts\RgbStrip]*/, $bdim + $gdim * 256 + $rdim * 65536);

ModBus_WriteRegisterDWord(28442 /*[Zimmer\Wohnzimmer\Modbus Variablen\Strip_WZ_DE_RE_RO]*/, $rdim + $gdim * 256 + $bdim * 65536);

ModBus_WriteRegisterWord(23106 /*[Zimmer\Wohnzimmer\Modbus Variablen\Strip_WZ_DE_RE_BL]*/,$bdim);

ModBus_WriteRegisterWord(35385 /*[Zimmer\Wohnzimmer\Modbus Variablen\Strip_WZ_DE_RE_GR]*/,$gdim);


echo "$la 
 ";
echo "$va_hex 
 ";
echo "$Rot 
 ";
echo "$Gruen 
 ";
echo "$Blau 
 ";
echo "$rdim 
 ";
echo "$gdim 
 ";
echo "$bdim 
 ";






?>

Habe es nun nochmal überarbeitet…


<?

SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);

$Farbwahl 	= 35424 /*[Zimmer\Wohnzimmer\Strip_Decke_Rechts\Farben_Re]*/;
$Dimmer		= 36735 /*[Zimmer\Wohnzimmer\Strip_Decke_Rechts\Helligkeit]*/;
$Farbrad	= 47232 /*[Zimmer\Wohnzimmer\Strip_Decke_Rechts\RgbStrip]*/;
$Modbus_var	= 28442 /*[Zimmer\Wohnzimmer\Modbus Variablen\Strip_WZ_DE_RE_RO]*/;

$va_hex = dechex(getvalue($Farbrad));
$dim = GetValue($Dimmer);


IF ( $_IPS['VARIABLE'] == $Farbwahl )
{
/*Rot*/
 IF ( $_IPS['VALUE'] == 1 ){
$Rot 	= 255;
$Gruen 	= 0;
$Blau 	= 0;
}                        
/*Blau*/
 IF ( $_IPS['VALUE'] == 2 ){
$Rot 	= 0;
$Gruen 	= 0;
$Blau 	= 255;
}
/*Grün*/
iF ( $_IPS['VALUE'] == 3 ){
$Rot 	= 0;
$Gruen 	= 255;
$Blau 	= 0;
}
/*Gelb*/
iF ( $_IPS['VALUE'] == 4 ){
$Rot 	= 255;
$Gruen 	= 255;
$Blau 	= 0;
}
/*PINK*/
iF ( $_IPS['VALUE'] == 5 ){
$Rot 	= 255;
$Gruen 	= 0;
$Blau 	= 93;
}
/*WEIß*/
iF ( $_IPS['VALUE'] == 6 ){
$Rot 	= 255;
$Gruen 	= 255;
$Blau 	= 255;
}

	$Rot = round( $Rot  * 	( $dim / 100 ));
	$Gruen = round( $Gruen * ( $dim / 100 ));
	$Blau = round( $Blau  * ( $dim / 100 ));

SetValue($Farbrad, $Blau + $Gruen * 256 + $Rot * 65536);
ModBus_WriteRegisterDWord($Modbus_var, $Blau + $Gruen * 256 + $Rot * 65536);
}

IF ( $_IPS['VARIABLE'] == $Farbrad )
{
   if(strlen($va_hex) == 6) {
      $Rot = hexdec(substr($va_hex,0,2));
      $Gruen = hexdec(substr($va_hex,2,2));
      $Blau = hexdec(substr($va_hex,4,2));
   } 
   if(strlen($va_hex) == 4){
      $Gruen = hexdec(substr($va_hex,0,2));
      $Blau = hexdec(substr($va_hex,2,2));
      $Rot = 0;
   }
    if(strlen($va_hex) == 2){
      $Blau = hexdec(substr($va_hex,0,2));
      $Rot = 0;
      $Gruen = 0;
   }
 	if(strlen($va_hex) == 1){
      $Blau = 0;
      $Rot = 0;
      $Gruen = 0;
   }

   	SetValue($Dimmer,100);
  	SetValue($Farbrad, $Blau + $Gruen * 256 + $Rot * 65536);
	ModBus_WriteRegisterDWord($Modbus_var, $Blau + $Gruen * 256 + $Rot * 65536);
   }
   
   
   
 IF ($_IPS['VARIABLE'] == $Dimmer )
{ 
	if(strlen($va_hex) == 6) {
      $Rot = hexdec(substr($va_hex,0,2));
      $Gruen = hexdec(substr($va_hex,2,2));
      $Blau = hexdec(substr($va_hex,4,2));
   } 
   if(strlen($va_hex) == 4){
      $Gruen = hexdec(substr($va_hex,0,2));
      $Blau = hexdec(substr($va_hex,2,2));
      $Rot = 0;
   }
    if(strlen($va_hex) == 2){
      $Blau = hexdec(substr($va_hex,0,2));
      $Rot = 0;
      $Gruen = 0;
   }
 	if(strlen($va_hex) == 1){
      $Blau = 0;
      $Rot = 0;
      $Gruen = 0;
   }
   
   	$Rot = round( $Rot  * 	( $dim / 100 ));
	$Gruen = round( $Gruen * ( $dim / 100 ));
	$Blau = round( $Blau  * ( $dim / 100 ));

	SetValue($Farbrad, $Blau + $Gruen * 256 + $Rot * 65536);
	ModBus_WriteRegisterDWord($Modbus_var, $Blau + $Gruen * 256 + $Rot * 65536);
}
  


/*
$la = strlen($va_hex);
echo "$la 
 ";
echo "$va_hex 
 ";
echo "$Rot 
 ";
echo "$Gruen 
 ";
echo "$Blau 
 ";
echo "$rdim 
 ";
echo "$gdim 
 ";
echo "$bdim 
 ";
*/





?>