IR-MQTT-Gateway

Aus FHEMWiki
Zur Navigation springen Zur Suche springen
IR-MQTT-Gateway
IR-WLAN-Gateway
Allgemein
Protokoll MQTT
Typ Sender/Receiver
Kategorie Other
Technische Details
Kommunikation 2,4 GHz
Kanäle 1
Betriebsspannung 5V
Leistungsaufnahme ~0,2W(Standby)
Versorgung Kleinspannung
Abmessungen 55x20 mm (Durchm. x Höhe)
Sonstiges
Modulname MQTT, MQTT_DEVICE
Hersteller HomeBrew


Hier wird die Einbindung des IR-WLAN-Gateway über MQTT beschrieben. Details zur Hardware und zu anderen Arten der Einbindung sind im Hauptartikel zum IR-WLAN-Gateway zu finden.

Info blue.png
Dieser Artikel entstand vor Einführung der MQTT2-Module. Die Integration mit dem neueren Modul MQTT2_DEVICE ist ebenfalls möglich, einige Schritte dafür wurden bereits ergänzt. Neben der unten genannten kann insbesondere auch Tasmota verwendet werden. Dazu existiert auch ein attrTemplate, das für die Analyse der empfangenen IR-Codes hilfreich ist, die dann wieder für die Sendeseite benötigt werden.


MQTT2-Module_-_Praxisbeispiele#Tasmota

Allgemeines

Hier soll die Einbindung der Hardware als transparentes Input- und Output-Device erfolgen, wobei das Hauptziel die Erstellung einer grafischen Fernbedienungsmöglichkeit darstellt. Diese wird mittels Remotecontrol umgesetzt.

Vorbereitung, firmware

Zunächst muß der ESP8266 mit einer MQTT-fähigen firmware versehen werden. Vorliegend wurde als ESP8266 ein Wemos D1 Mini verwendet. Weiter wird ein vorhandener MQTT-Broker vorausgesetzt.

Flashen

Grundsätzlich sollte diese Anleitung mit jeder MQTT-fähigen firmware funktionieren, der Verfasser hat den Quellcode von hier verwendet und wie folgt angepaßt:

  • (Nur für Nutzung der Arduino IDE zum kompilieren, wird main.cpp zu src.ino umbenannt)
  • in globals.h sind die Zeilen 27ff an die konkret verwendete Hardware anzupassen. Für den sog. IRBlaster also wie folgt:
// production device - (also Wemos...)
#define RECV_PIN D4    // D3 - GPIO0 - IR detector/demodulator
#define TRANS_PIN D1   // RX - GPIO3 - IR LED trasmitter 
#define TRIGGER_PIN D7 // D4 - GPIO2 - trigger reset (press and hold after boot - 5 seconds)
#define LED_PIN D2      // D4 - GPIO2
#define BUTTON_ACTIVE_LEVEL LOW
#endif

Danach kann man die Firmware kompilieren und auf den Wemos flashen.

MQTT-Einstellungen vornehmen

Nach einem Reboot des Wemos kann man sich mit dessen Netzwerk verbinden und dann die Einstellungen für das eigene WLAN und den verwendeten MQTT-Broker vornehmen. Hier wurde ir_blaster als Basistopic verwendet.

Die Funktionalität des Gateways kann man dann z.B. mit mosquitto_sub prüfen:

mosquitto_sub -h <Server-IP> -d -t ir_blaster/receiver/#

Drückt man jetzt Tasten auf einer vorhandenen Infrarot-Fernbedienung, sollte die LED am Wemos blinken und entsprechende Ausgaben von mosquitto_sub erfolgen.

MQTT_DEVICE

Empfangsseite

Um Informationen über empfangene Fernbedienungssignale in FHEM zu erhalten, wird zunächst das Gateway als MQTT_DEVICE angelegt:

define IR_Blaster MQTT_DEVICE

Je nach Art der Fernbediencodes kann dann mittels

attr IR_Blaster autoSubscribeReading ir_blaster/receiver/+/+

zunächst für verschiedene Fernbedienungstypen und -protokolle die automatisierte Anlage von passenden Subscriptions erfolgen. Hierzu werden dann einfach einzelne Tasten der jeweiligen Fernbedienung gedrückt. Manche Fernbedienungen benötigen einen weiteren Subtopic, hierfür ist das Attribut auf folgende Einstellung zu ändern:

attr IR_Blaster autoSubscribeReading ir_blaster/receiver/+/+/+

Die sich daraus ergebenden Attribute sehen z.B. so aus:

attr IR_Blaster subscribeReading_0 ir_blaster/receiver/NEC/0
attr IR_Blaster subscribeReading_1 ir_blaster/receiver/RC6/1
attr IR_Blaster subscribeReading_12 ir_blaster/receiver/RC5/12
attr IR_Blaster subscribeReading_13 ir_blaster/receiver/UNKNOWN/13
attr IR_Blaster subscribeReading_15 ir_blaster/receiver/RC6/15
attr IR_Blaster subscribeReading_16388 ir_blaster/receiver/PANASONIC/48/16388
attr IR_Blaster subscribeReading_20 ir_blaster/receiver/RC6/20
attr IR_Blaster subscribeReading_32 ir_blaster/receiver/NEC/32

Sendeseite

Da die firmware die zu sendenden Codes jeweils aus dem passenden Topic erwartet, ist das publishSet jeweils entsprechend anzupassen, z.B. auf

attr IR_Blaster publishSet ir_blaster/sender/NEC/32/

Dann sollten sich die Fernbediencodes bereits senden lassen.

set IR_Blaster 1587632295

Da es sehr umständlich ist, bei Wechsel zwischen verschiedenen Fernbedienungsprotokollen jeweils erst das publishSet zu ändern, nutzen wir die Möglichkeit, entsprechende publishSet_<reading> anzulegen. Für jede der gewünschten Protokolle ist daher ein entsprechendes Attribut zu setzen. Für obiges Beispiel wäre dies z.B.

attr IR_Blaster publishSet_IRNEC32 ir_blaster/sender/NEC/32

Nunmehr sollte der obige Code auch über diesen Befehl erfolgreich an den Wemos übertragen werden können:

set IR_Blaster NEC32 1587632295

Wenn dies funktioniert, können die übrigen Attribute gesetzt werden:

attr IR_Blaster publishSet_IRPANA ir_blaster/sender/PANASONIC/48/16388
attr IR_Blaster publishSet_IRRC512 ir_blaster/sender/RC5/12
attr IR_Blaster publishSet_IRRC61 ir_blaster/sender/RC6/1
attr IR_Blaster publishSet_IRRC615 ir_blaster/sender/RC6/15
attr IR_Blaster publishSet_IRRC620 ir_blaster/sender/RC6/20
attr IR_Blaster publishSet_IRRaw ir_blaster/sender/sendStoredRaw
attr IR_Blaster publishSet_UNKNOWN13 ir_blaster/sender/UNKNOWN/13
attr IR_Blaster publishSet_rawMode ir_blaster/sender/rawMode
attr IR_Blaster publishSet_sendGC ir_blaster/sender/sendGC
attr IR_Blaster publishSet_sendRAW ir_blaster/sender/sendRAW

MQTT2_DEVICE

Wenn man Mosquitto wie in MQTT2 DEVICE beschrieben mit einem Broker eingerichtet hat, sollte das IR-WLAN-Gateway automatisch gefunden und angelegt werden. Auf dieses neue Device muss dann noch das passende Template angewendet werden, z.B. bei einem auf Tasmota geflashten IR-Blaster:

set IR_Blaster attrTemplate tasmota_ir

