WEMOS D1 Mini mit ESP Easy an Homematic?
Moderator: Co-Administratoren
WEMOS D1 Mini mit ESP Easy an Homematic?
Hatte meine Frage schon einmal im anderen WEMOS-Therad gestellt. Es gab auch zwei Antworten, aber in dem Thread gehts ja nicht um die WEMOS mit ESP Easy und ich möchte den Thread dort nicht mit meinen speziellen Fragen verwässern.
Hab seit einiger Zeit
- Wemos D1 mini
- mit dem DHT22 shield
- und ESP Easy ( http://www.letscontrolit.com/wiki/index.php/ESPEasy )
als Spielerei laufen.
Läuft soweit. Schau da per Browser gelegentlich mal nach Temp/Feuchtigkeit.
Jetzt lese ich von der Verwendung mit der Homematic.
Der kleine WEMOS sendet die Daten dank ESP Easy in definierbaren Intervallen. Man kann IP etc. pp. und Port des Servers, wo sie hin sollen (empfangen werden sollen) einstellen.
Protokoll ist derzeit Generic http.
a) Kann ich die Daten mit der CCU2 empfangen? In Sysvar schreiben? Was müsste ich das einstellen?
b) Oder muss ich die Daten abfragen? Über CuxD Gerät anlegen (welches)? Hab ich schon als Wandthermostat versucht, aber es kommt nix an.
c) Ich würde gern eine einfache Überwachung "Stromausfall" haben. Bei mir hängt CCU, Router, etc. pp. alles an einer USV. Würde also einen von den Wemos vor der USV per Netzteil anschließen und anpingen. Mache ich zur Anwesenheitsüberwachung per smartphone auch und das läuft gut. Also einfach den Wemos über CuxD anlegen wie das smartphone und anpingen. Strom weg -> 5mal keine Antwort auf ping -> Mail "Stromausfall"?
Man merkt vielleicht, dass ich davon keinen rechten Plan habe.
Über Tips würde ich mich daher besonders freuen.
Hab seit einiger Zeit
- Wemos D1 mini
- mit dem DHT22 shield
- und ESP Easy ( http://www.letscontrolit.com/wiki/index.php/ESPEasy )
als Spielerei laufen.
Läuft soweit. Schau da per Browser gelegentlich mal nach Temp/Feuchtigkeit.
Jetzt lese ich von der Verwendung mit der Homematic.
Der kleine WEMOS sendet die Daten dank ESP Easy in definierbaren Intervallen. Man kann IP etc. pp. und Port des Servers, wo sie hin sollen (empfangen werden sollen) einstellen.
Protokoll ist derzeit Generic http.
a) Kann ich die Daten mit der CCU2 empfangen? In Sysvar schreiben? Was müsste ich das einstellen?
b) Oder muss ich die Daten abfragen? Über CuxD Gerät anlegen (welches)? Hab ich schon als Wandthermostat versucht, aber es kommt nix an.
c) Ich würde gern eine einfache Überwachung "Stromausfall" haben. Bei mir hängt CCU, Router, etc. pp. alles an einer USV. Würde also einen von den Wemos vor der USV per Netzteil anschließen und anpingen. Mache ich zur Anwesenheitsüberwachung per smartphone auch und das läuft gut. Also einfach den Wemos über CuxD anlegen wie das smartphone und anpingen. Strom weg -> 5mal keine Antwort auf ping -> Mail "Stromausfall"?
Man merkt vielleicht, dass ich davon keinen rechten Plan habe.
Über Tips würde ich mich daher besonders freuen.
-
- Beiträge: 12928
- Registriert: 16.01.2009, 18:48
- Wohnort: Steingaden
- Hat sich bedankt: 1604 Mal
- Danksagung erhalten: 222 Mal
Re: WEMOS D1 Mini mit ESP Easy an Homematic?
du kannst daten sowohl in eine SV schreiben oder an ein cuxd-gerät senden.
beide wege ins im wemos-d1 thema beschrieben , der SV weg auch im wiki zum wemos. zum direkten schreiben an an cuxd-gerät hat klassisch mal ein extra thema aufgemacht.
wie das ganze aber in esp-easy umgesetzt wird ... k.a. ein wemos ist zwar mit esp easy "blockiert" doch: zeitmangel
doch "stromausfall" erkennen geht glaube ich einfacher... da sind etliche theman vorhanden. kann nicht mal sagen ob der esp8266 auf einen ping antwortet.. noch nie probiert .... getestet, er antwortet
beide wege ins im wemos-d1 thema beschrieben , der SV weg auch im wiki zum wemos. zum direkten schreiben an an cuxd-gerät hat klassisch mal ein extra thema aufgemacht.
wie das ganze aber in esp-easy umgesetzt wird ... k.a. ein wemos ist zwar mit esp easy "blockiert" doch: zeitmangel
doch "stromausfall" erkennen geht glaube ich einfacher... da sind etliche theman vorhanden. kann nicht mal sagen ob der esp8266 auf einen ping antwortet.. noch nie probiert .... getestet, er antwortet
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso !!!
wer schreibfehler findet darf sie behalten.
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso !!!
wer schreibfehler findet darf sie behalten.
-
- Beiträge: 131
- Registriert: 08.09.2015, 15:14
- Hat sich bedankt: 18 Mal
- Danksagung erhalten: 4 Mal
Re: WEMOS D1 Mini mit ESP Easy an Homematic?
Hi zusammen,lctv hat geschrieben:Hatte meine Frage schon einmal im anderen WEMOS-Therad gestellt. Es gab auch zwei Antworten, aber in dem Thread gehts ja nicht um die WEMOS mit ESP Easy und ich möchte den Thread dort nicht mit meinen speziellen Fragen verwässern.
Hab seit einiger Zeit
- Wemos D1 mini
- mit dem DHT22 shield
- und ESP Easy ( http://www.letscontrolit.com/wiki/index.php/ESPEasy )
als Spielerei laufen.
Läuft soweit. Schau da per Browser gelegentlich mal nach Temp/Feuchtigkeit.
Jetzt lese ich von der Verwendung mit der Homematic.
Der kleine WEMOS sendet die Daten dank ESP Easy in definierbaren Intervallen. Man kann IP etc. pp. und Port des Servers, wo sie hin sollen (empfangen werden sollen) einstellen.
Protokoll ist derzeit Generic http.
a) Kann ich die Daten mit der CCU2 empfangen? In Sysvar schreiben? Was müsste ich das einstellen?
b) Oder muss ich die Daten abfragen? Über CuxD Gerät anlegen (welches)? Hab ich schon als Wandthermostat versucht, aber es kommt nix an.
c) Ich würde gern eine einfache Überwachung "Stromausfall" haben. Bei mir hängt CCU, Router, etc. pp. alles an einer USV. Würde also einen von den Wemos vor der USV per Netzteil anschließen und anpingen. Mache ich zur Anwesenheitsüberwachung per smartphone auch und das läuft gut. Also einfach den Wemos über CuxD anlegen wie das smartphone und anpingen. Strom weg -> 5mal keine Antwort auf ping -> Mail "Stromausfall"?
Man merkt vielleicht, dass ich davon keinen rechten Plan habe.
Über Tips würde ich mich daher besonders freuen.
ich nutze ebenfalls einen WeMos D1 Mini mit einem Relay-Shield, einem Taster und espeasy r147 und würde gerne bei einem Tastendruck den aktuellen Zustand an die CCU übergeben.
Bis auf die Übergabe an die CCU funktioniert mein Vorhaben wunderbar.
Rules
Code: Alles auswählen
on PUMP#Key do
if [PUMP#Relay]=1
gpio,5,0
else
gpio,5,1
endif
endon
on PUMP#Relay do
if [PUMP#Relay]=1
wget http://192.168.1.18/addons/xmlapi/statechange.cgi?ise_id=5621&new_value=true
else
wget http://192.168.1.18/addons/xmlapi/statechange.cgi?ise_id=5621&new_value=false
endif
endon
Code: Alles auswählen
838852 : SW : State 0
838853 : EVENT: PUMP#Key=0.00
838859 : ACT : gpio,5,1
838859 : SW : GPIO 5 Set to 1
845184 : HTTP : connection failed
Vielen Dank im Voraus & viele Grüße
kafisc
-
- Beiträge: 12928
- Registriert: 16.01.2009, 18:48
- Wohnort: Steingaden
- Hat sich bedankt: 1604 Mal
- Danksagung erhalten: 222 Mal
Re: WEMOS D1 Mini mit ESP Easy an Homematic?
esp-easy liegt hier immer noch ....
doch warum machst du das nicht mit den sketschen von klassisch? - er hat doch die übergabe beschrieben.
"stromausfall!" würde ich über spezielle relais machen. ( die kommen einfach in den stromkreis und zeigen halt bei spannungsausfall dieses per potentialfreien kontakt an.. )
doch warum machst du das nicht mit den sketschen von klassisch? - er hat doch die übergabe beschrieben.
"stromausfall!" würde ich über spezielle relais machen. ( die kommen einfach in den stromkreis und zeigen halt bei spannungsausfall dieses per potentialfreien kontakt an.. )
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso !!!
wer schreibfehler findet darf sie behalten.
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso !!!
wer schreibfehler findet darf sie behalten.
-
- Beiträge: 131
- Registriert: 08.09.2015, 15:14
- Hat sich bedankt: 18 Mal
- Danksagung erhalten: 4 Mal
Re: WEMOS D1 Mini mit ESP Easy an Homematic?
Vielen Dank für die Rückmeldung. Das ist eigentlich die beste Idee!dondaik hat geschrieben:esp-easy liegt hier immer noch ....
doch warum machst du das nicht mit den sketschen von klassisch? - er hat doch die übergabe beschrieben.
"stromausfall!" würde ich über spezielle relais machen. ( die kommen einfach in den stromkreis und zeigen halt bei spannungsausfall dieses per potentialfreien kontakt an.. )
Ich habe das mal entsprechend umgesetzt/zusammen kopiert. Allerdings habe ich noch 1 kleines Problem. Die LED (gpio13Led) ist beim Start des Sonoffs eingeschaltet. Sie schaltet dann aber anschließend sauber mit allen weiteren Schaltvorgängen mit.
Nun würde ich die LED gerne beim Start ausgeschaltet lassen (gleicher Zustand wie das Relais). Hast du mir hierfür einen Tipp?
Code: Alles auswählen
/*
* WeMos-Schaltaktor (mit Status-Meldung an CUxD und Taster-Support)
*
* Getesteter Aufbau:
* WeMos D1 mini
* relais Shield mini
* Pin-Belegung:
* gpio12: relais
* gpio0: Taster
* gpio13: Led
*/
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
// ******* Netzwerkeinstellungen, bitte anpassen! *******
const char* ssid = "*****"; // SSID des vorhandenen WLANs
const char* password = "******"; // Passwort für das vorhandene WLAN
const char* host = "192.168.1.18"; // IP-Adresse der CCU
IPAddress ip(192,168,1,237); // feste IP-Adresse für den WeMos
IPAddress dns_ip(192,168,1,1); // Adresse des DNS servers
IPAddress gateway(192,168,1,1); // IP-Adresse des WLAN-Gateways
IPAddress subnet(255,255,255,0); // Subnetzmaske
// ******* Einstellungen für CUxD, bitte anpassen! *******
String transmit_state_R1 = "ja"; // ja/nein
String CUxD_Geraet = "CUX2801002:1"; // SN:Kanal
// Definition der Ports ....
const int gpio12relais = 12 ;
const int gpio0Taster = 0 ;
const int gpio13Led = 13 ;
// ab hier muß eigentlich nichts mehr geändert werden.....
// ******* Einstellungen HTML *******
String HTML_title = "Funksteckdose Beleuchtung Bett - SZ";
String HTML_background_color = "0D4C75"; //0D4C75
String HTML_title_color = "C9C9C9"; //9A916C
String HTML_text_color = "FFFFFF";
String HTML_color1 = "CECECE";
String HTML_color2 = "9A916C";
ESP8266WebServer server(80); // Webserver initialisieren auf Port 80
//WiFiServer server2(80);
String Version = "1.0";
String Status = "0";
String Status_alt = "0";
String Status_Aenderung = "nein";
String Taster = "unbekannt";
String action = "0";
String transmit_state = "ja";
String HTML_head = "<h2><font color='#" + HTML_title_color +"'>" + HTML_title + "</font></h2>";
String HTML_end = "</body></html>";
String HTML_style = "style='background-color: #" + HTML_background_color +"; color: #" + HTML_text_color +";' alink='#" + HTML_color2 +"' link='#" + HTML_color1 +"' vlink='#" + HTML_color1 +"'";
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;
}
void status_aktuallisieren(){
if (digitalRead(gpio12relais) == HIGH) {Status = "1";}
if (digitalRead(gpio12relais) == LOW) {Status = "0";}
}
void set_CUxD() {
String meldung = "";
WiFiClient client; // Webclient initialisieren
if (!client.connect(host, 8181)) { // mit dem CCU-Port 8181 verbinden
Serial.println(" Fehler: Verbindung zur CCU konnte nicht aufgebaut werden");
delay(50);
return;
}
meldung = meldung +"GET /WeMos.exe?state=dom.GetObject('CUxD." + CUxD_Geraet + ".SET_STATE').State('" + Status + "')";
client.println(meldung); // Daten an CCU melden
}
void root() { // bei Aufruf des Root-Verzeichnisses
String HTML_content = "";
String button_text = "null";
String button_color = "FFD06E";
String button = "<span style='margin-left: 10px; background-color: #" + button_color +"; color: #000; display: inline-block; padding: 2px 10px; font-weight: bold; border: 2px solid #4f4f4f; border-radius: 2px; text-decoration: none;'>" + button_text +"</span>";
String HTML_start = "<html><head><meta http-equiv='refresh' content='3'><meta name='theme-color' content='#" + HTML_background_color +"'><title>" + HTML_title + "</title></head><body " + HTML_style + ">";
String temp = zeitstempel();
String WeMos_ip = WiFi.localIP().toString();
HTML_content = HTML_start + HTML_head;
if (digitalRead(gpio12relais) == HIGH) {
button_text = "eingeschalten";
button_color = "70E670";
button = "<span style='margin-left: 10px; background-color: #" + button_color +"; color: #000; display: inline-block; padding: 2px 10px; font-weight: bold; border: 2px solid #4f4f4f; border-radius: 2px; text-decoration: none;'>" + button_text +"</span>";
HTML_content = HTML_content + "<strong>Status: <a target='answer_wemos' href='http://" + WeMos_ip + "/cmd?R1=0'>" + button +"</a></strong><br><br>";
}
else {
button_text = "ausgeschalten";
button_color = "A8A8A8";
button = "<span style='margin-left: 10px; background-color: #" + button_color +"; color: #000; display: inline-block; padding: 2px 10px; font-weight: bold; border: 2px solid #4f4f4f; border-radius: 2px; text-decoration: none;'>" + button_text +"</span>";
HTML_content = HTML_content + "<strong>Status: <a target='answer_wemos' href='http://" + WeMos_ip + "/cmd?R1=1'>" + button +"</a></strong><br><br>";
}
HTML_content = HTML_content + "Betriebszeit: <font color='#" + HTML_color2 +"'><em>" + temp + " (Std:Min:Sek)</em></font><br>";
HTML_content = HTML_content + "Verbunden mit: <font color='#" + HTML_color2 +"'><em>" + ssid + "</em></font><br>";
int rssi = WiFi.RSSI();
HTML_content = HTML_content + "Signalstaerke: <font color='#" + HTML_color2 +"'><em>" + String(rssi) + " dBm</em></font><br><br>";
HTML_content = HTML_content + "<strong><a href='http://" + WeMos_ip + "/help'>Hilfe</a></strong>";
HTML_content = HTML_content + "<iframe name='answer_wemos' frameborder='no' height='0' width='0'>Sorry, no frames.</iframe>";
server.send(300, "text/html", HTML_content + HTML_end);
delay(150);
Serial.println(temp + " unspezifische HTTP-Anfrage");
}
void help() {
String HTML_content = "";
String HTML_start = "<html><head><meta name='theme-color' content='#" + HTML_background_color +"'><title>" + HTML_title + "</title></head><body " + HTML_style + ">";
String WeMos_ip = WiFi.localIP().toString();
HTML_content = HTML_start + HTML_head;
HTML_content = HTML_content + "<strong><font color='#" + HTML_title_color +"'>Schaltaktor mit Taster und Statusmeldung an CUxD (28)exec</font>";
HTML_content = HTML_content + " <font color='#" + HTML_color2 +"'>Version: <em>" + Version + "</em></font></strong>";
HTML_content = HTML_content + "<h3>Konfiguration fuer R1:</h3>";
HTML_content = HTML_content + "<li>Status senden: <font color='#" + HTML_color2 +"'><em>" + transmit_state_R1 + "</em></font></li>";
HTML_content = HTML_content + "<li>CUxD-Geraet: <font color='#" + HTML_color2 +"'><em>" + CUxD_Geraet + "</em></font></li>";
HTML_content = HTML_content + "<li>Taster-Typ: <font color='#" + HTML_color2 +"'><em>" + Taster + "</em></font></li><br>";
HTML_content = HTML_content + "<h3>HTTP-Befehlsuebersicht:</h3>";
HTML_content = HTML_content + "<li>\"<font color='#" + HTML_color1 +"'>http://" + WeMos_ip + "/cmd?R1=0</font>\" schaltet das Relais mit Statusmeldung an CUxD aus</li>";
HTML_content = HTML_content + "<li>\"<font color='#" + HTML_color1 +"'>http://" + WeMos_ip + "/cmd?R1=1</font>\" schaltet das Relais mit Statusmeldung an CUxD ein</li>";
HTML_content = HTML_content + "<li>\"<font color='#" + HTML_color1 +"'>http://" + WeMos_ip + "/cmd?R1=0&transmit=0</font>\" schaltet das Relais ohne Statusmeldung an CUxD aus</li>";
HTML_content = HTML_content + "<li>\"<font color='#" + HTML_color1 +"'>http://" + WeMos_ip + "/cmd?R1=1&transmit=0</font>\" schaltet das Relais ohne Statusmeldung an CUxD ein</li>";
HTML_content = HTML_content + "<li>\"<font color='#" + HTML_color1 +"'>http://" + WeMos_ip + "/cmd?R1=state</font>\" gibt den Schaltzustand des Relais als Logikwert (\"0\" oder \"1\") zurueck</li>";
HTML_content = HTML_content + "<li>\"<font color='#" + HTML_color1 +"'>http://" + WeMos_ip + "/cmd?CUxD=0</font>\" Statusmeldung an CUxD bis zum reboot ausschalten</li>";
HTML_content = HTML_content + "<li>\"<font color='#" + HTML_color1 +"'>http://" + WeMos_ip + "/cmd?CUxD=1</font>\" Statusmeldung an CUxD einschalten</li><br>";
HTML_content = HTML_content + "<h3>CUxD-Integration:</h3>";
HTML_content = HTML_content + "<li>Mit CUxD ein Geraet vom Typ (28)System/Exec/Schalter erstellen</li>";
HTML_content = HTML_content + "<li>In der CCU im Posteingang konfigurieren:<br>";
HTML_content = HTML_content + " SWITCH|CMD_SHORT: <font color='#" + HTML_color1 +"'>/usr/local/addons/cuxd/curl -s -m 5 \'http://" + WeMos_ip + "/R1-0\'</font><br>";
HTML_content = HTML_content + " SWITCH|CMD_LONG: <font color='#" + HTML_color1 +"'>/usr/local/addons/cuxd/curl -s -m 5 \'http://" + WeMos_ip + "/R1-1\'</font><br></li>";
HTML_content = HTML_content + "<br><strong><a href='http://" + WeMos_ip + "'>zurueck</a></strong>";
HTML_content = HTML_content + "<br><strong>""</strong>";
server.send(300, "text/html", HTML_content + HTML_end);
}
void turn_on() {
digitalWrite(gpio12relais, HIGH);
digitalWrite(gpio13Led, LOW);
}
void turn_off() {
digitalWrite(gpio12relais, LOW);
digitalWrite(gpio13Led, HIGH);
}
void action_1() { //keinen status senden
String aktor_status = "unbekannt";
if (action == "1") {turn_on(); aktor_status = "eingeschalten";}
if (action == "0") {turn_off(); aktor_status = "ausgeschalten";}
Status_alt = action;
status_aktuallisieren();
server.send(200, "text/plain", "WeMos-Schaltaktor ist "+ aktor_status +", keine Meldung an CUxD");
}
void action_2() { //status senden
String aktor_status = "unbekannt";
if (action == "1") {turn_on(); aktor_status = "eingeschalten";}
if (action == "0") {turn_off(); aktor_status = "ausgeschalten";}
Status_alt = action;
status_aktuallisieren();
if (transmit_state == "ja") {set_CUxD();}
server.send(200, "text/plain", "WeMos-Schaltaktor ist "+ aktor_status +", Meldung an CUxD");
}
void get_state() {
String temp = zeitstempel();
status_aktuallisieren();
server.send(200, "text/plain", Status);
delay(100);
Serial.println(zeitstempel() + " ueber HTTP Status gemeldet");
}
void get_state_CCU() {
String CCU_state = "null";
String temp = zeitstempel();
status_aktuallisieren();
if (Status == "0") {CCU_state = "<state>false</state>";} else {CCU_state = "<state>true</state>";}
server.send(200, "text/plain", CCU_state);
delay(100);
Serial.println(zeitstempel() + " ueber HTTP Status gemeldet");
}
void setup() {
pinMode(gpio12relais, OUTPUT); // Relais-Pin als Ausgang setzen
pinMode(gpio0Taster, INPUT_PULLUP); // Taster zum schalten
pinMode(gpio13Led, OUTPUT); // Led
// Seriellen Monitor für Kontrollausgaben öffnen
Serial.begin(115200);
Serial.println("");
Serial.println("WeMos-Schaltaktor");
// WLAN-Verbindung herstellen
WiFi.config(ip, dns_ip, gateway, subnet); // auskommentieren, falls eine dynamische IP bezogen werden soll
WiFi.softAPdisconnect(true);
WiFi.begin(ssid, password);
Serial.print("Verbindungsaufbau");
// Verbindungsaufbau abwarten
byte maxwait = 30;
while ( (WiFi.status() != WL_CONNECTED) && (maxwait > 0) ) {
delay(500);
maxwait--;
Serial.print(".");
}
if (WiFi.status() != WL_CONNECTED) {Serial.println("keine Verbindung");}
else{
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("");
}
server.on("/", root);
server.on("/R1-1", [](){action = "1"; action_1();});
server.on("/R1-0", [](){action = "0"; action_1();});
server.on("/cmd", cmd);
server.on("/help", help);
// HTTP-Server starten
server.begin();
Serial.println(zeitstempel() + " HTTP-Server gestartet");
if (transmit_state == "ja") {set_CUxD();}
int sensorVal = digitalRead(gpio0Taster);
Serial.println(sensorVal);
if (sensorVal == HIGH) {Taster = "schliesser";} else {Taster = "oeffner";}
}
void cmd() { // bei Aufruf von "../cmd" R1%3D0 R1%3D1
String CUxD = server.arg("CUxD");
String R1 = server.arg("R1");
String transmit = server.arg("transmit");
if (R1 == "0" && transmit == "0") {action = "0"; action_1();}
else if (R1 == "1" && transmit == "0") {action = "1"; action_1();}
else if ( (R1 == "0" && transmit == "1") || (R1 == "0") ) {action = "0"; action_2();}
else if ( (R1 == "1" && transmit == "1") || (R1 == "1") ) {action = "1"; action_2();}
else if (R1 == "state") {get_state();}
else if (CUxD == "1") {transmit_state_R1 = "ja";}
else if (CUxD == "0") {transmit_state_R1 = "nein";}
else {
help();
delay(100);
Serial.println(zeitstempel() + " Help");
}
}
void oeffner(){
int sensorVal = digitalRead(gpio0Taster);
Serial.println(sensorVal);
if (sensorVal == HIGH && Status == "0") {turn_on(); delay(100);}
if (sensorVal == HIGH && Status == "1") {turn_off(); delay(100);}
if (sensorVal == LOW) {
status_aktuallisieren();
if (Status_alt != Status) {Status_alt = Status; Status_Aenderung = "ja";} else Status_Aenderung = "nein";
if (transmit_state == "ja" && Status_Aenderung == "ja") {set_CUxD();}
}
}
void schliesser(){
int sensorVal = digitalRead(gpio0Taster);
Serial.println(sensorVal);
if (sensorVal == LOW && Status == "0") {turn_on(); delay(100);}
if (sensorVal == LOW && Status == "1") {turn_off(); delay(100);}
if (sensorVal == HIGH) {
status_aktuallisieren();
if (Status_alt != Status) {Status_alt = Status; Status_Aenderung = "ja";} else Status_Aenderung = "nein";
if (transmit_state == "ja" && Status_Aenderung == "ja") {set_CUxD();}
}
}
void loop() {
if ( (WiFi.status() != WL_CONNECTED) || (transmit_state_R1 != "ja") ) {transmit_state = "nein";} else {transmit_state = "ja";}
if (Taster == "oeffner") {oeffner();}
else if (Taster == "schliesser") {schliesser();}
server.handleClient(); // auf HTTP-Anfragen warten
}
kafisc
Zuletzt geändert von kafisc am 17.04.2017, 14:50, insgesamt 1-mal geändert.
-
- Beiträge: 12928
- Registriert: 16.01.2009, 18:48
- Wohnort: Steingaden
- Hat sich bedankt: 1604 Mal
- Danksagung erhalten: 222 Mal
Re: WEMOS D1 Mini mit ESP Easy an Homematic?
im setup() den port auch richtig schalten ( so bei zeile 209 ). - nicht nur das ini, könnte es sein.
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso !!!
wer schreibfehler findet darf sie behalten.
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso !!!
wer schreibfehler findet darf sie behalten.
-
- Beiträge: 131
- Registriert: 08.09.2015, 15:14
- Hat sich bedankt: 18 Mal
- Danksagung erhalten: 4 Mal
Sonoff Wifi an Homematic - Sketch
Vielen Dank! Das war der Fehler...dondaik hat geschrieben:im setup() den port auch richtig schalten ( so bei zeile 209 ). - nicht nur das ini, könnte es sein.
Hier der fertige Sketch:
Code: Alles auswählen
/*
* WeMos-Schaltaktor (mit Status-Meldung an CUxD und Taster-Support)
*
* Getesteter Aufbau:
* WeMos D1 mini
* relais Shield mini
* Pin-Belegung:
* gpio12: relais
* gpio0: Taster
* gpio13: Led
*/
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
// ******* Netzwerkeinstellungen, bitte anpassen! *******
const char* ssid = "*****"; // SSID des vorhandenen WLANs
const char* password = "******"; // Passwort für das vorhandene WLAN
const char* host = "192.168.1.18"; // IP-Adresse der CCU
IPAddress ip(192,168,1,237); // feste IP-Adresse für den WeMos
IPAddress gateway(192,168,1,1); // IP-Adresse des WLAN-Gateways
IPAddress subnet(255,255,255,0); // Subnetzmaske
// ******* Einstellungen für CUxD, bitte anpassen! *******
String transmit_state_R1 = "ja"; // ja/nein
String CUxD_Geraet = "CUX2801002:1"; // SN:Kanal
// Definition der Ports ....
const int gpio12relais = 12 ;
const int gpio0Taster = 0 ;
const int gpio13Led = 13 ;
// ab hier muß eigentlich nichts mehr geändert werden.....
// ******* Einstellungen HTML *******
String HTML_title = "Funksteckdose Beleuchtung Bett - SZ";
String HTML_background_color = "0D4C75"; //0D4C75
String HTML_title_color = "C9C9C9"; //9A916C
String HTML_text_color = "FFFFFF";
String HTML_color1 = "CECECE";
String HTML_color2 = "9A916C";
ESP8266WebServer server(80); // Webserver initialisieren auf Port 80
//WiFiServer server2(80);
String Version = "1.0";
String Status = "0";
String Status_alt = "0";
String Status_Aenderung = "nein";
String Taster = "unbekannt";
String action = "0";
String transmit_state = "ja";
String HTML_head = "<h2><font color='#" + HTML_title_color +"'>" + HTML_title + "</font></h2>";
String HTML_end = "</body></html>";
String HTML_style = "style='background-color: #" + HTML_background_color +"; color: #" + HTML_text_color +";' alink='#" + HTML_color2 +"' link='#" + HTML_color1 +"' vlink='#" + HTML_color1 +"'";
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;
}
void status_aktuallisieren(){
if (digitalRead(gpio12relais) == HIGH) {Status = "1";}
if (digitalRead(gpio12relais) == LOW) {Status = "0";}
}
void set_CUxD() {
String meldung = "";
WiFiClient client; // Webclient initialisieren
if (!client.connect(host, 8181)) { // mit dem CCU-Port 8181 verbinden
Serial.println(" Fehler: Verbindung zur CCU konnte nicht aufgebaut werden");
delay(50);
return;
}
meldung = meldung +"GET /WeMos.exe?state=dom.GetObject('CUxD." + CUxD_Geraet + ".SET_STATE').State('" + Status + "')";
client.println(meldung); // Daten an CCU melden
}
void root() { // bei Aufruf des Root-Verzeichnisses
String HTML_content = "";
String button_text = "null";
String button_color = "FFD06E";
String button = "<span style='margin-left: 10px; background-color: #" + button_color +"; color: #000; display: inline-block; padding: 2px 10px; font-weight: bold; border: 2px solid #4f4f4f; border-radius: 2px; text-decoration: none;'>" + button_text +"</span>";
String HTML_start = "<html><head><meta http-equiv='refresh' content='3'><meta name='theme-color' content='#" + HTML_background_color +"'><title>" + HTML_title + "</title></head><body " + HTML_style + ">";
String temp = zeitstempel();
String WeMos_ip = WiFi.localIP().toString();
HTML_content = HTML_start + HTML_head;
if (digitalRead(gpio12relais) == HIGH) {
button_text = "eingeschalten";
button_color = "70E670";
button = "<span style='margin-left: 10px; background-color: #" + button_color +"; color: #000; display: inline-block; padding: 2px 10px; font-weight: bold; border: 2px solid #4f4f4f; border-radius: 2px; text-decoration: none;'>" + button_text +"</span>";
HTML_content = HTML_content + "<strong>Status: <a target='answer_wemos' href='http://" + WeMos_ip + "/cmd?R1=0'>" + button +"</a></strong><br><br>";
}
else {
button_text = "ausgeschalten";
button_color = "A8A8A8";
button = "<span style='margin-left: 10px; background-color: #" + button_color +"; color: #000; display: inline-block; padding: 2px 10px; font-weight: bold; border: 2px solid #4f4f4f; border-radius: 2px; text-decoration: none;'>" + button_text +"</span>";
HTML_content = HTML_content + "<strong>Status: <a target='answer_wemos' href='http://" + WeMos_ip + "/cmd?R1=1'>" + button +"</a></strong><br><br>";
}
HTML_content = HTML_content + "Betriebszeit: <font color='#" + HTML_color2 +"'><em>" + temp + " (Std:Min:Sek)</em></font><br>";
HTML_content = HTML_content + "Verbunden mit: <font color='#" + HTML_color2 +"'><em>" + ssid + "</em></font><br>";
int rssi = WiFi.RSSI();
HTML_content = HTML_content + "Signalstaerke: <font color='#" + HTML_color2 +"'><em>" + String(rssi) + " dBm</em></font><br><br>";
HTML_content = HTML_content + "<strong><a href='http://" + WeMos_ip + "/help'>Hilfe</a></strong>";
HTML_content = HTML_content + "<iframe name='answer_wemos' frameborder='no' height='0' width='0'>Sorry, no frames.</iframe>";
server.send(300, "text/html", HTML_content + HTML_end);
delay(150);
Serial.println(temp + " unspezifische HTTP-Anfrage");
}
void help() {
String HTML_content = "";
String HTML_start = "<html><head><meta name='theme-color' content='#" + HTML_background_color +"'><title>" + HTML_title + "</title></head><body " + HTML_style + ">";
String WeMos_ip = WiFi.localIP().toString();
HTML_content = HTML_start + HTML_head;
HTML_content = HTML_content + "<strong><font color='#" + HTML_title_color +"'>Schaltaktor mit Taster und Statusmeldung an CUxD (28)exec</font>";
HTML_content = HTML_content + " <font color='#" + HTML_color2 +"'>Version: <em>" + Version + "</em></font></strong>";
HTML_content = HTML_content + "<h3>Konfiguration fuer R1:</h3>";
HTML_content = HTML_content + "<li>Status senden: <font color='#" + HTML_color2 +"'><em>" + transmit_state_R1 + "</em></font></li>";
HTML_content = HTML_content + "<li>CUxD-Geraet: <font color='#" + HTML_color2 +"'><em>" + CUxD_Geraet + "</em></font></li>";
HTML_content = HTML_content + "<li>Taster-Typ: <font color='#" + HTML_color2 +"'><em>" + Taster + "</em></font></li><br>";
HTML_content = HTML_content + "<h3>HTTP-Befehlsuebersicht:</h3>";
HTML_content = HTML_content + "<li>\"<font color='#" + HTML_color1 +"'>http://" + WeMos_ip + "/cmd?R1=0</font>\" schaltet das Relais mit Statusmeldung an CUxD aus</li>";
HTML_content = HTML_content + "<li>\"<font color='#" + HTML_color1 +"'>http://" + WeMos_ip + "/cmd?R1=1</font>\" schaltet das Relais mit Statusmeldung an CUxD ein</li>";
HTML_content = HTML_content + "<li>\"<font color='#" + HTML_color1 +"'>http://" + WeMos_ip + "/cmd?R1=0&transmit=0</font>\" schaltet das Relais ohne Statusmeldung an CUxD aus</li>";
HTML_content = HTML_content + "<li>\"<font color='#" + HTML_color1 +"'>http://" + WeMos_ip + "/cmd?R1=1&transmit=0</font>\" schaltet das Relais ohne Statusmeldung an CUxD ein</li>";
HTML_content = HTML_content + "<li>\"<font color='#" + HTML_color1 +"'>http://" + WeMos_ip + "/cmd?R1=state</font>\" gibt den Schaltzustand des Relais als Logikwert (\"0\" oder \"1\") zurueck</li>";
HTML_content = HTML_content + "<li>\"<font color='#" + HTML_color1 +"'>http://" + WeMos_ip + "/cmd?CUxD=0</font>\" Statusmeldung an CUxD bis zum reboot ausschalten</li>";
HTML_content = HTML_content + "<li>\"<font color='#" + HTML_color1 +"'>http://" + WeMos_ip + "/cmd?CUxD=1</font>\" Statusmeldung an CUxD einschalten</li><br>";
HTML_content = HTML_content + "<h3>CUxD-Integration:</h3>";
HTML_content = HTML_content + "<li>Mit CUxD ein Geraet vom Typ (28)System/Exec/Schalter erstellen</li>";
HTML_content = HTML_content + "<li>In der CCU im Posteingang konfigurieren:<br>";
HTML_content = HTML_content + " SWITCH|CMD_SHORT: <font color='#" + HTML_color1 +"'>/usr/local/addons/cuxd/curl -s -m 5 \'http://" + WeMos_ip + "/R1-0\'</font><br>";
HTML_content = HTML_content + " SWITCH|CMD_LONG: <font color='#" + HTML_color1 +"'>/usr/local/addons/cuxd/curl -s -m 5 \'http://" + WeMos_ip + "/R1-1\'</font><br></li>";
HTML_content = HTML_content + "<br><strong><a href='http://" + WeMos_ip + "'>zurueck</a></strong>";
HTML_content = HTML_content + "<br><strong>""</strong>";
server.send(300, "text/html", HTML_content + HTML_end);
}
void turn_on() {
digitalWrite(gpio12relais, HIGH);
digitalWrite(gpio13Led, LOW);
}
void turn_off() {
digitalWrite(gpio12relais, LOW);
digitalWrite(gpio13Led, HIGH);
}
void action_1() { //keinen status senden
String aktor_status = "unbekannt";
if (action == "1") {turn_on(); aktor_status = "eingeschalten";}
if (action == "0") {turn_off(); aktor_status = "ausgeschalten";}
Status_alt = action;
status_aktuallisieren();
server.send(200, "text/plain", "WeMos-Schaltaktor ist "+ aktor_status +", keine Meldung an CUxD");
}
void action_2() { //status senden
String aktor_status = "unbekannt";
if (action == "1") {turn_on(); aktor_status = "eingeschalten";}
if (action == "0") {turn_off(); aktor_status = "ausgeschalten";}
Status_alt = action;
status_aktuallisieren();
if (transmit_state == "ja") {set_CUxD();}
server.send(200, "text/plain", "WeMos-Schaltaktor ist "+ aktor_status +", Meldung an CUxD");
}
void get_state() {
String temp = zeitstempel();
status_aktuallisieren();
server.send(200, "text/plain", Status);
delay(100);
Serial.println(zeitstempel() + " ueber HTTP Status gemeldet");
}
void get_state_CCU() {
String CCU_state = "null";
String temp = zeitstempel();
status_aktuallisieren();
if (Status == "0") {CCU_state = "<state>false</state>";} else {CCU_state = "<state>true</state>";}
server.send(200, "text/plain", CCU_state);
delay(100);
Serial.println(zeitstempel() + " ueber HTTP Status gemeldet");
}
void setup() {
pinMode(gpio12relais, OUTPUT); // Relais-Pin als Ausgang setzen
pinMode(gpio0Taster, INPUT_PULLUP); // Taster zum schalten
pinMode(gpio13Led, OUTPUT); // Led
digitalWrite(gpio13Led, HIGH);
// Seriellen Monitor für Kontrollausgaben öffnen
Serial.begin(115200);
Serial.println("");
Serial.println("WeMos-Schaltaktor");
// WLAN-Verbindung herstellen
WiFi.config(ip, gateway, subnet); // auskommentieren, falls eine dynamische IP bezogen werden soll
WiFi.softAPdisconnect(true);
WiFi.begin(ssid, password);
Serial.print("Verbindungsaufbau");
// Verbindungsaufbau abwarten
byte maxwait = 30;
while ( (WiFi.status() != WL_CONNECTED) && (maxwait > 0) ) {
delay(500);
maxwait--;
Serial.print(".");
}
if (WiFi.status() != WL_CONNECTED) {Serial.println("keine Verbindung");}
else{
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("");
}
server.on("/", root);
server.on("/R1-1", [](){action = "1"; action_1();});
server.on("/R1-0", [](){action = "0"; action_1();});
server.on("/cmd", cmd);
server.on("/help", help);
// HTTP-Server starten
server.begin();
Serial.println(zeitstempel() + " HTTP-Server gestartet");
if (transmit_state == "ja") {set_CUxD();}
int sensorVal = digitalRead(gpio0Taster);
Serial.println(sensorVal);
if (sensorVal == HIGH) {Taster = "schliesser";} else {Taster = "oeffner";}
}
void cmd() { // bei Aufruf von "../cmd" R1%3D0 R1%3D1
String CUxD = server.arg("CUxD");
String R1 = server.arg("R1");
String transmit = server.arg("transmit");
if (R1 == "0" && transmit == "0") {action = "0"; action_1();}
else if (R1 == "1" && transmit == "0") {action = "1"; action_1();}
else if ( (R1 == "0" && transmit == "1") || (R1 == "0") ) {action = "0"; action_2();}
else if ( (R1 == "1" && transmit == "1") || (R1 == "1") ) {action = "1"; action_2();}
else if (R1 == "state") {get_state();}
else if (CUxD == "1") {transmit_state_R1 = "ja";}
else if (CUxD == "0") {transmit_state_R1 = "nein";}
else {
help();
delay(100);
Serial.println(zeitstempel() + " Help");
}
}
void oeffner(){
int sensorVal = digitalRead(gpio0Taster);
Serial.println(sensorVal);
if (sensorVal == HIGH && Status == "0") {turn_on(); delay(100);}
if (sensorVal == HIGH && Status == "1") {turn_off(); delay(100);}
if (sensorVal == LOW) {
status_aktuallisieren();
if (Status_alt != Status) {Status_alt = Status; Status_Aenderung = "ja";} else Status_Aenderung = "nein";
if (transmit_state == "ja" && Status_Aenderung == "ja") {set_CUxD();}
}
}
void schliesser(){
int sensorVal = digitalRead(gpio0Taster);
Serial.println(sensorVal);
if (sensorVal == LOW && Status == "0") {turn_on(); delay(100);}
if (sensorVal == LOW && Status == "1") {turn_off(); delay(100);}
if (sensorVal == HIGH) {
status_aktuallisieren();
if (Status_alt != Status) {Status_alt = Status; Status_Aenderung = "ja";} else Status_Aenderung = "nein";
if (transmit_state == "ja" && Status_Aenderung == "ja") {set_CUxD();}
}
}
void loop() {
if ( (WiFi.status() != WL_CONNECTED) || (transmit_state_R1 != "ja") ) {transmit_state = "nein";} else {transmit_state = "ja";}
if (Taster == "oeffner") {oeffner();}
else if (Taster == "schliesser") {schliesser();}
server.handleClient(); // auf HTTP-Anfragen warten
}
-
- Beiträge: 12928
- Registriert: 16.01.2009, 18:48
- Wohnort: Steingaden
- Hat sich bedankt: 1604 Mal
- Danksagung erhalten: 222 Mal
Re: WEMOS D1 Mini mit ESP Easy an Homematic?
daumen hoch ( ein symbol gibt es ja nicht )
na dann zu neuen wegen, und ich schau mir das ganze mal in ruhe an. war, wie immer, was neues zu sehen ..
was soll man bei dem wetter sonst machen ... ok, eine stockwaage programmieren die im winter schon fertig sein sollte .
na dann zu neuen wegen, und ich schau mir das ganze mal in ruhe an. war, wie immer, was neues zu sehen ..
was soll man bei dem wetter sonst machen ... ok, eine stockwaage programmieren die im winter schon fertig sein sollte .
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso !!!
wer schreibfehler findet darf sie behalten.
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso !!!
wer schreibfehler findet darf sie behalten.
Re: WEMOS D1 Mini mit ESP Easy an Homematic?
Hallo
ich steige jetzt auch in das Thema Wemos + Homematic ein.
ich finde Easyesp perfekt für mein Vorhaben (DHT22, Ultraschallsensor, IR-Empfänger)
ich werde irgendwie nicht wirklich schlau, wie ich Werte in HM einbinden kann.
mit "Domoticz HTTP" ??
Mit der ganzen Controllergeschichte sehe ich auch nicht durch, als newbie. Das Wiki ist ja leider auch nur auf englisch, und bei solc einem komplexen Thema sehr schwer zu verstehen.
Wie macht ihr das so?
VG Nelzon
ich steige jetzt auch in das Thema Wemos + Homematic ein.
ich finde Easyesp perfekt für mein Vorhaben (DHT22, Ultraschallsensor, IR-Empfänger)
ich werde irgendwie nicht wirklich schlau, wie ich Werte in HM einbinden kann.
mit "Domoticz HTTP" ??
Mit der ganzen Controllergeschichte sehe ich auch nicht durch, als newbie. Das Wiki ist ja leider auch nur auf englisch, und bei solc einem komplexen Thema sehr schwer zu verstehen.
Wie macht ihr das so?
VG Nelzon
-
- Beiträge: 17
- Registriert: 06.11.2017, 11:36
- Danksagung erhalten: 1 Mal
Re: WEMOS D1 Mini mit ESP Easy an Homematic?
Hallo zusammen,
das Thema ist zwar schon nun ein Weilchen älter, aber auch ich war auf der Suche nach dem Zusammenspiel von ESP Easy und Homematic.
Und ja: ES FUNZT. Und zwar sogar ziemlich easy!!
To Do:
Die ESP Easy Variable müsst Ihr nun nur noch in der CCU mit dem gleichen Namen anlegen und schon startet die Übertragung.
Hoffe, es hilft weiter. Bei mir funzt das großartig!
Gruß
Markus
das Thema ist zwar schon nun ein Weilchen älter, aber auch ich war auf der Suche nach dem Zusammenspiel von ESP Easy und Homematic.
Und ja: ES FUNZT. Und zwar sogar ziemlich easy!!
To Do:
- 1. In ESP Easy einen Controller vom Typ "Generic HTTP" anlegen.
- 2. Controller IP ist die IP Eurer CCU.
- 3. Controller Port ist 8181.
- 4. Controller Publish (bitte unverändert eintragen, es sei denn Ihr wollt, dass noch andere ESP Variablen mit übertragen werden)
Code: Alles auswählen
x.exe?Antwort=dom.GetObject("%valname%").State(%value%)
Die ESP Easy Variable müsst Ihr nun nur noch in der CCU mit dem gleichen Namen anlegen und schon startet die Übertragung.
Hoffe, es hilft weiter. Bei mir funzt das großartig!
Gruß
Markus