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
This commit is contained in:
Simon Zeyer 2022-07-13 20:44:29 +02:00
parent 94e6dd5750
commit 47ca2d7164
5 changed files with 81 additions and 23 deletions

BIN
Dictionary-master.zip Normal file

Binary file not shown.

View File

@ -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)

View File

@ -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;};

View File

@ -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();
};

View File

@ -3,6 +3,7 @@
#include <ESP8266WebServer.h>
#include <ESP8266HTTPUpdateServer.h>
#include <Preferences.h>
#include <Dictionary.h>
Preferences preferences;
ESP8266WebServer server(80);
ESP8266HTTPUpdateServer httpUpdater;
@ -11,6 +12,8 @@ String header = "<!DOCTYPE html> <html>\n"
"<title>Truhensteuerung</title>\n"
"<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n"
"body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;} h3 {color: #444444;margin-bottom: 50px;}\n"
".col{ display: inline-block;}\n"
"input{width: 70px;}\n"
"</style>\n"
"</head>\n"
"<body>\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 += "<br>\nMethod: ";
@ -53,7 +57,8 @@ void handleWifiSetup(){
// ptr += "<br>\nArguments: ";
// ptr += server.args();
// ptr += "<br>\n";
for (uint8_t i = 0; i < server.args(); i++) { ptr += " " + server.argName(i) + ": " + server.arg(i) + "<br>\n"; }
Dictionary<String, String> arguments = Dictionary<String, String>();
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 += "<a href=\"/\">Home</a>";
ptr += "<form action=\"/setup\" method=\"post\">";
ptr +="<table style=\"width: 100%;\">\n<tr style=\"border-bottom: 5px solid #444444;\"><td></td><td>ID</td><td>SSID</td><td>Channel</td><td>RSSI</td><td></td></tr>\n";
ptr +="<div class=\"col\">";
ptr +="<table >\n<tr ><td>Name</td><td>Temp Min</td><td>Temp Max</td></tr>\n";
for (int i = 0; i < (sizeof(truhen) / sizeof(truhen[0])); i++) {
ptr +="<tr>\n<td>";
ptr +="<input name=\"t"+String(i)+"_name\" value=\"" + String(truhen[i].getName()) + "\">";
ptr +="</td>\n<td>";
ptr +="<input name=\"t"+String(i)+"_min\" value=\"" + String(truhen[i].getuT()) + "\">";
ptr +="</td>\n<td>";
ptr +="<input name=\"t"+String(i)+"_max\" value=\"" + String(truhen[i].getoT()) + "\">";
ptr += "</td>\n</tr>\n";
}
ptr += "</table>\n";
ptr += "<input type=\"submit\" id=\"submit\" name=\"submit_truhen\" >";
ptr +="";
ptr +="";
ptr +="";
ptr +="</div>";
ptr +="<div class=\"col\">";
ptr +="<table >\n<tr><td></td><td>ID</td><td>SSID</td><td>Channel</td><td>RSSI</td><td></td></tr>\n";
for (int i = 0; i < n; i++)
{
WiFi.getNetworkInfo(i, ssid, encryptionType, RSSI, BSSID, channel, isHidden);
@ -73,24 +96,25 @@ void handleWifiSetup(){
ptr += "</table>\n";
ptr += "<input type=\"input\" id=\"password\" name=\"password\" placeholder=\"Kennwort\" >";
ptr += "<input type=\"submit\" id=\"submit\" name=\"submit\" >";
ptr += "<input type=\"submit\" id=\"submit\" name=\"submit_wlan\" >";
ptr += "</div>\n";
ptr += "</form>";
}else{
ptr += "<p>\n";
if(server.args() != 4){
ptr += "Missing Arguments<br>\n";
ptr += "<a href=\"/setup\">zurück</a>\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+"<br>\n";
Serial.println("Connecting to "+ssid+", "+password+"");
WiFi.begin(ssid, password);
@ -125,7 +149,17 @@ void handleWifiSetup(){
ptr += "</p>\n";
}
}
ptr +="</body>\n";
ptr +="</html>\n";
if(reset){
ptr +="<p>Neustart, bitte warten...</p>\n";
ptr +="<script>window.location.assign(\"/\")</script>\n";
}
server.send(200, "text/html", ptr);
if(reset){
delay(2000);
ESP.restart();
}
}
void handleRoot(){