Software
Home Automation
Logitech Harmony with ioBroker
- Installieren Sie den Fakeroku-Adapter in ioBroker
- INSTAR MQTT Setup
- Schlussfolgerung
- Blockly JSON Export
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 dies 192.168.2.111
. Sie können die Multicast-IP, den Gerätenamen und den Serviceport auf ihren Standardwerten belassen:
Sie können jetzt wieder zum allgemeinen Tutorial zum Hinzufügen des eben erstellten virtuellen Geräts zu Ihrem Logitech Harmony Hub wechseln.
INSTAR MQTT Setup
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
Wir müssen jetzt einen Adapter hinzufügen, der es uns ermöglicht, ein Skript zu schreiben, damit wir eine MQTT-Aktualisierung für unsere Kamera auslösen können, wenn wir eine Nachricht von unserer Harmony-Fernbedienung erhalten. Ich würde empfehlen, den Node-RED Adapter in ioBroker zu verwenden. Sobald Sie ihn eingerichtet haben, können Sie unser Node-RED-Tutorial verwenden um Ihre Kamera anzubinden (siehe auch INSTAR MQTT & Node-RED):
Alternativ können Sie den Script Engine Adapter installieren und die Arbeit mit Blockly erledigen:
Hier können Sie nun den JSON-Code vom Ende dieses Artikels importieren, um die folgenden Codeblöcke hinzuzufügen:
Schwenken und Neigen der Kamera
Diese Sequenz hört auf die Schaltflächen oben, rechts, unten und links und aktualisiert das entsprechenden Pan&Tilt MQTT-Topic auf Ihrer Kamera:
Schalten Sie Ihren Alarm scharf, bevor Sie Ihr Haus verlassen
Diese Sequenz aktiviert/deaktiviert den Alarm auf Ihrer Kamera. Wenn sie scharf gestellt ist, behält Ihre Kamera Ihr Wohnzimmer im Auge. Wenn der Alarm deaktiviert wird, dreht sich die Kamera zur Seite und deaktiviert alle Bewegungserkennungsbereiche. Hinweis: Wenn Sie den kamerainternen PIR-Bewegungssensor in Kombination mit diesen Erfassungsbereichen verwenden, müssen Sie den Sensor ebenfalls deaktivieren, damit dies funktioniert:
Starten Sie eine manuelle Videoaufzeichnung
Diese Sequenz ermöglicht es Ihnen, eine manuelle Videoaufnahme zu starten, wenn Sie die Play-Taste auf Ihrer Fernbedienung drücken. Beachten Sie, dass der Verzögerungsknoten derzeit auf 30 Sekunden eingestellt ist. Sie können die Länge der Aufnahme durch Ändern dieses Wertes anpassen:
Einen Alarm auslösen
Und nun zur einfachsten Sequenz dieses Flows. Durch Drücken der Taste Info wird ein Alarm auf Ihrer Kamera ausgelöst. Dieses Ereignis löst alle aktiven Alarmaktionen auf Ihrer Kamera aus - wie z.B. die Videoaufzeichnungen, E-Mail-Benachrichtigungen, FTP/Cloud-Uploads usw.:
Schlussfolgerung
Dies ist nur ein kleiner Überblick aller verfügbaren MQTT-Topics auf Ihrer Kamera. Alle diese Topics können mit einem Tastendruck auf Ihrer Logitech Harmony-Fernbedienung kombiniert und gesendet werden. Weitere Informationen zur Verwendung der INSTAR MQTT-Schnittstelle mit ioBroker finden Sie in unserem vollständigen Tutorial.
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>
Diskutieren Sie diesen Artikel im INSTAR Forum !