Vorhandene Wandschalter zur Steuerung von Philips Hue verwenden

Hallo zusammen,

ich bräuchte eine Entscheidungshilfe oder Denkanstöße :slight_smile:

Im Keller läuft auf einem Raspberry Pi IPS und sammelt Messwerte von KWL und Heizung. Im Haus habe ich an diversen Stellen einige Hue-Leuchten eingebaut. Mit dem Hue-Modul funktioniert auch alles super. Meine Idee ist nun, vorhanden Wandschalter zu verwenden, um Hue-Szenen anzuwenden. Im Moment schwanke ich zwischen zwei Varianten:

Variante 1: Enocean
Hierbei würde ich ein In-Wall-Modul von nodon verwenden (Link), damit lassen sich Änderungen von Schalterstellungen via Enocean übertragen. Stromversorgung geschieht über Netz.
Damit IPS mit Enocean reden kann, bräuchte ich einen Enocean USB Stick oder das Gateway von Symcon. Da der Stick im Keller mit großer Wahrscheinlichkeit keinen Empfang mehr hat, müsste ich einen weiteren Raspberry in der Nähe des In-Wall-Moduls verwenden. Wenn ich dort auch IPS verwenden möchte, bräuchte ich zwei Lizenzen, oder? Oder ich verwende FHEM, aber wie kann FHEM dann Kommandos an IPS im Keller schicken?

Variante 2: Homematic
Hier würde ich ein In-Wall-Modul von eq3 verwenden (Link). Auch hiermit werde Änderungen der Schalterstellung erfasst. Stromversorgung über CR2032.
Für die Kommunikation zwischen bidcos und IPS bräuchte ich eine CCU, oder? Eigentlich etwas overkill, da ich die CCU ja nur benötige, um bidcos zu Empfangen und an IPS zu schicken. Gibt es da evtl. eine günstigre Lösung?

Falls jemand ein In-Wall-Modul kennt, das direkt ZigBee LightLink reden kann, wäre das natürlich auch eine Option, ich habe jedoch keins gefunden. Es gibt zwar den Hue Tap, dessen Funkmodul sich in Gira Schalter einbauen lässt, allerdings ist der Tap recht teuer und ich müsste auch erstmal die passenden Schalter von Gira kaufen.

Bin für alle Anregungen dankbar!

Danke und viele Grüße,
Thorsten

Tu dir einen gefallen und nimm so etwas.

HomeMatic Funk-Schaltaktor 1-fach, Unterputzmontage - eQ-3

Glaub mir, wenn du nachts ins Bad willst und das licht nicht angeht verfluchst du alles andere was nicht direkt schaltet.

Hallo,

zum Thema Homematic kannst Du auch auf einen RaspberryPi mit dem Funkmodul gehen, das ist etwas günstiger als die CCU, oder einen LAN Adapter und auf einem Windows-IPS Server den BidcosDienst.

Ich verwende bei mir für solche Steuerungen keine „normalen“ Schalter, sondern habe auf nahezu Augenhöhe in einigen Zimmer das Wandthermostat und einen 6Fach Taster in einem Rahmen des Schalterprogramms verbaut.

Das sieht für mich gut aus, passt ganz gut zu meinem Programm und eröffnet einige Möglichkeiten. Außerdem ist damit die Szenensteuerung von der normalen Bedienung im Haus getrennt.

Zum Thema Enocean kann ich nichts sagen,

Gruß
Christian

Ich stand vor der gleichen Fragestellung

Ich habe es mit verbauten Schalterprogramm und Einsatz von EnOcean Tastern realisiert
Hatte zuvor HM Taster in Kombination mit den Original Tastern und war denn tierisch genervt wenn es um den Austausch der Batterien ging - die in meinem Fall tw. keine 6 Monate gehalten haben.

Dort wo ich auch Szenen. etc steuern möchte habe ich zusätzlich einen Zigbee Funk Wandsender Modul montiert. Gesteuert wird das Ganze mit IPS / Raspberry 3 und EnOcean Platine.

PS: unser Schalterprogramm ist von JUNG --> JUNG - ZigBee ÃœBERSICHT

Gruß
Michael

Vielen Dank für die Antworten!

Natürlich hab ich jetzt noch mehr fragen :wink:

zum Thema Homematic kannst Du auch auf einen RaspberryPi mit dem Funkmodul gehen, das ist etwas günstiger als die CCU, oder einen LAN Adapter und auf einem Windows-IPS Server den BidcosDienst.

Meinst Du mit Funkmodul etwas von Busware (CUL?)? Was mir dann prinzipiell nicht ganz klar ist: Angenommen ich stelle einen weiteren Raspberry so auf, das er guten Empfang hat (Das Funkprotokoll ist jetzt mal egal). Wie kann ich diesen Raspi dann dazu bringen, mit IPS im Keller zu kommunizieren? Bräuchte ich dann eine weitere Lizenz?

Wir haben ein GIRA Schalterprogramm, die bieten mittlerweile auch etwas für ZigBee LightLink an, allerdings recht teuer (ca. 90€ pro Schalter). Alleine im Schlafzimmer müsste ich vier neue Schalter kaufen, deshalb war ja die Idee, die bestehenden Schalter so günstig und einfach wie möglich zu nutzen. Praktisch wäre ein In-Wall-Modul, dass den Status der Wandschalter direkt per ZigBee verschickt.

Ich habe es mit verbauten Schalterprogramm und Einsatz von EnOcean Tastern realisiert
Hatte zuvor HM Taster in Kombination mit den Original Tastern und war denn tierisch genervt wenn es um den Austausch der Batterien ging - die in meinem Fall tw. keine 6 Monate gehalten haben.

Das mit den Batterien hatte ich befürchtet. Gerade bei den In-Wall-Modulen muss dann jedes mal der Schalter ausgebaut werden. Laut EQ3 sollen die doch 5 Jahre halten…
Welche EnOcean-Taster und welches Schalterprogramm hast Du denn verwendet? Wie spricht Enocean bei Dir mit IPS?

Danke nochmals und viele Grüße,
Thorsten

Ich habe das JUNG L990 Programm und die passenden EnOcean Schalter genommen.
Die Angabe mit 5J finde ich auch sehr mutig. Wie gesagt ich musste bei 3 Tastern bereits nach 6 Monaten die Batterien tauschen. Das Ganze gefrickl, damit dann der Einsatz und Aufsatz wieder richtig sitzen ist mir einfach zu aufwendig.
Leider hatte ich mich nicht gut genug erkundigt, sonst hätte ich von Anfang an zu den EnOcean Taster gegriffen (Preisdifferenz € 5). Der HM Taster erkennt zwar auch einen langen Tastendruck, was der EnOcean Taster - bauartbedingt - nicht kann, aber nachdem ich diese Funktion nicht genutzt habe, vermisse ich sie auch nicht.

Gruß
Michael

Moin,

dass mit dem „bauartbedingt“ stimmt wohl so nicht. Ich habe auch einige Enocean Taster (Hager) an meinen LCN-Bus angebunden, die unterstützen wie die nativen LCN-Taster neben „kurz“ auch die „lang“ und „los“ Kommandos.

Mich würde einfach mal interessieren wie ihr unabhängig vom verbauten System denn eine HUE Lampe mit einem Schalter in Kombination mit IP-Symcon dimmt?

Ich gar nicht - habe (und brauche) kein Hue. :wink:

was meinst Du nun mit Schalter ? mit einem HM Taster ginge es zB über PRESS_CONT

dass mit dem „bauartbedingt“ stimmt wohl so nicht. Ich habe auch einige Enocean Taster (Hager) an meinen LCN-Bus angebunden, die unterstützen wie die nativen LCN-Taster neben „kurz“ auch die „lang“ und „los“ Kommandos.

interessiert mich, kannst du bitte einen Link zu diesen Taster posten.

Gruß

Ok, Taster habe ich ja auch verbaut. Kannst Du mal ein Skript posten bzw. wie das im Objektbaum aussieht das Du dann mit dem Taster HUE ordentlich dimmen kannst?

Voilá: https://www.hager.de/files/download/0/1579_1/0/BDA_WANDFUNKTASTER-1-2-FACH_WYT8XXF_6T7995-A.PDF

Ich denke das ist aber eher eine Eigenheit der Implementierung in LCN als die des Tasters.

