Anhand der online verfügbaren Anweisungen und der inoffiziellen und noch unvollständigen Protokoll Beschreibung, habe ich eine Library mit Funktionen zur Kommunikation mit dem Harmony Ultimate Hub gebastelt.
Damit ist es möglich, die Daten des Hubs und der verbundenen FB in IPS rein zu bekommen und auch Aktivitäten und Apparate über den Hub aus IPS raus zu schalten.
Das ganze ist noch etwas Experimentell. Der XMPP Server im Hub reagiert nicht ganz wie in den Links oben beschrieben. Das könnte an unterschiedlichen Versionen liegen. Daher bin ich sehr an Feedback interessiert.
Die Authentifizierung erfolgt in 2 Schritten. Zuerst muss ein User-spezifischer Token beim myharmony Server angefordert werden. Damit ist dann ein einloggen im XMPP Server möglich. Die Anmeldung beim Server sollte normalerweise in 2 Phasen durchgeführt werden, einmal als Gast und dann als authentifizierter User. Irgendwie ist aber die Kommunikation schon als Gast möglich.
Voraussetzungen sind ein schon konfigurierter Hub und daher auch ein myharmony Account.
Installation:
Wie üblich muss zuerst ein Client Socket angelegt werden mit der IP des Hubs und Port 5222.
Kategorie in IPS anlegen (z.B. „Harmony“)
Lehres Skript in der Kategorie anlegen und den Inhalt des Skripts Harmony_Read.ips.php hinein kopieren (Zip-Datei im Anhang).
Register-Variable anlegen und auf den Client Socket verbinden. Harmony_Read Skript als Target ID setzen.
Harmony_XMPP.ips.php library (Zip-Datei) in das Skript Verzeichnis kopieren.
Harmony_XMPP.ips.php library editieren und darin die Client Socket Instance ID ($HARMONY_CLIENT_INSTANCE_ID) und myharmony Email (login) und Passwort angeben. Die IP wird nicht gebraucht.
in der Harmony Kategorie ein zweites Skript anlegen und Harmony_Init reinkopieren.
Ausführung:
Das Harmony_Init Skript oder die Harmony_init() Funktion sollten am besten vom IPS_Startup aus ausgeführt werden. Die Authentifizierung ist anscheinend nur ein mal nötig.
Die Harmony_formatConfig() Funktion kann dann hilfreich sein, um die IDs der Aktivitäten, Befehle und „Devices“ ausfindig zu machen. Vorher ist unbedingt ein Harmony_getConfig() nötig, um die Config in eine Datei zu schreiben. Die IDs werden unbedingt gebraucht und die aus dem Konfiguration-Output direkt zu lesen kann zur Verzweiflung führen. Ich habe an der Format Funktion lange gearbeitet
Der nächste Schritt wäre automatisch damit eine FB im WF aufzubauen.
Beispiele:
Harmony_getConfig(); // request configuration from Server and format it
Harmony_sendCommand("13831264", "PowerOff"); // TV Samsung - Off
Harmony_startActivity(-1); // Switch all devices from current activity off ("off" button)
Bekannte Probleme:
Die Verbindung zum Client Socket wird häufig unterbrochen. Keine Ahnung warum. Befehle dann noch einmal senden. Das Skript prüft aber, ob das Socket in IPS offen ist und öffnet es ggf.
Manche Befehle werden mehrmals im Config output gelistet
XMPP_getPayload() gibt jetzt ein Array zurück mit Message Typ (startActivityFinished, notify,…), die betroffene Activity ID und Error Codes. Damit kann in IPS eine Aktion getriggert werden, wenn eine Aktivität gestartet wird. Das Harmony_Read skript wurde mit einem Beispiel angepasst.
Harmony_processIQ() startet nun automatisch Harmony_formatConfig() wenn die Antwort des Servers komplett angekommen ist. Damit ist jetzt nur mehr Harmony_getConfig() gebraucht (einmal ausführen reicht oder nach jeder Änderung der Config mit dem myharmony Tool). Die Aktivitäten werden in eine IPS String Variable gespeichert.
Harmony_getActivityFromId($id) gibt den Namen einer Aktivität anhand der ID zurück. Beispiel im Read Skript. Harmony_getConfig() muss einmal vorher ausgeführt sein.
Bei mir wird der Socket aber auch ständig getrennt und wieder verbunden. Werde die Frage mal an anderer Stelle stellen. Vielleicht hat einer ne Idee. Ist schon nervig.
Im Log habe ich auch regelmäßige diese Fehlermeldung
Danke für die Rückmeldung. Die Meldungen sind nicht kritisch. Deine Logging Einstellungen sind etwas sensibler als bei mir. Ich werde es in der nächsten Version korrigieren.
Leider konnte ich auch noch nicht rausfinden, warum das Socket getrennt wird. Ich müsste diese Woche mehr Zeit zum testen haben.
Ich habe die Verbindung des Sockets in den letzten Tagen geloggt. Die Verbindung trennt sich nach exakt einer Minute und wird dann nach 10-12 Sekunden im Durchschnitt wieder aufgesetzt. Ich denke daher, dass der XMPP Server die Verbindung regelmäßig trennt und IPS diese danach wieder aufsetzt. Das kann daran liegen, dass der XMPP Server eine Verbindung als Gast nicht länger als eine Minute zulässt. Oder er erwartet regelmäßig ein Ping.
Ich habe jedoch einen Fehler in meinem Code zur Authentifizierung gefunden und bekomme jetzt eine ID zurück. Diese scheint jedoch keine Session ID zu sein. Ein einloggen als authentifizierter User mit dem Session Token sollte das Verbindungsproblem lösen. Es ist jedoch relativ schwer das ganze zu testen, da bei jedem falschen Befehl anscheinend der Server die Verbindung trennt. Ich suche weiter.
genau das habe ich auch festgestellt. Nach einer Minute Trennung … und dann nach 10-12 Sekunden im Durchschnitt wieder verbunden. Das mit dem Gastzugang hört sich gut an. Hab ich auch schon dran gedacht. Leider verstehe ich von dem Code nix :0( Du kriegst das aber bestimmt hin :0) !!
Das der Client nach einem fehlerhaften Befehl blockt kann ich übrigens auch bestätigen.
Danke schonmal für deine Mühe
Wenn ich irgendwie helfen kann sag bescheid, auch wenns nur zum testen ist ;0)
Hi,
ich finde die Idee mit einer Harmony auch sehr interessant - somit denke ich an eine Anschaffung.
Was ich noch nicht verstehe ist, ob ich auch Funktionen in IPS seitens der Harmony ansteuern kann? Also z.B. Rollo hoch oder runter - leider sehe ich diese nicht in Beispielscripten. Auch würde mich interessieren ob ich denn auch Dinge wie z.B. die Außentemperatur im Display anzeigen kann.
ich sehe keine Möglichkeit selbst Infos in die Harmony zu pushen.
Verblüffend ist die Integration in der TVDigital Apo: dort kann mann mit Klick auf ein Sender im EPG den Kanal wählen und eine FB mit Tasten einblenden. Cool gemacht!
Danke! Was mir noch fehlt ist eine Erkenntnis zum Thema Spreche ich ein Script in IPS von der Harmony aus an? Ich müsste ja auf diese Knöpfe anlegen und diese irgendwie mit einer Script ID in IPS matchen?
PS: Ich habe noch keine Harmony … somit fehlt mir evtl. ein wenig Wissen.
Ich dachte eher an den umgekehrten Weg: IPS steuert Harmony. Theoretisch könnte man über ein IR-Receiver am IPS-Rechner aber auch diesen Weg beschreiten, hört sich aber steinig an.
Habe ich lange vor IPS gekauft (glaub so 2007) und läuft immer noch. Meine Version hat noch viel Handarbeit bei der Einrichtung, funktioniert dann aber problemlos (sollte inzwischen aber einfacher gehen).
In IPS richtet man eine FS20 Fernbedienung ein, bedienen kann man sie mit jeder angelernten IR Fernbedienung (in meinem Fall ne Harmony 895).
Das kann ich nur bestätigen. Die Harmony Fernbedienung ist doch nur ein Sender, entweder mit IR oder per RF über den Hub. Kommunikation vom PC aus ist nur zum Hub möglich und der sendet auch keine Daten zur Harmony FB rauf.
Steuern von IPS mit der Harmony sollte aber über den Hub theoretisch möglich sein. Es kann z.B. eine Custom IPS Aktivität eingerichtet werden. Eine Notification kommt dann in IPS beim starten der Aktivität an. Leider ist das Protokoll nicht bekannt und mit den Skripten und der Library kann IPS zur Zeit nur mitbekommen, wenn eine Aktivität gestartet wurde, nicht aber wenn eine bestimmte Taste der FB gedrückt wurde. Das Protokoll sollte das aber irgendwie unterstützen können.
Erst einmal vielen Dank für deine Scripte und deine Arbeit daran !
Ich versuche mich gerade daran dies auch bei mir zum laufen zu bekommen.
Erhalten jedoch nach dem ausführen des Scriptes „Harmony_init“ folgende Meldung.
(Speziell die Meldung mit dem fehlenden Token bereitet mir Kopfzerbrechen)
Notice: Undefined property: stdClass::$GetUserAuthTokenResult in C:\IP-Symcon\scripts\Harmony_XMPP.ips.php on line 265
Notice: Trying to get property of non-object in C:\IP-Symcon\scripts\Harmony_XMPP.ips.php on line 265
Warning: Cannot auto-convert to String from Variant. Error: Could not convert variant of type (Null) into type (String) in C:\IP-Symcon\scripts\Harmony_XMPP.ips.php on line 188
-> ERROR: No Auth Token!
Ein Tipp für mich ? Wenn ich das Problem beseitigt bekommen, habe ich bestimmt noch 1…2 Fragen. Denn hier wird schon etwas mehr als das „IPS Anfänger“ Wissen gebraucht
Das Problem liegt anscheinend bei der Anfrage nach dem Token beim myharmony.com Server. Kannst Du mal in deinen IPS Logs nachsehen, ob da eine Meldung kommt mit ERROR: Curl failed? Hast Du am Anfang der Harmony_XMPP.ips.php dein myharmony login und passwort angegeben?
Danke Xackery. Das scheint in der Tat erst mal temporär zu helfen. Ich hatte das nicht probiert, da ich dachte der Server würde eine Verbindung in der getrennten Phase nicht zulassen. Ich hatte bei mir zum Testen die Sende-Funktion erweitert, damit noch einmal gesendet wird, sobald sich das Socket wieder verbunden hat. Dein Ansatz ist natürlich besser. Ich werde das im Skript integrieren und eine neue Version hoch laden.
Danke Dir Zapp ! Ich hab noch mal genau hingeschaut… da war ein Leerzeichen im Benutzerfeld. :o Fehler Meinerseits.
Nun hab ich ein Token. Morgen schaue ich dann wie´s weiter geht.