IR-MQTT-Gateway: Unterschied zwischen den Versionen
K (Link auf Event-Monitor repariert) |
K (MQTT_BRIDGE-Hinweis entfernt) |
||
(5 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 10: | Zeile 10: | ||
|HWPowerConsumption= ~0,2W(Standby) | |HWPowerConsumption= ~0,2W(Standby) | ||
|HWSize=55x20 mm (Durchm. x Höhe) | |HWSize=55x20 mm (Durchm. x Höhe) | ||
|HWDeviceFHEM=MQTT, MQTT_DEVICE | |HWDeviceFHEM=MQTT, MQTT_DEVICE | ||
|HWManufacturer=HomeBrew}} | |HWManufacturer=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. | 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. | ||
{{Hinweis|Dieser Artikel entstand vor Einführung der [[MQTT#Installation in FHEM|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 [[MQTT2-Module - Praxisbeispiele#Tasmota|Tasmota]] verwendet werden. Dazu existiert auch ein [[MQTT2-Module - Praxisbeispiele#attrTemplate|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 == | == Allgemeines == | ||
Zeile 95: | Zeile 98: | ||
attr IR_Blaster publishSet_sendGC ir_blaster/sender/sendGC | attr IR_Blaster publishSet_sendGC ir_blaster/sender/sendGC | ||
attr IR_Blaster publishSet_sendRAW ir_blaster/sender/sendRAW | 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: | |||
<nowiki>13:23:52 MQT: tele/tasmota-ir/RESULT = {"IrReceived":{"Protocol":"NEC","Bits":32,"Data":"0x1D00B946","DataLSB":"0xB8009D62","Repeat":0}}</nowiki> | |||
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 == | == Grafische Darstellung in FHEM == | ||
Zeile 122: | Zeile 148: | ||
* {{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}} | ||
[[Kategorie:Other Components]] | [[Kategorie:Other Components]] | ||
Zeile 128: | Zeile 153: | ||
[[Kategorie:Infrarot]] | [[Kategorie:Infrarot]] | ||
[[Kategorie:Code Snippets]] | [[Kategorie:Code Snippets]] | ||
[[Kategorie:MQTT]] |
Aktuelle Version vom 16. September 2021, 05:21 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 |
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.
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
- Hardwarebeschreibung: Platinenlayout, Bauteileliste
- firmware: [1]
- Darstellung mit Hilfe einer alternativen firmware
- Infos zur Hardware: 360 Grad IR WLAN Gateway