WeMos D1 mini als WLAN-Sensor/-Aktor
Moderator: Co-Administratoren
-
- Beiträge: 3974
- Registriert: 24.03.2011, 04:32
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 110 Mal
- Danksagung erhalten: 71 Mal
Re: WeMos D1 mini als WLAN-Sensor/-Aktor
Ja, alter Code. Passt nicht mehr zu neuen CCU-FW. Die sind pingeliger, was die http-Behandlung angeht. Mir (und anderen) hat das geholfen:
viewtopic.php?p=350204#p350204
viewtopic.php?p=350204#p350204
-
- Beiträge: 142
- Registriert: 17.07.2016, 10:40
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 1 Mal
Re: WeMos D1 mini als WLAN-Sensor/-Aktor
Hallo,
Ich hab meine wemos damit wieder zum Übertragen bekommen...
Die laufen auch mit der Grad aktuellen Firmware
Mit dem Gruppen Fehler...
Kannst ja die analog Messung ausklammern...
viewtopic.php?f=31&t=29321&start=1570
MFG. Flo
Ich hab meine wemos damit wieder zum Übertragen bekommen...
Die laufen auch mit der Grad aktuellen Firmware
Mit dem Gruppen Fehler...
Kannst ja die analog Messung ausklammern...
viewtopic.php?f=31&t=29321&start=1570
MFG. Flo
-
- Beiträge: 4
- Registriert: 20.08.2017, 14:02
Re: WeMos D1 mini als WLAN-Sensor/-Aktor
Super!!
Vielen Dank @klassisch & @Ardubert Homedu
Nun funktioniert es wie es soll.
Anbei noch mal der Sketch "nur" mit der RaspberryMatic Anpassung
Vielen Dank @klassisch & @Ardubert Homedu
Nun funktioniert es wie es soll.
Anbei noch mal der Sketch "nur" mit der RaspberryMatic Anpassung
Code: Alles auswählen
/*
* WeMos Temperatur-/Luftfeuchtesensor (Prototyp)
*
* verbindet sich mit dem vorhandenen WLAN als Server
* und bei Bedarf mit der CCU als Client
*
* Steuerung über HTTP-Befehle:
* "<IP-Adresse>" gibt eine Status- und Befehlsübersicht aus
* "<IP-Adresse>/temp" gibt die zuletzt gemessene Temperatur aus (Grad Celsius)
* "<IP-Adresse>/feucht" gibt die zuletzt gemessene Luftfeuchtigkeit aus (in Prozent)
* "<IP-Adresse>/zeit" gibt den CCU-Zeitstempel aus, an dem die letzte Meldung an die CCU erfolgte
* "<IP-Adresse>/temp?delta=<wert>" setzt den Temperatur-Differenzwert, der eine CCU-Meldung ausloest
* "<IP-Adresse>/temp?korr=<wert>" setzt den Korrekturwert fuer die Temperaturmessung
* "<IP-Adresse>/feucht?delta=<wert>" setzt den Feuchtigkeits-Differenzwert, der eine CCU-Meldung ausloest
* "<IP-Adresse>/feucht?korr=<wert>" setzt den Korrekturwert fuer die Feuchtigkeitsmessung
* "<IP-Adresse>/zeit?delta=<wert>" setzt die Zeitspanne (in Sekunden), nach der spaetestens eine CCU-Meldung erfolgt
* "<IP-Adresse>/zeit?mess=<wert>" definiert das Messintervall (in Sekunden)
*
* Getesteter Aufbau:
* WeMos D1 mini
* DHT Shield mini
* Pin-Belegung:
* D4: Datenleitung DHT-Sensor
*
* DHT sensor library by Adafruit v.1.2.3
*
* 9.Februar 2016 —m.yoda
* 23.03.2017 - Ardubert Homedu - ceerix Code angepasst für CCU FW 2.27.7
* 20. August 2017 - Gunter170 - Anpassung für RaspberryMatic
*/
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include "DHT.h"
// ******* Netzwerkeinstellungen, bitte anpassen! *******
const char* ssid = "abc123"; // SSID des vorhandenen WLANs
const char* password = "geheim"; // Passwort für das vorhandene WLAN
IPAddress gateway(xxx,xxx,xxx,xxx); // IP-Adresse des WLAN-Gateways
IPAddress subnet(255,255,255,0); // Subnetzmaske
IPAddress ip(xxx,xxx,xxx,xxx); // feste IP-Adresse für den WeMos
const char* host = "xxx.xxx.xxx.xxx"; // IP-Adresse der CCU (mit Punkten!)
ESP8266WebServer server(80); // Webserver initialisieren auf Port 80
// ******* Sensoreinstellungen, bitte anpassen! *******
DHT dht(D4, DHT11); // verwendeter Datenpin des Sensors, bei WeMos mini Shields = D4
// verwendeter Sensortyp, unterstützt werden DHT11 DHT21 DHT22
// WeMos mini DHT Shield = DHT11
// WeMos mini DHT Pro Shield = DHT22
unsigned long deltaMessungSekunden = 10; //Zeitintervall (Sekunden) nach dem eine Messung erfolgt
float korrTemp = 0; // Korrekturwert fuer die Temperaturmessung
float korrFeucht = 0; // Korrekturwert fuer die Feuchtigkeitsmessung
// ******* Einstellungen fuer Meldungen an die CCU, bitte anpassen! *******
String tempCCUname = "temp"; // Bezeichnung der CCU-Systemvariable für die gemessene Temperatur
String feuchtCCUname = "feucht"; // Bezeichnung der CCU-Systemvariable für die gemessene Luftfeuchtigkeit
unsigned long deltaMeldungSekunden = 3600; // Zeitintervall (Sekunden) nach dem eine CCU-Meldung erfolgt (0 bedeutet nie)
float deltaTemp = 1; // Temperaturaenderung (*C) bei der eine CCU-Meldung erfolgt (0 bedeutet nie)
float deltaFeucht = 0; // Luftfeuchteaenderung (%) bei der eine CCU-Meldung erfolgt (0 bedeutet nie)
float feucht = 0, feuchtCCU = 0, temp = 0, tempCCU = 0;
unsigned long jetztMillis = 0;
unsigned long deltaMessungMillis = deltaMessungSekunden * 1000, letzteMessungMillis = 0;
unsigned long deltaMeldungMillis = deltaMeldungSekunden * 1000, letzteMeldungMillis = 0;
String antwort = "", meldung = "",letzteMeldungCCUzeit = "";
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 messung() { // Sensor abfragen
feucht = dht.readHumidity() + korrFeucht;
temp = dht.readTemperature() + korrTemp;
if (isnan(feucht) || isnan(temp)) {
Serial.println(zeitstempel() + " Fehler: Sensor konnte nicht abgefragt werden");
delay(100);
return;
}
letzteMessungMillis = jetztMillis;
Serial.println(zeitstempel() + " Messung Luftfeuchtigkeit: " + feucht + " % Temperatur: " + temp + " * C");
}
void melde_CCU() { // Werte an die CCU melden
WiFiClient client;
const int httpPort = 8181;
if (!client.connect(host, httpPort)) {
return;
}
String
url = "/xy.exe?antwort1=dom.GetObject('" + feuchtCCUname + "').State('" + feucht + "')"
"&antwort2=dom.GetObject('" + tempCCUname + "').State('" + temp + "')";
Serial.print("Requesting URL: ");
Serial.println(url);
// This will send the request to the server
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
delay(100);
// Read all the lines of the reply from server and print them to Serial
while (client.available()) {
String line = client.readStringUntil('\r');
}
Serial.println("Werte an CCU gemeldet, " + letzteMeldungCCUzeit);
/* Serial.println("Werte an CCU gemeldet, \n" + meldung + "\n" + letzteMeldungCCUzeit); */
letzteMeldungMillis = jetztMillis; // gemeldete Daten merken
feuchtCCU = feucht;
tempCCU = temp;
}
void wurzel_behandlung() { // bei Aufruf des Root-Verzeichnisses
String betriebszeit = zeitstempel();
antwort = "WeMos Temperatur-/Luftfeuchtesensor\n";
antwort = antwort + "\tBetriebszeit: " + betriebszeit + " (Std:Min:Sek)\n";
antwort = antwort + "\tVerbunden mit: " + ssid + "\n";
int rssi = WiFi.RSSI();
antwort = antwort + "\tSignalstaerke: " + String(rssi) + " dBm\n\n";
antwort = antwort + "Letzte Messwerte\n\tTemperatur: " + String(temp) + " * C\n";
antwort = antwort + "\tLuftfeuchtigkeit: " + String(feucht) + " %\n\n";
antwort = antwort + "Korrekturwerte\n\tTemperatur: " + String(korrTemp) + " * C\n";
antwort = antwort + "\tLuftfeuchtigkeit: " + String(korrFeucht) + " %\n\n";
antwort = antwort + "Letzte Datenuebertragung CCU\n\t" + letzteMeldungCCUzeit;
antwort = antwort + "\tGemeldete Temperatur: " + String(tempCCU) + " * C\n";
antwort = antwort + "\tGemeldete Luftfeuchtigkeit: " + String(feuchtCCU) + " %\n\n";
antwort = antwort + "Ausloeser fuer Datenuebertragung CCU\n";
antwort = antwort + "\tZeitintervall: " + String(deltaMeldungSekunden) + " Sekunden\n";
antwort = antwort + "\tTemperaturdifferenzwert: " + String(deltaTemp) + " * C\n";
antwort = antwort + "\tFeuchtigkeitsdifferenzwert: " + String(deltaFeucht) + " %\n\n";
antwort = antwort + "HTTP-Befehlsuebersicht:\n";
antwort = antwort + "\"<IP-Adresse>/temp\"\n\tgibt die zuletzt gemessene Temperatur aus (Grad Celsius)\n";
antwort = antwort + "\"<IP-Adresse>/feucht\"\n\tgibt die zuletzt gemessene Luftfeuchtigkeit aus (in Prozent)\n";
antwort = antwort + "\"<IP-Adresse>/zeit\"\n\tgibt den CCU-Zeitstempel aus, an dem die letzte Meldung an die CCU erfolgte\n";
antwort = antwort + "\"<IP-Adresse>/temp?delta=<wert>\"\n\tsetzt den Temperatur-Differenzwert, der eine CCU-Meldung ausloest\n";
antwort = antwort + "\"<IP-Adresse>/temp?korr=<wert>\"\n\tsetzt den Korrekturwert fuer die Temperaturmessung\n";
antwort = antwort + "\"<IP-Adresse>/feucht?delta=<wert>\"\n\tsetzt den Feuchtigkeits-Differenzwert, der eine CCU-Meldung ausloest\n";
antwort = antwort + "\"<IP-Adresse>/feucht?korr=<wert>\"\n\tsetzt den Korrekturwert fuer die Feuchtigkeitsmessung\n";
antwort = antwort + "\"<IP-Adresse>/zeit?delta=<wert \"\n\tsetzt die Zeitspanne (in Sekunden), nach der spaetestens eine CCU-Meldung erfolgt\n";
antwort = antwort + "\"<IP-Adresse>/zeit?mess=<wert>\"\n\tdefiniert das Messintervall (in Sekunden)\n";
server.send(300, "text/plain", antwort);
delay(150);
Serial.println(zeitstempel() + " unspezifische HTTP-Anfrage");
}
void melde_feucht() { // bei Aufruf von ".../feucht"
String delta = server.arg("delta");
String korr = server.arg("korr");
if (delta != "") {
deltaFeucht = delta.toFloat();
server.send(200, "text/plain", "Feuchtigkeitsdifferenzwert fuer CCU-Meldungen auf " + delta + " % gesetzt.");
delay(100);
Serial.println(zeitstempel() + " Feuchtigkeitsdifferenzwert ueber HTTP geaendert: " + delta + " %");
}
else if (korr != "") {
korrFeucht = korr.toFloat() * 1000;
server.send(200, "text/plain", "Korrekturwert fuer Feuchtigkeitsmessung auf " + korr + " % gesetzt.");
delay(100);
Serial.println(zeitstempel() + " Feuchtigkeitskorrekturwert ueber HTTP geaendert: " + korr + " %");
}
else {
server.send(200, "text/plain", String(feucht));
delay(100);
Serial.println(zeitstempel() + " Luftfeuchtigkeit ueber HTTP gemeldet");
}
}
void melde_temp() { // bei Aufruf von ".../temp"
String delta = server.arg("delta");
String korr = server.arg("korr");
if (delta != "") {
deltaTemp = delta.toFloat();
server.send(200, "text/plain", "Temperaturdifferenzwert fuer CCU-Meldungen auf " + delta + " * C gesetzt.");
delay(100);
Serial.println(zeitstempel() + " Temperaturdifferenzwert ueber HTTP geaendert: " + delta + " * C");
}
else if (korr != "") {
korrTemp = korr.toFloat() * 1000;
server.send(200, "text/plain", "Korrekturwert fuer Temperaturmessung auf " + korr + " * C gesetzt.");
delay(100);
Serial.println(zeitstempel() + " Temperaturkorrekturwert ueber HTTP geaendert: " + korr + " Sekunden");
}
else {
server.send(200, "text/plain", String(temp));
delay(100);
Serial.println(zeitstempel() + " Temperatur ueber HTTP gemeldet");
}
}
void melde_zeit() { // bei Aufruf von ".../zeit"
String delta = server.arg("delta");
String mess = server.arg("mess");
if (delta != "") {
deltaMeldungSekunden = delta.toInt();
deltaMeldungMillis = deltaMeldungSekunden * 1000;
server.send(200, "text/plain", "Zeitintervall fuer CCU-Meldungen auf " + delta + " Sekunden gesetzt.");
delay(100);
Serial.println(zeitstempel() + " Zeitintervall fuer CCU-Meldungen ueber HTTP geaendert: " + delta + " Sekunden");
}
else if (mess != "") {
deltaMessungMillis = mess.toInt() * 1000;
server.send(200, "text/plain", "Zeitintervall fuer Sensorabfrage auf " + mess + " Sekunden gesetzt.");
delay(100);
Serial.println(zeitstempel() + " Zeitintervall fuer Sensorabfrage ueber HTTP geaendert: " + mess + " Sekunden");
}
else {
server.send(200, "text/plain", "Letzte Aktualisierung der CCU\n" + letzteMeldungCCUzeit);
delay(100);
Serial.println(zeitstempel() + " Letzte Aktualisierung der CCU ueber HTTP Status gemeldet");
}
}
void setup() {
dht.begin(); // Sensor initialisieren
// Seriellen Monitor für Kontrollausgaben öffnen
Serial.begin(115200);
Serial.println("");
Serial.println("WeMos Temperatur-/Luftfeuchtesensor");
// 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("/temp", melde_temp);
server.on("/feucht", melde_feucht);
server.on("/zeit", melde_zeit);
// HTTP-Server starten
server.begin();
Serial.println(zeitstempel() + " HTTP-Server gestartet");
// Startwerte fuer Zeittrigger
letzteMessungMillis = millis();
letzteMeldungMillis = millis();
}
void loop() {
// auf HTTP-Anfragen warten
server.handleClient();
jetztMillis = millis();
// neue Messung falls Zeitintervall erreicht
if(jetztMillis - letzteMessungMillis > deltaMessungMillis) {
messung();
}
// neue Meldung an die CCU falls Zeitintervall erreicht
if(!deltaMeldungMillis == 0 && jetztMillis - letzteMeldungMillis > deltaMeldungMillis) {
Serial.print(zeitstempel() + " Zeitintervall erreicht: ");
melde_CCU();
}
// neue Meldung an die CCU falls Luftfeuchtigkeitsaenderung den Schwellwert erreicht
if(!deltaFeucht == 0 && abs(feucht - feuchtCCU) >= deltaFeucht) {
Serial.print(zeitstempel() + " Luftfeuchtigkeitsaenderung: ");
melde_CCU();
}
// neue Meldung an die CCU falls Temperaturaenderung den Schwellwert erreicht
if(!deltaTemp == 0 && abs(temp - tempCCU) >= deltaTemp) { // Neue Meldung wg. Temperaturaenderung?
Serial.print(zeitstempel() + " Temperatursaenderung: ");
melde_CCU();
}
}
-
- Beiträge: 142
- Registriert: 17.07.2016, 10:40
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 1 Mal
Re: WeMos D1 mini als WLAN-Sensor/-Aktor
Dann hier noch meine Letzte Version ,,,
Die Analog Messung kann jetzt oben ausgeschalten werden..
Das Delta für Messung geht jetzt auch für Analog und löst somit auch die
Übertragung aus...
bisher wurde nur bei temp, oder feuchte ausgelöst...
viel Spaß damit
mfg.
Flo
Die Analog Messung kann jetzt oben ausgeschalten werden..
Das Delta für Messung geht jetzt auch für Analog und löst somit auch die
Übertragung aus...
bisher wurde nur bei temp, oder feuchte ausgelöst...
viel Spaß damit
Code: Alles auswählen
/*
* WeMos Temperatur-/Luftfeuchtesensor (Prototyp)
*
* verbindet sich mit dem vorhandenen WLAN als Server
* und bei Bedarf mit der CCU als Client
*
* Steuerung über HTTP-Befehle:
* "<IP-Adresse>" gibt eine Status- und Befehlsübersicht aus
* "<IP-Adresse>/temp" gibt die zuletzt gemessene Temperatur aus (Grad Celsius)
* "<IP-Adresse>/feucht" gibt die zuletzt gemessene Luftfeuchtigkeit aus (in Prozent)
* "<IP-Adresse>/zeit" gibt den CCU-Zeitstempel aus, an dem die letzte Meldung an die CCU erfolgte
* "<IP-Adresse>/temp?delta=<wert>" setzt den Temperatur-Differenzwert, der eine CCU-Meldung ausloest
* "<IP-Adresse>/temp?korr=<wert>" setzt den Korrekturwert fuer die Temperaturmessung
* "<IP-Adresse>/feucht?delta=<wert>" setzt den Feuchtigkeits-Differenzwert, der eine CCU-Meldung ausloest
* "<IP-Adresse>/feucht?korr=<wert>" setzt den Korrekturwert fuer die Feuchtigkeitsmessung
* "<IP-Adresse>/zeit?delta=<wert>" setzt die Zeitspanne (in Sekunden), nach der spaetestens eine CCU-Meldung erfolgt
* "<IP-Adresse>/zeit?mess=<wert>" definiert das Messintervall (in Sekunden)
*
* Getesteter Aufbau:
* WeMos D1 mini
* DHT22
* Pin-Belegung:
* D4: Datenleitung DHT-Sensor
* A0: Analog Eingang
* DHT sensor library by Adafruit v.1.2.3
*
* 9.Februar 2016 —m.yoda
* */
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include "DHT.h"
// ******* Netzwerkeinstellungen, bitte anpassen! *******
const char* ssid = "XXXXXXXXX"; // SSID des vorhandenen WLANs
const char* password = "XXXXXXXXX"; // Passwort für das vorhandene WLAN
//IPAddress gateway(xxx,xxx,xxx,xxx); // IP-Adresse des WLAN-Gateways
IPAddress subnet(255,255,255,0); // Subnetzmaske
//IPAddress ip(xxx,xxx,xxx,xxx); // feste IP-Adresse für den WeMos
const char* host = "192.168.0.225"; // IP-Adresse der CCU
ESP8266WebServer server(80); // Webserver initialisieren auf Port 80
// ******* Sensoreinstellungen, bitte anpassen! *******
DHT dht(D4, DHT22); // verwendeter Datenpin des Sensors, bei WeMos mini Shields = D4
// verwendeter Sensortyp, unterstützt werden DHT11 DHT21 DHT22
// WeMos mini DHT Shield = DHT11
// WeMos mini DHT Pro Shield = DHT22
#define nein // mit Analog Messung ist - ja -
// ohne Analog Messung ist - nein -
unsigned long deltaMessungSekunden = 60; //Zeitintervall (Sekunden) nach dem eine Messung erfolgt
float korrTemp = -2.7; // Korrekturwert fuer die Temperaturmessung
float korrFeucht = 0; // Korrekturwert fuer die Feuchtigkeitsmessung
int sensorPin = A0; // Definieren
int sensorValue = 0; // Definieren
// ******* Einstellungen fuer Meldungen an die CCU, bitte anpassen! *******
String tempCCUname = "W1temp"; // Bezeichnung der CCU-Systemvariable für die gemessene Temperatur
String feuchtCCUname = "W1feucht"; // Bezeichnung der CCU-Systemvariable für die gemessene Luftfeuchtigkeit
String analog = "W1analog" ; // Name der Var. auf der ccu
unsigned long deltaMeldungSekunden = 600; // Zeitintervall (Sekunden) nach dem eine CCU-Meldung erfolgt (0 bedeutet nie)
float deltaTemp = 0.3; // Temperaturaenderung (*C) bei der eine CCU-Meldung erfolgt (0 bedeutet nie)
float deltaFeucht = 1; // Luftfeuchteaenderung (%) bei der eine CCU-Meldung erfolgt (0 bedeutet nie)
float deltaSensor = 5; // analog aenderung) bei der eine CCU-Meldung erfolgt (0 bedeutet nie) //---eingefügt
float feucht = 0, feuchtCCU = 0, temp = 0, tempCCU = 0, sensor = 0, analogWert = 0;
unsigned long jetztMillis = 0;
unsigned long deltaMessungMillis = deltaMessungSekunden * 1000, letzteMessungMillis = 0;
unsigned long deltaMeldungMillis = deltaMeldungSekunden * 1000, letzteMeldungMillis = 0;
String antwort = "", meldung = "",letzteMeldungCCUzeit = "";
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 messung() { // Sensoren abfragen
//*****************************************************************
// Analog
#if defined (ja)
sensorValue = analogRead(sensorPin); // lesen
sensorValue = map(sensorValue ,0,1023,0,100 ); // skalieren
Serial.println(sensorValue); // Anzeigen
#endif
//******************************************************************
// DHT
feucht = dht.readHumidity() + korrFeucht;
temp = dht.readTemperature() + korrTemp;
//
if (isnan(feucht) || isnan(temp)) {
Serial.println(zeitstempel() + " Fehler: Sensor konnte nicht abgefragt werden");
delay(100);
// lesen im bereich temp lesen
return;
}
letzteMessungMillis = jetztMillis;
Serial.println(zeitstempel() + " Messung Luftfeuchtigkeit: " + feucht + " % Temperatur: " + temp + " * C");
#if defined (ja)
Serial.println(zeitstempel() + " Analog: " + sensorValue);
#endif
}
//***************************************************************************************************
//***************************************************************************************************
void melde_CCU() { // Werte an die CCU melden
WiFiClient client;
const int httpPort = 8181;
if (!client.connect(host, httpPort)) {
return;
}
String
url = "/xy.exe?antwort1=dom.GetObject('" + feuchtCCUname + "').State('" + feucht + "')"
"&antwort2=dom.GetObject('" + tempCCUname + "').State('" + temp + "')"
"&antwort3=dom.GetObject('" + analog + "').State('" + sensorValue + "')";
Serial.print("Requesting URL: ");
Serial.println(url);
// This will send the request to the server
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
delay(100);
// Read all the lines of the reply from server and print them to Serial
while (client.available()) {
String line = client.readStringUntil('\r');
}
//****************************************************************************************************
//****************************************************************************************************
Serial.println("Werte an CCU gemeldet, " + letzteMeldungCCUzeit);
letzteMeldungMillis = jetztMillis; // gemeldete Daten merken
feuchtCCU = feucht;
tempCCU = temp;
analogWert = sensorValue;
}
void wurzel_behandlung() { // bei Aufruf des Root-Verzeichnisses
String betriebszeit = zeitstempel();
antwort = "WeMos Temperatur-/Luftfeuchtesensor\n";
antwort = antwort + "\tBetriebszeit: " + betriebszeit + " (Std:Min:Sek)\n";
antwort = antwort + "\tVerbunden mit: " + ssid + "\n";
int rssi = WiFi.RSSI();
antwort = antwort + "\tSignalstaerke: " + String(rssi) + " dBm\n\n";
antwort = antwort + "Letzte Messwerte\n\tTemperatur: " + String(temp) + " * C\n";
antwort = antwort + "\tLuftfeuchtigkeit: " + String(feucht) + " %\n\n";
antwort = antwort + "Korrekturwerte\n\tTemperatur: " + String(korrTemp) + " * C\n";
antwort = antwort + "\tLuftfeuchtigkeit: " + String(korrFeucht) + " %\n\n";
antwort = antwort + "Letzte Datenuebertragung CCU\n\t" + letzteMeldungCCUzeit;
antwort = antwort + "\tGemeldete Temperatur: " + String(tempCCU) + " * C\n";
antwort = antwort + "\tGemeldete Luftfeuchtigkeit: " + String(feuchtCCU) + " %\n\n";
antwort = antwort + "Ausloeser fuer Datenuebertragung CCU\n";
antwort = antwort + "\tZeitintervall: " + String(deltaMeldungSekunden) + " Sekunden\n";
antwort = antwort + "\tTemperaturdifferenzwert: " + String(deltaTemp) + " * C\n";
antwort = antwort + "\tFeuchtigkeitsdifferenzwert: " + String(deltaFeucht) + " %\n\n";
antwort = antwort + "HTTP-Befehlsuebersicht:\n";
antwort = antwort + "\"<IP-Adresse>/temp\"\n\tgibt die zuletzt gemessene Temperatur aus (Grad Celsius)\n";
antwort = antwort + "\"<IP-Adresse>/feucht\"\n\tgibt die zuletzt gemessene Luftfeuchtigkeit aus (in Prozent)\n";
antwort = antwort + "\"<IP-Adresse>/zeit\"\n\tgibt den CCU-Zeitstempel aus, an dem die letzte Meldung an die CCU erfolgte\n";
antwort = antwort + "\"<IP-Adresse>/temp?delta=<wert>\"\n\tsetzt den Temperatur-Differenzwert, der eine CCU-Meldung ausloest\n";
antwort = antwort + "\"<IP-Adresse>/temp?korr=<wert>\"\n\tsetzt den Korrekturwert fuer die Temperaturmessung\n";
antwort = antwort + "\"<IP-Adresse>/feucht?delta=<wert>\"\n\tsetzt den Feuchtigkeits-Differenzwert, der eine CCU-Meldung ausloest\n";
antwort = antwort + "\"<IP-Adresse>/feucht?korr=<wert>\"\n\tsetzt den Korrekturwert fuer die Feuchtigkeitsmessung\n";
antwort = antwort + "\"<IP-Adresse>/zeit?delta=<wert \"\n\tsetzt die Zeitspanne (in Sekunden), nach der spaetestens eine CCU-Meldung erfolgt\n";
antwort = antwort + "\"<IP-Adresse>/zeit?mess=<wert>\"\n\tdefiniert das Messintervall (in Sekunden)\n";
server.send(300, "text/plain", antwort);
delay(150);
Serial.println(zeitstempel() + " unspezifische HTTP-Anfrage");
}
void melde_feucht() { // bei Aufruf von ".../feucht"
String delta = server.arg("delta");
String korr = server.arg("korr");
if (delta != "") {
deltaFeucht = delta.toFloat();
server.send(200, "text/plain", "Feuchtigkeitsdifferenzwert fuer CCU-Meldungen auf " + delta + " % gesetzt.");
delay(100);
Serial.println(zeitstempel() + " Feuchtigkeitsdifferenzwert ueber HTTP geaendert: " + delta + " %");
}
else if (korr != "") {
korrFeucht = korr.toFloat() * 1000;
server.send(200, "text/plain", "Korrekturwert fuer Feuchtigkeitsmessung auf " + korr + " % gesetzt.");
delay(100);
Serial.println(zeitstempel() + " Feuchtigkeitskorrekturwert ueber HTTP geaendert: " + korr + " %");
}
else {
server.send(200, "text/plain", String(feucht));
delay(100);
Serial.println(zeitstempel() + " Luftfeuchtigkeit ueber HTTP gemeldet");
}
}
void melde_temp() { // bei Aufruf von ".../temp"
String delta = server.arg("delta");
String korr = server.arg("korr");
if (delta != "") {
deltaTemp = delta.toFloat();
server.send(200, "text/plain", "Temperaturdifferenzwert fuer CCU-Meldungen auf " + delta + " * C gesetzt.");
delay(100);
Serial.println(zeitstempel() + " Temperaturdifferenzwert ueber HTTP geaendert: " + delta + " * C");
}
else if (korr != "") {
korrTemp = korr.toFloat() * 1000;
server.send(200, "text/plain", "Korrekturwert fuer Temperaturmessung auf " + korr + " * C gesetzt.");
delay(100);
Serial.println(zeitstempel() + " Temperaturkorrekturwert ueber HTTP geaendert: " + korr + " Sekunden");
}
else {
server.send(200, "text/plain", String(temp));
delay(100);
Serial.println(zeitstempel() + " Temperatur ueber HTTP gemeldet");
}
}
void melde_zeit() { // bei Aufruf von ".../zeit"
String delta = server.arg("delta");
String mess = server.arg("mess");
if (delta != "") {
deltaMeldungSekunden = delta.toInt();
deltaMeldungMillis = deltaMeldungSekunden * 1000;
server.send(200, "text/plain", "Zeitintervall fuer CCU-Meldungen auf " + delta + " Sekunden gesetzt.");
delay(100);
Serial.println(zeitstempel() + " Zeitintervall fuer CCU-Meldungen ueber HTTP geaendert: " + delta + " Sekunden");
}
else if (mess != "") {
deltaMessungMillis = mess.toInt() * 1000;
server.send(200, "text/plain", "Zeitintervall fuer Sensorabfrage auf " + mess + " Sekunden gesetzt.");
delay(100);
Serial.println(zeitstempel() + " Zeitintervall fuer Sensorabfrage ueber HTTP geaendert: " + mess + " Sekunden");
}
else {
server.send(200, "text/plain", "Letzte Aktualisierung der CCU\n" + letzteMeldungCCUzeit);
delay(100);
Serial.println(zeitstempel() + " Letzte Aktualisierung der CCU ueber HTTP Status gemeldet");
}
}
void setup() {
dht.begin(); // Sensor initialisieren
// Seriellen Monitor für Kontrollausgaben öffnen
Serial.begin(115200);
Serial.println("");
Serial.println("WeMos Temperatur-/Luftfeuchte-/Analogsensor");
// WLAN-Verbindung herstellen
// WiFi.config(ip, gateway, subnet); // auskommentieren, falls eine dynamische IP bezogen werden soll
WiFi.mode(WIFI_STA); // eingefügt
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("/temp", melde_temp);
server.on("/feucht", melde_feucht);
server.on("/zeit", melde_zeit);
// HTTP-Server starten
server.begin();
Serial.println(zeitstempel() + " HTTP-Server gestartet");
// Startwerte fuer Zeittrigger
letzteMessungMillis = millis();
letzteMeldungMillis = millis();
}
void loop() {
// auf HTTP-Anfragen warten
server.handleClient();
jetztMillis = millis();
// neue Messung falls Zeitintervall erreicht
if(jetztMillis - letzteMessungMillis > deltaMessungMillis) {
messung();
}
// neue Meldung an die CCU falls Zeitintervall erreicht
if(!deltaMeldungMillis == 0 && jetztMillis - letzteMeldungMillis > deltaMeldungMillis) {
Serial.print(zeitstempel() + " Zeitintervall erreicht: ");
melde_CCU();
}
// neue Meldung an die CCU falls Luftfeuchtigkeitsaenderung den Schwellwert erreicht
if(!deltaFeucht == 0 && abs(feucht - feuchtCCU) >= deltaFeucht) {
Serial.print(zeitstempel() + " Luftfeuchtigkeitsaenderung: ");
melde_CCU();
}
// neue Meldung an die CCU falls Temperaturaenderung den Schwellwert erreicht
if(!deltaTemp == 0 && abs(temp - tempCCU) >= deltaTemp) { // Neue Meldung wg. Temperaturaenderung?
Serial.print(zeitstempel() + " Temperatursaenderung: ");
melde_CCU();
}
// neue Meldung an die CCU falls analog aenderung den Schwellwert erreicht
if(!deltaSensor == 0 && abs(sensorValue - analogWert) >= deltaSensor) { // Neue Meldung wg. Analog aenderung?
Serial.print(zeitstempel() + " Analog aenderung: ");
melde_CCU();
}
}
mfg.
Flo
-
- Beiträge: 12929
- Registriert: 16.01.2009, 18:48
- Wohnort: Steingaden
- Hat sich bedankt: 1604 Mal
- Danksagung erhalten: 222 Mal
Re: WeMos D1 mini als WLAN-Sensor/-Aktor
ich hatte ja nach dem Windrichtungs und W.-geschwindigkeitssensor TX 23 sensor gefragt...
gestern habe ich eine Lib dazu gefunden:
* https://www.john.geek.nz/2012/08/la-cro ... -protocol/
* https://github.com/egzumer/Arduino-LaCr ... 23-Library
am rande: der sensor wertet die Windrichtung nach "alter technik" aus - über 4 led´s ...
mal schauen wann ich im winter zeit finde den sensor zu testen , im schrank liegt er ja schon.
gestern habe ich eine Lib dazu gefunden:
* https://www.john.geek.nz/2012/08/la-cro ... -protocol/
* https://github.com/egzumer/Arduino-LaCr ... 23-Library
am rande: der sensor wertet die Windrichtung nach "alter technik" aus - über 4 led´s ...
mal schauen wann ich im winter zeit finde den sensor zu testen , im schrank liegt er ja schon.
-------
!!! 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: 12929
- Registriert: 16.01.2009, 18:48
- Wohnort: Steingaden
- Hat sich bedankt: 1604 Mal
- Danksagung erhalten: 222 Mal
Re: WeMos D1 mini als WLAN-Sensor/-Aktor
hat sich einer mal mit der BLYNK-App + lib für den arduino / esp beschäftigt ?
-------
!!! 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: 3974
- Registriert: 24.03.2011, 04:32
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 110 Mal
- Danksagung erhalten: 71 Mal
Re: WeMos D1 mini als WLAN-Sensor/-Aktor
Nein, was kann die?
Habe heute die Umstellung meines BME280, SHT31, MLX90614, VEML6070, BH1750, Relay und Regensensor Monster auf ESP32 so weit gebracht, daß ich schon erste Tests durchführen konnte.
BME280, VEML6070, BH1750 und Relay scheinen zu funktionieren. In den letzten Tagen gab es einige hifreiche libs - zum Teil aber leider inoffizielle, die von der Community nicht weiter supportet werden.
Nach einem restart ist das Ding sofort im WLAN. Beim ESP8266 mußte ich eine 5 Sekunden-delay einbauen, um das WLAN-Log-in zu stabilisieren. Beim ESP32 warte ich gerade mal eine Sekunde (unoptimiert).
Ich denek fast, daß man mit ein paar Compilerschaltern den Sketch sowohl für ESP32 als auch für ESP8266 compilieren kann.
Mal schauen, was ich jetzt weiter mit mache. Vielleicht etwas RTOS? Oder eine FFT implementieren, damit ich meinem Radar-Regensensor ein paar false positives austreiben und vielleicht etwas zur Regenstärke sagen kann?
Wir werden sehen.
Derzeit verwende ich einen WeMos Lolin 32.
Aber ein D1-Mini kompatibler ESP32 ist unterwegs. Ist kleiner, etwas billiger und kommt hoffentlich nicht per Einschreiben wie die WeMos. Mal sehen.
P.S.: http://esp32.net/ schöne Seite u.a. auch mit Boardübersicht. Mehr Infos zum D1 mini kompatiblen ESP32.
Habe heute die Umstellung meines BME280, SHT31, MLX90614, VEML6070, BH1750, Relay und Regensensor Monster auf ESP32 so weit gebracht, daß ich schon erste Tests durchführen konnte.
BME280, VEML6070, BH1750 und Relay scheinen zu funktionieren. In den letzten Tagen gab es einige hifreiche libs - zum Teil aber leider inoffizielle, die von der Community nicht weiter supportet werden.
Nach einem restart ist das Ding sofort im WLAN. Beim ESP8266 mußte ich eine 5 Sekunden-delay einbauen, um das WLAN-Log-in zu stabilisieren. Beim ESP32 warte ich gerade mal eine Sekunde (unoptimiert).
Ich denek fast, daß man mit ein paar Compilerschaltern den Sketch sowohl für ESP32 als auch für ESP8266 compilieren kann.
Mal schauen, was ich jetzt weiter mit mache. Vielleicht etwas RTOS? Oder eine FFT implementieren, damit ich meinem Radar-Regensensor ein paar false positives austreiben und vielleicht etwas zur Regenstärke sagen kann?
Wir werden sehen.
Derzeit verwende ich einen WeMos Lolin 32.
Aber ein D1-Mini kompatibler ESP32 ist unterwegs. Ist kleiner, etwas billiger und kommt hoffentlich nicht per Einschreiben wie die WeMos. Mal sehen.
P.S.: http://esp32.net/ schöne Seite u.a. auch mit Boardübersicht. Mehr Infos zum D1 mini kompatiblen ESP32.
-
- Beiträge: 12929
- Registriert: 16.01.2009, 18:48
- Wohnort: Steingaden
- Hat sich bedankt: 1604 Mal
- Danksagung erhalten: 222 Mal
Re: WeMos D1 mini als WLAN-Sensor/-Aktor
hört sich nicht schlecht an ! hier ist eine esp32 bestellung erst an der reiche wenn der weatherman rennt..
blynk muss wohl eine "handy-steuerobfläche " für den esp sein ( habe nicht weiter nachgelesen nur gestern was bei YT gesehen )
ps.: der radarsensor ist nicht mal ausgepackt
blynk muss wohl eine "handy-steuerobfläche " für den esp sein ( habe nicht weiter nachgelesen nur gestern was bei YT gesehen )
ps.: der radarsensor ist nicht mal ausgepackt
-------
!!! 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: 12929
- Registriert: 16.01.2009, 18:48
- Wohnort: Steingaden
- Hat sich bedankt: 1604 Mal
- Danksagung erhalten: 222 Mal
Re: WeMos D1 mini als WLAN-Sensor/-Aktor
eigentlich sollte man ja mal ein neues thema aufmachen..
der "schweizer " hat gerade ein neues filmchen eingestellt: #156 ESP8266 New Release 2.4.0-rc1 out /
https://www.youtube.com/watch?v=URr5HuVMcsA
man sollte ggf die IDE mal updaten !
der "schweizer " hat gerade ein neues filmchen eingestellt: #156 ESP8266 New Release 2.4.0-rc1 out /
https://www.youtube.com/watch?v=URr5HuVMcsA
man sollte ggf die IDE mal updaten !
-------
!!! 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: 3974
- Registriert: 24.03.2011, 04:32
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 110 Mal
- Danksagung erhalten: 71 Mal
Re: WeMos D1 mini als WLAN-Sensor/-Aktor
Guter Hinweis, danke!
IDE habe ich gerade dieser Tage upgedatet. Mein ESP32 tat so, als würde er das neue Programm flashen, lief aber mit dem alten los. strange.
IDE habe ich gerade dieser Tage upgedatet. Mein ESP32 tat so, als würde er das neue Programm flashen, lief aber mit dem alten los. strange.