From 47ca2d7164b44bfa16cccedf002c33fdb6a5cd8f Mon Sep 17 00:00:00 2001 From: Simon Zeyer Date: Wed, 13 Jul 2022 20:44:29 +0200 Subject: [PATCH] Implement configuration of freezer name and uT/oT via Web store names and ut/ot values in internal storage load on boot data from internal storage if set, else fall back to settings.h values --- Dictionary-master.zip | Bin 0 -> 10496 bytes Steuerung_Truhen.ino | 19 +++++++++++-- Truhe.cpp | 13 ++++++--- Truhe.h | 8 ++++-- Webserver.h | 64 ++++++++++++++++++++++++++++++++---------- 5 files changed, 81 insertions(+), 23 deletions(-) create mode 100644 Dictionary-master.zip diff --git a/Dictionary-master.zip b/Dictionary-master.zip new file mode 100644 index 0000000000000000000000000000000000000000..0df69211d0b69a51e3b5e31fbbdc48c21bb2ff50 GIT binary patch literal 10496 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 literal 0 HcmV?d00001 diff --git a/Steuerung_Truhen.ino b/Steuerung_Truhen.ino index 7da2ed0..830effa 100644 --- a/Steuerung_Truhen.ino +++ b/Steuerung_Truhen.ino @@ -30,9 +30,24 @@ void setup() { Serial.println(); setup_lcd(); lcd.clear(); + preferences.begin("my-app", true); for (int i = 0; i < (sizeof(truhen) / sizeof(truhen[0])); i++) { - truhen[i].setup(); + truhen[i].setup( + preferences.getString( + String("t"+String(i)+"_name").c_str(), + String(truhen[i].getName()) + ), + preferences.getInt( + String("t"+String(i)+"_min").c_str(), + uT + ), + preferences.getInt( + String("t"+String(i)+"_max").c_str(), + oT + ) + ); } + preferences.end(); wdt_enable(WDTO_4S); // Watchdog auf 4 s stellen WifiSetup(); Serial.println("Setup fi"); @@ -54,7 +69,7 @@ void loop() { Serial.println("SCHALTINTERVALL"); last_schalt_time = millis(); for (int i = 0; i < (sizeof(truhen) / sizeof(truhen[0])); i++) { - truhen[i].schalt(oT, uT); + truhen[i].schalt(); } } if(millis() - last_lcd_time >= LCD_REFRESH_INTERVAL || last_lcd_time == 0) diff --git a/Truhe.cpp b/Truhe.cpp index 35df94f..bbf76a4 100644 --- a/Truhe.cpp +++ b/Truhe.cpp @@ -8,9 +8,12 @@ Truhe::Truhe(String name, int relay, uint8_t sensorpin){ }; -void Truhe::setup() { +void Truhe::setup(String name, int uT, int oT) { + _name = name; Serial.println("Setup " + _name); Serial.println(_sensorpin); + _uT = uT; + _oT = oT; pinMode(_relay, OUTPUT); digitalWrite(_relay, HIGH); pinMode(_sensorpin, INPUT); @@ -34,14 +37,14 @@ void Truhe::mess() { } }; -void Truhe::schalt(int oT, int uT) { +void Truhe::schalt() { Serial.println(String(_name) + " schalt() stat: " + String(_stat)); - if (_cur_temp >= oT && _stat != 1 && _stat != 2) { + if (_cur_temp >= _oT && _stat != 1 && _stat != 2) { digitalWrite(_relay, LOW); _stat = 1; Serial.println("schalt " + _name + " zu " + String(_stat)); } - else if (_cur_temp <= uT && _stat != 0 && _stat != 2) { + else if (_cur_temp <= _uT && _stat != 0 && _stat != 2) { digitalWrite(_relay, HIGH); _stat = 0; Serial.println("schalt " + _name + " zu " + String(_stat)); @@ -54,3 +57,5 @@ int Truhe::getSensorPin(){return _sensorpin;}; int Truhe::getStat(){return _stat;}; int Truhe::getCurTemp(){return int(_cur_temp);}; String Truhe::getName(){return _name;}; +int Truhe::getuT(){return _uT;}; +int Truhe::getoT(){return _oT;}; diff --git a/Truhe.h b/Truhe.h index dde0b20..1a2f6c5 100644 --- a/Truhe.h +++ b/Truhe.h @@ -10,11 +10,13 @@ class Truhe { float _cur_temp = 0; int _updlcd = 0; String _name = ""; + int _uT; + int _oT; public: Truhe(String, int, uint8_t); - void setup(); + void setup(String, int, int); void mess(); - void schalt(int, int); + void schalt(); int getUpdLcd(); void setUpdLcd(int); int getRelay(); @@ -22,4 +24,6 @@ class Truhe { int getStat(); int getCurTemp(); String getName(); + int getuT(); + int getoT(); }; diff --git a/Webserver.h b/Webserver.h index 18ae631..38d82fd 100644 --- a/Webserver.h +++ b/Webserver.h @@ -3,6 +3,7 @@ #include #include #include +#include Preferences preferences; ESP8266WebServer server(80); ESP8266HTTPUpdateServer httpUpdater; @@ -11,6 +12,8 @@ String header = " \n" "Truhensteuerung\n" "\n" "\n" "\n" @@ -46,6 +49,7 @@ void WifiConnect(String _ssid, String _password){ void handleWifiSetup(){ String ptr = header; + boolean reset = false; // ptr += "URI: "; // ptr += server.uri(); // ptr += "
\nMethod: "; @@ -53,7 +57,8 @@ void handleWifiSetup(){ // ptr += "
\nArguments: "; // ptr += server.args(); // ptr += "
\n"; - for (uint8_t i = 0; i < server.args(); i++) { ptr += " " + server.argName(i) + ": " + server.arg(i) + "
\n"; } + Dictionary arguments = Dictionary(); + for (uint8_t i = 0; i < server.args(); i++) { arguments.set(server.argName(i), server.arg(i));} if(server.method() == HTTP_GET){ int n = WiFi.scanNetworks(false, true); String ssid; @@ -64,7 +69,25 @@ void handleWifiSetup(){ bool isHidden; ptr += "Home"; ptr += "
"; - ptr +="\n\n"; + ptr +="
"; + ptr +="
IDSSIDChannelRSSI
\n\n"; + for (int i = 0; i < (sizeof(truhen) / sizeof(truhen[0])); i++) { + ptr +="\n\n\n\n\n"; + } + ptr += "
NameTemp MinTemp Max
"; + ptr +=""; + ptr +=""; + ptr +=""; + ptr +=""; + ptr +=""; + ptr += "
\n"; + ptr += ""; + ptr +=""; + ptr +=""; + ptr +=""; + ptr +=""; + ptr +="
"; + ptr +="\n\n"; for (int i = 0; i < n; i++) { WiFi.getNetworkInfo(i, ssid, encryptionType, RSSI, BSSID, channel, isHidden); @@ -73,24 +96,25 @@ void handleWifiSetup(){ ptr += "
IDSSIDChannelRSSI
\n"; ptr += ""; - ptr += ""; + ptr += ""; + ptr += "
\n"; ptr += "
"; }else{ ptr += "

\n"; - if(server.args() != 4){ - ptr += "Missing Arguments
\n"; - ptr += "zurück\n"; - }else{ - String ssid; - String password; - for (uint8_t i = 0; i < server.args(); i++) { - if(server.argName(i) == "ssid"){ - ssid = server.arg(i); + if(arguments.get("submit_truhen") != NULL){ + reset = true; + preferences.begin("my-app", false); + for (int i = 0; i < (sizeof(truhen) / sizeof(truhen[0])); i++) { + preferences.putString(String("t"+String(i)+"_name").c_str(), arguments.get("t"+String(i)+"_name")); + preferences.putInt(String("t"+String(i)+"_min").c_str(), arguments.get("t"+String(i)+"_min").toInt()); + preferences.putInt(String("t"+String(i)+"_max").c_str(), arguments.get("t"+String(i)+"_max").toInt()); } - if(server.argName(i) == "password"){ - password = server.arg(i); + preferences.end(); } - } + if(arguments.get("submit_wlan") != NULL){ + reset = true; + String ssid = arguments.get("ssid"); + String password = arguments.get("password"); ptr += "Connecting to "+ssid+"
\n"; Serial.println("Connecting to "+ssid+", "+password+""); WiFi.begin(ssid, password); @@ -125,7 +149,17 @@ void handleWifiSetup(){ ptr += "

\n"; } } + ptr +="\n"; + ptr +="\n"; + if(reset){ + ptr +="

Neustart, bitte warten...

\n"; + ptr +="\n"; + } server.send(200, "text/html", ptr); + if(reset){ + delay(2000); + ESP.restart(); + } } void handleRoot(){