harmony

Aus FHEMWiki
Zur Navigation springen Zur Suche springen


harmony
Zweck / Funktion
Anbindung Logitech Harmony Hub basierter Fernbedienungen
Allgemein
Typ Gerätemodul
Details
Dokumentation EN / DE
Support (Forum) Multimedia
Modulname 37_harmony.pm
Ersteller Andre (Forum / Wiki)
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!


Das FHEM-Gerätemodul harmony bietet die Möglichkeit Logitech Harmony Hub basierte Fernbedienungen an FHEM anzubinden und so von FHEM aus Aktivitäten zu starten und zu stoppen, in FHEM auf das Starten und Stoppen von Aktivitäten über eine der mit dem Hub verbundenen Fernbedienungen zu reagieren oder auf Geräteebene jedes im Hub konfigurierte Gerät über IR, Bluetooth und/oder einen Smart Keyboard USB Dongle zu steuern.

Unterstützt werden zur Zeit die Modelle Ultimate Hub, Ultimate Smart Control, Ultimate, Smart Keyboard sowie alle darauf basierenden Kombinationen mit Smart Control und Smart Keyboard Add-On.

Vorbereitung

Seit Ende 2018 hat Logitech die undokumentierte Schnittstelle die für die Anbindung der Harmony an FHEM verwendet werden geschlossen. Nach viel Protest aus der Community wurde die XMPP-Schnittstelle als "Entwickler-Option" nach akzeptieren von Haftungsausschlüssen wieder zur Verfügung gestellt. Ab Firmware 4.15.250 und Harmony-App-Version 5.6 für iOS und Android ist die Option zur Aktivierung von XMPP direkt in den Einstellungen der Harmony App zu finden. Die Einstellung versteckt sich unter Menü > Harmony-Einrichtung > Geräte und Aktionen hinzufügen und bearbeiten > Fernbedienung und Hub > XMPP aktivieren.

Define

 define <hub> harmony [<username> <password>] <ip>

Hier sind username und password die myharmony Zugangsdaten und ip ist die IP-Adresse des Hub im lokalen Netz.

Für die Firmware-Versionen 3.x ist die volle Funktionalität des Moduls auch ohne Angaben von username und password gegeben. Ab Firmware 4.x muss beides angegeben werden. Sonst ist keine Steuerung auf Geräteebene möglich.

Allgemeines

Aktivitäten und Geräte lassen sich an allen Stellen entweder als ID oder als Name angeben. Wenn der Name angegeben wird, müssen hierbei Leerzeichen durch einen Punkt ersetzt werden. Dies kann auch für eventuell andere im Namen vorhandene Sonderzeichen gelten.

Aktivitäten

Das Reading currentActivity enthält die gerade laufende Aktivität. Beim Wechsel zwischen Aktivitäten erzeugt es Events, auf die in FHEM über notify reagiert werden kann. Das Reading previousActivity enthält die davor laufende Aktivität, sofern diese bekannt ist. Dieses Reading erzeugt keine Events.

In den Internals currentActivityID und previousActivityID stehen die dazu gehörenden IDs der Aktivitäten.

Mögliche Aktivitäten anzeigen geht über

 get <hub> activities

Eine der Aktivitäten via FHEM starten über

 set <hub> activity <activityname> 

Wobei der Activityname zwingend so geschrieben werden muss wie FHEM ihn im Dropdown anzeigt.


Innerhalb einer laufenden Aktivität kann mit

 set <hub> command <command>

ein IR-Kommando an eines der beteiligten Geräte gesendet werden.

Geräteebene

Innerhalb und außerhalb einer laufenden Aktivität kann mit

 set <hub> command <id|name> <command>

ein IR-Kommando an eines der im Hub bekannten Geräte gesendet werden. Hierbei ist darauf zu achten, dass innerhalb einer Aktivität keine Kommandos verwendet werden sollten, die den Smart-State betreffen.

Die möglichen Kommandos kann man sich über

 get <hub> deviceCommands

anzeigen lassen.

Wichtig ist, dass wenn in der so erzeugten Liste ein Gerät mit Leerzeichen geschrieben wird, dass man im FHEM Befehl das Leerzeichen durch einen "." ersetzen muss. Hat man bspw. ein Harmony Device "Samsung TV" ist der Gerätebefehl zum anschalten:

 set <hub> command Samsung.TV PowerOn


