IR Wlan Gateway aus "Broadlink RM 3 mini" & "Wemos D1 Mini"

Begonnen von Fheminista, 09 März 2019, 21:38:06

Vorheriges Thema - Nächstes Thema

Fheminista

Hallo,

ich möchte hier meine Erfahrungen mit dem Umbau eines Broadlink R3 mini (ist aktuell für unter 20 EUR zu haben) in einen "IR-Blaster" auf Basis ESP8622 (Wemos D1 mini) teilen, siehe angehängtes Bild.


Vorgehen:
Deckel des Gehäuses mit einem Messer rundherum abhebeln (ist festgeklebt). Platine lässt sich dann nach oben herausziehen. Vom alten Board wird die Sende-/Empfangseinheit sowie die Stromversorgung über die USB-Buchse weiterverwendet.

Der alte Mikrokontroller ist überflüssig und muss für den ESP8266 weichen. Da meine Lötfähigkeiten begrenzt sind, habe ich die rabiate Methode verwendet und diesen einfach mit einem Schraubenzieher abgehebelt (am Pfeil ansetzen).

Den Wemos D1 vorbereiten, d.h. mit der Firmware bespielen.

Jetzt muss nur noch der Wemos D1 mit 4 Leitungen verbunden werden: 5V, GND, IR-Receive, IR-Send. Es gibt viele Stellen auf dem Board wo, man dies abgreifen könnte, ich habe den Spannungswandler für 5V&GND sowie die zwei ersten Pins des alten Microcontrollers genutzt (dort wo U3 steht).

Den ESP8266 dann Huckepack mit Klebeband auf der alten Platine fixieren. Dabei auf die Isolierung achten, damit keine Kurzachlüsse entstehen.

Nach einem Test darf die Platine wieder in ihr altes Gehäuse.

Viel Spaß beim Nachbauen!

-----
Edit 10.03.2019: Links auf Firmware eingefügt


reibuehl

Reiner.

Fheminista

Zitat von: reibuehl am 09 März 2019, 22:24:11
Welche Firmware hast Du den dafür benutzt?

Habe die Links oben eingefügt.

Die Firmware des IR-Blaster 360 funktioniert ohne Änderungen 1:1.

Bei Tasmota kann man das Sonoff.bin benutzen, muss dann unter Module Generic 18 wählen sowie D4 GPIO2 IRrecv 51, D1 GPIO5 IRSend 08. In der Console sieht man dann die empfangen, gesendeten IR-Codes. Anbindung an FHEM über MQTT2 Server mit Autocreate funktioniert sehr gut.

reibuehl

Prima! Danke! Hab gerade mal einen RM 3 mini bestellt :-)
Reiner.

RappaSan

Habt ihr mal ein Beispiel für den IRblaster?
Welches attrTemplate wird genommen?
Wie definiere ich die einzelnen empfangenen Fernbedienungs-Befehle, z.B. An/Aus, Taste 1,2,3,usw?
Mit IR_Remote ging das ja ganz gut mit der DOELSEIF-Kette.

Beta-User

Zitat von: RappaSan am 20 März 2019, 17:19:15
Welches attrTemplate wird genommen?
Wie definiere ich die einzelnen empfangenen Fernbedienungs-Befehle, z.B. An/Aus, Taste 1,2,3,usw?
Ein ganz fertiges attrTemplate für MQTT2_DEVICE gibt es noch nicht, aber lange dauern wird es vermutlich nicht mehr. Bausteine:

Vorabeit von TomLee:
https://forum.fhem.de/index.php/topic,94494.msg919501.html#msg919501

Ideen von igami:
- Komplettes Sendelisten-Beispiel (2. Teil der Frage): https://forum.fhem.de/index.php/topic,72950.msg920488.html#msg920488
- Variante, um den JSON nur teilweise zu expandieren: https://forum.fhem.de/index.php/topic,98723.msg920719.html#msg920719

Meine Weiterentwicklung, um aus dem JSON pro Protokoll/Bit-Kombination je ein eigenes Reading zu basteln und den Sendecode flexibel zusammenbauen zu können:https://forum.fhem.de/index.php/topic,98723.msg920946.html#msg920946
Mit letzterem sollte es eigentlich gehen, z.B. auch wieder remotecontrol für das Web-Interface zu nutzen, es ist auch kein Problem, die "statische" Variante von Igami mit der Flexiblen zu kombinieren usw., oder das "0x" gleich in den Empfangs-JSON reinzubauen, damit in Sende- und Empfangsrichtungen derselbe Inhalt in einem Reading steht.

Bin mal gespannt, welche Lösungen da insgesamt noch gefunden werden :) .



Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Fheminista

Zitat von: RappaSan am 20 März 2019, 17:19:15
Habt ihr mal ein Beispiel für den IRblaster?
Welches attrTemplate wird genommen?
Wie definiere ich die einzelnen empfangenen Fernbedienungs-Befehle, z.B. An/Aus, Taste 1,2,3,usw?
Mit IR_Remote ging das ja ganz gut mit der DOELSEIF-Kette.

Um empfangene IR Codes auszuwerten habe ich mir folgendes Userreading ergänzt:

attr MQTT2_irblaster1 userReadings IR_Code {ReadingsVal("MQTT2_irblaster1","RESULT_IrReceived_Protocol",0)  ."_" .ReadingsVal("MQTT2_irblaster1","RESULT_IrReceived_Bits",0)  ."_" .ReadingsVal("MQTT2_irblaster1","RESULT_IrReceived_Data",0)}

Dann kann man mit Notify z.B. wie folgt darauf reagieren:

defmod n_IR_Taste_x notify MQTT2_irblaster1:IR_Code:.PANASONIC_48_D000805 set LampenSchalter on

Es funktioniert, aber es ist sicherlich nicht elegant gelöst. Bin mir nicht mal sicher, ob die Syntax beim Notify 100% stimmt. Funktioniert - bin aber für Vorschläge dankbar  :D
Je nach IR-Protokoll gibt es übrigens auch Verwechslungen beim Erkennen und es werden zufällig ganz andere Codes gemeldet. Auf die Verwechslungen kann man ja zur Not auch noch zusätzlich reagieren, um die Erkennungsleistung zu verbessern. Was so alles "erkannt" wird sieht man sehr schön auf der Console im Tasmota Web-Interface.

RappaSan

Ich hab mal die Vorschläge ausprobiert, bin aber zu keinem für mich brauchbaren Ergebnis gekommen.
Trotz alledem habe ich den Eindruck gewonnen, daß es vorangeht mit der Implementierung.
Mir fehlt momentan allerdings die Zeit, mich da als Betatester einzubringen, daher bin ich wieder zur ursprünglichen Version zurück gewechselt.

TomLee

Zitat von: RappaSan am 20 März 2019, 17:19:15
Wie definiere ich die einzelnen empfangenen Fernbedienungs-Befehle, z.B. An/Aus, Taste 1,2,3,usw?

Hallo,

ist es vielleicht an einem Beispiel besser nachvollziehbar wie man die empfangenen IR-Codes als set-Befehle definieren kann.

Gruß

Thomas

RappaSan

#9
Hallo Thomas,
danke für den link, probiere ich auch noch mal aus. Das umflashen der Software ota geht ja bestens.

Doch noch 'ne Frage:

Die ganzen setstates am Ende: Wofür sind die gut? Müssen die so mit Datum und Uhrzeit hinter die attr in das device ? Was bewirken die?

Beta-User

Zitat von: RappaSan am 22 März 2019, 08:43:59
Die ganzen setstates am Ende: Wofür sind die gut? Müssen die so mit Datum und Uhrzeit hinter die attr in das device ? Was bewirken die?
Kannst du weglassen, werden dann hoffentlich für deine Situation automatisch erstellt.

(Sind nur wichtig, damit ggf. Helfer wissen, was grade Sache ist, und seit wann...)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

RappaSan

Irgendwie bekomme ich kein gescheites Ergebnis per MQTT2.
Mit Autocreate bekomme ich zumindest die empfangenen codes angezeigt, aber senden läuft nicht.
Nevermind, die alte DOIF-Kette funktioniert ja, damit kann ich zunächst leben.

Beta-User

Empfangen und Senden unterscheiden sich leicht:
Sendeseitig muß ein 0x vor den eigentlichen IR-Code. Hattest du das beachtet?

Eine direkte Umwandlung des empfangenen Codes in sendefähige Readinginhalte müßte auch ohne weiteres gehen, leider finde ich meinen Code dazu nicht mehr, aber im Prinzip wäre das hier etwas anzupassen:

tele/tasm_8BABA9/RESULT:.* { $EVENT =~ m,..IrReceived....Protocol...([A-Za-z0-9]+)...Bits..([\d]+)..Data...([A-Za-z0-9]+)..., ? {"$1_$2"=>$3} : json2nameValue($EVENT) }


Ungetestet:tele/tasm_8BABA9/RESULT:.* { $EVENT =~ m,..IrReceived....Protocol...([A-Za-z0-9]+)...Bits..([\d]+)..Data...([A-Za-z0-9]+)..., ? {"IrReceived_sendcode"=>'{"Protocol":"$1","Bits":$2,"Data":"$3"}'} : json2nameValue($EVENT) }
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

RappaSan

#13
Das Ganze hat mir doch keine Ruhe gelassen und ich habe für meinen IRBlaster eine funktionierende Konfiguration gefunden:


define IR_ESP_TV_Wohnzimmer MQTT2_DEVICE DVES_29B28E
setuuid IR_ESP_TV_Wohnzimmer 5c95fc2d-f33f-d006-37ee-87f2442bc604aa61
attr IR_ESP_TV_Wohnzimmer IODev MyBroker
attr IR_ESP_TV_Wohnzimmer autocreate 0
attr IR_ESP_TV_Wohnzimmer event-on-change-reading .*
attr IR_ESP_TV_Wohnzimmer readingList DVES_29B28E:tele/sonoff/LWT:.* LWT\
DVES_29B28E:cmnd/sonoff/POWER:.* POWER\
DVES_29B28E:tele/sonoff/STATE:.* { json2nameValue($EVENT) }\
DVES_29B28E:tele/sonoff/SENSOR:.* { json2nameValue($EVENT) }\
DVES_29B28E:tele/sonoff/INFO.:.* { json2nameValue($EVENT) }\
DVES_29B28E:tele/sonoff/RESULT.:.* { json2nameValue($EVENT) }
attr IR_ESP_TV_Wohnzimmer room MQTT2_DEVICE
attr IR_ESP_TV_Wohnzimmer setList power:noArg cmnd/sonoff/IRSend/IRSend {"Protocol": "SAMSUNG","Bits": 32, "Data": 0xE0E040BF}\
P0:noArg cmnd/sonoff/IRSend/IRSend {"Protocol": "SAMSUNG","Bits": 32, "Data": 0xE0E08877}\
1:noArg cmnd/sonoff/IRSend/IRSend {"Protocol": "SAMSUNG","Bits": 32, "Data": 0xE0E020DF}\
2:noArg cmnd/sonoff/IRSend/IRSend {"Protocol": "SAMSUNG","Bits": 32, "Data": 0xE0E0A05F}\
3:noArg cmnd/sonoff/IRSend/IRSend {"Protocol": "SAMSUNG","Bits": 32, "Data": 0xE0E0609F}\
4:noArg cmnd/sonoff/IRSend/IRSend {"Protocol": "SAMSUNG","Bits": 32, "Data": 0xE0E010EF}\
5:noArg cmnd/sonoff/IRSend/IRSend {"Protocol": "SAMSUNG","Bits": 32, "Data": 0xE0E0906F}\
6:noArg cmnd/sonoff/IRSend/IRSend {"Protocol": "SAMSUNG","Bits": 32, "Data": 0xE0E050AF}\
7:noArg cmnd/sonoff/IRSend/IRSend {"Protocol": "SAMSUNG","Bits": 32, "Data": 0xE0E030CF}\
8:noArg cmnd/sonoff/IRSend/IRSend {"Protocol": "SAMSUNG","Bits": 32, "Data": 0xE0E0B04F}\
9:noArg cmnd/sonoff/IRSend/IRSend {"Protocol": "SAMSUNG","Bits": 32, "Data": 0xE0E0708F}\
#10:noArg cmnd/sonoff/IRSend/Backlog cmnd/sonoff/IRSend/IRSend {"Protocol": "SAMSUNG","Bits": 32, "Data": 0xE0E020DF};; cmnd/sonoff/IRSend/Delay 5;; cmnd/sonoff/IRSend/IRSend {"Protocol": "SAMSUNG","Bits": 32, "Data": 0xE0E08877}\
#11:noArg cmnd/sonoff/IRSend/Backlog cmnd/sonoff/IRSend/IRSend {"Protocol": "SAMSUNG","Bits": 32, "Data": 0xE0E020DF};; cmnd/sonoff/IRSend/Delay 5;; cmnd/sonoff/IRSend/IRSend {"Protocol": "SAMSUNG","Bits": 32, "Data": 0xE0E020DF}\
#12:noArg cmnd/sonoff/IRSend/Backlog cmnd/sonoff/IRSend/IRSend {"Protocol": "SAMSUNG","Bits": 32, "Data": 0xE0E020DF};; cmnd/sonoff/IRSend/Delay 5;; cmnd/sonoff/IRSend/IRSend {"Protocol": "SAMSUNG","Bits": 32, "Data": 0xE0E0A05F}\
#13:noArg cmnd/sonoff/IRSend/Backlog cmnd/sonoff/IRSend/IRSend {"Protocol": "SAMSUNG","Bits": 32, "Data": 0xE0E020DF};; cmnd/sonoff/IRSend/Delay 5;; cmnd/sonoff/IRSend/IRSend {"Protocol": "SAMSUNG","Bits": 32, "Data": 0xE0E0609F}\
VolUp:noArg   cmnd/sonoff/IRSend/IRSend {"Protocol": "SAMSUNG","Bits": 32, "Data": 0xE0E0E01F}\
VolDown:noArg   cmnd/sonoff/IRSend/IRSend {"Protocol": "SAMSUNG","Bits": 32, "Data": 0xE0E0D02F}\
TV_GUIDE:noArg   cmnd/sonoff/IRSend/IRSend {"Protocol": "SAMSUNG","Bits": 32, "Data": 0xE0E0F20D}\


Warum die zweistelligen Programmnummern ein # davor haben müssen, habe ich noch nicht begriffen. ???

Wie man sehen kann, mußten einige Befehle anders als im Beispiel geschrieben werden, damit sie funktionieren.
Kein Wunder, daß ich im ersten Versuch kein Ergebnis bekam.

gloob

#14
Warum nicht einfach einen ESP-01 nehmen? Der ist deutlich kleiner und die benötigten 2 Pins hat er auch frei.

Preislich lohnt sich meiner Meinung nach der Umbau auch nicht.
Die Platine für das 360 Grad WLAN Gateway inklusive Bauteile ist für unter 10€ zu bekommen. Gut man muss etwas löten können. Wobei die IR Mini Platine auch ohne SMD Teile auskommt.
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway