Um den schicken Farbwähler im WebFront nutzen zu können, könnt ihr diese kleine Hilfsskript nutzen, welches erste einmal in eurem IP-Symcon Baum vorhanden sein musst. Danach müßt ihr dieses Skript nicht mehr anfassen oder verändern.
Voraussetzung: drei ModBus Instanzen (Datentype Byte) zur Ansteuerung der einzelnen RGB Farbkanäle
Installation:
[ul]
[li]Erstellt im Baum ein neues Skript (z.B. ‚HexColorModBus‘) mit dem Inhalt aus u.g. PHP-Box (dies muss nur einmalig gemacht werden)
[/li][li]Erstellt im Baum einen Variable vom Typ „Integer“ (z.B. ‚Biblio Regal‘)
[/li][li]Wählt als Profil ~HexColor aus
[/li][li]Wählt als Aktion das Skript aus, dass ihr im ersten Schritt erstellt habt
[/li][li]Verknüpft die Variable von euren 3 Modbus Instanzen unterhalb der vorhin erstellen Variable (siehe Screenshot)
[/li][li]Die Links müssen jeweils den Namen R, G oder B haben, je nachdem welchen Kanal sie ansprechen sollen
[/li][li]Optional: an das Skript aus Schritt 1 könnt ihr Ereignisse auf Änderung erstellen, die jeweils auf die im vorherigen Schritt verknüpften Variablen zeigen. Dadurch wird der Farbwähler auch aktualisiert, wenn ihr von woanders als dem WebFront schaltet.
[/li][/ul]
<?
switch($_IPS['SENDER']){
case "WebFront": //Split RGB Color
$r = (($_IPS['VALUE'] >> 16) & 0xFF);
$g = (($_IPS['VALUE'] >> 8) & 0xFF);
$b = (($_IPS['VALUE'] >> 0) & 0xFF);
$r_link = IPS_GetLinkIDByName("R", $_IPS['VARIABLE']);
$r_addr = IPS_GetLink($r_link)['TargetID'];
ModBus_WriteRegisterByte(IPS_GetParent($r_addr), $r);
$g_link = IPS_GetLinkIDByName("G", $_IPS['VARIABLE']);
$g_addr = IPS_GetLink($g_link)['TargetID'];
ModBus_WriteRegisterByte(IPS_GetParent($g_addr), $g);
$b_link = IPS_GetLinkIDByName("B", $_IPS['VARIABLE']);
$b_addr = IPS_GetLink($b_link)['TargetID'];
ModBus_WriteRegisterByte(IPS_GetParent($b_addr), $b);
break;
case "Variable":
$r_link = IPS_GetLinkIDByName("R", $_IPS['VARIABLE']);
$r_addr = IPS_GetLink($r_link)['LinkTargetID'];
$r_svid = IPS_GetObjectIDByIdent("Value", $r_addr);
$g_link = IPS_GetLinkIDByName("G", $_IPS['VARIABLE']);
$g_addr = IPS_GetLink($g_link)['LinkTargetID'];
$r_svid = IPS_GetObjectIDByIdent("Value", $r_addr);
$b_link = IPS_GetLinkIDByName("B", $_IPS['VARIABLE']);
$b_addr = IPS_GetLink($b_link)['LinkTargetID'];
$b_svid = IPS_GetObjectIDByIdent("Value", $b_addr);
$rgb = (GetValue($r_svid) << 16) + (GetValue($g_svid) << 8) + GetValue($b_svid);
SetValue(IPS_GetParent($_IPS['SELF']), $rgb);
break;
}
?>