Loxone - WLAN-Status-Display selbst gebaut

Mit ** gekennzeichnete Links auf dieser Seite sind Affiliatelinks.

Ursprünglich habe ich das Status-Display mal für FHEM gebaut. Der komplette Aufbau und die Logik wurde im Arduino-Kurs ausführlich erklärt. Nun dachte ich: Warum zeige ich nicht auch, wie man über UDP das Display direkt aus Loxone heraus ansteuern könnte. Also fix eine neue Firmware für den ESP8266 geschrieben (welche längst nicht perfekt ist) und dann an Loxone angebunden. Super einfach!

Was Du brauchst?

Video

LoxKurs

Produkte

Schaltplan

Wemos WS2812B LEDs

Code

Was Du anpassen musst:

  • Anzahl der LEDs
  • WLAN-SSID
  • WLAN-Passwort

Bevor Du das Projekt bauen kannst, brauchst Du PlatformIO (siehe Video unten). Dann muss in das Lib-Verzeichnis ein Release von Adafruit Neopixel abgelegt werden. Das Projekt findest Du auf GitHub. Einfach nur entpacken und verschieben.

Dann einfach (wie im Video gezeigt) auf den Wemos übertragen.

#include <Arduino.h>
#include <Adafruit_NeoPixel.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <WiFiUdp.h>

#define PIN D5
#define NUM_LEDS 7

const char* ssid = "...";
const char* password = "...";

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
WiFiClient net;
WiFiUDP Udp;
unsigned int localUdpPort = 5555;
char incomingPacket[255];

void setup() {
  Serial.begin(9600);

  strip.begin();
  for (int i = 0; i < NUM_LEDS; i++) {
    strip.setPixelColor(i, strip.Color(0, 0, 0));
  }
  strip.show();

  WiFi.mode(WIFI_AP_STA);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    WiFi.begin(ssid, password);
  }

  Udp.begin(localUdpPort);
  Serial.printf("Now listening at IP %s, UDP port %d\n", WiFi.localIP().toString().c_str(), localUdpPort);

  initSequence();
}

void initSequence() {

  for (int i = 0; i < NUM_LEDS; i++) {
    strip.setPixelColor(i, strip.Color(0, 255, 0));
    strip.show();
    delay(50);
  }

  for (int i = 0; i < NUM_LEDS; i++) {
    strip.setPixelColor(i, strip.Color(0, 0, 0));
    strip.show();
    delay(50);
  }
}

void loop() {
  int packetSize = Udp.parsePacket();
  if (packetSize) {
    Serial.printf("Received %d bytes from %s, port %d\n", packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort());
    int len = Udp.read(incomingPacket, 255);
    if (len > 0) {
      incomingPacket[len] = 0;
    }

    String sPacket = String(incomingPacket);
    String sValue = sPacket.substring(sPacket.lastIndexOf(":") + 1);
    int ledIndex = sPacket.substring(0, sPacket.lastIndexOf(":")).toInt() - 1;

    if (ledIndex >= 0 && ledIndex < strip.numPixels()) {
      if (sValue == "off") {
        strip.setPixelColor(ledIndex, strip.Color(0, 0, 0));
      } else {
        long number = (long)strtol(&sValue[0], NULL, 16);
        int r = number >> 16;
        int g = number >> 8 & 0xFF;
        int b = number & 0xFF;

        strip.setPixelColor(ledIndex, strip.Color(r, g, b));
      }

      strip.show();
    }

    Serial.printf("UDP packet contents: %s\n", incomingPacket);

    // Antwort
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    Udp.write("OK");
    Udp.endPacket();
  }
}

Offene Themen:

  • Werte in EEPROM ablegen, sodass diese bei Neustart wiederhergestellt werden
  • Ruhemodus (alles aus, wenn niemand im Raum)
  • Statische IP optional (WiFi-Manager?)

Miniserver-Konfiguration

Als Adresse trägst Du folgendes ein: /dev/udp/192.168.44.107/5555. Wobei Du natürlich die IP anpassen musst. Der Port ist oben im Code bereits vorgegeben. Hast Du diese geändert, musst Du hier den gleichen angeben.

Befehl bei EIN: <led>:<farbcode> Befehl bei AUS: <led>:off

Als Farbcode gibst Du einfach HEX-RGB an. Also RRGGBB. Wenn Du bei Google nach “colorpicker” suchst, kannst Du die Farben ganz einfach aussuchen und den Code kopieren.

3D-Druckdaten

Für mein Statusdisplay habe ich den IKEA Ribba-Rahmen genutzt und für diesen ein Passepartout entworfen. Dieses findest Du auf Thingiverse.

PlatformIO

LoxKurs


Newsletter

Trage Dich jetzt in den Newsletter ein und genieße dadurch viele exklusive Vorteile:

  • 5€-Gutschein für den Online-Shop
  • Zugang zu exklusiven Inhalten
  • Angebote für Produkte
  • Immer auf dem Laufenden

* Durch Angabe meiner E-Mail-Adresse erkläre ich mich damit einverstanden, dass mir regelmäßig Informationen und Produktempfehlungen aus dem Fachgebiet Smart Home zugesendet werden. Mit dem Eintrag akzeptieren Sie unsere Datenschutzbestimmungen. Meine Einwilligung kann ich jederzeit widerrufen.

Auf YouTube und hier im Blog gibt es bereits unzählige kostenlose Videos, Informationen und Tutorials. Wenn Dir das noch nicht reicht, ist ein Training genau das richtige für Dich! Die folgenden Trainings haben den Vorteil, dass immer von Anfang an gestartet wird und Du ohne Vorwissen teilnehmen kannst.