Author SHA1 Message Date
simon d74a0b0d83 Merge pull request 'fix-homepage-layout' (#9) from fix-homepage-layout into wemos-build
Reviewed-on: #9
2022-07-13 18:52:43 +00:00
simon df48de3c66 Merge pull request 'Implement configuration of freezer name and uT/oT via Web' (#8) from feature-config-truhe-via-web into wemos-build
Reviewed-on: #8
2022-07-13 18:51:14 +00:00
Simon Zeyer d855d95898 open settings readonly on wifi setup 2022-07-13 20:49:33 +02:00
Simon Zeyer 15a3e88358 rename header to german joke 2022-07-13 20:49:08 +02:00
Simon Zeyer 4af80665a2 reload homepage every 1 minute 2022-07-13 20:48:16 +02:00
Simon Zeyer 85ebdf4108 center table with freezer data, set font size 2022-07-13 20:47:30 +02:00
Simon Zeyer 604f3d9933 add table with esp stats to setup page 2022-07-13 20:46:06 +02:00
Simon Zeyer 47ca2d7164 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
2022-07-13 20:44:29 +02:00
Simon Zeyer 94e6dd5750 tidyup, remove old dht lib 2022-07-12 23:55:27 +02:00
simon 6fdcc02298 Merge pull request 'feature-ota-update' (#5) from feature-ota-update into wemos-build
Reviewed-on: #5
2022-07-12 21:48:46 +00:00
Simon Zeyer b405bcee79 OTA Updater 2022-07-12 23:45:40 +02:00
Simon Zeyer cf840eeca8 basic webview with wifi setup 2022-07-12 22:35:39 +02:00
Simon Zeyer bc3a06c0a3 working release with ds18B20 2022-07-04 21:53:47 +02:00
Simon Zeyer 263b9a1a56 Change DHT Sensor to DS18B20
The Sensors have a unique ID and can be used in a bus configuration on one
gpo pin,
but we are using one pin/bus per sensor and only read the first sensor
on a bus to be able to change the sensors later without changing the code.
2022-07-04 21:52:50 +02:00
Simon Zeyer e3c611e909 Change LiquidCrystal Libary, include the right one as zip 2022-07-04 21:48:56 +02:00
Simon Zeyer 86d6c283fb remove sd stuff 2022-06-28 21:54:30 +02:00
Simon Zeyer b875401547 Delete settings.json 2020-09-19 12:58:08 +00:00
Simon Zeyer 60b0b611d0 Delete c_cpp_properties.json 2020-09-19 12:58:00 +00:00
Simon Zeyer 64bdd8786e Delete arduino.json 2020-09-19 12:57:52 +00:00
Simon Zeyer 1171b98561 Delete Settings.h 2020-09-19 12:54:05 +00:00
Simon Zeyer 8bcf4f64d0 Update .gitignore 2020-09-19 14:53:41 +02:00
Simon Zeyer 738662ee62 Merge branch 'master' into 'wemos-build'
# Conflicts:
#   Steuerung_Truhen.ino
2020-09-19 12:52:10 +00:00
Simon Zeyer bfadf05cf0 Wemos hat wdt builtin 2020-09-19 14:47:33 +02:00
Simon Zeyer 9d2cc72531 Eigene Library für Truhe, Settings in extra datei 2020-09-19 14:46:53 +02:00
Simon Zeyer 0301212bb5 Merge branch 'wemos-build' of gitlab.simonzeyer.de:2222]:dezeyer23/truhensteuerung into wemos-build 2020-09-19 14:43:36 +02:00
Simon Zeyer be89cfe32d Use DHT library from arduino repo (DHT_sensor_library)
in order to use the DHT_sensor_library the setup of the Truhen is moved
into the setup routine.

The log, updateLCD and printName funtions are removed, logic is handled
in the loop with help of new getter and setter methods.
2020-09-19 11:40:07 +02:00
Simon Zeyer 1dbae69dd2 Merge branch 'wemos-build' of gitlab.simonzeyer.de:2222]:dezeyer23/truhensteuerung into wemos-build 2020-09-19 11:29:16 +02:00
Simon Zeyer 456542514a Use DHT library from arduino repo (DHT_sensor_library)
in order to use the DHT_sensor_library the setup of the Truhen is moved
into the setup routine.

The log, updateLCD and printName funtions are removed, logic is handled
in the loop with help of new getter and setter methods.
2020-09-19 11:28:01 +02:00
Simon Zeyer 8d1a43ceb8 Use DHT library from arduino repo (DHT_sensor_library)
in order to use the DHT_sensor_library the setup of the Truhen is moved
into the setup routine.
2020-09-17 19:02:49 +02:00
10 changed files with 431 additions and 148 deletions
+4 -1
View File
@@ -1,3 +1,6 @@
.autogit .autogit
*.txt *.txt
*.pdf *.pdf
output/
Settings.h
.vscode
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
+26
View File
@@ -0,0 +1,26 @@
//* **EINSTELLUNGEN** *//
#define SETUPTIMEOUT 500
// So, the minimum sampling period is the minimum time
// interval that we need to wait between two consecutive
// measurements from the sensor. In the case of the DHT22,
// this value is of 2 seconds [1].
static const unsigned long MESS_REFRESH_INTERVAL = 10000; // ms getMinimumSamplingPeriod == 2 sec
static const unsigned long SCHALT_REFRESH_INTERVAL = 60000; // ms
static const unsigned long LCD_REFRESH_INTERVAL = 500; // ms
const int uT = 1; //Abschalt-Temperatur in °C
const int oT = 4; //Einschalt-Temperatur in °C
/*
Truhe truhen[] = {
Truhe("Truhe 1", 2, 8),
Truhe("Truhe 2", 3, 9),
};*/
//Name, Relaypin, DTH Pin
Truhe truhen[] = {
Truhe("Truhe 1", D0, D2),
};
//LiquidCrystal_I2C lcd(0x3F, 0, 0, 0, 0, 0, 0, 0, 0, POSITIVE); //0x3F = Adresse des Displays
+66 -147
View File
@@ -1,144 +1,18 @@
#include <DHT.h> //Setup Sensoren
#include <avr/wdt.h>
#include <SD.h> //Setup SD SDK=D13, MOSI=D11, MISO=D12
#include <Wire.h> //Setup LCD #include <Wire.h> //Setup LCD
#include <LiquidCrystal_I2C.h> #include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //0x3F = Adresse des Displays LiquidCrystal_I2C lcd(0x3F,16,2); //0x3F = Adresse des Displays
#include "Truhe.h"
#include "Settings.h"
#include "Webserver.h"
static unsigned long last_lcd_time = 0; static unsigned long last_lcd_time = 0;
static unsigned long last_mess_time = 0; static unsigned long last_mess_time = 0;
static unsigned long last_schalt_time = 0; static unsigned long last_schalt_time = 0;
class Truhe {
private:
int _relay;
DHT _dht;
int _stat = -1;
int _cur_temp = 0;
int _updlcd = 0;
String _name = "";
public:
Truhe(String name, int relay, int dhtpin, int dhttype) {
_name = name;
_relay = relay;
_dht.setup(dhtpin);
pinMode(_relay, OUTPUT);
};
void mess() {
//Serial.println(String(_name) + " mess()");
//Serial.print("Minimum Sampling Period: ");
//Serial.println(_dht.getMinimumSamplingPeriod());
//delay(_dht.getMinimumSamplingPeriod());
_cur_temp = _dht.getTemperature();
//Serial.println(String(_name) + "\t\t" + String(_cur_temp) + " grad gelesen");
};
void log(File logfile) {
//Serial.println(String(_name) + " log()");
String logdata = String(_name) + "\t" + String(_cur_temp) + "\t" + String(_stat);
logfile.println(logdata);
}
void updateLCD(int row) {
//Serial.println(String(_name) + " updateLCD("+String(row)+")");
//LCD-Anzeige
lcd.setCursor(0, row); //...(Zeichen,Zeile);
lcd.print(_name + " " + String(_updlcd));
lcd.setCursor(8, row);
lcd.print(" ");
//Serial.println(sizeof(String(_cur_temp))/2);
lcd.setCursor(11 - sizeof(String(_cur_temp))/2, row);
lcd.setCursor(8, row);
lcd.print(String(_cur_temp));
lcd.setCursor(11, row);
lcd.print("\337");
lcd.setCursor(13, row);
if (_stat == -1) {
lcd.print("-");
}
else if (_stat == 1) {
lcd.print("I");
}
else if (_stat == 0) {
lcd.print("O");
}
if(_updlcd == 0){
lcd.setCursor(15, row);
lcd.print(String("|"));
//Serial.println(String(_name) + " updateLCD("+String(row)+") .");
_updlcd = 1;
}else{
lcd.setCursor(15, row);
lcd.print(String("-"));
//Serial.println(String(_name) + " updateLCD("+String(row)+") ");
_updlcd = 0;
}
}
void schalt(int oT, int uT) {
Serial.print(String(_name) + " schalt() stat: " + String(_stat));
if (_cur_temp >= oT && _stat != 1) {
digitalWrite(_relay, LOW);
_stat = 1;
Serial.println("schalt " + _name + " zu " + String(_stat));
}
else if (_cur_temp <= uT && _stat != 0) {
digitalWrite(_relay, HIGH);
_stat = 0;
Serial.println("schalt " + _name + " zu " + String(_stat));
}
}
void printName(){
//Serial.println(_name);
}
};
//* **EINSTELLUNGEN** *//
#define DHTTYPE DHT22
#define SETUPTIMEOUT 500
// So, the minimum sampling period is the minimum time
// interval that we need to wait between two consecutive
// measurements from the sensor. In the case of the DHT22,
// this value is of 2 seconds [1].
static const unsigned long MESS_REFRESH_INTERVAL = 10000; // ms getMinimumSamplingPeriod == 2 sec
static const unsigned long SCHALT_REFRESH_INTERVAL = 10000; // ms
static const unsigned long LCD_REFRESH_INTERVAL = 500; // ms
const int uT = 1; //Abschalt-Temperatur in °C
const int oT = 4; //Einschalt-Temperatur in °C
Truhe truhen[] = {
Truhe("Truhe 1", 2, 8, 0),
Truhe("Truhe 2", 3, 9, 0),
};
void setup_sd() {
//Initialsierugn SD
lcd.clear();
lcd.setCursor(0, 0); //...(Zeichen,Zeile);
lcd.print("Init SD");
if (!SD.begin(4)) { //Init SD_Karte mit CS auf Pin D4
lcd.setCursor(0, 1);
lcd.print("fehlgeschlagen!");
Serial.println("Init SD fehlgeschlagen!");
delay(SETUPTIMEOUT);
return;
} else {
lcd.setCursor(0, 1);
lcd.print("abgeschlossen!");
Serial.println("Init SD abgeschlossen!");
delay(SETUPTIMEOUT);
}
}
void setup_lcd() { void setup_lcd() {
//LCD //LCD
lcd.begin(16, 2); //Starten des LCD, 16 Zeichen, 2 Zeilen lcd.init();
lcd.backlight(); //Beleuchtung des Displays einschalten lcd.backlight(); //Beleuchtung des Displays einschalten
lcd.blink(); lcd.blink();
lcd.clear(); lcd.clear();
@@ -155,13 +29,27 @@ void setup() {
Serial.println(); Serial.println();
Serial.println(); Serial.println();
setup_lcd(); setup_lcd();
setup_sd();
File logfile = SD.open("logTruhe.txt", FILE_WRITE); //Erstelle bzw. öffne log-Datei
logfile.println("t(min)\tTruhe\tT(°C)\tStatus");
logfile.close();
lcd.clear(); lcd.clear();
preferences.begin("my-app", true);
wdt_enable(WDTO_1S); // Watchdog auf 1 s stellen for (int i = 0; i < (sizeof(truhen) / sizeof(truhen[0])); i++) {
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"); Serial.println("Setup fi");
} }
@@ -171,14 +59,8 @@ void loop() {
//MESSINTERVALL //MESSINTERVALL
last_mess_time = millis(); last_mess_time = millis();
for (int i = 0; i < (sizeof(truhen) / sizeof(truhen[0])); i++) { for (int i = 0; i < (sizeof(truhen) / sizeof(truhen[0])); i++) {
truhen[i].printName();
truhen[i].mess(); truhen[i].mess();
File logfile = SD.open("logTruhe.txt", FILE_WRITE);
truhen[i].log(logfile);
logfile.close();
} }
logfile.println();
} }
//Serial.println("Schaltintervall: "+ String(millis() - last_schalt_time) + " " + String(SCHALT_REFRESH_INTERVAL)); //Serial.println("Schaltintervall: "+ String(millis() - last_schalt_time) + " " + String(SCHALT_REFRESH_INTERVAL));
if(millis() - last_schalt_time >= SCHALT_REFRESH_INTERVAL || last_schalt_time == 0) if(millis() - last_schalt_time >= SCHALT_REFRESH_INTERVAL || last_schalt_time == 0)
@@ -187,7 +69,7 @@ void loop() {
Serial.println("SCHALTINTERVALL"); Serial.println("SCHALTINTERVALL");
last_schalt_time = millis(); last_schalt_time = millis();
for (int i = 0; i < (sizeof(truhen) / sizeof(truhen[0])); i++) { 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) if(millis() - last_lcd_time >= LCD_REFRESH_INTERVAL || last_lcd_time == 0)
@@ -195,8 +77,45 @@ void loop() {
//LCD Update INTERVALL //LCD Update INTERVALL
last_lcd_time = millis(); last_lcd_time = millis();
for (int i = 0; i < (sizeof(truhen) / sizeof(truhen[0])); i++) { for (int i = 0; i < (sizeof(truhen) / sizeof(truhen[0])); i++) {
truhen[i].updateLCD(i); //LCD-Anzeige
lcd.setCursor(0, i); //...(Zeichen,Zeile);
lcd.print(truhen[i].getName());
lcd.setCursor(8, i);
lcd.print(" ");
//Serial.println(sizeof(String(truhen[i].getCurTemp()))/2);
lcd.setCursor(11 - sizeof(String(truhen[i].getCurTemp()))/2, i);
lcd.setCursor(8, i);
lcd.print(String(truhen[i].getCurTemp()));
lcd.setCursor(11, i);
lcd.print("\337");
lcd.setCursor(13, i);
if (truhen[i].getStat() == -1) {
lcd.print("-");
}
else if (truhen[i].getStat() == 1) {
lcd.print("I");
}
else if (truhen[i].getStat() == 0) {
lcd.print("O");
}
else if (truhen[i].getStat() == 2) {
lcd.setCursor(8, i);
lcd.print("Error");
}
if(truhen[i].getUpdLcd() == 0){
lcd.setCursor(15, i);
lcd.print(String("|"));
//Serial.println(String(truhen[i]._name) + " updateLCD("+String(i)+") .");
truhen[i].setUpdLcd(1);
}else{
lcd.setCursor(15, i);
lcd.print(String("-"));
//Serial.println(String(truhen[i]._name) + " updateLCD("+String(i)+") ");
truhen[i].setUpdLcd(0);
}
} }
} }
server.handleClient();
wdt_reset(); wdt_reset();
} }
Binary file not shown.
+61
View File
@@ -0,0 +1,61 @@
#include "Truhe.h"
Truhe::Truhe(String name, int relay, uint8_t sensorpin){
_name = name;
_relay = relay;
_sensorpin = sensorpin;
_oneWire = OneWire(sensorpin);
_sensors = DallasTemperature(&_oneWire);
};
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);
_sensors.begin();
}
void Truhe::mess() {
Serial.println(String(_name) + " mess()");
_sensors.requestTemperatures();
_cur_temp = _sensors.getTempCByIndex(0);
// Check if reading was successful
if(_cur_temp != DEVICE_DISCONNECTED_C)
{
Serial.println(String(_name) + "\t\t" + String((int)_cur_temp) + " grad gelesen");
}
else
{
Serial.println("Error: Could not read temperature data: "+ String(_name));
_cur_temp = 99; // Liewer warmes bier als garkenn bier
_stat = 2;
}
};
void Truhe::schalt() {
Serial.println(String(_name) + " schalt() stat: " + String(_stat));
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) {
digitalWrite(_relay, HIGH);
_stat = 0;
Serial.println("schalt " + _name + " zu " + String(_stat));
}
}
int Truhe::getUpdLcd(){ return _updlcd;};
void Truhe::setUpdLcd(int updlcd){ _updlcd = updlcd;};
int Truhe::getRelay(){ return _relay;};
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;};
+29
View File
@@ -0,0 +1,29 @@
#include <OneWire.h>
#include <DallasTemperature.h>
class Truhe {
private:
OneWire _oneWire;
DallasTemperature _sensors;
int _relay;
uint8_t _sensorpin;
int _stat = -1;
float _cur_temp = 0;
int _updlcd = 0;
String _name = "";
int _uT;
int _oT;
public:
Truhe(String, int, uint8_t);
void setup(String, int, int);
void mess();
void schalt();
int getUpdLcd();
void setUpdLcd(int);
int getRelay();
int getSensorPin();
int getStat();
int getCurTemp();
String getName();
int getuT();
int getoT();
};
+245
View File
@@ -0,0 +1,245 @@
// Load Wi-Fi library
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ESP8266HTTPUpdateServer.h>
#include <Preferences.h>
#include <Dictionary.h>
Preferences preferences;
ESP8266WebServer server(80);
ESP8266HTTPUpdateServer httpUpdater;
String header = "<!DOCTYPE html> <html>\n"
"<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\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"
"<h1>Truhensteuerung Netz Servierer</h1>\n";
String ssid = "REPLACE_WITH_YOUR_SSID";
String password = "REPLACE_WITH_YOUR_PASSWORD";
unsigned long currentTime = millis();
unsigned long previousTime= 0;
//const long timeoutTime= 2000;
void WifiConnect(String _ssid, String _password){
// Connect to Wi-Fi network with SSID and password
Serial.print("Connecting to ");
Serial.println(_ssid);
WiFi.begin(_ssid, _password);
if(WiFi.waitForConnectResult() == WL_CONNECTED)
{
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
else
{
Serial.println("WiFi Connection failed! Restarting in SoftAP mode instead");
WiFi.mode(WIFI_AP);
WiFi.softAP("Truhensteuerung", "12345678");
Serial.print("AP IP address: ");
Serial.println(WiFi.softAPIP());
}
// Print local IP address and start web server
}
void handleWifiSetup(){
String ptr = header;
boolean reset = false;
// ptr += "URI: ";
// ptr += server.uri();
// ptr += "<br>\nMethod: ";
// ptr += (server.method() == HTTP_GET) ? "GET" : "POST";
// ptr += "<br>\nArguments: ";
// ptr += server.args();
// ptr += "<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;
uint8_t encryptionType;
int32_t RSSI;
uint8_t* BSSID;
int32_t channel;
bool isHidden;
ptr += "<a href=\"/\">Home</a>";
ptr += "<form action=\"/setup\" method=\"post\">";
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);
ptr +="<tr><td><input type=\"radio\" id=\"ssid\" name=\"ssid\" value=\""+String(ssid.c_str())+"\"></td><td>"+String(i + 1)+"</td><td>"+String(ssid.c_str())+"</td><td>"+String(channel)+"</td><td>"+String(RSSI)+"dBm</td><td>"+String(encryptionType == ENC_TYPE_NONE ? "open" : "")+""+String(isHidden ? "hidden" : "")+"</td></tr>\n";
}
ptr += "</table>\n";
ptr += "<input type=\"input\" id=\"password\" name=\"password\" placeholder=\"Kennwort\" >";
ptr += "<input type=\"submit\" id=\"submit\" name=\"submit_wlan\" >";
ptr +="</div>"; ptr +="<div class=\"col\">";
ptr +="<table>\n\n";
ptr +="<tr>\n<td>ESP.getResetReason()</td>\n<td>";
ptr +=String(ESP.getResetReason());
ptr += "</td>\n</tr>\n";
ptr +="<tr>\n<td>ESP.getFreeHeap()</td>\n<td>";
ptr +=String(ESP.getFreeHeap());
ptr += "</td>\n</tr>\n";
ptr +="<tr>\n<td>ESP.getHeapFragmentation()</td>\n<td>";
ptr +=String(ESP.getHeapFragmentation());
ptr += "</td>\n</tr>\n";
ptr +="<tr>\n<td>ESP.getMaxFreeBlockSize()</td>\n<td>";
ptr +=String(ESP.getMaxFreeBlockSize());
ptr += "</td>\n</tr>\n";
ptr +="<tr>\n<td>ESP.getChipId()</td>\n<td>";
ptr +=String(ESP.getChipId());
ptr += "</td>\n</tr>\n";
ptr +="<tr>\n<td>ESP.getCpuFreqMHz()</td>\n<td>";
ptr +=String(ESP.getCpuFreqMHz());
ptr += "</td>\n</tr>\n";
ptr += "</table>\n";
ptr += "</div>\n";
ptr += "</form>";
}else{
ptr += "<p>\n";
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());
}
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);
if(WiFi.waitForConnectResult() == WL_CONNECTED)
{
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
preferences.begin("my-app", false);
preferences.putString("ssid", ssid);
preferences.putString("password", password);
preferences.end();
ptr += "WiFi connected.<br>";
// ptr += "IP address: ";
// ptr += WiFi.localIP();
ptr += "<br>\n";
}
else
{
Serial.println("WiFi Connection failed! Restarting in SoftAP mode instead");
ptr += "WiFi Connection failed! Restarting in SoftAP mode instead<br>\n";
WiFi.mode(WIFI_AP);
WiFi.softAP("Truhensteuerung", "12345678");
Serial.print("AP IP address: ");
Serial.println(WiFi.softAPIP());
//ptr += "AP IP address: ";
//ptr += WiFi.softAPIP();
ptr += "<br>\n";
}
// Print local IP address and start web server
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(){
String ptr = header;
ptr +="<div class=\"col\">";
ptr +="<table>\n<tr><td>Name</td><td>Temp</td><td>Status</td></tr>\n";
for (int i = 0; i < (sizeof(truhen) / sizeof(truhen[0])); i++) {
ptr +="<tr style=\"padding: 10px;font-size: 1.8em;\" >\n<td>";
ptr +=truhen[i].getName();
ptr +="</td>\n<td>";
ptr +=String(truhen[i].getCurTemp())+"&#8451;";
ptr +="</td>\n<td>";
if (truhen[i].getStat() == -1) {
ptr +="Nicht bekannt";
}
else if (truhen[i].getStat() == 1) {
ptr +="An";
}
else if (truhen[i].getStat() == 0) {
ptr +="Aus";
}
else if (truhen[i].getStat() == 2) {
ptr +="Error";
}
ptr += "</td>\n</tr>\n";
}
ptr += "</table>\n";
ptr += "</div>\n";
ptr += "<script>window.setTimeout( function() { window.location.reload();}, 10000);</script>\n";
ptr +="</body>\n";
ptr +="</html>\n";
server.send(200, "text/html", ptr);
}
void handleNotFound() {
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i = 0; i < server.args(); i++) { message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; }
server.send(404, "text/plain", message);
}
void WifiSetup() {
preferences.begin("my-app", true);
ssid = preferences.getString("ssid", ssid);
password = preferences.getString("password", password);
preferences.end();
WifiConnect(ssid, password);
httpUpdater.setup(&server);
server.on("/setup",handleWifiSetup);
server.on("/",handleRoot);
server.begin();
};