Compare commits

...

29 Commits

Author SHA1 Message Date
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
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
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

5
.gitignore vendored
View File

@ -1,3 +1,6 @@
.autogit
*.txt
*.pdf
*.pdf
output/
Settings.h
.vscode

BIN
DHT.zip

Binary file not shown.

BIN
Dictionary-master.zip Normal file

Binary file not shown.

Binary file not shown.

26
Settings.h.original Normal file
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

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 <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_mess_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() {
//LCD
lcd.begin(16, 2); //Starten des LCD, 16 Zeichen, 2 Zeilen
lcd.init();
lcd.backlight(); //Beleuchtung des Displays einschalten
lcd.blink();
lcd.clear();
@ -155,13 +29,27 @@ void setup() {
Serial.println();
Serial.println();
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();
wdt_enable(WDTO_1S); // Watchdog auf 1 s stellen
preferences.begin("my-app", true);
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");
}
@ -171,14 +59,8 @@ void loop() {
//MESSINTERVALL
last_mess_time = millis();
for (int i = 0; i < (sizeof(truhen) / sizeof(truhen[0])); i++) {
truhen[i].printName();
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));
if(millis() - last_schalt_time >= SCHALT_REFRESH_INTERVAL || last_schalt_time == 0)
@ -187,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)
@ -195,8 +77,45 @@ void loop() {
//LCD Update INTERVALL
last_lcd_time = millis();
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();
}
}

Binary file not shown.

61
Truhe.cpp Normal file
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
Truhe.h Normal file
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
Webserver.h Normal file
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();
};