HA-Bridge gemeinsam mit IP-Symcon betreiben

Hallo werte Community

Ich benutze die Harmony Fernbedienung und würde hierbei gerne die Smarthome Tasten im unteren Bereich der Fernbedieung nutzen um Variablen und Geräte in IP-Symcon beschreiben zu können. Ich habe von einer HA-Bridge gelesen um in Harmony eine Hue Bridge zu simulieren. Ist es möglich die HA-Bridge gemeinsam auf einem Rasperry mit IP-Symocon zu betreiben? Ich betreibe schon IP-Symcon auf einem Rasperry und möchte mir, wenn möglich noch ein Kästchen sparen. Ich benutze schon eine Hue Bridge um Lampen zu steuern, aber ich würde gerne auch Schaltaktoren von Homematic über die Harmony Fernbedieung über IP-Symcon damit steuern. Könnt Ihr mir da einen guten TIpp geben, wie ich da vorgehen sollte?

Danke und Besten Gruß

Ich steuere den harmonyhub direkt von ips

Gesendet von iPhone mit Tapatalk

Ja Du kannst die HA-Bridge auch parallel auf einem Raspberry installieren. Theoretisch könnte auch IPS eine Hue Bridge emulieren, das Problem ist aber, dass auf Port 80 bei richtigen Servern meist ein HTTP Server läuft, daher hab ich da nichts eingebaut, das würde kollidieren. Wer das also nutzten will findet mit der HA-Bridge eine gute Möglichkeit HUE zu emulieren und von dort dann einen HTTP Request an IPS zu schicken. Wichtig ist das der Port den die HA-Bridge braucht, nicht von von einem anderen Dienst wie einem HTTP Server benutzt wird. Eine andere Möglichkeit die SmartHome Tasten zu belegen außer Hue kenne ich persönlich auch nicht, da wird sich wohl auch bei Logitech in der Richtung leider nichts tun.

Wenn Probleme gibt einfach melden, eine Anleitung kann ich jetzt auf die Schnelle keine schreiben.
Erst mal HA-Bridge installieren und in Betrieb nehmen.

Dann in IP-Symcon ein Skript z.B. HA-Brige Interface erstellen, dass Dir die Daten aus der HA-Bridge entgegen nimmt. Unter Kerninstanzen -> Webhook einen neuen Webhook anlegen der auf das Skript HA-Brige Interface zeigt z.B. /hook/habridge

Ein Skript sind in groben Zügen so aus


<?
if(isset($_GET["state"]) && isset($_GET["light"]))
{
IPS_LogMessage("WebHook HA-Bridge", print_r($_GET, true));
$state = $_GET["state"];
switch ($_GET["light"]) {

case "RGB1":
	
	if($state == "on")
	{
		SetValue(29407 /*[Geräte\HA-Bridge\HA Status]*/, true);
	}
	else
	{
		SetValue(29407 /*[Geräte\HA-Bridge\HA Status]*/, false);
	}
    
    break;
case "RGB2":
	
	if($state == "on")
	{
		I2GRGB_Set_Status(29056, true); // Objekt ID ergänzen
	}
	else
	{
		I2GRGB_Set_Status(29056, false); // Objekt ID ergänzen
	}
    
    break;
case "RGB3":
	
	if($state == "on")
	{
		I2GRGB_Set_Status(29056, true); // Objekt ID ergänzen
	}
	else
	{
		I2GRGB_Set_Status(29056, false); // Objekt ID ergänzen
	}
    
    break;
case "RGB4":
	
	if($state == "on")
	{
		I2GRGB_Set_Status(29056, true); // Objekt ID ergänzen
	}
	else
	{
		I2GRGB_Set_Status(29056, false); // Objekt ID ergänzen
	}
    
    break;
case "Arbeitszimmer":
	
	if($state == "on")
	{
		HM_WriteValueBoolean(21790 /*[Geräte\Homematic\Räume\Büro\Arbeitszimmer Licht]*/, "STATE", true); // Objekt ID ergänzen
	}
	else
	{
		HM_WriteValueBoolean(21790 /*[Geräte\Homematic\Räume\Büro\Arbeitszimmer Licht]*/, "STATE", false); // Objekt ID ergänzen
	}
    break;
case "Beamer":
	if($state == "on")	{
		HM_WriteValueBoolean(50719 /*[Geräte\Homematic\Räume\Wohnzimmer\Beamer Schaltaktor]*/, "STATE", true); // Objekt ID ergänzen
	}
	else
	{
		HM_WriteValueBoolean(50719 /*[Geräte\Homematic\Räume\Wohnzimmer\Beamer Schaltaktor]*/, "STATE", false); // Objekt ID ergänzen
	}
    break;
case "Subwoofer":
	
	if($state == "on")
	{
		HM_WriteValueBoolean(14559 /*[Geräte\Homematic\Räume\Wohnzimmer\Subwoofer Schaltaktor]*/, "STATE", true); // Objekt ID ergänzen
	}
	else
	{
		HM_WriteValueBoolean(14559 /*[Geräte\Homematic\Räume\Wohnzimmer\Subwoofer Schaltaktor]*/, "STATE", false); // Objekt ID ergänzen
	}
    
    break;
case "Couch":
	
	if($state == "on")
	{
		IPS_RunScript(48657 /*[Geräte\Homematic\Homematic Scripte\Erdgeschoss\Wohnzimmer\Deckenlampe Couch\Deckenlampe Couch Licht an]*/);
	}
	else
	{
		IPS_RunScript(30712 /*[Geräte\Homematic\Homematic Scripte\Erdgeschoss\Wohnzimmer\Deckenlampe Couch\Deckenlampe Couch Licht aus]*/);
	}
    
    break;
case "Esstisch":
	
	if($state == "on")
	{
		IPS_RunScript(56100 /*[Geräte\Homematic\Homematic Scripte\Erdgeschoss\Wohnzimmer\Deckenlampe Esstisch\Deckenlampe Esstisch Licht an]*/);
	}
	else
	{
		IPS_RunScript(42299 /*[Geräte\Homematic\Homematic Scripte\Erdgeschoss\Wohnzimmer\Deckenlampe Esstisch\Deckenlampe Esstisch Licht aus]*/);
	}
    
    break;
case "Fonzo":
	
	if($state == "on")
	{
		HM_WriteValueBoolean(21790 /*[Geräte\Homematic\Räume\Büro\Arbeitszimmer Licht]*/, "STATE", true); // Objekt ID ergänzen
	}
	else
	{
		HM_WriteValueBoolean(21790 /*[Geräte\Homematic\Räume\Büro\Arbeitszimmer Licht]*/, "STATE", false); // Objekt ID ergänzen
	}
    
    break;							

}
}
elseif(isset($_GET["intensity"]) && isset($_GET["light"]))
{
	$intensity = $_GET["intensity"];
	switch ($_GET["light"]) {

case "RGB1":
	$intensity = $intensity/100;
	SetValue(26592 /*[Geräte\HA-Bridge\HA RGB Intensity]*/, $intensity);
    
    break;
case "RGB2":
	
	// Befehl zur Hellligkeit einstellen
    
    break;
case "RGB3":
	
	// Befehl zur Hellligkeit einstellen
    
    break;
case "RGB4":
	
	// Befehl zur Hellligkeit einstellen
    
    break;
case "Couch":
	//SetValue(35921 /*[Geräte\HA-Bridge\Intensity]*/, $intensity);
	$intensity = $intensity/100;
	
	HM_WriteValueFloat(19602 /*[Geräte\Homematic\Räume\Wohnzimmer\Deckenlampe Couch:4]*/, "LEVEL", $intensity); //Gerät auf x% dimmen
 	if($intensity > 0)
	{
		SetValueBoolean(25149 /*[Geräte\Homematic\Räume\Wohnzimmer\Deckenlampe Couch\Zustand]*/, true);
	}
	else
	{
		SetValueBoolean(25149 /*[Geräte\Homematic\Räume\Wohnzimmer\Deckenlampe Couch\Zustand]*/, false);
	}
    
    break;
case "Esstisch":
	//SetValue(35921 /*[Geräte\HA-Bridge\Intensity]*/, $intensity);
	$intensity = $intensity/100;
	HM_WriteValueFloat(29883 /*[Geräte\Homematic\Räume\Wohnzimmer\Deckenlampe Esstisch:4]*/, "LEVEL", $intensity); //Gerät auf x% dimmen
 	if($intensity > 0)
	{
		SetValueBoolean(52454 /*[Geräte\Homematic\Räume\Wohnzimmer\Deckenlampe Esstisch\Zustand]*/, true);
	}
	else
	{
		SetValueBoolean(52454 /*[Geräte\Homematic\Räume\Wohnzimmer\Deckenlampe Esstisch\Zustand]*/, false);
	}
	
    
    break;							
}
}
elseif(isset($_GET["color"]) && isset($_GET["light"]))
{
$color = $_GET["color"];
SetValue(53466 /*[Geräte\HA-Bridge\Color Test]*/, $color);
}

elseif(isset($_GET["state"]) && isset($_GET["colorred"]) && isset($_GET["colorgreen"]) && isset($_GET["colorblue"]) && isset($_GET["light"]))
{
	$state = $_GET["state"];
	$R = $_GET["colorred"];
	$G = $_GET["colorgreen"];
	$B = $_GET["colorblue"];
	switch ($_GET["light"]) {

case "RGB1":
	
	if($state == "on")
	{
		I2GRGB_Set_Status(29056, true); // Objekt ID ergänzen
		// Befehl für Farbe
		I2GRGB_Set_RGB(12345, $R, $G, $B); // 12345 Ist die Objekt ID der Instanz
	}
	else
	{
		I2GRGB_Set_Status(29056, false); // Objekt ID ergänzen
	}
	
    
    break;
case "RGB2":
	
	if($state == "on")
	{
		I2GRGB_Set_Status(29056, true); // Objekt ID ergänzen
		// Befehl für Farbe
		I2GRGB_Set_RGB(12345, $R, $G, $B); // 12345 Ist die Objekt ID der Instanz
	}
	else
	{
		I2GRGB_Set_Status(29056, false); // Objekt ID ergänzen
	}
	
    
    break;
case "RGB3":
	
	if($state == "on")
	{
		I2GRGB_Set_Status(29056, true); // Objekt ID ergänzen
		// Befehl für Farbe
		I2GRGB_Set_RGB(12345, $R, $G, $B); // 12345 Ist die Objekt ID der Instanz
	}
	else
	{
		I2GRGB_Set_Status(29056, false); // Objekt ID ergänzen
	}
    
    break;
case "RGB4":
	
	if($state == "on")
	{
		I2GRGB_Set_Status(29056, true); // Objekt ID ergänzen
		// Befehl für Farbe
		I2GRGB_Set_RGB(12345, $R, $G, $B); // 12345 Ist die Objekt ID der Instanz
	}
	else
	{
		I2GRGB_Set_Status(29056, false); // Objekt ID ergänzen
	}
	
    
    break;						
}
}
else
{
	echo "Das Skript kann nur durch einen Webhook aufgerufen werden";
}

// I2GRGB_Set_RGB(Int $R, Int $G, Int $B)
// I2GRGB_Set_Status(Bool $value)
// list($r, $g, $b) = $this->Hex2RGB($Value);
//	            $this->Set_RGB($r, $g, $b);

function Hex2RGB($Hex)
	{
		$r = (($Hex >> 16) & 0xFF);
		$g = (($Hex >> 8) & 0xFF);
		$b = (($Hex >> 0) & 0xFF);	
	return array($r, $g, $b);
	}
	
	
?>

In der HA-Bridge must Du dann eine URL eintragen bei einem Befehl. Der befehl wird dann aufgerufen und damit IP-Symcon getriggert.
z.B.


http://192.168.1.20:3777/hook/habridge?light=RGB1&colorred=255&colorgreen=255&colorblue=255&state=on

Die Variablen in dem Skript bzw. Geräte must Du logischerweise für Dich anpassen, ich weis ja nicht was Du konkret schalten willst. Ansonsten fragen falls es Probleme gibt.

Was Du zusätzlich beachten must ist der Logitech Hub kann nur eine Hue Bridge erkennen, d.h. es funktioniert nicht mit HA-Bridge und Hue-Bridge.
Um das zu lösen must Du die Geräte der HUE-Bridge in der HA-bridge alle einlesen und auf Passtrough stellen. Dann nimmst du die Hue-Bridge kurz vom Ntz und die HA-Bridge ins Netz und lässt den Harmony Hub nach der HA Bridge suchen und koppelst die HA-Bridge an den Logitech Hub. Dann kannst Du die Hue-Bridge wieder in Betrieb nhemen. Jetzt sollte alles was vom Logitech Hub gesendet wird immer an die HA-Bridge gesendet werden und von dort an die HUE-Bridge durchgereicht werden. So kannst Du also alles schalten die geräte der HA Bridge und der Hue Bridge.

Alternative zu Passtrough in der HA-Bridge ist es einfach alles was in der HA-Bridge ankommt an IP-Symcon durchzuleiten und dann die Hue Lampen aus IP-symcon zu schalten.

Vielen Dank Fonzo für deine tolle Anleitung

Hallo Fonzo

Ich habe jetzt mal alles so probiert, wie du es beschrieben hast. Die HA Bridge läuft und wurde auch schon vom Harmony Hub erkannt und aktiviert. Ich habe in der HA Bridge mal ein Test device angelegt, welches mir auch in der Harmony Umgebung angezeigt wird. Wenn ich jetzt allerdings von der HA Bridge aus einen Test an IPS sende, dann wird das Script in IPS nicht aktiviert. Kann es sein, dass das Script nicht erreicht wird? Ich hatte Probleme mit der Erstellung des Webhooks da mir immer „hook muss mit /hook/ als Präfix beginnen“ angezeigt wurde. Ich habe daraufhin in der Instanzkonfiguration die neue Instanz /hook/ benannt und es wurde übernommen.

Wie kann ich denn nun alle Geräte von der Hue Bridge übernehmen und auf Passthrough stellen?

Besten Dank für deine Hilfe

Wenn der Harmony Hub das Gerät der HA-Bridge gefunden hat, hast Du schon die wichtigste Hürde genommen.

Kannst Du mal bitte den Inhalt Deines Webhook Skripts posten sowie einen Screenshot von den Einstellungen der HA Bridge sowie ein Screenshot der Webhook Instanz. Dann kann man hoffentlich den Einstellungsfehler schnell lokalisieren.

Hi Fonzo

Danke für die Schnelle Antwort. Ich habe, wie gesagt, einfach mal ein Testdevice angelegt und versuchte in IPS eine Testvariable zu beschreiben. Meine Einstellungen in der HA Bridge schauen so aus:

Dein Script habe ich mal so gelassen. Lediglich im ersten Case (RGB1) habe ich versucht eine Boolean Variable zu beschreiben.

anbei noch die weiteren Screenshots:



Das ist nicht korrekt schau mal so:

Der Hook ist auch falsch. Wenn Du mehrere Hooks anlegen solltest funktiont das dann nicht. Ein Webhook fängt bei IP-Symcon immer mit /hook an danach kannst Du das individuell anpassen. Es würde sich z.B. /hook/habridge anbieten.

In der HA Bridge muss dann

http://<IP Adresse IP Symcon>:3777/hook/habridge

stehen.

Besten Dank es hat funktioniert! Ich kann nun eine Testvariable beschreiben. Wenn ich allerdings im im HA Bridge Script in IPS versuche Variablen von Homematik oder auch Hue Lampen Aktoren zu beschreiben (im konkreten Fall Lampen) dann ändert sich nichts. Es schein so als wenn die Variablen der Aktoren wieder überschrieben werden. Wenn ich diese Variablen in IPS editiere ändert sich zwar der Wert aber es ändert sich nichts am Status der Lampen. D.h das Licht bleibt an oder aus, je nachdem welcher Status vorher war. Kann es sein, dass ich Variablen der Homematik ( im konkreten Fall ein Dimm Autor) oder Hue Lampen nicht beschreiben kann?

Vielen Dank für deine Hilfe

Das ist auch richtig!
Variablen zeigen den Status eines Gerätes an. Einfach den Wert ändern, ändert nur die Anzeige.
Du solltest wirklich die Grundlagen durcharbeiten.
In diesem Fall ‚Statusvariablen‘:
Variablen — IP-Symcon :: Automatisierungssoftware
Michael

Wie Nall-Chan schon geschrieben hat, kannst Du nur selbst erstellte Variablen beschreiben. Geräten gibst Du ein Befehl, die Variable ändert sich dann durch das Gerät. Das macht auch Sinn, da Du z.B. bei Funksystemen wie Homematic ja sicher stellen must, dass der Funkbefehl auch angekommen ist und vom Gerät quittiert wurde. Es macht also kein Sinn die Anzeige (Variable) zu ändern, dies macht das Gerät selber nachdem der Befehl erfolgreich ausgeführt wurde und eine Rückmeldung vorliegt.

Homematic schaltest Du per Skript z.B. über HM_WriteValueBoolean.


//Gerät einschalten
HM_WriteValueBoolean(12345, "STATE", true);

Hue entsprechend über HUE_SetValue


HUE_SetValue(12345, "STATE", true); // ObjektID 12345 anpassen

Okay, danke das ist mir jetzt klar. Wenn ich allerdings einen Homematic Dimmaktor unter case „Licht_1“ beschreiben möchte, dann tut sich nichts: Das Script wird ausgeführt und geht auch in den richtigen Case Befehl. Das steht in meinem Script:

so sieht mein Objektbaum aus.

Wie kann ich denn Systemvariablen abfragen um dann ein Script zu schalten?

Nein, ist dir nicht :wink:
Du versuchst noch immer die Variable zu setzen. Nur halt mit HM_WriteValueFloat.
Da muss die InstanzID (ObjekteID) vom Aktor rein und nicht die von der Variable.
Michael

Okay Dankeschön

Da müste auch die Object ID der Homematic Instanz stehen also in dem Fall 14101.

Es funktioniert nun. Wie kann ich denn den Status einer Systemvariable abfragen? Ich möchte abhängig vom Boolean Status einer Systemvariable im HA-Bridge Script einen anderen Action Script starten.

Was meinst du mit Systemvariable?
In IPS sind das die hier: Systemvariablen — IP-Symcon :: Automatisierungssoftware

Oder willst du einen Wert von einer IPS Variable aus dem Objektbaum haben? GetValue — IP-Symcon :: Automatisierungssoftware

Michael

Was willst Du denn genau machen? Wenn Du einen Wert von der HA Bridge übergeben willst must Du auf der Seite von der HA-Bridge einen Platzhalter einfügen.
Beispiel Helligkeit:


http://192.168.1.20:3777/hook/habridge?light=RGB1&hue=${intensity.percent}

In IP-Symcon greifst Du dann auf den Wert zu mit:


if(isset($_GET["hue"])
{
$hue = $_GET["hue"];
}

Beispiel Farbwert:


http://192.168.1.20:3777/hook/habridge?light=RGB1&colorred=${color.r}&colorgreen=${color.g}&colorblue=${color.b}&state=on

In IP-Symcon greifst Du dann auf die Werte zu mit


if(isset($_GET["colorred"] && isset($_GET["colorgreen"] && isset($_GET["colorblue"])
{
$red = $_GET["colorred"];
$green = $_GET["colorgreen"];
$blue = $_GET["colorblue"];
}

Ich wollte nur den Wert einer Variable (Boolean) vom Objektbaum im Case des HA Scripts abfragen: Ich habe folgenden Script geschrieben, der leider nicht funktioniert. Der Case wird immer ausgeführt obwohl die Boolean Variable mit der ID 38425 immer True ist. Was mache ich da falsch?

$Imac = GetValueBoolean(38425);

case „Steckdose_1“: // IMac Steckdose von der HA Bridge schalten

if($state == "on" and $Imac == "off")
{
    SetValue(38425, true); // Variable IMac schalten   
    IPS_RunScript(11357); // Action Script IMac aktivieren  
}

break;