RGB Farbwähler für ModBus Instanzen

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;
}
?>

profil.png

Für Pokey56x hatte ich hier etwas ähnliches gepostet.

Gruß Helmut

Wobei ich euch den Umstieg zur Farbeinstellung per HSL nahelegen möchte.

„Farbton - Farbsättigung - Helligkeit“ entspricht eher der menschlichen Gefühlswelt als RGB.
Wohn(t)raumtaugliches Licht läßt sich damit sehr viel besser erreichen als mit RGB. Das taugt eher für die Disco.

gruß
bb