BEISPIEL PROGRAMM

Nachfolgendes Programm ist ein Beispiel für die Nutzung des WeMos D1 Pro als Statusanzeige für mein FHEM System.
Es verbindet sich mit dem Hausnetzwerk und frägt den Überwachungszustand des Alarmsystems ab. Je nach ausgewählter Einstellung leuchtet die angeschlossene Multichip LED in den verschiedenen Farben (z.B. Grün für „Aus und Save“, „Gelb für Fenster offen“, usw.).
Eine Steuerung bzw. Abfrage über den Browser ist ebenfalls möglich. Einfach nur die IP Adresse eingeben. Mit IP/status wird der Zustand zurückgegeben.
Bitte die Kommentarzeilen im Programm beachten. Mit z.B. IP/nicht_scharf schaltet man in den „Grün“-Modus.

/*
* WeMos-FHEM Status LED
*
* 22. Oktober 2016 — Thomas Krummer
*
* verbindet sich mit dem vorhandenen WLAN als Server
* Steuerung über HTTP-Befehle:
* „<IP-Adresse>“ gibt eine Status- und Befehlsübersicht aus
* „<IP-Adresse>/aus“ schaltet LED aus
* „<IP-Adresse>/nicht_scharf“ schaltet auf gruenes Licht
* „<IP-Adresse>/fenster_offen“ schaltet auf gelbes Licht
* „<IP-Adresse>/scharf_extern“ schaltet auf rotes Licht
* „<IP-Adresse>/scharf_intern“ schaltet auf blaues Licht
* „<IP-Adresse>/status“ gibt den Zustand zurück
*/

char Farbe = ‚g‘;
int R = 0;
int G = 0;
int B = 0;
int Z = 0;

#include <Adafruit_NeoPixel.h>
#define PIN D2
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(1, PIN, NEO_GRB + NEO_KHZ800);

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <Ticker.h>

// ******* Netzwerkeinstellungen gegebenenfalls anpassen! *******
const char* ssid = „KrummerWLAN“; // SSID des vorhandenen WLAN
const char* password = „XXXXXXXXXXXXXXXXX“; // Passwort für das vorhandene WLAN X= individuelles Passwort!
IPAddress gateway(192,168,178,1); // IP-Adresse des WLAN-Gateways
IPAddress subnet(255,255,255,0); // Subnetzmaske
IPAddress ip(192,168,178,XX); // feste IP-Adresse für den WeMos-Signalgeber X= individuelle Einstellung!

ESP8266WebServer server(80); // Webserver initialisieren auf Port 80
String antwort = „“, status = „aus“;

String zeitstempel() { // Betriebszeit als Stunde:Minute:Sekunde
char stempel[10];
int lfdStunden = millis()/3600000;
int lfdMinuten = millis()/60000-lfdStunden*60;
int lfdSekunden = millis()/1000-lfdStunden*3600-lfdMinuten*60;
sprintf (stempel,“%03d:%02d:%02d“, lfdStunden, lfdMinuten, lfdSekunden);
return stempel;
}

Ticker blinker;

void blinken (char Farbe) {

if (Farbe == ‚r‘) {R = 255; G = 0; B = 0;}
if (Farbe == ‚g‘) {R = 0; G = 255; B = 0;}
if (Farbe == ‚y‘) {R = 255; G = 255; B = 0;}
if (Farbe == ‚b‘) {R = 0; G = 0; B = 255;}
if (Farbe == ’n‘) {R = 0; G = 0; B = 0;}

if (Z == 0) {
pixels.setPixelColor(0, pixels.Color(R, G, B));
pixels.show();
Z = Z+1;
} else {
pixels.setPixelColor(0, pixels.Color(0, 0, 0));
pixels.show();
Z = 0;
}
}

void wurzel_behandlung() { // bei Aufruf des Root-Verzeichnisses
String temp = zeitstempel();
antwort = „WeMos-Multichip-LED-Display\n\n“;
antwort = antwort + „Status des Signals: “ + status + „\n“;
antwort = antwort + „Betriebszeit: “ + temp + “ (Std:Min:Sek)\n“;
antwort = antwort + „Verbunden mit: “ + ssid + „\n“;
int rssi = WiFi.RSSI();
antwort = antwort + „Signalstaerke: “ + String(rssi) + “ dBm\n\n“;
antwort = antwort + „HTTP-Befehlsuebersicht:\n“;
antwort = antwort + „\“<IP-Adresse>/aus\“ schaltet die LED aus\n“;
antwort = antwort + „\“<IP-Adresse>/nicht_scharf\“ schaltet die LED auf ‚gruen’\n“;
antwort = antwort + „\“<IP-Adresse>/fenster_offen\“ schaltet die LED auf ‚gelb’\n“;
antwort = antwort + „\“<IP-Adresse>/scharf_extern\“ schaltet die LED auf ‚rot’\n“;
antwort = antwort + „\“<IP-Adresse>/scharf_intern\“ schaltet die LED auf ‚blau’\n“;
antwort = antwort + „\“<IP-Adresse>/status\“ gibt den Zustand zurueck\n“;
server.send(300, „text/plain“, antwort);
delay(150);
Serial.println(temp + “ unspezifische HTTP-Anfrage“);
}

void signal_aus () {
blinker.attach(1, blinken, ’n‘);
status = „aus“;
server.send(200, „text/plain“, „WeMos-LED auf ‚aus‘ geschaltet“);
delay(100);
Serial.println(zeitstempel() + “ ueber HTTP auf ‚aus‘ geschaltet“);
}

void signal_nicht_scharf() {
status = „nicht_scharf“;
blinker.attach(2, blinken, ‚g‘);
server.send(200, „text/plain“, „LED auf ‚gruen‘ geschaltet“);
delay(100);
Serial.println(zeitstempel() + “ ueber HTTP auf ‚gruen‘ geschaltet“);
}

void signal_fenster_offen() {
status = „fenster_offen“;
blinker.attach(1, blinken, ‚y‘);
server.send(200, „text/plain“, „LED auf ‚gelb‘ geschaltet“);
delay(100);
Serial.println(zeitstempel() + “ ueber HTTP auf ‚gelb‘ geschaltet“);
}

void signal_scharf_extern() {
status = „scharf_extern“;
blinker.attach(0.5, blinken,’r‘);
//pixels.setPixelColor(0, pixels.Color(255, 0, 0)); // LED rot
//pixels.show(); // This sends the updated pixel color to the hardware
server.send(200, „text/plain“, „LED auf ‚rot‘ geschaltet“);
delay(100);
Serial.println(zeitstempel() + “ ueber HTTP auf ‚rot‘ geschaltet“);
}

void signal_scharf_intern() {
status = „scharf_intern“;
blinker.attach(2, blinken,’b‘);
server.send(200, „text/plain“, „LED auf ‚blau‘ geschaltet“);
delay(100);
Serial.println(zeitstempel() + “ ueber HTTP auf ‚blau‘ geschaltet“);
}

void melde_status() {
String temp = zeitstempel();
server.send(200, „text/plain“, status);
delay(100);
Serial.println(zeitstempel() + “ ueber HTTP Status gemeldet“);
}

void setup() {
pixels.begin();

pixels.setPixelColor(0, pixels.Color(0, 0, 0)); // LED aus
pixels.show(); // This sends the updated pixel color to the hardware

// Seriellen Monitor für Kontrollausgaben öffnen
Serial.begin(115200);
Serial.println(„“);
Serial.println(„WeMos-Multicolor-LED-Display“);

// WLAN-Verbindung herstellen
WiFi.config(ip, gateway, subnet); // auskommentieren, falls eine dynamische IP bezogen werden soll
WiFi.begin(ssid, password);
Serial.print(„Verbindungsaufbau“);

// Verbindungsaufbau abwarten
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(„.“);
}
Serial.println(“ erfolgreich!“);
Serial.println(„“);
Serial.print(„Verbunden mit: „);
Serial.println(ssid);
Serial.print(„Signalstaerke: „);
int rssi = WiFi.RSSI();
Serial.print(rssi);
Serial.println(“ dBm“);
Serial.print(„IP-Adresse: „);
Serial.println(WiFi.localIP());
Serial.println(„“);

// HTTP-Anfragen bearbeiten
server.on(„/“, wurzel_behandlung);
server.on(„/aus“, signal_aus);
server.on(„/nicht_scharf“, signal_nicht_scharf);
server.on(„/fenster_offen“, signal_fenster_offen);
server.on(„/scharf_extern“, signal_scharf_extern);
server.on(„/scharf_intern“, signal_scharf_intern);
server.on(„/status“, melde_status);

// HTTP-Server starten
server.begin();
Serial.println(zeitstempel() + “ HTTP-Server gestartet“);
}