WLAN IR-Modul in Unterputzdose

Ende 2014 gab es bereits einen Beitrag zu einem Arduino – Infrarot Sende- und Empfangsmodul aber nie eine Fortsetzung. Das Projekt habe ich damals aus zeitlichen Gründen auf Eis gelegt. Als dann vor kurzem die Netzwerkschnittstelle von unserem Denon AV-Receiver gestorben ist, hatte ich wieder einen Grund mehr mich wieder mit dem Thema zu beschäftigen. Daraus wurde ein WLAN IR-Modul, das in eine Unterputzdose passt.
WLAN IR Modul in Unterputzdose - GIRA Blindabdeckung

Die Komponenten

Das Prinzip ist geblieben, es haben sich nur einige Bauteile geändert. Den Plan das Ganze mit einem Arduino Pro Micro und die Kommunikation über das RS485 Protokoll durchzuführen, habe ich verworfen. Mit einem ESP8266 Modul, genauer gesagt dem Wemos D1 mini, ist der Aufwand wesentlich geringer. Auch die Installation in einer Unterputzdose war damit kein Problem mehr.

Zum Bau werden neben Widerständen, NPN Transistor und den IR LEDs noch ein Wemos D1 mini mit Wemos DC Power Shield und optional einem Wemos ProtoBoard Shield benötigt. Bastelmaterial wie Kabel und Co. setze ich mal voraus. Den Wemos D1 (mini, mini Pro oder mini Lite) und die Shields könnt ihr im Wemos CC Store (Affiliate-Link) finden.
WLAN IR Modul in Unterputzdose - Aufbau

Stromversorgung

Als Stromversorgung für das WLAN IR-Modul habe ich mich für das Wemos DC Power Shield entschieden. Das Shield nimmt zwar etwas mehr Platz weg als ein kleiner Step-Down Spannungsregler, dafür muss es einfach nur zusammengesteckt werden. Das Shield benötigt eine Spannungsquelle von 7-24 Volt und hat mit 1A ausreichend Reserve.

Zur Info: Für den Aufbau habe ich das Wemos DC Power Shield in der Version 1.0 verwendet. Da mir der Power Plug zu hoch war, habe ich ihn einfach ausgelötet.

Der Aufbau

Die Schaltung ist recht einfach. Base vom BC548 NPN Transistor wird über einem 1k Widerstand mit dem PIN D8 verbunden. Die IR-LED Anode (+) hängt direkt an 5 Volt und die Kathode (-) am Collector des Transistors. Der Emitter vom Transistor ist mit Ground verbunden. Die beiden IR-LEDs sind parallel geschaltet. Da ich keine Daten mehr von den IR-LEDs hatte, habe ich diese ohne Vorwiderstand mit 5V verbunden. Ich habe aber bisher keine Probleme festgestellt, ihr solltet aber je nach IR-LED einen passenden Widerstand einplanen.
WLAN IR Modul in Unterputzdose - Schaltung
Damit das Ganze auch hübsch aussieht, habe ich in eine Gira Blindabdeckung zwei Löcher gebohrt und zwei Halterungen für 5mm IR-LEDs eingesetzt. Achtet unbedingt darauf, dass die IR-LEDs einen möglichst großen Abstrahlwinkel haben und die Halterungen den Abstrahlwinkel nicht verringern. Dies muss nicht unbedingt ein Problem sein, bei mir hatten die Halterungen den Abstrahlwinkel aber so verringert, dass der Beamer unter der Decke nicht mehr auf die IR-Befehle reagiert hat.

Eine IR-Empfangsdiode habe ich nicht verbaut. Diese kann zum anlernen einer neuen Fernbedienung übergangsweise auch direkt auf den Wemos D1 gesteckt werden.

Smart Home

Das WLAN IR-Modul wird ganz einfache über HTTP Befehle gesteuert. Als Beispiel würde der folgende Aufruf den Denon ausschalten.

http://192.168.1.1/irsend?device=denon&command=off

