Re: Steuerung Pumpenvorlage mittels Füllstandskontrolle
Verfasst: 12.07.2017, 15:55
Hi,
hab mal versucht nicht über Moskau nach Hamburg zu reisen, habe viel gelesen in den langen Sommerabenden, die Augen sind jetzt dann 4-eckig, die richtige Lösung hab ich leider nicht gefunden.
Anbei der derzeitige Code, leider kann ich ihn nicht testen, jedoch beim Compilieren lief er ohne Fehler durch. Das Ziel ist das Übertragen des Levels auf den Webserver von HPCL. Wenn jemand mal kontrollieren könnte ob ich auf dem Holzweg bin wäre dies schön.
Dann geht es natürlich weiter, wie hol ich die Werte ab, eigentlich möchte ich kein Makro über Zeitsteuerung, da müsste ich ja im Ernstfall auf 1s gehen.
Gruß Axel
hab mal versucht nicht über Moskau nach Hamburg zu reisen, habe viel gelesen in den langen Sommerabenden, die Augen sind jetzt dann 4-eckig, die richtige Lösung hab ich leider nicht gefunden.
Anbei der derzeitige Code, leider kann ich ihn nicht testen, jedoch beim Compilieren lief er ohne Fehler durch. Das Ziel ist das Übertragen des Levels auf den Webserver von HPCL. Wenn jemand mal kontrollieren könnte ob ich auf dem Holzweg bin wäre dies schön.
Dann geht es natürlich weiter, wie hol ich die Werte ab, eigentlich möchte ich kein Makro über Zeitsteuerung, da müsste ich ja im Ernstfall auf 1s gehen.
Gruß Axel
Code: Alles auswählen
/*
WeMos LevelControl
verbindet sich mit dem vorhandenen WLAN als Server
und der EE (HPCL) Client
Getesteter Aufbau:
AZDelivery D1 Mini NodeMcu Lua ESP8266 ESP-12E WLAN WIFI Internet Module Entwicklungsboard für Arduino, 100% kompatibel mit WeMos D1 Mini
Pin-Belegung:
A0 = analoger Eingang
9.Februar 2016 —m.yoda
12. Juli 2017 -AFi
Version 2.0
*/
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266WebServer.h>
// ******* Netzwerkeinstellungen, bitte anpassen! *******
const char* ssid = "........."; // SSID des vorhandenen WLANs
const char* password = "......"; // Passwort für das vorhandene WLAN
IPAddress gateway(.....); // IP-Adresse des WLAN-Gateways
IPAddress subnet(.......); // Subnetzmaske
IPAddress ip(.......); // feste IP-Adresse für den WeMos
const char* host = "....."; // IP-Adresse der CCU (mit Punkten!)
ESP8266WebServer server(80); // Webserver initialisieren auf Port 80
String completeURI = "http://........./addons/contronics/CLWebI.ccc?GETVARBYNAME1&LevelMessung";
float sensorPin = A0;
unsigned long deltaMessungSekunden = 10; //Zeitintervall (Sekunden) nach dem eine Messung erfolgt
float korrLevel = 0; // Korrekturwert fuer die Level Messung
// ******* Einstellungen fuer Meldungen an die HPCL, bitte anpassen! *******
unsigned long deltaMeldungSekunden = 3000; // Zeitintervall (Sekunden) nach dem eine CCU-Meldung erfolgt (0 bedeutet nie)
float deltaLevel = 5; // Levelaenderung (*mmWS) bei der eine CCU-Meldung erfolgt (0 bedeutet nie)
float level = 0, levelCCU = 0;
unsigned long jetztMillis = 0;
unsigned long deltaMessungMillis = deltaMessungSekunden * 1000, letzteMessungMillis = 0;
unsigned long deltaMeldungMillis = deltaMeldungSekunden * 1000, letzteMeldungMillis = 0;
String requestResult;
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
level = analogRead(sensorPin) + korrLevel;
if (isnan(level)) {
Serial.println(zeitstempel() + " Fehler: Sensor konnte nicht abgefragt werden");
delay(100);
return;
}
letzteMessungMillis = jetztMillis;
Serial.println(zeitstempel() + " Messung LEVEL: " + level + " mWS ");
}
void melde_HPCL() { // Werte an EE HPCL melden
HTTPClient http;
http.begin(completeURI);
int httpCode = http.GET();
if (httpCode == HTTP_CODE_OK) {
requestResult = http.getString();
Serial.println(requestResult);
}
else
{
Serial.print("Result-Code");
Serial.println(httpCode);
}
http.end();
}
void setup() {
// Seriellen Monitor für Kontrollausgaben öffnen
Serial.begin(57600);
Serial.println("");
Serial.println("WeMos Levelsensor");
// 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-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 HPCL falls Zeitintervall erreicht
if (!deltaMeldungMillis == 0 && jetztMillis - letzteMeldungMillis > deltaMeldungMillis) {
Serial.print(zeitstempel() + " Zeitintervall erreicht: ");
melde_HPCL();
}
// neue Meldung an HPCL falls Level den Schwellwert erreicht
if (!deltaLevel == 0 && abs(level - levelCCU) >= deltaLevel) {
Serial.print(zeitstempel() + " Levelaenderung: ");
melde_HPCL();
}
}