Status Fenster & Alarmanlage mit APA102C LED

Hallo zusammen,

Seit langem wollte ich schon den Status unserer Alarmanlage visualisieren. Hier lagen noch ein Wemos D1 Mini mit ESP8266 WLAN Controller und ein Streifen APA102C LEDs rum … quasi Resteverwertung :slightly_smiling_face:

Unsere Tablets für das SmartHome hängen an der Wand. Hinter der Halterung war noch Platz genug den LED Streifen zu verstecken. Schnell mal einen LED Halter und Wemos D1 Halter gezeichnet, gedruckt und montiert.

Auf dem Wemos D1 läuft ein Arduino Webserver und die FastLED Library zur Ansteuerung der APA102 LEDs. Angesteuert wird die LED Anzeige von IP Symcon über HTTP Requests je nach Status der Alarmanlage. Habe 3 LEDs für das EG und 3 LEDs für das OG programmiert, um zu sehen auf welchem Stockwerk noch Fenster offen sind.

Ein HTTP Request sieht dann so aus.

Alle LEDs aus:

http://xxx.xxx.xxx.xxx/ALL?r=0&g=0&b=0

OG rote LEDs an:

http://xxx.xxx.xxx.xxx/OG?r=255&g=0&b=0

EG grüne LEDs an:

http://xxx.xxx.xxx.xxx/EG?r=0&g=255&b=0

Hier der Code für das Wemos D1:


#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include "FastLED.h"

// Network Settings WIFI
const char* ssid = "xxx";
const char* password = "xxx";
IPAddress ip(xxx.xxx.xxx.xxx);
IPAddress gateway(xxx.xxx.xxx.xxx);
IPAddress subnet(255, 255, 255, 0);
ESP8266WebServer server(80);

//Const definitions
const int led = D7;
int R;
int G;
int B;

// LED Strip Definitions
#define NUM_LEDS 6
#define DATA_PIN D3
#define CLOCK_PIN D2
#define COLOR_ORDER   BGR
CRGB leds[NUM_LEDS];

//Root Interrupt
void handleRoot() {
  
  server.send(200, "text/plain", "Alarm Display with APA102C LED by Kay Pohl");
 
}

//Not Found Interrupt
void handleNotFound(){
  digitalWrite(led, 1);
  String message = "File Not Found

";
  message += "URI: ";
  message += server.uri();
  message += "
Method: ";
  message += (server.method() == HTTP_GET)?"GET":"POST";
  message += "
Arguments: ";
  message += server.args();
  message += "
";
  for (uint8_t i=0; i<server.args(); i++){
    message += " " + server.argName(i) + ": " + server.arg(i) + "
";
  }
  server.send(404, "text/plain", message);
  digitalWrite(led, 0);
}

//Setup ESP8266
void setup(void){

  FastLED.addLeds<APA102, DATA_PIN, CLOCK_PIN,COLOR_ORDER>(leds, NUM_LEDS);

  WiFi.config(ip, gateway, subnet);
  
  pinMode(led, OUTPUT);
  digitalWrite(led, 0);
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  if (MDNS.begin("esp8266")) {
    Serial.println("MDNS responder started");
  }

  server.on("/", handleRoot);

  server.on("/EG", EGHandler); //Associate the handler function to the path
  server.on("/OG", OGHandler);
  server.on("/ALL", AllHandler);
  

  server.onNotFound(handleNotFound);

  server.begin();
  Serial.println("HTTP server started");
  leds[0] = CRGB::Black;
  FastLED.show();
}

//Loop all the time
void loop(void){
  
  server.handleClient();
}

//EG Handler for EG LEDs
void EGHandler() { //Handler

R = server.arg(0).toInt();
G = server.arg(1).toInt();
B = server.arg(2).toInt();


leds[0] = CRGB(R,G,B);
leds[1] = CRGB(R,G,B);
leds[2] = CRGB(R,G,B);

  
  FastLED.show();

  server.send(200, "text/plain", "OK EG set");       //Response to the HTTP request

} 

//OG Handler for EG LEDs
void OGHandler() { //Handler

R = server.arg(0).toInt();
G = server.arg(1).toInt();
B = server.arg(2).toInt();


leds[3] = CRGB(R,G,B);
leds[4] = CRGB(R,G,B);
leds[5] = CRGB(R,G,B);

  
  FastLED.show();

  server.send(200, "text/plain", "OK OG set");       //Response to the HTTP request

} 

//ALL Handler for EG LEDs
void AllHandler() { //Handler

R = server.arg(0).toInt();
G = server.arg(1).toInt();
B = server.arg(2).toInt();

leds[0] = CRGB(R,G,B);
leds[1] = CRGB(R,G,B);
leds[2] = CRGB(R,G,B);
leds[3] = CRGB(R,G,B);
leds[4] = CRGB(R,G,B);
leds[5] = CRGB(R,G,B);

  
  FastLED.show();

  server.send(200, "text/plain", "OK All set");       //Response to the HTTP request
} 


In IP Symcon werden die Fenster Zustände und der Alarmanlagen Zustand per Modbus von meiner Wago ausgelesen und über ein Script in die LED Farben übersetzt. Per CURL sende ich den WebRequest dann an das Wemos D1.

Gruß Kay