Wenn die IP Adresse direkt  aufgerufen wird, erscheint eine kleine Statusseite. Darauf wird der Receive Signal Strength Indicator (RSSI)Wert ausgegeben. Die Seite ist natürlich noch ausbaufähig. Es wäre unter anderem möglich, Buttons für die verschiedenen Befehle auf die Weboberfläche zu legen. So würde die Bedienung auch ohne Smart Home über einen Browser funktionieren.

Loxone Integration

In der Loxone Config muss nur ein Virtueller Ausgang mit der folgenden Adresse angelegt werden. Diese sollte natürlich die statische IP-Adresse vom WLAN IR-Modul beinhalten.

http://192.168.1.1

Für jeden IR-Befehl muss ein Virtueller Ausgang Befehl angelegt werden. Hier muss bei Befehl bei EIN nur der folgende Teil eingetragen werden.

/irsend?device=denon&command=off

Bei mehreren Geräten macht die Kombination aus Device und Command Sinn, da man sonst schnell die Übersicht verlieren kann.

Der Sketch

Für den Sketch benötigt ihr die IRremoteESP8266 Library. Diese kann, wie mittlerweile fast alle Libraries, ganz einfach über den Library Manager installiert werden. Die IRremoteESP8266 Library ist ein Fork der IRremote Library. Die Befehle und IR-Codes sind identisch mit der IRremote Library.

Mit der Over The Air Update Funktion ist das WLAN IR-Modul perfekt vorbereitet für den Einbau in die Unterputzdose. Es müssen natürlich die IR-Codes an eure Geräte angepasst werden und wie immer die WLAN Konfiguration.

#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
#include <ESP8266WebServer.h>
#include <IRsend.h>

IRsend irsend(D8); //an IR led is connected to GPIO PIN 0 / D8

// WLAN configuration
const char* ssid = "<SSID>";
const char* password = "<PASSWORD>";

unsigned long startTime = millis();

// Status page
long rssi;

// Create an instance of the Telnet-Server, specify the port to listen on as an argument
WiFiServer TelnetServer(23);
WiFiClient TelnetClient;

// Create an instance of the Web-Server, specify the port to listen on as an argument
ESP8266WebServer WebServer(80);

void setup() {
  // Begin Serial
  Serial.begin(115200);
  delay(10);  
  Serial.println("Booting");
  Serial.println();

  // Show space usage
  Serial.printf("Sketch size: %u\n", ESP.getSketchSize());
  Serial.printf("Free size: %u\n", ESP.getFreeSketchSpace());  
  Serial.println();

  // Connect to WiFi network
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  
  unsigned long startTime = millis();  
  // ... Give ESP 10 seconds to connect to station.
  while (WiFi.status() != WL_CONNECTED && millis() - startTime < 10000)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  
  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.println("Connection Failed! Rebooting ...");
    delay(5000);
    ESP.restart();
  }
  Serial.println("WiFi connected");

  rssi = WiFi.RSSI();
  Serial.print("RSSI: ");
  Serial.println(rssi);

  WebServer.on("/irsend", ArgCheck); // Associate the handler function to the path

  WebServer.on("/", handleRoot);
  
  // Start the server
  WebServer.begin();
  Serial.println("WebServer started");

  // Print the IP address
  Serial.println(WiFi.localIP());

  // Start IR
  irsend.begin();

  // OTA
  ArduinoOTA.setPassword((const char *)"8266");

  ArduinoOTA.begin();
}

void loop()
{
  WebServer.handleClient();    //Handling of incoming requests
  ArduinoOTA.handle();
}

void handleRoot()
{
  String message = "";
  message += "<h1 style=\"font-family:courier; text-align:center\">WLAN IR Modul</h1>";
  message += "<b>RSSI: ";
  message += rssi;
  message += "</b>";
  WebServer.send(200, "text/html", message);
}

void ArgCheck()
{
  String message = "";
  message += "<h1 style=\"font-family:courier; text-align:center\">WLAN IR Modul</h1>";
  
  if (WebServer.arg("device") == "")  //Parameter not found
  {
  message += "Error: device Argument missing <br>";
  }

  if (WebServer.arg("command") == "")  //Parameter not found
  {
  message += "Error: command Argument missing<br>";
  }  

  String device = WebServer.arg("device");     //Gets the value of the query parameter
  String command = WebServer.arg("command");     //Gets the value of the query parameter

    Serial.print("Device: ");
    Serial.println(device);

    Serial.print("Command: ");
    Serial.println(command);
  

  if (device == "denon")
  {
    if (command == "on")
    {
      irsend.sendPanasonic(0x2A4C,0x2840086); // Denon AVR - Power On
      delay(100);
      irsend.sendPanasonic(0x2A4C,0x2840086); // Denon AVR - Power On
      Serial.println("Denon AVR - Power On");
    }
    if (command == "off")
    {
      irsend.sendPanasonic(0x2A4C,0x28C008E); // Denon AVR - Power Off
      delay(100);
      irsend.sendPanasonic(0x2A4C,0x28C008E); // Denon AVR - Power Off
      Serial.println("Denon AVR - Power Off");
    }   
  }

  if (device == "epson")
  {
    if (command == "on")
    {
      irsend.sendNEC(0xC1AA09F6, 32); // Epson Beamer - Power On
      delay(100);
      irsend.sendNEC(0xC1AA09F6, 32); // Epson Beamer - Power On
      Serial.println("Epson Beamer - Power On");
    }
    if (command == "off")
    {
      irsend.sendNEC(0xC1AA8976, 32); // Epson Beamer - Power Off
      delay(100);
      irsend.sendNEC(0xC1AA8976, 32); // Epson Beamer - Power Off
      Serial.println("Epson Beamer - Power On");
    }
  }
  delay(100);
  WebServer.send(200, "text/html", message);   // Returns the HTTP response
}

4 Gedanken zu „WLAN IR-Modul in Unterputzdose“

  1. Hallo Stefan,
    ich habe die Lösung nachgebaut und an meine Verhältnisse angepasst -funktioniert einwandfrei. Vielen Dank für den Beitrag.
    Der Aufruf über den Browser ist problemlos möglich.
    Letztendlich möchte ich die Infrarotübertragung aber aus HomeMatic von EQ3 steuern (Monoblock-Klimaanlage einschalten).
    Dazu habe ich versucht, den Aufruf in ein Script aus dem Buch von Hartmut Jung “Hausautomation mit Homematic S.186” zu kopieren.

    Version mit system.Exec:

    !klima ea
    string stdout;
    string stderr;
    system.Exec (“wget -O /dev/null -q http://192.168.178.46/irsend?device=klima&command=on“);

    Version mit CuXD:

    !klima_cux
    string stdout;
    string stderr;
    dom.GetObject(“CUxD.CUX2801001:13.CMD_EXEC”).State(“wget -0 /dev/null -q http:192.168.178.46 /irsend?device=klima&command=on”);

    Die Fehlerprüfung findet beide Fälle OK – funktioniert trotzdem nicht.
    (meine eigenen Kenntnisse reichen nicht aus, um das Problem zu lösen und im Homematic-Forum habe ich nichts gefunden)
    Hättest Du eine Idee, wie man das Problem lösen könnte?

    Viel Grüße Lutz

    1. Hallo Lutz,

      ohh, Homematic ist bei mir jetzt schon etwas länger her. Vielleicht hilft dir der Beitrag Homematic Low Battery Check weiter? Hier habe ich auch über http Befehle genutzt um mit dem Loxone Miniserver zu kommunizieren. Eine andere spontane Idee wäre es, mit einem Tool wie “Packet Sender” den http Aufruf zu analysieren. Hoffe damit kommst du ein Stück weiter?!

      Viele Grüße
      Stefan

      1. Hallo Stefan,
        nochmals vielen Dank für den Tipp mit “HM Low Battery Check” – ich habe den Aufruf einfach hineinkopiert und die Sache funktioniert wunderbar. Damit ist der WLAN-IR Modul auch Homematic-tauglich.
        (Der IR-Diode habe ich noch einen 22 Ohm Vorwiderstand gegönnt und die Speisung erfolgt über ein Handynetzteil .)
        Viele Grüße Lutz

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert