Logitech Harmony Ultimate & Smart Control Hub library

Danke für die Info.

ich hab die gleichen Probleme wie du, bei mir sind die IDs bei den Aktivitäten teilweise 7 oder 8 Zeichen lang.
Jetzt stehe ich gerade auf dem Schlauch wie ich die filtern soll. Wenn ich die Abfrage auf >=7 stelle dann deklariert er die Activitäten als Geräte.

kann du deine Datei mal uploaden?

schöne Grüße
Stephan

Schick mal deine Mailadresse via PN.

Gesendet von meinem Nexus 5 mit Tapatalk

Hallo Zusammen,

wie ist denn der aktuelle Stand der Dinge?

Laufen die Skripts? Sind die Probleme behoben?

Würde es gern bei mir ausprobieren - muss ich was beachten?

Danke für das Feedback.

LG

Also bei mir läuft es problemlos. Allerdings warte ich noch sehnsüchtig darauf, dass jemand die freigegeben API irgendwie einbinden kann.

Ich hab leider so gar keine Zeit bislang gehabt, obwohl mit die Beta-Apis schon seit Februar zur Verfügung stehen. Leider sind Basics im Neuen Haus bislang wichtiger… aber die Scripte hier liefen bei mir im alten Haus einwandfrei, ich werde sie wohl am Wochenende erstmal im neuen Haus installieren.

Hi Hagbard,

würdest du uns dieses Sxript zur Verfügung stellen? Ist doch recht schwierig alle Geräte und Aktionen komplett manuell anzulegen inkl. Scripte.

Gruß
Benjamin

Das würde ich gerne tun, aber da es nicht mehr ganz „frisch“ ist will ich es erst probieren. Mein Problem dabei nur: Auf dem neuen IPS das ich eingerichtet habe wollen die Scripte nicht mehr out-of-the-box… ich hatte damals auch irgendwo eine Korrektur durchgeführt (im Harmony_Read??) aber ich finde es nicht mehr und anscheinend ließt er jetzt die Config nur halb.

Hat jemand einen Tipp wo man im Script V0.6 noch was anpassen muss damit alles läuft?

// EDIT

Habs schon gefunden, der GetConfig-Befehl schneidet das Ende des Transport-Protokolls nicht ab und deswegen lief mein Json-Decoder nicht mehr… hab es korrigiert. Ich passe die Scripte zum Erstellen minimal an, damit man die ID’s oben eingeben kann und dann stelle ich sie hier mal rein. Sind nicht schön, weil nur quick&dirty geschrieben, funktionieren aber…

So, hier die Scripte. Tschuldigt das sie nicht „schön“ sind, man muss aber bei beiden nur die IDs ganz oben mit seinen eigenen befüllen…

Dies Script erstellt die Geräte und alle Befehle direkt in der Kategorie wo sich das Script befindet, also nach Möglichkeit in eine eigene Kategorie „Geräte“ oder so kopieren:

<?
//ID des Client-Socket hier einstellen
$csockID = 32529 /*[Harmony Wohnzimmer]*/ ;
//ID der Harmony Config-Variable
$harmonyconfig = 31769 /*[Geräte\Harmony\Wohnzimmer\Harmony Config]*/;

include("Harmony_XMPP.ips.php");
$debug = true;
Harmony_getConfig();
$jsonstring = GetValueString($harmonyconfig );
$js = substr($jsonstring,0, strripos($jsonstring, "]]></oa></iq>"));
$obj = json_decode($js, true);
//var_dump($obj);
$activity[] = $obj["activity"];
//var_dump ($activity);
$device[] =  $obj["device"];
//var_dump ($device);
foreach ($device as $onedevice) {
foreach ($onedevice as $devices) {
$NeueInstance = IPS_CreateCategory();
IPS_SetName($NeueInstance, $devices["label"]);
//IPS_SetInfo($NeueInstance, $devices['deviceTypeDisplayName']);
IPS_SetInfo($NeueInstance, $devices["id"]);
//IPS_SetIcon($NeueInstance, $Quellobjekt['ObjectIcon']);
//IPS_SetPosition($NeueInstance, $Quellobjekt['ObjectPosition']);
//IPS_SetHidden($NeueInstance, $Quellobjekt['ObjectIsHidden']);
//IPS_SetIdent($NeueInstance, $Quellobjekt['ObjectIdent']);
IPS_SetParent($NeueInstance, IPS_GetParent($_IPS['SELF']));
//echo $devices["label"]."
";
$controllGroups = $devices["controlGroup"];
foreach ($controllGroups as $congroup) {
$NeueCG = IPS_CreateCategory();
IPS_SetName($NeueCG, $congroup["name"]);
IPS_SetParent($NeueCG, $NeueInstance);
$commandos = $congroup["function"];
foreach ($commandos as $commando) {
$NeuesScript = IPS_CreateScript(0);
IPS_SetName($NeuesScript, $commando["label"]);
$befehl = json_decode($commando["action"], true);
//echo $befehl["command"];
IPS_SetParent($NeuesScript, $NeueCG);
$fh = fopen(IPS_GetKernelDir()."scripts\\".$NeuesScript.".ips.php", 'w') or die("can't open file");
$zeile = "<?include(\"Harmony_XMPP.ips.php\");CSCK_SetOpen(".$csockID." , true);IPS_ApplyChanges(".$csockID.");Harmony_sendCommand(\"".$devices["id"]."\", \"".$befehl["command"]."\");CSCK_SetOpen(".$csockID." , true);IPS_ApplyChanges(".$csockID.");?>";
fwrite($fh, $zeile);
fclose($fh);
$ScriptPath = $NeuesScript.".ips.php";     //Skriptdatei
IPS_SetScriptFile($NeuesScript, $ScriptPath);

}

}

}
}
//return;
?>

Und das hier erstellt nach gleichem Muster in der Kategorie wo es liegt alle Activities:

<?
//ID der Harmony Config-Variable
$harmonyconfig = 31769 /*[Geräte\Harmony\Wohnzimmer\Harmony Config]*/;
// ID des Client-Socket
$clsockID = 32529 /*[Harmony Wohnzimmer]*/;



include("Harmony_XMPP.ips.php");
$debug = true;
Harmony_getConfig();
$jsonstring = GetValueString($harmonyconfig );
$js = substr($jsonstring,0, strripos($jsonstring, "]]></oa></iq>"));
$obj = json_decode($js, true);
//$obj = $jsonstring;
var_dump($obj);
$activity[] = $obj["activity"];
//var_dump ($activity);
$device[] =  $obj["device"];
//var_dump ($device);
foreach ($activity as $oneactivity) {
foreach ($oneactivity as $act) {
$label = $act["label"];
$suggestedDisplay = $act["suggestedDisplay"];
$id  = $act["id"];


$activityTypeDisplayName  = $act["activityTypeDisplayName"];
$controlGroup  = $act["controlGroup"];
$isTuningDefault  = $act["isTuningDefault"];
$sequences  = $act["sequences"];
$activityOrder  = $act["activityOrder"];
$fixit  = $act["fixit"];
$type  = $act["type"];
$icon  = $act["icon"];
$baseImageUri  = $act["baseImageUri"];
//var_dump ($act);

$NeuesScript = IPS_CreateScript(0);
IPS_SetName($NeuesScript, $label);
IPS_SetParent($NeuesScript, IPS_GetParent($_IPS['SELF']));
$fh = fopen(IPS_GetKernelDir()."scripts\\".$NeuesScript.".ips.php", 'w') or die("can't open file");
$zeile = "<?include(\"Harmony_XMPP.ips.php\");CSCK_SetOpen($clsockID, true);IPS_ApplyChanges($clsockID);Harmony_startActivity(\"".$id."\");CSCK_SetOpen($clsockID , true);IPS_ApplyChanges($clsockID );?>";
fwrite($fh, $zeile);
fclose($fh);
$ScriptPath = $NeuesScript.".ips.php";     //Skriptdatei
IPS_SetScriptFile($NeuesScript, $ScriptPath);
}
}
return;
?>

Super,

vielen Dank. Werde ich mal übers Wochenende bei mir testen und gebe Bescheid wie es gelaufen ist :wink:

Gruß
Benjamin

Hi Hagbard,

so habe jetzt mal deine beiden Skripte bei mir getestet. Liefen soweit einwandfrei durch, mir sind noch 2 „Fehler“ aufgefallen:

  1. Lässt man die Skript für die Aktivitäten mehrmals laufen, erstellt es dublikate.

  2. Der Client Socket ist leer für die erstellten Aktivitäten. Ich musste in jeder Aktivität die Client Socket ID manuel pflegen.

Ansonten super Sache!

Vielen Dank.

Gruß
benjamin

Ja, beide Scripte erstellen duplikate, sie erstellen einfach 1:1 was aus der Config kommt. Ich hatte mir schon mal kurz Gedanken gemacht wie ein Update-Script aussehen müsste, dann aber wegen anderer Themen verworfen.

bzgl. der Client Socket-ID, schaust du da bitte nochmal ob du da oben in der Zeile 5 einen Fehler hast, ggf Semikolon vergessen oder sowas? Ich hab das Script 1:1 nochmal probiert, funktioniert wunderbar mit ID.

Echt Gutes Script ,
vielen Dank dafür .

Hi zusammen,

hat schon jemand das Script auf einem Raspberry laufen ?

Hab folgende Meldung wo ich nicht weiter komme…

Jemand ne Idee ?

-> Checking for User Auth Token…

Notice: Undefined variable: _IPS in /usr/share/symcon/scripts/Harmony_XMPP.ips.php on line 228
Parameter type of ID does not match in /usr/share/symcon/scripts/Harmony_XMPP.ips.php on line 228Parameter type of ParentID does not match in /usr/share/symcon/scripts/Harmony_XMPP.ips.php on line 233-> Retrieving Auth Token from My Harmony Account Server:
–> UserAuthToken: ZW8C5fsadffsdy1lcjjLtxMSpIUuHfBJ6FfasfuBVW0vYXgPSmIY24SzresgMhDkrRwoTmshntLQ

Hat es von Euch schon jemand geschafft funktionierende Befehle z.B. an einen FireTV von IPS aus zu schicken?

In der Harmony_XMPP ist folgende Funktion zum Senden von Befehlen enthalten


function Harmony_sendCommand($deviceID, $command) {
   $iqString = "<iq type='get' id='5e518d07-bcc2-4634-ba3d-c20f338d8927-2'><oa xmlns='connect.logitech.com' mime='vnd.logitech.harmony/vnd.logitech.harmony.engine?holdAction'>action={\"type\"::\"IRCommand\",\"deviceId\"::\"$deviceID\",\"command\"::\"$command\"}:status=press</oa></iq>";
    XMPP_Send($iqString);
}


Diese Funktion funktioniert so nicht mit Geräten, die z.B. per Bluetooth an den Harmony Hub angebunden sind.
Der gesendete Befehl an den Hub setzt sich dann anders zusammen. Hier wird als type=render statt get benutzt und als status wird erst status=press mit einem timestamp gesendet und danach der gleiche Befehl mit status=release

Der gesendete Code von der Harmony App sieht so aus:


<iq type="render" id="XXXX" from="XXXX"><oa xmlns="connect.logitech.com" mime="vnd.logitech.harmony/vnd.logitech.harmony.engine?holdAction">status=press:action={"command"::"DirectionDown","type"::"IRCommand","deviceId"::"23391483"}:timestamp=0</oa></iq>

<iq type="render" id="XXXX" from="XXXX"><oa xmlns="connect.logitech.com" mime="vnd.logitech.harmony/vnd.logitech.harmony.engine?holdAction">status=release:action={"command"::"DirectionDown","type"::"IRCommand","deviceId"::"23391483"}:timestamp=12</oa></iq>

Bei id und from sendet die Harmony App individuelle Werte. Ob man bei Id und from die Werte von der Harmony App übernehmen kann oder hier individuelle Werte in IPS verwenden kann ist mir unklar. Bisher ist es mir noch nicht gelungen den PHP Code so anzupassen, dass der Befehl genauso ausgeführt wird wie wenn die Harmony App diesen sendet. Hat von Euch einer einen Tipp wie der Code in der Harmony_XMPP anzupassen ist, damit das funktioniert?

Beim FireTV wird daraus ein Dauerbefehl, das stimmt, komischerweise geht es bei der PS3 die ja auch über BT arbeitet…

Ja genau dies beobachte ich auch, dass der Befehl dauerhaft gesendet wird. Bei einem Cursor Befehl läuft dann z.B. der Cursor so lange weiter bis es eben nicht mehr geht.
Ich rufe die Funktion XMPP_Send zwei mal auf, einmal übergebe ich den String mit status=press ein zweites mal rufe ich die Funktion mit status=release auf. Vielleicht liegt es ja daran, dass der Befehl hintereinander an den Socket übergeben wird.

Echt zu blöd das ich im Moment kaum Zeit habe, aber vielleicht erledigt es sich von alleine:
Logitech Harmony Fernbedienungen erhalten Update zur Bedienung von Smart Home-Geräten

Was genaues darüber hab ich aber nicht gefunden , ich wollte meine Rollos mit dem hub schalten , dazu brauch man ne Art dummy oder ? Hat da jemand ne Idee was ich als Gerät hinzufüge , das ich dann mit ips Abfrage und per Script ausführe ?

Das sind gute Neuigkeiten, da der IFTTT Kanal bisher nur mit der Ultimate Home funktionierte, diese ist aber in Deutschland nicht erhältlich und unterscheidet sich von der Ultimate durch einen zusätzlichen Z Wave Chip. Anscheinend geht der IFTTT Kanal jetzt aber auch mit der Ultimate.

Hat jemand von Euch inzwischen Zugang zur Logitech API?