korrekten Variablenstatus der Harmony Hub im Apple Homekit anzeigen

Hallo liebe Community

Ich nutze die Apple HomeKit Bridge und beschreibe Variablen, die Aktionen meines harmony Hub starten. Sobald ich allerdings starte, dauert es ewig lange, bis die entsprechende Aktivität im Harmony Hub gestartet wird. Auf der Logitech Fernbedienung funktioniert die Aktion allerdings und startet sofort. Nach ca 1 Minute starten dann die einzelnen Aktionen. Es wird mir allerdings im Homekit immer angezeigt, dass die Aktion (z.B Fernsehen) aus ist, da die beschriebene Variable gleich wieder auf o gesetzt wird. Nun meine Fragen:

Kann ich den aktuellen Status meiner Harmony Hub Aktivitäten auslesen und in Homekit anzeigen lassen? (Ich möchte dass Homekit anzeigt, wenn zum Beispiel die Aktivität „Fernseher“ läuft, egal ob ich von der Fernbedienung oder von Siri gestartet habe.
Wieso dauert es um soooo viel länger bis eine Aktivität gestartet wird, wenn ich diese über Homekit (Siri) auslöse?
Wie heißt denn der korrekte Case wenn ich über Homekit einen „Switch ($_IPS[‚SENDER‘])“ im Skript auslösen möchte? Wenn ich nur die verknüpfte Variable des scripts beschreibe funktioniert es leider nicht.

Besten Gruß und Danke für die Hilfe

Dafür must Du für jede Aktion eine Boolean Varibale anlegen die diese Aktion startet und bei aus PowerOff durchführt. Diese Variable must Du dann in Siri, Alexa usw. im Konfigurator einbinden.

Du kannst in dem Skript in der oberen Zeile (Bereich Config) die Objekt ID für den Harmony Hub (Splitter) anpassen und dann das Skript ausführen, dann sollten alle notwendigen Variablen angelegt werden und sich auch aktualisieren wenn sich eine Aktivität ändert.


<?

 // Config
 $harmony_hub_id = 10603 /*[Logitech Harmony Hub Wohnzimmer]*/; // object id Harmony Hub Splitter
 
 // Config End
 
 // --
 $parent = IPS_GetParent($_IPS['SELF']);
 $activities = HarmonyHub_GetAvailableAcitivities($harmony_hub_id);

//create category
$VoiceControlCategoryID = @IPS_GetObjectIDByIdent("VoiceControlLogitech", $parent);
if ($VoiceControlCategoryID === false)
	{
		$VoiceControlCategoryID = IPS_CreateCategory();
		IPS_SetName($VoiceControlCategoryID, "Logitech Harmony Hub Activities Voice Control");
		IPS_SetIdent($VoiceControlCategoryID, "VoiceControlLogitech");
		IPS_SetInfo($VoiceControlCategoryID, "set activities via voice control");
		IPS_SetParent($VoiceControlCategoryID, $parent);
	}
//create variable
foreach ($activities as $activityname => $activityid)
			{
				if($activityid != -1)
				{
					$VarID = @IPS_GetObjectIDByIdent($activityid, $VoiceControlCategoryID);
					if ($VarID === false)
					{
						$VarID = IPS_CreateVariable(0);
						IPS_SetName($VarID, $activityname);
						IPS_SetParent($VarID, $VoiceControlCategoryID);
						$ident = str_replace('-', '', $activityid);
						IPS_SetIdent($VarID, $ident);
					}
					IPS_SetVariableCustomProfile($VarID, "~Switch");
					// create action script
					$ScriptID = CreateActivityScript($activityid, $VarID, $harmony_hub_id, $activityname);
					IPS_SetVariableCustomAction($VarID, $ScriptID);
					// set event
					CreateEvent($activityid, $ScriptID, $harmony_hub_id, $activityname);
				}
			}


function CreateActivityScript($activityid, $VarID, $harmony_hub_id, $activityname)
	{
		$Ident = "Script_".str_replace('-', '', $activityid);
		$ScriptID = @IPS_GetObjectIDByIdent($Ident, $VarID);
								
		if ($ScriptID === false)
			{
				$ScriptID = IPS_CreateScript(0);
				IPS_SetName($ScriptID, $activityname."_actionscript");
				IPS_SetParent($ScriptID, $VarID);
				IPS_SetIdent($ScriptID, $Ident);
				IPS_SetHidden($ScriptID, true);
				$content = '<?
	Switch ($_IPS[\'SENDER\']) 
    { 
	Case "Variable":
		$parent_var = IPS_GetParent($_IPS[\'SELF\']);
		$activity_var = IPS_GetObject($parent_var)["ObjectIdent"];
		if($_IPS[\'VALUE\'] == $activity_var)
		{
			IPS_LogMessage("Harmony Hub", "Action ". $_IPS[\'VALUE\'] . "detected");
			SetValue($parent_var, true);
		}
		else
		{
		 	SetValue($parent_var, false);
		}
		
        break; 
	Case "WebFront": 	
		SetValue($_IPS[\'VARIABLE\'], $_IPS[\'VALUE\']);			           
	    if ($_IPS[\'VALUE\']) 
	        { 
	            // einschalten
				HarmonyHub_startActivity('.$harmony_hub_id.', '.$activityid.');  
	        } 
	    else 
	        { 
	            //ausschalten
				HarmonyHub_startActivity('.$harmony_hub_id.', -1);  
	        } 	
		break;
	Case "VoiceControl": 	
		$parent_var = IPS_GetParent($_IPS[\'SELF\']);
		SetValue($parent_var, $_IPS[\'VALUE\']);
		if($_IPS[\'VALUE\'])
		{
			// einschalten
			HarmonyHub_startActivity('.$harmony_hub_id.', '.$activityid.');
		}
		else
		{
		 	//ausschalten
			HarmonyHub_startActivity('.$harmony_hub_id.', -1);
		}	
		break;					
	}	 	
?>';
				
				IPS_SetScriptContent($ScriptID, $content);
			}
		return $ScriptID;
	}


function CreateEvent($activityid, $ScriptID, $harmony_hub_id, $activityname)
{
$Ident = "Event_".str_replace('-', '', $activityid);
$eid = @IPS_GetObjectIDByIdent($Ident, $ScriptID);
if ($eid === false)
			{
			$eid = IPS_CreateEvent(0);
			IPS_SetEventTrigger($eid, 1, IPS_GetObjectIDByIdent("HarmonyActivity", $harmony_hub_id));
			IPS_SetParent($eid, $ScriptID);         //Ereignis zuordnen
			IPS_SetEventActive($eid, true);             //Ereignis aktivieren
			}
}

?>

Ob das dann auch mit dem Status in der Home App übereinstimt must Du mal testen.

Das ist eine gute Frage, das müste ich selber mal testen. Aber eigentlich sollte das ja genauso funktionieren wie wenn man das direkt in IP-Symcon schaltet.

Vielen Dank das probiere ich mal

Da war noch ein Fehler im Skript, ich habe das oben ausgebessert. Du müstest das dann noch mal mit dem neuen Skript probieren und Rückmeldung geben ob das funktioniert.

Es werden bei mir die neu angelegten Variablen nicht aktualisiert, sobald eine Aktion gestartet wurde. Die jeweiligen Skripte werden ausgeführt, sobald sich eine Änderung der Variable " Harmony Activity " ergibt. Es aktualisiert sich nur die neu angelegte Variable.

Danke

Es werden bei mir die neu angelegten Variablen nicht aktualisiert, sobald eine Aktion gestartet wurde. Die jeweiligen Skripte werden ausgeführt, sobald sich eine Änderung der Variable " Harmony Activity " ergibt. Es aktualisiert sich nur die neu angelegte Variable „Power OFF“

Wie sieht denn der Inhalt des Skripts jetzt bei Dir aus? Kannst Du da mal ein Beispiel von einer Variable posten. Die Activity am Harmony Hub (Splitter) aktualisiert sich aber wenn Du eine Harmony Aktion ausführst?

Hi Fonzo

Ja die einzelnen Scripts werden bei Variablenänderung der Variable „Harmony Activity“ ausgeführt aber es ändert sich nichts am Status der Variable obwohl Fernsehen auf der Fernbedienung gestartet wurde und dies auch bei Harmony Activity angezeigt wird. Wenn keine Aktion aktiv ist, und ich die Variable „Fernsehen“ in IP_Symcon auf „True“ setze, dann passiert nichts. Es wird keine Aktion im Harmony Hub gestartet. Das selbe auch, wenn ich über Web Front die Variable auf True setze.

So sieht mein erstelltes Script bei der Aktion „Fernsehen“ aus:

<?
Switch ($_IPS[‚SENDER‘])
{
Case „Variable“:
$parent_var = IPS_GetParent($_IPS[‚SELF‘]);
$activity_var = „-“.IPS_GetObject($parent_var)[„ObjectIdent“];
if($_IPS[‚VALUE‘] == $activity_var)
{
SetValue($parent_var, true);
}
else
{
SetValue($parent_var, false);
}

    break; 
Case "WebFront":     
    SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);                       
    if ($_IPS['VALUE']) 
        { 
            // einschalten
            HarmonyHub_startActivity(59881, 33035355);  
        } 
    else 
        { 
            //ausschalten
            HarmonyHub_startActivity(59881, -1);  
        }     
    break;            
}         

?>

So es waren noch Fehler im Ausgangsskript s.o. Es hat VoiceControl gefehlt, was für die Sprachsteuerung wichtig ist und beim Prüfen auf die Aktivität war ein Fehler im Skript, da der Wert anders übergeben wird, daher wurde der Wert auch wohl nicht gesetzt. Kannst Du am besten nochmals alle erstellten Aktions Schaltvariablen, die durch das Skript erstellt worden sind, löschen und das Skript s.o. noch mal neu ausführen, um alles noch mal neu sauber zu erstellen. Sorry für die Umstände, ich hoffe aber das der Fehler jetzt gefunden ist. Gib dann mal Rückmeldung ob es geht oder nicht.

Juhuuuuuuu! Es hat funktioniert! Es kann nun alles mit Siri angesprochen werden und die Aktionen werden ausgeführt.
Vielen Dank für deine Unterstützung. Du bist unbezahlbar für die Symcon, Mediola, Homematik Community!