Robins Blog – Technik und Multimedia

Fhem: Universeller MQTT Infrared Transmitter und Receiver mit ESP 8266

Viele von Euch haben die bunten billig LED-Stripes, sei es für Glasbodenbeleuchtung, Vitrinenbeleuchtung, Kellerbar oder Regalbeleuchtung. Ein kleines Problem sehe ich, das zum Ein- und Ausschalten oder Farbveränderung des Stripes immer die mitgelieferte Infrarot-Fernbedienung verwendet werden muss, welche eine geringe Reichweite hat und punktgenau auf dem Empfänger gehalten werden muss. Mich nervt, das es sich hier um eine Insellösung handelt und wieder eine zusätzliche Fernbedienung auf dem Tisch liegt. Ebenfalls passen sich die Stripes nicht automatisch an, wenn man mehrere Stripes oder bunte Lampen in Verwendung hat.

Wäre es nicht schön, wenn man diese Stripes zentral steuern könnte mit dem Smartphone oder automatisiert mit FHem? Oder schalten mit Alexa?
Genau das bespreche ich in diesem Blog-Beitag.

Hier die Zutaten-Liste:
Software:
Fhem
Tasmota

Vorgehensweise:
Flashen von Tasmota auf dem Witty-Board. Das zeige ich nicht, gibt es 100 Howtos im Internet.

Konfiguration von Tasmota:

dann mqtt konfigurieren (ip, topic usw.)

Verbinden der Hardware:
Wie im Screenshot gezeigt.

Einlesen der IR – Fernbedienung und Ablesen des jeweiligen Codes (on off rot grün usw.)
Das mache ich auf der Tasmota-Konsole.
Hier den Dezimalwert des Data-Werte für die jeweilige Taste herausschreiben

In Fhem:
Einen Dummy erstellen und notifies bauen. die abgelesenen codes dort eintragen.

defmod IR_Sender dummy
attr IR_Sender readingList brightness power color
attr IR_Sender room 30_Wohnzimmer
attr IR_Sender setList brightness:up,down power:on,off color:red,green,blue,white effects:flash,strobe,fade,smooth

defmod IR_sender_notify_1 notify IR_Sender:.* { \
my $ircode="";;\
if ($EVTPART1 eq "on") {\
$ircode="16761150";;\
}\
elsif ($EVTPART1 eq "off") {\
$ircode="16728510";;\
}\
elsif ($EVTPART1 eq "up") {\
$ircode="16712190";;\
}\
elsif ($EVTPART1 eq "down") {\
$ircode="16744830";;\
}\
elsif ($EVTPART1 eq "red") {\
$ircode="16720350";;\
}\
elsif ($EVTPART1 eq "green") {\
$ircode="16752990";;\
}\
elsif ($EVTPART1 eq "blue") {\
$ircode="16736670";;\
}\
elsif ($EVTPART1 eq "white") {\
$ircode="16769310";;\
}\
elsif ($EVTPART1 eq "flash") {\
system "mosquitto_pub -h 192\.168\.178\.67 -t cmnd/sonoff-irsendrec/IRsend -m \'\{\"protocol\": \"NEC\",\"bits\": 32, \"data\": 16728510\}\' ";;\
}\
elsif ($EVTPART1 eq "strobe") {\
system "mosquitto_pub -h 192\.168\.178\.67 -t cmnd/sonoff-irsendrec/IRsend -m \'\{\"protocol\": \"NEC\",\"bits\": 32, \"data\": 16728510\}\' ";;\
}\
elsif ($EVTPART1 eq "fade") {\
system "mosquitto_pub -h 192\.168\.178\.67 -t cmnd/sonoff-irsendrec/IRsend -m \'\{\"protocol\": \"NEC\",\"bits\": 32, \"data\": 16728510\}\' ";;\
}\
elsif ($EVTPART1 eq "smooth") {\
system "mosquitto_pub -h 192\.168\.178\.67 -t cmnd/sonoff-irsendrec/IRsend -m \'\{\"protocol\": \"NEC\",\"bits\": 32, \"data\": 16728510\}\' ";;\
}\
\
system "mosquitto_pub -h 192\.168\.178\.67 -t cmnd/sonoff-irsendrec/IRsend -m \'\{\"protocol\": \"NEC\",\"bits\": 32, \"data\": " . $ircode ."\}\' ";;\
\
Log3($NAME, 2, "IR-Signal funktion: " . $EVTPART1 . " code:" . $ircode);;\
\
}

ergebis

mqtt-device

defmod IR_Receiver MQTT_DEVICE
attr IR_Receiver IODev MyBroker
attr IR_Receiver room MQTT
attr IR_Receiver stateFormat received: IrReceived_Data
attr IR_Receiver subscribeReading_INFO1 tele/sonoff-irsendrec/INFO1
attr IR_Receiver subscribeReading_INFO2 tele/sonoff-irsendrec/INFO2
attr IR_Receiver subscribeReading_INFO3 tele/sonoff-irsendrec/INFO3
attr IR_Receiver subscribeReading_RESULT tele/sonoff-irsendrec/RESULT
attr IR_Receiver subscribeReading_SENSOR tele/sonoff-irsendrec/SENSOR
attr IR_Receiver subscribeReading_STATE tele/sonoff-irsendrec/STATE

defmod ejIR_Receiver expandJSON IR_Receiver.*:.*:.{.*}

Und wie gehts weiter?
Seid Kreativ! Der Witty hat einen LDR an Board, so könnte man bei einbrechender Dunkelheit das Stripe einschalten.
Oder:
Wenn ihr mehrere bunte Lampen habt, wie z.B die Hue, könnt ihr via Notify die Farbe passend zur Hue-Lampe anpassen.
Oder:
Wenn die Schrankbeleuchtung eingeschaltet wird, wird der Stripe auch direkt ein- bzw ausgeschaltet.
defmod VitrineBunt_DOIF DOIF ( ([VitrineWeisslicht] eq "ON") and ([?rgr_Residents] eq "zuhause") ) \
(set IR_Sender power on)\
DOELSEIF ([VitrineWeisslicht] eq "OFF")\
(set IR_Sender power off)\

Das wäre es eigentlich. Bei Fragen, ab in die Kommentare.
Wenn ich Euch Tasmota flashen soll, für 11 Euro inkl. Versand seit ihr dabei.

Die mobile Version verlassen