harmony
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.
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
- myHarmony Logitech Harmony Hersteller
- Harmony Remote Forum deutsches Harmony Forum
- Thread im FHEM Forum Weitere Infos im FHEM Forum Thread