Logitech Harmony Hub Controll via HABridge
Folgendes HowTo dient als Ergaenzung zum HOWTO: Loxone mit Logitech Harmony Hub steuern, aus dem Loxoneforum, um einen Logitech Harmony Hub, und damit dessen Geraete (IR oder Bluetooth), vom Loxone Miniserver aus (z.B. via LoxoneApp, oder Loxone Browser-App) zu steuern. Also der umgekehrte Weg zum genannten HowTo.
Der Weg geht ueber eine HABridge-Instanz, die entweder auf dem Loxberry mitlaeuft oder autark auf einem anderen Host.
Leider kann der Miniserver keine PUT-Requests so erzeugen, dass HABridge diese versteht und weiterverarbeitet.
Aus diesem Grund habe ich mir einen kleinen Parser geschrieben, der als (xindetd)-Daemon laeuft und die Requests des Miniserver uebersetzt und an die HABridge weiterleitet.
Diese wiederum schaltet dann die entsprechenden Activities, die in der HABridge konfiguriert sind.
Der Parser befindet sich noch in einem sehr fruehen Stadium. Ein paar Sachen muss man noch manuell editieren, bevor er funktioniert, aber diese Stellen sind jeweils mit entsprechenden Kommentaren versehen.
Ich werde den Parser weiter entwickeln und dahingehend optimieren, dass man so wenig wie moeglich editieren muss.
Ich denke, das wird geschehen, wenn ich, oder gern auch jemand anderes, daraus mal ein Loxberry-Plugin macht.
Der Parser lauscht durch den XINET-Daemon auf einem vorher definierten Port (z.B. 60669)
Wie das konfiguriert wird, zeigt folgende Step-by-Step-Anleitung:
1) Eintrag in /etc/services
Zunaechst muss der Port in der Datei /etc/services gekannt gemacht werden:
Dazu oeffnet man mit einem Editor auf dem Host, auf dem spaeter der Parser liegen soll (z.B. Loxberry) die Datei /etc/services.
In dieser Datei fuegt man am Ende eine neue Zeile mit folgenden Werten ein:
harmony 60669/tcp # Service fuer Harmonycontrol
Danach wird die Datei gespeichert und geschlossen
2) xinetd-Daemon anlegen
Jetzt erstellen wir eine Datei die im Standardpfad des xinetd liegt (z.B. mit dem Namen lox2harmony).
tholle@loxberry:~ $ ls -l /etc/xinetd.d/
insgesamt 44
-rw-r--r-- 1 root root 640 Okt 26 2013 chargen
-rw-r--r-- 1 root root 2162 Sep 18 2015 check_mk
-rw-r--r-- 1 root root 2163 Jan 26 2017 check_mk.dpkg-old
-rw-r--r-- 1 root root 502 Okt 26 2013 daytime
-rw-r--r-- 1 root root 391 Okt 26 2013 discard
-rw-r--r-- 1 root root 422 Okt 26 2013 echo
-rw-r--r-- 1 root root 138 Feb 2 2017 gong
-rw-r--r-- 1 root root 148 Jul 24 10:02 lox2harmony
-rw-r--r-- 1 root root 154 Jun 1 13:12 loxstatus
-rw-r--r-- 1 root root 162 Mär 7 2017 squeeze-restart
-rw-r--r-- 1 root root 569 Okt 26 2013 time
In die Datei muss folgender Inhalt:
service harmony
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = loxberry
server = /opt/loxberry/skripte/harmony/lox2harmony.py
}
Der Pfad hinter dem Parameter "server=" gibt an, wo der Parser spaeter liegen wird.
Diese Datei speichern und ggf. mit den Rechten versehen, wie sie oben dargestellt sind.
3) Parser in Verzeichnis kopieren
Den Parser downloaden und in das Verzeichnis kopieren, welches in Schritt 3 bei dem Parameter "server=" eingetragen wurde.
In meinem Beispiel also in: /opt/loxberry/skripte/harmony/
Parser download:
Ausserdem muss die Datei ausfuehrbar gemacht werden. Und zwar fuer Owner, Group und Others, so wie hier im Beispiel:
-rwxr-xr-x 1 tholle users 1293 Sep 6 12:31 lox2harmony.py
Der Befehl dazu lautet:
sudo chmod 755 lox2harmony.py
In der Datei muessen noch ein paar Parameter eingetragen werden, sofern man diese braucht. Das ist jeweils in den entsprechenden Zeilen kommentiert.
4) LoxoneConfig anpassen
Abschliessend muessen noch in der LoxoneConfig die Schnittstellen (virtuelle Ausgaenge) angelegt werden, um seine IR-Geraete steuern zu koennen.
In meinem Beispiel gehe ich von einem Geraet namens TEST aus.
Um das Geraet TEST steuern zu koennen, muss man einen virtuellen Ausgang anlegen.
Dieser virtuelle Ausgang hat folgende Eigenschaften:
Hier muss bei der Adresse der entsprechende Port eingetragen werden, der im ersten Schritt in der /etc/services eingetragen wurde.
Wenn alles passt, kann man jetzt sein IR-Device via Loxone schalten.