Danke! Die erzeugte Energie beim Tastendruck erzeugt augenscheinlich genügend Energie um 2 Telegramme zu verschicken - Kurz / Lang.

Objektbaum

Tenora [control] script


//Global definitions
const IPS_MODULE = "HUE";
include(IPS_GetScriptFile(37203));

$vtHUE_LightData = array(
	'ScriptID' => $_IPS['SELF'],
	'RoomID' => 49376,
	'LightAction' => 53689
);


//Gobal fucntions
include(IPS_GetScriptFile(36876));
$HUE_LightControl = HUE_GetLightCommand($vtHUE_LightData);

//Switch event mode
switch ($HUE_LightControl) {
	case HUE_TOGGLE:
		break;

	case HUE_DIMMER:
		$vtHUE_LightData['DimmerState'] = 36411;
		$vtHUE_LightData['DimmerMin'] = 0;
		$vtHUE_LightData['DimmerMax'] = 255;
		$vtHUE_LightData['DimmerStep'] = 10;
	break;
}


//HUE specific fucntions
$vtHUE_Lights = array(
	'Tenora-1' => array('id' => 22785, 'State' => 50281),
	'Tenora-2' => array('id' => 23288, 'State' => 38422),
	'Tenora-3' => array('id' => 48966, 'State' => 51378)
);

include(IPS_GetScriptFile(56095));

56095 script


switch ($HUE_LightControl) {
	case HUE_TOGGLE:
		HUE_LightToggle($vtHUE_Lights, $vtHUE_LightData);
		break;

	case HUE_DIMMER:
		HUE_LightDimmer($vtHUE_Lights, $vtHUE_LightData);
		break;
}

function HUE_LightDimmer($vtHUE_Lights, $vtHUE_LightData) {
	$HUE_DimmerBright = 0;
	$HUE_DImmerBright = 1;
	$BrightValue = 255;

	foreach ($vtHUE_Lights as $key => $value) {
		$BrightNew = HUE_GetValue($value['id'], 'BRIGHTNESS');
		if ($BrightNew < $BrightValue) $BrightValue = $BrightNew;
	}

	$BrightValue = round($BrightValue * 2.55);

	if (GetValueInteger($vtHUE_LightData['DimmerState']) == $HUE_DimmerBright) {
		$BrightValue = $BrightValue + $vtHUE_LightData['DimmerStep'];

		if ($BrightValue > 255) {
			SetValueInteger($vtHUE_LightData['DimmerState'], $HUE_DimmerDark);
			$BrightValue = $vtHUE_LightData['DimmerMax'];
		}
	} else {
		$BrightValue = $BrightValue - $vtHUE_LightData['DimmerStep'];

		if ($BrightValue < 0) {
			$BrightValue = $vtHUE_LightData['DimmerMin'];
			SetValueInteger($vtHUE_LightData['DimmerState'], $HUE_DimmerBright);
		}
	}

	foreach ($vtLights as $value) {
		if ($HUE_LightActive == HUE_ACTIVE) HUE_SetValue($value['ScriptID'], 'BRIGHTNESS', $BrightValue);	
	}

	IPS_Sleep (100);
	return true;
}

Ich denke es ist eher „kurz“ und „los“. LCN vergleicht dann intern die Zeitpunkte von beiden und wenn die Zeitspanne eine bestimmte Länge überschreitet wird aus „kurz“ „lang“.

Danke fürs teilen. Dazu hätte ich noch Fragen:

  • was steht in Skript 37203 und 36876
  • was ist bei RoomID anzugeben in dem Skript s.o. (49376)
  • was ist der Array $vtHUE_Lights genau aufgebaut id ist die ID der HUE Instanz und State die Id der Zustands Var?
  • nachdem ich meine Script / Logik effizienter und auf mehr auto umstellen, habe im Anhang schnell einmal die alle Funktionen, etc… die benötigt werden zusammenkopiert. Kann nach der Überarbeitung gerne Logik und Scripts posten.
  • RoomID hat im Script keine Funktion - ist für Debug Zwecke und ist in diesem Fall der Schrankraum
  • korrekt

//Start writing your scripts between the brackets

//Gobal definitions
define('HUE_TOGGLE', 2);
define('HUE_DIMMER', 4);

$HUE_Data = array(
	'ScriptID' => $_IPS['SELF'],
	'RoomID' => 33967,
	'LightAction' => 56554
);