Beim Anwenden des Templates wird man nach 4 Befehlen gefragt. Diese werden später mittels des setList-Attributs für die Befehle "power", "volumeup" und "11" verwendet (die "11" ist ein Beispiel dafür, zwei Tasten hintereinander zu senden). Das sind aber ohnehin nur Beispiele, die im setList-Attribut später geändert werden können. Für den Anfang reicht es, dort irgendwelche IR-Befehle einzutragen.

Zu verwendende IR-Befehle kann man der Tasmota-Konsole entnehmen: Wenn man die vorhandene Fernbedienung auf den IR-Blaster richtet und Tasten drückt, zeigt die Konsole den empfangenen Befehl an. Z.B. zeigt Tasmota:

13:23:52 MQT: tele/tasmota-ir/RESULT = {"IrReceived":{"Protocol":"NEC","Bits":32,"Data":"0x1D00B946","DataLSB":"0xB8009D62","Repeat":0}}

Der entsprechende IR-Befehl ist dann:

{"Protocol":"NEC","Bits":32,"Data":"0x1D00B946","DataLSB":"0xB8009D62","Repeat":0}

Ggf. ändert man "Repeat" auf eine andere Zahl als "0", um Sende- bzw. Empfangsproblemen zur ein mehrfaches Versenden des IR-Befehls vorzubeugen.

{"Protocol":"NEC","Bits":32,"Data":"0x1D00B946","DataLSB":"0xB8009D62","Repeat":2}

Über setList kann man dann definieren, dass IR-Befehle über den IR-Blaster gesendet werden. Z.B. kann man über

setList IR_Blaster power:noArg cmnd/tasmota-ir/IRsend {"Protocol":"NEC","Bits":32,"Data":"0x1D00B946","DataLSB":"0xB8009D62","Repeat":2}

erreichen, dass der IR-Befehl versendet wird, wenn man in FHEM

set IR_Blaster power

ausführt. So können in setList alle benötigten Befehle gespeichert werden.

Zusätzlich zu solchen spezifischen Befehlen wird in setList der generische Befehl

set IR_Blaster irsend

abgelegt. Dieser kann verwendet werden, um beliebige IR-Befehle über den IR-Blaster zu versenden. Z.B. versendet

set IR_Blaster irsend NEC 32 0x1D00B946

den oben als Beispiel verwendeten IR-Befehl.

Grafische Darstellung in FHEM

Diese erfolgt über remotecontrol. Das Modul ist hier näher beschrieben, an dieser Stelle daher nur die sich ergebenden auszugsweisen Definitionen des notify und des remotecontrol-Devices:

remotecontrol

define Receiver remotecontrol
attr Receiver rc_iconpath icons/remotecontrol
attr Receiver rc_iconprefix black_btn_
attr Receiver row00 IRNEC32 2122415745:POWEROFF3,IRNEC32 2122448385:POWEROFF2,:blank,IRNEC32 1587632550:SPEAKER1,IRNEC32 1587665190:SPEAKER2
attr Receiver row01 :blank,:blank,:blank
attr Receiver row02 IRNEC32 1587632295:VOLUP2,IRNEC32 1587652950:SLEEP,IRNEC32 1587624135:MUTE,:blank,IRNEC32 1587664935:VOLDOWN2
...

notify

Zur Übertragung der Events aus remotecontrol wird ein notify benötigt:

define notify_Receiver notify Receiver set IR_Blaster $EVENT

Nutzung als Input-Device

Auf eingehende Infrarotsignale kann mittels der üblichen Event-Handler (notify, DOIF, watchdog usw.) reagiert werden, am einfachsten nutzt man zur Erstellung den Event-Monitor.

Bekannte Probleme

Bei der Erkennung von Codes erfolgt uU. ein sehr schneller Wechsel zu Wiederholungscodes. Ggf. sollte man versuchen, die Fernbedienungstasten nur sehr kurz zu drücken, und erkannte Codes durch entsprechende Sendetests direkt zu verifizieren.

Links