FHEM Devices auf Geräteebene

Es ist möglich, sich für einzelne oder alle im Hub konfigurierten Geräte ein zugehöriges FHEM-Device anlegen zu lassen:

 set <hub> autocreate [<id|name>]

Beim Umschalten zwischen Aktivitäten wird in diesen FHEM-Devices im Reading power der in der Aktivität konfigurierten Einschaltzustand (on, off oder manual) angezeigt. Mit einem notify auf power Events lässt sich in FHEM auf einzelne Geräte reagieren.

Wichtig: Diese FHEM-Device spiegeln nicht den tatsächlichen Gerätezustand wieder, sondern den innerhalb einer Aktivität beabsichtigen Zustand. Der tatsächliche Zustand kann z.B. auf Grund von Empfangsproblemen abweichen.

Das get commands sowie die set command, hidDevice, text, cursor und special Kommandos auf Hub-Ebene stehen hier direkt und ohne Angabe von Device-ID oder Name zur Verfügung.

Kommandos an FHEM senden

Da es (zur Zeit) nicht möglich ist, Geräte-Kommandos oder einzelne Tasten direkt vom HUB zu empfangen, muss hierzu ein zusätzlicher Empfänger in FHEM eingebunden werden. Dies kann z.B. mit einem MCE-IR Empfänger oder per Bluetooth geschehen. Ein FHEM-Modul hierzu findet sich im in diesem Forenthread.

Mit dem in diesem Forenthread vorgestellten Modul ist es möglich einzeln belegte Tasten der Harmony über das Roku External Control Protocol per Netzwerk an FHEM zu senden und dort auszuwerten.

Leider ist es bei der Harmony Companion nicht möglich, die für die Heimautomatisierung vorgesehen Tasten beliebig zu belegen. Hier können nur unterstützte Geräte (Philips Hue Bridge, LIFX Smart Bulls, Hunter Douglas Powerview Hub, PC - Stand 07/2020) zugeordnet werden. Somit ist fakeRoku hier nicht möglich. Hier kann über die Installation von HAbridge eine Hue Bridge emuliert werden, welche dann mit FHEM verbunden werden kann.

Smart Keyboard

Der Harmony Hub kann über Bluetooth oder die zum Smart Keyboard gehörenden USB-Dongle mit einem Rechner, Media PC oder sonstigem Gerät, das Tastatureingabe unterstützt, verbunden werden. FHEM kann diese Verbindung nutzen, um beliebige Tastendrücke an ein solches Gerät zu senden. Das können Texte sein, Cursorbewegungen oder die Power-, Multimedia oder sonstigen Funktionstasten, die das Gerät unterstützt.

Alle gesendeten Tastendrücke beziehen sich normalerweise auf das zur gerade laufenden Aktivität gehörende Tastatureingabegerät. Mit dem hidDevice Kommando lässt sich die Tastatureingabe auf jedes im Hub dafür konfigurierte Gerät umschalten.

Wichtig: Dieses Umschalten kann einige Sekunden dauern, da hierbei die bestehende Bluetooth-Verbindung getrennt und eine neue aufgebaut wird.

Es stehen die Kommandos text, cursor und special zur Verfügung.

Beispiele:

Gehe in PLEX auf die Library Musik und spiele das erste Item in der OnDeck Liste:

 set <hub> text M
 set <hub> cursor right
 set <hub> text p

Beispiele

Vorgeschaltete Funksteckdose ansteuern

Vorbereitung Harmony

Nachdem die Geräte mit Strom versorgt werden, benötigen sie einige Sekunden, bis sie ihre Einschaltsignale verarbeiten können. Diese Verzögerung wird durch ein Dummy Gerät in jeder Aktion erzeugt.

1) In MyHarmony einen Amazon Fire TV anlegen und ihm einen passenden Namen geben (z.B. Pause)

2) Unter "Geräte" dieses markieren und per "Ändern der Betriebseinstellungen" die Einstellungen aufrufen

3) Punkt "Ich möchte dieses Gerät eingeschaltet lassen, wenn Aktionen gewechselt werden und nur durch Drücken der Off-Taste ausschalten" auswählen

