IR-MQTT-Gateway: Unterschied zwischen den Versionen
K (Link auf Event-Monitor repariert) |
K (Kat) |
||
Zeile 128: | Zeile 128: | ||
[[Kategorie:Infrarot]] | [[Kategorie:Infrarot]] | ||
[[Kategorie:Code Snippets]] | [[Kategorie:Code Snippets]] | ||
[[Kategorie:MQTT]] |
Version vom 23. November 2018, 18:28 Uhr
IR-MQTT-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 und MQTT_BRIDGE |
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.
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
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
- Hardwarebeschreibung: Platinenlayout, Bauteileliste
- firmware: [1]
- Darstellung mit Hilfe einer alternativen firmware
- Infos zur Hardware: 360 Grad IR WLAN Gateway