IR-MQTT-Gateway: Unterschied zwischen den Versionen
(Erste Version) |
|||
Zeile 127: | Zeile 127: | ||
* {{Link2Forum|Topic=75466|Message=672652|LinkText=Darstellung mit Hilfe einer alternativen firmware}} | * {{Link2Forum|Topic=75466|Message=672652|LinkText=Darstellung mit Hilfe einer alternativen firmware}} | ||
* Infos zur Hardware: {{Link2Forum|Topic=72950|LinkText=360 Grad IR WLAN Gateway}} | * Infos zur Hardware: {{Link2Forum|Topic=72950|LinkText=360 Grad IR WLAN Gateway}} | ||
Version vom 3. Mai 2018, 11:41 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
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
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
Vereinfachung der Sendemöglichkeit
Da es sehr umständlich ist, bei Wechsel zwischen verschiedenen Fernbedienungsprotokollen jeweils erst das publishSet zu ändern, nutzen wir ein Dummy-Device iVm. einer MQTT_BRIDGE, um dies zu vereinfachen.
Dummy
Es wird daher ein entsprechender Dummy definiert, der eine Zuordnung von Codes zu Protokollen ermöglicht:
define IRsender dummy attr IRsender readingList rawMode sendGC sendRAW IRRaw IRNEC32 IRPANA IRRC512 IRRC61 IRRC620 IRRC615 UNKNOWN13 attr IRsender setList rawMode:ON,.* sendGC sendRAW IRRaw IRNEC32 IRPANA IRRC512 IRRC61 IRRC620 IRRC615 UNKNOWN13
MQTT_BRIDGE
Anschließend benötigt man eine MQTT_BRIDGE, um die später mit remotecontrol zu setzenden Readings des Dummy an den Broker zu übermitteln. Für die vorliegend verwendeten Fernbediencodes sieht diese beispielsweise so aus:
define MQTTIR MQTT_BRIDGE IRsender attr MQTTIR publishReading_rawMode ir_blaster/sender/rawMode attr MQTTIR publishReading_sendGC ir_blaster/sender/sendGC attr MQTTIR publishReading_sendRAW ir_blaster/sender/sendRAW attr MQTTIR publishReading_IRRaw ir_blaster/sender/sendStoredRaw attr MQTTIR publishReading_IRNEC32 ir_blaster/sender/NEC/32 attr MQTTIR publishReading_IRPANA ir_blaster/sender/PANASONIC/48/16388 attr MQTTIR publishReading_IRRC512 ir_blaster/sender/RC5/12 attr MQTTIR publishReading_IRRC61 ir_blaster/sender/RC6/1 attr MQTTIR publishReading_IRRC620 ir_blaster/sender/RC6/20 attr MQTTIR publishReading_IRRC615 ir_blaster/sender/RC6/15 attr MQTTIR publishReading_UNKNOWN13 ir_blaster/sender/UNKNOWN/13
Nunmehr sollte der obige Code auch über diesen Befehl erfolgreich an den Wemos übertragen werden können:
set IRsender NEC32 1587632295
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
define notify_Receiver notify Receiver set IRsender $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