4) Einen harmlosen Befehl einfügen ("Search"), danach eine Verzögerung von 5000ms einbauen und dann noch einen Befehl ("Search"). Dies bewirkt eine Verzögerung von 5 Sekunden beim Ein- und Ausschalten

5) Unter Aktionen die Aktion auswählen und per "Einstellung ändern" das neue Gerät hinzufügen

6) Per "Diese Aktion anpassen" das neue Gerät an die erste Stelle schieben

7) Schritte 5-7 für alle Aktionen wiederholen


Konfiguration in FHEM

1) Der Harmony Hub muss existieren

 #Harmony Hub Wohnzimmer definieren
 define wz_harmonyhub harmony 192.168.123.123

2) Ihr benötigt eine fertig konfigurierte Funksteckdose (hier "wz_Multimedia")

3) Ihr baut eine Bedingung, die auf den Ein- und Ausschaltvorgang des Harmony Hub (hier wz_harmonyhub) reagiert und die Steckdose (hier wz_Multimedia) schaltet. Es wird eine zusätzliche Pause genutzt von 0 Sekunden bei der ersten Bedingung (wäre kontraproduktiv) und 10 Sekunden bei der zweiten Bedingung (DOELSEIF). Bei der Nutzung eines Beamers lässt sich hierüber die Abkühlzeit einstellen. Im Beispiel bleiben den Geräten somit 15 Sekunden zum Ausschalten und 5 Sekunden um die Empfangsbereitschaft herzustellen. Die erste Bedingung im DOIF ist eine Regex, da "currentActivity" bei mehrfachem Abschalten hintereinander immer wieder von "PowerOff" auf "Stopping PowerOff" wechselt.

 #Auf den Schaltvorgang des Hubs reagieren
 define wz_Multimedia_Automatik DOIF ([wz_harmonyhub:currentActivity] !~ /PowerOff/) (set wz_Multimedia on) DOELSEIF ([wz_harmonyhub:activity] eq "PowerOff") (set wz_Multimedia off)
 attr wz_Multimedia_Automatik wait 0:10

Weitere Möglichkeiten

Statt Fire TV kann jedes andere nicht vorhandene Gerät als Platzhalter in der Harmony verwendet werden. In diesem Gerät kann man auch direkt die Einschaltverzögerung anpassen um die nötige Wartezeit zu erhalten. Besser als ein notify oder DOIF auf Activity-Ebene ist es über die Harmony autocreate funktion ein FHEM Device für die platzhalter Steckdose anzulegen und dort dann auf das power Event zu reagieren. Damit ist man unabhängig von allen Änderungen bei den Activities.

Button für eine bestimmte Activity im Frontend und Homekit über readingsProxy

In FHEMWEB und Homebridge:

define Fernsehen readingsProxy <hub>:activity
attr Fernsehen devStateIcon on:control_on_off@green off:control_standby
attr Fernsehen event-on-change-reading .*
attr Fernsehen genericDeviceType switch
attr Fernsehen setFn { return 'activity <meine activity>' if( $CMD eq 'on' );; return 'off';; }
attr Fernsehen setList on off
attr Fernsehen valueFn { return 'on' if( $VALUE eq '<meine activity>' );; return 'off';; }

Zusätzlich im TableUI:

<div class="left">
  <div data-type="switch" data-device="Fernsehen" data-icon="fa-tv" class="cell" ></div>
  <div data-type="label" class="narrow">FERNSEHEN</div>
</div>

Bekannte Probleme

Wenn FHEM den Harmony Hub nicht erreichen kann, blockiert das Modul FHEM für den Timeout von 2 Sekunden im Abstand von nur wenigen Sekunden:

[...]
2015.12.26 18:25:45 1: Perfmon: possible freeze starting at 18:25:43, delay is 2.794
2015.12.26 18:25:58 1: Perfmon: possible freeze starting at 18:25:56, delay is 2.709
2015.12.26 18:26:11 1: Perfmon: possible freeze starting at 18:26:09, delay is 2.676
2015.12.26 18:26:24 1: Perfmon: possible freeze starting at 18:26:22, delay is 2.686
2015.12.26 18:26:37 1: Perfmon: possible freeze starting at 18:26:35, delay is 2.686
[...]

Da dieses Blockieren die Funktionalität von FHEM beeinträchtigen kann, sollte man bei geplanten Auszeiten des Hubs diesen disablen:

set <hub> disable 1

Weblinks