NEWS
Logitech Harmony mit MQTT Kamera
-
Installieren Sie den Fakeroku-Adapter in ioBroker
Wechseln Sie zum Adapter-Reiter und suchen Sie nach
fakeroku
, um den Fakeroku-Emulator zu finden und zu installieren. Sobald der Adapter installiert ist, konfigurieren Sie ihn so, dass er die IPv4-Schnittstelle Ihres Host-Rechners verwendet (belassen Sie es nicht bei 0.0.0.0 !) - der Adapter zeigt die IP-Adresse Ihres Hosts an. In meinem Fall ist dies192.168.2.111
. Sie können die Multicast-IP, den Gerätenamen und den Serviceport auf ihren Standardwerten belassen:Jetzt kann man in der Harmony Smartphone App nach neuen Geräten im Netzwerk suchen. Der Adapter wird einem dort als Roku 3 angezeigt werden. Noch eine Aktivität hinzufügen und fertig.
ioBroker Einrichten
Das virtuelle Gerät Fakeroku gibt Ihnen nun Zugriff auf die folgenden Tasten Ihrer Harmony-Fernbedienung:
Zum Beispiel sendet Button 1 die Payload-Zeichenkette Rev an den Adapter, wenn Sie ihn drücken.
Drücken Sie alle verfügbaren Schaltflächen und aktualisieren Sie den ioBroker Objektbaum, um die Objekte zu sehen, mit denen wir nun beginnen können zu arbeiten:
Rev
- Nicht genutztPlay
- Starte einex
Sekunden VideoaufnahmeFwd
- Nicht genutztHome
- Deaktiviere den AlarmUp
- Bewege die Kamera einen Schritt nach obenRight
- Bewege die Kamera einen Schritt nach rechtsDown
- Bewege die Kamera einen Schritt nach untenLeft
- Bewege die Kamera einen Schritt nach linksSelect
- Stoppe die Bewegung der KameraBack
- Aktiviere den AlarmInfo
- Auslöser aktivierte Alarm-Aktionen
Ich werde dann jetzt den INSTAR MQTT Dienst meiner Kamera nutzen um die oben beschriebenen Aktionen auszulösen wenn eine Taste auf der Fernbedienung gedrückt wird.
Dafür kann z.B. den Node-RED Adapter installieren und danach diesen Flow in der Node-RED Oberfläche importieren.
Alternativ kann man den Script Engine Adapter installieren und die Arbeit mit Blockly erledigen. Hier können Sie nun den JSON-Code vom Ende dieses Posts importieren, um die damit folgenden Codeblöcke hinzuzufügen:
-
Blockly JSON Export
<xml xmlns="http://www.w3.org/1999/xhtml"> <block type="comment" id="8^U1_,dk,ef6^t^|JZ;+" x="-38" y="-113"> <field name="COMMENT">Pan&Tilt</field> <next> <block type="on_ext" id="L[B8uguVD|3@=nC}NO~3"> <mutation items="1"></mutation> <field name="CONDITION">ge</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="qQHP{$c4InRp$o6vp@BB"> <field name="oid">fakeroku.0.ioBroker.keys.Up</field> </shadow> </value> <statement name="STATEMENT"> <block type="control" id="g@M?e*b1_8ezO{_(PUcP"> <mutation delay_input="false"></mutation> <field name="OID">mqtt.0.instar.local.features.ptz.movestep.raw</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="u2H{{k$7nO+({(J4,2,C"> <field name="TEXT">up</field> </block> </value> </block> </statement> <next> <block type="on_ext" id="e}$7(hV3E%Bx9}kmKFca"> <mutation items="1"></mutation> <field name="CONDITION">gt</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="@+%)|7?Tc?G=;j(`i@PX"> <field name="oid">fakeroku.0.ioBroker.keys.Down</field> </shadow> </value> <statement name="STATEMENT"> <block type="control" id="d|K@:1dO!{[K{LTTP0mj"> <mutation delay_input="false"></mutation> <field name="OID">mqtt.0.instar.local.features.ptz.movestep.raw</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="2b.9ZC^jUqK49w{Advj="> <field name="TEXT">down</field> </block> </value> </block> </statement> <next> <block type="on_ext" id="44Fs~A5pQ8,*n#TG]ogM"> <mutation items="1"></mutation> <field name="CONDITION">gt</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="-nPyi);a$Bo}fA5$S.|w"> <field name="oid">fakeroku.0.ioBroker.keys.Left</field> </shadow> </value> <statement name="STATEMENT"> <block type="control" id="jip7o1U:49HL|mJ}*`;t"> <mutation delay_input="false"></mutation> <field name="OID">mqtt.0.instar.local.features.ptz.movestep.raw</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="~q*ow@aD`6;OXnXp9_#]"> <field name="TEXT">left</field> </block> </value> </block> </statement> <next> <block type="on_ext" id="S%mT*RL0iur1u/~URa5T"> <mutation items="1"></mutation> <field name="CONDITION">gt</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="QQ|X]mXDJ1nlt~X8X*I/"> <field name="oid">fakeroku.0.ioBroker.keys.Right</field> </shadow> </value> <statement name="STATEMENT"> <block type="control" id="7hy/D$Kc;6J47RUilQXM"> <mutation delay_input="false"></mutation> <field name="OID">mqtt.0.instar.local.features.ptz.movestep.raw</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="#-yvwy4/W(Iv?-S9Mv^+"> <field name="TEXT">right</field> </block> </value> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> <block type="comment" id="!5:tmZx6,dztS)h%[*8u" x="613" y="-113"> <field name="COMMENT">Armed/Disarmed</field> <next> <block type="on_ext" id="i!23)Yl3-5$$.sejbmp_"> <mutation items="1"></mutation> <field name="CONDITION">gt</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="tzCjnGT_Ez(9hR};yXOF"> <field name="oid">fakeroku.0.ioBroker.keys.Home</field> </shadow> </value> <statement name="STATEMENT"> <block type="control" id="Vk{M_q)$w9t*Mz/zy2RA"> <mutation delay_input="false"></mutation> <field name="OID">mqtt.0.instar.local.features.ptz.preset.raw</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="A)LBw=FpoE6Y[vPX;O!!"> <field name="TEXT">0</field> </block> </value> <next> <block type="control" id="tS~GsJye~?T(JP;6Gb#i"> <mutation delay_input="false"></mutation> <field name="OID">mqtt.0.instar.local.alarm.area1.enable.raw</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="mux/WG[~#y7c,dRz.r@0"> <field name="TEXT">0</field> </block> </value> <next> <block type="control" id="F5Nz|ow2PC3:9%QcrAu6"> <mutation delay_input="false"></mutation> <field name="OID">mqtt.0.instar.local.alarm.area2.enable.raw</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="6a:*b1o-q.[T3d(pWU[r"> <field name="TEXT">0</field> </block> </value> <next> <block type="control" id="qthuoOsu2lMx-+!J`-b`"> <mutation delay_input="false"></mutation> <field name="OID">mqtt.0.instar.local.alarm.area3.enable.raw</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="{()9t/y6#0Sm0OAKoC3T"> <field name="TEXT">0</field> </block> </value> <next> <block type="control" id="s=Sq;fBh=fA8f[#:I-h}"> <mutation delay_input="false"></mutation> <field name="OID">mqtt.0.instar.local.alarm.area4.enable.raw</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="!1-dhH:@0^h?U[^FEV)D"> <field name="TEXT">0</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> <next> <block type="on_ext" id="KQOr`fV9fb|5u$J#Afs|"> <mutation items="1"></mutation> <field name="CONDITION">gt</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="B?-au^pP[51TLqvw:;3_"> <field name="oid">fakeroku.0.ioBroker.keys.Back</field> </shadow> </value> <statement name="STATEMENT"> <block type="control" id="tcQJu_~KY^*xk+LMclxe"> <mutation delay_input="false"></mutation> <field name="OID">mqtt.0.instar.local.features.ptz.preset.raw</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="RUTkXYszfDj__Z_xLRP]"> <field name="TEXT">1</field> </block> </value> <next> <block type="control" id=".nqhS?=t]X?:Iw*N;yi8"> <mutation delay_input="false"></mutation> <field name="OID">mqtt.0.instar.local.alarm.area1.enable.raw</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="H`Irv[C~yr]D.(Dud,s!"> <field name="TEXT">1</field> </block> </value> <next> <block type="control" id="{@T2R}:y[tVE3RmDJGyZ"> <mutation delay_input="false"></mutation> <field name="OID">mqtt.0.instar.local.alarm.area2.enable.raw</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="f72fIjd@pgEmbpkN*wRD"> <field name="TEXT">1</field> </block> </value> <next> <block type="control" id="X[d_,-{4-?HtN_u^.lpo"> <mutation delay_input="false"></mutation> <field name="OID">mqtt.0.instar.local.alarm.area3.enable.raw</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="Y@n%b]+$BX2m|?6H;i(*"> <field name="TEXT">1</field> </block> </value> <next> <block type="control" id="g6;}H)hk]Ln(@8fJMVFm"> <mutation delay_input="false"></mutation> <field name="OID">mqtt.0.instar.local.alarm.area4.enable.raw</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="=^gtJ-l7v-sKpl7r{:Js"> <field name="TEXT">1</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> <block type="comment" id="Ej}EwLZxa*uxjJp@h`x3" x="-37" y="463"> <field name="COMMENT">Manual Recording</field> <next> <block type="on_ext" id="lT^wG1zJA[jTZ}seS1X?"> <mutation items="1"></mutation> <field name="CONDITION">ge</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="$:sE0PF+cj*=@nWe$mDw"> <field name="oid">fakeroku.0.ioBroker.keys.Play</field> </shadow> </value> <statement name="STATEMENT"> <block type="control" id="k,*ua/iJiGU=kKMK9aNN"> <mutation delay_input="false"></mutation> <field name="OID">mqtt.0.instar.local.features.manualrec.start.raw</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="{WUob~?`ZYTi{y/a1!Zm"> <field name="TEXT">60</field> </block> </value> <next> <block type="control" id="=-sj.d3H/rmDw+{LNgp}"> <mutation delay_input="true"></mutation> <field name="OID">mqtt.0.instar.local.features.manualrec.stop.raw</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">30</field> <field name="UNIT">sec</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="text" id="#q3EP{m}T6$=|Jh9dT*f"> <field name="TEXT">off</field> </block> </value> </block> </next> </block> </statement> </block> </next> </block> <block type="comment" id="J]FEoC33xQY(@kf;+wMz" x="-38" y="687"> <field name="COMMENT">Trigger Alarm</field> <next> <block type="on_ext" id="Hdx}6@U[djCs$6ChcSO?"> <mutation items="1"></mutation> <field name="CONDITION">ge</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="H$d@+hd{G*}azTCiGg%$"> <field name="oid">fakeroku.0.ioBroker.keys.Info</field> </shadow> </value> <statement name="STATEMENT"> <block type="control" id="_jUfMn2vQn#qO7bPWU2#"> <mutation delay_input="false"></mutation> <field name="OID">mqtt.0.instar.local.alarm.pushalarm.raw</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="text" id="32?hPl+U(C[i:2hzhWdP"> <field name="TEXT">1</field> </block> </value> </block> </statement> </block> </next> </block> </xml>
-
Hallo @mpolinowski,
hast Du eine Info darüber, ob noch weitere Tasten mit dem fakeroku Adapter genutzt werden können? Ich habe alle Tasten auf der Harmony Companion Fernbedienung (die kleinere Variante ohne Touchscreen) ausprobiert, aber es kommen auch nur in etwa die von Dir im Screenshot genannten Tasten unter den Objekten des Adapters an.Bei mir sind es diese Tasten:
Man kann sich wohl zwar behelfen, indem man mehrere Instanzen vom fakeroku-Adapter nutzt, aber sind es wirklich nur diese wenigen Tasten?
-
Hi, weiss hier einer von euch wie man die Multicast IP einstellen muss das der Logotech Hub den Fakeroku findet ?
Mein ioBroker und Hub sind in unterschiedlichen IP Adressbereichen, die aber miteinander Kommunizieren dürfen (Unifi Komponenten)
ioBroker: 192.168.1.20
Hub: 192.100.1.16 -
Hallo @RoPaBer,
hatte mich auch etwas irritiert - aber scheint eine Limitierung des Fakeroku Adapters zu sein. Ich habe diese Einbindung sowohl für ioBroker als auch Node-RED und Home Assistant gemacht. Überall das gleiche Bild.
Hätte auch gerne das vollständige Keypad zur Auswahl.
-
Das war auch eine weitere Besonderheit des Adapters. In deinem Fall müsste man eigentlich
0.0.0.0
als Netzwerke Interface wählen - um so auf allen Schnittstelle zu lauschen. Aber das geht nicht.Ich musste explizit das Interface angeben auf dem der Adapter läuft - d.h. die Kommunikation wird nicht über mehrere Subnetze laufen. Es sei denn man kann das im Router konfigurieren (IP Masquerade).
Ich denke mit der Multicast IP hat es nichts zu tun, sondern nur damit, dass der Adapter alle anderen Schnittstellen ignoriert. Oder ist diese Ausage falsch?
-
Hallo @mpolinowski,
danke für die schnelle Rückmeldung! Bin neu hier und positiv überrascht.
Mit der Tastenbeschränkung kann ich auskommen, wenn ich auch noch den Harmony-Adapter zur Hilfe nehme - allerdings wollte ich das eigentlich vermeiden. Bisher sehe ich für diesen Adapter keine andere Verwendung, als dass man den aktuellen Status der Activity abfragen kann. Die unter dem jeweiligen Gerät verfügbaren Tasten-Objekte verstehe ich irgendwie nicht: Ich konnte jedenfalls keine Trigger darauf anwenden.Konkret geht es mir darum, mit der Logitech Fernbedienung Geräte anzusteuern, die z.B. nur über eine serielle Schnittstelle verfügen. Abhängig von der jeweiligen Activity sind jeweils andere Funktionen auf derselben Taste der Fernbedienung auszuführen, so dass ich mit den paar Fakeroku-Tasten schnell an die Grenze komme und dann wohl zusätzlich den Harmony-Adapter nutzen muss.
-
Den Harmony Adapter habe ich nicht ausprobiert. Aber ich denke dass es das gleiche ist wie der Harmony Node in Node-RED. Und damit bin ich auch nicht weitergekommen. Wie du bereits sagst, kann man damit scheinbar keine Aktionen auslösen, sondern nur den State auslesen.
Aber es ist kein Problem mehrere Instanzen von Fakeroku gleichzeitig zu verwenden. Bei mir läuft es gerade im ioBroker, in Node-RED und unter Home Assistant - 3 Instanzen für drei unterschiedlich Kameras zwischen denen man schnell per Swipe Geste wechseln kann.