//HUE specific fucntions
$HUE_Lights = array(
	'Forchini-1' => array('id' => 43973, 'State' => 37047),
	'Forchini-2' => array('id' => 26033, 'State' => 24671)
);

//Gobal fucntions
$HUE_Control = HUE_GetLightCommand($HUE_Data);

//Switch event mode
switch ($HUE_Control) {
	case HUE_TOGGLE:
		HUE_LightToggle($HUE_Lights);
		break;

	case HUE_DIMMER:
		$HUE_Data['DimmerState'] = 29300;
		$HUE_Data['DimmerMin'] = 0;
		$HUE_Data['DimmerMax'] = 255;
		$HUE_Data['DimmerStep'] = 10;

		HUE_LightDimmer($HUE_Lights, $HUE_Data);
		break;
}


function HUE_LightToggle($HUE_Lights) {
	//Toggle light on/off
	$LightState = true;

	foreach ($HUE_Lights as $key => $value) {
		if (HUE_GetValue($value['id'], 'STATE')) $LightState = false;
	}

	foreach ($HUE_Lights as $key => $value) {
		HUE_SetValue($value['id'], 'STATE', $LightState);
	}

	return true;
}


function HUE_LightDimmer($HUE_Lights, $HUE_Data) {

	$DimmerBright = 0;
	$DImmerDark = 1;
	$BrightValue = 255;

	foreach ($HUE_Lights as $key => $value) {
		$BrightNew = HUE_GetValue($value['id'], 'BRIGHTNESS');
		if ($BrightNew < $BrightValue) $BrightValue = $BrightNew;
	}

	$BrightValue = round($BrightValue * 2.55);

	if (GetValueInteger($HUE_Data['DimmerState']) == $DimmerBright) {
		$BrightValue = $BrightValue + $HUE_Data['DimmerStep'];

		if ($BrightValue > 255) {
			SetValueInteger($HUE_Data['DimmerState'], $DImmerDark);
			$BrightValue = $HUE_Data['DimmerMax'];
		}
	} else {
		$BrightValue = $BrightValue - $HUE_Data['DimmerStep'];

		if ($BrightValue < 0) {
			$BrightValue = $HUE_Data['DimmerMin'];
			SetValueInteger($HUE_Data['DimmerState'], $DimmerBright);
		}
	}

	foreach ($HUE_Lights as $value) {
		HUE_SetValue($value['id'], 'BRIGHTNESS', $BrightValue);	
	}

	IPS_Sleep (100);
	return true;
}


function HUE_GetLightCommand($HUE_Data) {
	$Profile = "HUE.LightAction";

	if ($_IPS['SENDER'] == "Variable") {
		$EventID = $_IPS['EVENT'];
		$Object = IPS_GetObject($EventID);
		
		if ($Object['ObjectType'] == IPS_EVENT) {
			preg_match_all("/\\"."["."(.*?)\\"."]"."/", IPS_GetName($EventID), $Result);
			$String = strtoupper(preg_replace('/\s+/', '', $Result[1][count($Result[1])-1]));

			switch ($String) {
				case "PRESS:SHORT":
				case "CHANNEL:ON":
					$Control = HUE_TOGGLE;
					break;

				case "PRESS:LONG":
				case "CHANNEL:OFF":
					$Control = HUE_DIMMER;
					break;

				default:
					$Control = GetValueInteger($HUE_Data['LightAction']);
			}
		}
	} else {
		$Control = GetValueInteger($HUE_Data['LightAction']);
	}

	return $Control;
}

?>

you are right :slight_smile:
Ich habe meinen Jung Taster als PT200 Button/Expert angelernt und kann nun auch einen langen Tastendruck realisieren.
Solange die Taste „gedrückt“ wird bleibt die variable „Pressed“ auf TRUE und sobald losgelassen springt sie auf FALSE.

Mal schauen wie ich das "ein"scripte :rolleyes:

soeben eingebaut und es funzt prima :smiley:
Ich habe die Erkennung zwischen kurz und lang auf 0,4s gesetzt, könnte theoretisch auch noch > 0,4s abfragen, dann bekäme man kurz, lang, und cont.

Na gut dass wir drüber geredet haben. :slight_smile: