Browse Source

Introduced Sleep after 5 tracks and webserver-consolidation

master
Torsten Stauder 5 years ago
parent
commit
fe674b3b84
  1. 7
      css/bootstrap.min.css
  2. 26
      html/website.html
  3. 21
      html/websiteBasic.html
  4. 7
      js/bootstrap.min.js
  5. 2
      js/jquery.min.js
  6. 5
      js/popper.min.js
  7. 19
      processHtml.py
  8. 1
      src/logmessages.h
  9. 187
      src/main.cpp
  10. 18
      src/website.h
  11. 22
      src/websiteBasic.h
  12. 5
      src/websiteMgmt.h

7
css/bootstrap.min.css
File diff suppressed because it is too large
View File

26
html/website.html

@ -4,10 +4,10 @@
<title>ESPuino-Konfiguration</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://ts-cs.de/css/bootstrap.min.css">
<script src="https://ts-cs.de/js/jquery.min.js"></script>
<script src="https://ts-cs.de/js/popper.min.js"></script>
<script src="https://ts-cs.de/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://raw.githubusercontent.com/biologist79/Tonuino-ESP32-I2S/master/css/bootstrap.min.css">
<script src="https://raw.githubusercontent.com/biologist79/Tonuino-ESP32-I2S/master/js/jquery.min.js"></script>
<script src="https://raw.githubusercontent.com/biologist79/Tonuino-ESP32-I2S/master/js/popper.min.js"></script>
<script src="https://raw.githubusercontent.com/biologist79/Tonuino-ESP32-I2S/master/js/bootstrap.min.js"></script>
</head>
<body>
<nav class="navbar navbar-expand-sm bg-primary navbar-dark">
@ -15,7 +15,7 @@
<span class="navbar-toggler-icon"></span>
</button>
<a class="navbar-brand">
<img src="./tonuino_logo.png" width="30" height="30" class="d-inline-block align-top" alt="" />
<img src="https://raw.githubusercontent.com/biologist79/Tonuino-ESP32-I2S/master/html/tonuino_logo.png" width="30" height="30" class="d-inline-block align-top" alt="" />
Tonuino
</a>
<div class="collapse navbar-collapse" id="collapsibleNavbar">
@ -103,6 +103,7 @@
<option value="104">Schlafen nach 2 Stunden</option>
<option value="105">Schlafen nach Ende des Titels</option>
<option value="106">Schlafen nach Ende der Playlist</option>
<option value="107">Schlafen nach fünf Titeln</option>
<option value="110">Wiederhole Playlist (endlos)</option>
<option value="111">Wiederhole Titel (endlos)</option>
<option value="112">Dimme LEDs (Nachtmodus)</option>
@ -195,7 +196,20 @@
}, false);
});
let socket = new WebSocket("ws://%IPv4%:81/ws");
let socket = new WebSocket("ws://%IPv4%/ws");
socket.onclose = function(e) {
console.log('Socket is closed. Reconnect will be attempted in 1 second.', e.reason);
setTimeout(function() {
connect();
}, 5000);
};
socket.onerror = function(err) {
console.error('Socket encountered error: ', err.message, 'Closing socket');
ws.close();
};
socket.onmessage = function(event) {
console.log(event.data);
var socketMsg = JSON.parse(event.data);

21
html/websiteBasic.html

@ -0,0 +1,21 @@
<!DOCTYPE html>
<html>
<head>
<title>WLAN-Einrichtung</title>
</head>
<body>
<form action="/init" method="POST">
<fieldset>
<legend>Initiale WLAN-Einrichtung</legend>
<label for="ssid">SSID:</label><br>
<input type="text" id="ssid" name="ssid" placeholder="SSID" required><br>
<label for="pwd">Passwort:</label><br>
<input type="password" id="pwd" name="pwd" autocomplete="off" required><br><br>
<input type="submit" value="Absenden">
</fieldset>
</form>
<form action="/restart">
<button type="submit">Neustart</button>
</form>
</body>
</html>

7
js/bootstrap.min.js
File diff suppressed because it is too large
View File

2
js/jquery.min.js
File diff suppressed because it is too large
View File

5
js/popper.min.js
File diff suppressed because it is too large
View File

19
processHtml.py

@ -1,11 +1,10 @@
#!/usr/bin/python
content = ''
content2 = ''
with open('html/website.html', 'r') as r:
data = r.read().replace('\n', '\\\n')
#content += '"'
#data = r.read().replace('\n', '"\n')
data = data.replace('\"', '\\"')
content += data
@ -14,5 +13,19 @@ with open('src/websiteMgmt.h', 'w') as w:
w.write(content)
w.write("\";")
with open('html/websiteBasic.html', 'r') as r2:
data = r2.read().replace('\n', '\\\n')
data = data.replace('\"', '\\"')
content2 += data
with open('src/websiteBasic.h', 'w') as w2:
w2.write("static const char basicWebsite[] PROGMEM = \"")
w2.write(content2)
w2.write("\";")
r.close()
w.close()
w.close()
r2.close()
w2.close()

1
src/logmessages.h

@ -4,6 +4,7 @@ static const char mqttOk[] PROGMEM = "MQTT-Session aufgebaut.";
static const char sleepTimerEOP[] PROGMEM = "Sleep-Timer: Nach dem letzten Track der Playlist.";
static const char sleepTimerEOT[] PROGMEM = "Sleep-Timer: Nach dem Ende des laufenden Tracks.";
static const char sleepTimerStop[] PROGMEM = "Sleep-Timer wurde deaktiviert.";
static const char sleepTimerEO5[] PROGMEM = "Sleep Timer: Nach Ende des Titels oder, wenn früher, Ende der Playlist";
static const char sleepTimerAlreadyStopped[] PROGMEM = "Sleep-Timer ist bereits deaktiviert.";
static const char sleepTimerSetTo[] PROGMEM = "Sleep-Timer gesetzt auf";
static const char allowButtons[] PROGMEM = "Alle Tasten werden freigegeben.";

187
src/main.cpp

@ -25,9 +25,9 @@
#endif
#include "logmessages.h"
#include "websiteMgmt.h"
#include "websiteBasic.h"
#include <AsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include "website.h"
#include <ArduinoJson.h>
@ -119,6 +119,7 @@ char logBuf[160]; // Buffer for all log-messag
#define SLEEP_TIMER_MOD_120 104 // Puts uC into deepsleep after 120 minutes + LED-DIMM
#define SLEEP_AFTER_END_OF_TRACK 105 // Puts uC into deepsleep after track is finished + LED-DIMM
#define SLEEP_AFTER_END_OF_PLAYLIST 106 // Puts uC into deepsleep after playlist is finished + LED-DIMM
#define SLEEP_AFTER_5_TRACKS 107 // Puts uC into deepsleep after five tracks
#define REPEAT_PLAYLIST 110 // Changes active playmode to endless-loop (for a playlist)
#define REPEAT_TRACK 111 // Changes active playmode to endless-loop (for a single track)
#define DIMM_LEDS_NIGHTMODE 120 // Changes LED-brightness
@ -145,6 +146,7 @@ typedef struct { // Bit field
bool pausePlay: 1; // If pause is active
bool trackFinished: 1; // If current track is finished
bool playlistFinished: 1; // If whole playlist is finished
uint8_t playUntilTrackNumber: 6; // Number of tracks to play after which uC goes to sleep
} playProps;
playProps playProperties;
@ -247,7 +249,7 @@ const char* PARAM_MESSAGE = "message";
void notFound(AsyncWebServerRequest *request) {
request->send(404, "text/plain", "Not found");
}
AsyncWebServer wServer(81);
AsyncWebServer wServer(80);
AsyncWebSocket ws("/ws");
AsyncEventSource events("/events");
@ -259,9 +261,6 @@ TaskHandle_t rfid;
TaskHandle_t LED;
#endif
// Webserver
WebServer server(80);
// FTP
#ifdef FTP_ENABLE
FtpServer ftpSrv;
@ -308,7 +307,9 @@ QueueHandle_t rfidCardQueue;
// Prototypes
void accessPointStart(const char *SSID, IPAddress ip, IPAddress netmask);
static int arrSortHelper(const void* a, const void* b);
void callback(const char *topic, const byte *payload, uint32_t length);
#ifdef MQTT_ENABLE
void callback(const char *topic, const byte *payload, uint32_t length);
#endif
void buttonHandler();
void doButtonActions(void);
void doRfidCardModifications(const uint32_t mod);
@ -317,22 +318,28 @@ bool endsWith (const char *str, const char *suf);
bool fileValid(const char *_fileItem);
void freeMultiCharArray(char **arr, const uint32_t cnt);
uint8_t getRepeatMode(void);
void handleWifiSetup();
void loggerNl(const char *str, const uint8_t logLevel);
void logger(const char *str, const uint8_t logLevel);
#ifdef MQTT_ENABLE
bool publishMqtt(const char *topic, const char *payload, bool retained);
#endif
void postHeartbeatViaMqtt(void);
size_t nvsRfidWriteWrapper (const char *_rfidCardId, const char *_track, const uint32_t _playPosition, const uint8_t _playMode, const uint16_t _trackLastPlayed, const uint16_t _numberOfTracks);
void onWebsocketEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len);
#ifdef MQTT_ENABLE
void postHeartbeatViaMqtt(void);
#endif
bool processJsonRequest(char *_serialJson);
void randomizePlaylist (char *str[], const uint32_t count);
bool reconnect();
#ifdef MQTT_ENABLE
bool reconnect();
#endif
char ** returnPlaylistFromWebstream(const char *_webUrl);
char ** returnPlaylistFromSD(File _fileOrDirectory);
void rfidScanner(void *parameter);
void sleepHandler(void) ;
void sortPlaylist(const char** arr, int n);
bool startsWith(const char *str, const char *pre);
String templateProcessor(const String& templ);
void trackControlToQueueSender(const uint8_t trackCommand);
void rfidPreferenceLookupHandler (void);
void sendWebsocketData(uint32_t client, uint8_t code);
@ -675,6 +682,17 @@ void callback(const char *topic, const byte *payload, uint32_t length) {
showLedOk = true;
#endif
return;
} else if (strcmp(receivedString, "EO5T") == 0) {
if ((playProperties.numberOfTracks - 1) >= (playProperties.currentTrackNumber + 5)) {
playProperties.playUntilTrackNumber = playProperties.currentTrackNumber + 5;
} else {
playProperties.sleepAfterPlaylist = true;
}
loggerNl((char *) FPSTR(sleepTimerEO5), LOGLEVEL_NOTICE);
#ifdef NEOPIXEL_ENABLE
showLedOk = true;
#endif
return;
} else if (strcmp(receivedString, "0") == 0) {
if (sleepTimerStartTimestamp) {
sleepTimerStartTimestamp = 0;
@ -1329,6 +1347,16 @@ void playAudio(void *parameter) {
continue;
}
if (playProperties.playUntilTrackNumber == playProperties.currentTrackNumber && playProperties.playUntilTrackNumber > 0) {
if (playProperties.saveLastPlayPosition) {
nvsRfidWriteWrapper(playProperties.playRfidTag, *(playProperties.playlist + playProperties.currentTrackNumber), 0, playProperties.playMode, 0, playProperties.numberOfTracks);
}
playProperties.playlistFinished = true;
playProperties.playMode = NO_PLAYLIST;
gotoSleep = true;
continue;
}
if (playProperties.currentTrackNumber >= playProperties.numberOfTracks) { // Check if last element of playlist is already reached
loggerNl((char *) FPSTR(endOfPlaylistReached), LOGLEVEL_NOTICE);
if (!playProperties.repeatPlaylist) {
@ -1882,6 +1910,7 @@ void trackQueueDispatcher(const char *_itemToPlay, const uint32_t _lastPlayPos,
playProperties.sleepAfterCurrentTrack = false;
playProperties.sleepAfterPlaylist = false;
playProperties.saveLastPlayPosition = false;
playProperties.playUntilTrackNumber = 0;
switch(playProperties.playMode) {
case SINGLE_TRACK: {
@ -2036,8 +2065,8 @@ void doRfidCardModifications(const uint32_t mod) {
sleepTimerStartTimestamp = 0;
#ifdef NEOPIXEL_ENABLE
ledBrightness = initialLedBrightness;
loggerNl((char *) FPSTR(modificatorSleepd), LOGLEVEL_NOTICE);
#endif
loggerNl((char *) FPSTR(modificatorSleepd), LOGLEVEL_NOTICE);
#ifdef MQTT_ENABLE
publishMqtt((char *) FPSTR(topicLedBrightnessState), ledBrightness, false);
#endif
@ -2047,9 +2076,9 @@ void doRfidCardModifications(const uint32_t mod) {
sleepTimerStartTimestamp = millis();
#ifdef NEOPIXEL_ENABLE
ledBrightness = nightLedBrightness;
loggerNl((char *) FPSTR(ledsDimmedToNightmode), LOGLEVEL_INFO);
#endif
loggerNl((char *) FPSTR(modificatorSleepTimer15), LOGLEVEL_NOTICE);
loggerNl((char *) FPSTR(ledsDimmedToNightmode), LOGLEVEL_INFO);
#ifdef MQTT_ENABLE
publishMqtt((char *) FPSTR(topicSleepTimerState), sleepTimer, false);
publishMqtt((char *) FPSTR(topicLedBrightnessState), nightLedBrightness, false);
@ -2058,6 +2087,7 @@ void doRfidCardModifications(const uint32_t mod) {
playProperties.sleepAfterCurrentTrack = false; // deactivate/overwrite if already active
playProperties.sleepAfterPlaylist = false; // deactivate/overwrite if already active
playProperties.playUntilTrackNumber = 0;
#ifdef NEOPIXEL_ENABLE
showLedOk = true;
#endif
@ -2068,8 +2098,8 @@ void doRfidCardModifications(const uint32_t mod) {
sleepTimerStartTimestamp = 0;
#ifdef NEOPIXEL_ENABLE
ledBrightness = initialLedBrightness;
loggerNl((char *) FPSTR(modificatorSleepd), LOGLEVEL_NOTICE);
#endif
loggerNl((char *) FPSTR(modificatorSleepd), LOGLEVEL_NOTICE);
#ifdef MQTT_ENABLE
publishMqtt((char *) FPSTR(topicLedBrightnessState), ledBrightness, false);
#endif
@ -2079,9 +2109,9 @@ void doRfidCardModifications(const uint32_t mod) {
sleepTimerStartTimestamp = millis();
#ifdef NEOPIXEL_ENABLE
ledBrightness = nightLedBrightness;
loggerNl((char *) FPSTR(ledsDimmedToNightmode), LOGLEVEL_INFO);
#endif
loggerNl((char *) FPSTR(modificatorSleepTimer30), LOGLEVEL_NOTICE);
loggerNl((char *) FPSTR(ledsDimmedToNightmode), LOGLEVEL_INFO);
#ifdef MQTT_ENABLE
publishMqtt((char *) FPSTR(topicSleepTimerState), sleepTimer, false);
publishMqtt((char *) FPSTR(topicLedBrightnessState), nightLedBrightness, false);
@ -2090,6 +2120,7 @@ void doRfidCardModifications(const uint32_t mod) {
playProperties.sleepAfterCurrentTrack = false; // deactivate/overwrite if already active
playProperties.sleepAfterPlaylist = false; // deactivate/overwrite if already active
playProperties.playUntilTrackNumber = 0;
#ifdef NEOPIXEL_ENABLE
showLedOk = true;
#endif
@ -2111,9 +2142,9 @@ void doRfidCardModifications(const uint32_t mod) {
sleepTimerStartTimestamp = millis();
#ifdef NEOPIXEL_ENABLE
ledBrightness = nightLedBrightness;
loggerNl((char *) FPSTR(ledsDimmedToNightmode), LOGLEVEL_INFO);
#endif
loggerNl((char *) FPSTR(modificatorSleepTimer60), LOGLEVEL_NOTICE);
loggerNl((char *) FPSTR(ledsDimmedToNightmode), LOGLEVEL_INFO);
#ifdef MQTT_ENABLE
publishMqtt((char *) FPSTR(topicSleepTimerState), sleepTimer, false);
publishMqtt((char *) FPSTR(topicLedBrightnessState), nightLedBrightness, false);
@ -2122,6 +2153,7 @@ void doRfidCardModifications(const uint32_t mod) {
playProperties.sleepAfterCurrentTrack = false; // deactivate/overwrite if already active
playProperties.sleepAfterPlaylist = false; // deactivate/overwrite if already active
playProperties.playUntilTrackNumber = 0;
#ifdef NEOPIXEL_ENABLE
showLedOk = true;
#endif
@ -2143,9 +2175,9 @@ void doRfidCardModifications(const uint32_t mod) {
sleepTimerStartTimestamp = millis();
#ifdef NEOPIXEL_ENABLE
ledBrightness = nightLedBrightness;
loggerNl((char *) FPSTR(ledsDimmedToNightmode), LOGLEVEL_INFO);
#endif
loggerNl((char *) FPSTR(modificatorSleepTimer120), LOGLEVEL_NOTICE);
loggerNl((char *) FPSTR(ledsDimmedToNightmode), LOGLEVEL_INFO);
#ifdef MQTT_ENABLE
publishMqtt((char *) FPSTR(topicSleepTimerState), sleepTimer, false);
publishMqtt((char *) FPSTR(topicLedBrightnessState), nightLedBrightness, false);
@ -2154,6 +2186,7 @@ void doRfidCardModifications(const uint32_t mod) {
playProperties.sleepAfterCurrentTrack = false; // deactivate/overwrite if already active
playProperties.sleepAfterPlaylist = false; // deactivate/overwrite if already active
playProperties.playUntilTrackNumber = 0;
#ifdef NEOPIXEL_ENABLE
showLedOk = true;
#endif
@ -2182,12 +2215,13 @@ void doRfidCardModifications(const uint32_t mod) {
#endif
#ifdef NEOPIXEL_ENABLE
ledBrightness = nightLedBrightness;
loggerNl((char *) FPSTR(ledsDimmedToNightmode), LOGLEVEL_INFO);
#endif
loggerNl((char *) FPSTR(ledsDimmedToNightmode), LOGLEVEL_INFO);
}
playProperties.sleepAfterCurrentTrack = !playProperties.sleepAfterCurrentTrack;
playProperties.sleepAfterPlaylist = false;
sleepTimerStartTimestamp = 0;
playProperties.playUntilTrackNumber = 0;
#ifdef MQTT_ENABLE
publishMqtt((char *) FPSTR(topicLedBrightnessState), ledBrightness, false);
@ -2216,8 +2250,8 @@ void doRfidCardModifications(const uint32_t mod) {
} else {
#ifdef NEOPIXEL_ENABLE
ledBrightness = nightLedBrightness;
loggerNl((char *) FPSTR(ledsDimmedToNightmode), LOGLEVEL_INFO);
#endif
loggerNl((char *) FPSTR(ledsDimmedToNightmode), LOGLEVEL_INFO);
loggerNl((char *) FPSTR(modificatorSleepAtEOP), LOGLEVEL_NOTICE);
#ifdef MQTT_ENABLE
publishMqtt((char *) FPSTR(topicSleepTimerState), "EOP", false);
@ -2227,6 +2261,57 @@ void doRfidCardModifications(const uint32_t mod) {
playProperties.sleepAfterCurrentTrack = false;
playProperties.sleepAfterPlaylist = !playProperties.sleepAfterPlaylist;
sleepTimerStartTimestamp = 0;
playProperties.playUntilTrackNumber = 0;
#ifdef MQTT_ENABLE
publishMqtt((char *) FPSTR(topicLedBrightnessState), ledBrightness, false);
#endif
#ifdef NEOPIXEL_ENABLE
showLedOk = true;
#endif
break;
case SLEEP_AFTER_5_TRACKS:
if (playProperties.playMode == NO_PLAYLIST) {
loggerNl((char *) FPSTR(modificatorNotallowedWhenIdle), LOGLEVEL_NOTICE);
#ifdef NEOPIXEL_ENABLE
showLedError = true;
#endif
return;
}
playProperties.sleepAfterCurrentTrack = false;
playProperties.sleepAfterPlaylist = false;
sleepTimerStartTimestamp = 0;
if (playProperties.playUntilTrackNumber > 0) {
playProperties.playUntilTrackNumber = 0;
#ifdef MQTT_ENABLE
publishMqtt((char *) FPSTR(topicSleepTimerState), "0", false);
#endif
#ifdef NEOPIXEL_ENABLE
ledBrightness = initialLedBrightness;
#endif
#ifdef MQTT_ENABLE
publishMqtt((char *) FPSTR(topicSleepTimerState), "0", false);
#endif
} else {
if (playProperties.currentTrackNumber + 5 > playProperties.numberOfTracks) { // If currentTrack + 5 exceeds number of tracks in playlist, sleep after end of playlist
playProperties.sleepAfterPlaylist = true;
#ifdef MQTT_ENABLE
publishMqtt((char *) FPSTR(topicSleepTimerState), "EOP", false);
#endif
} else {
playProperties.playUntilTrackNumber = playProperties.currentTrackNumber + 5;
#ifdef MQTT_ENABLE
publishMqtt((char *) FPSTR(topicSleepTimerState), "EO5T", false);
#endif
}
#ifdef NEOPIXEL_ENABLE
ledBrightness = nightLedBrightness;
#endif
loggerNl((char *) FPSTR(sleepTimerEO5), LOGLEVEL_NOTICE);
}
#ifdef MQTT_ENABLE
publishMqtt((char *) FPSTR(topicLedBrightnessState), ledBrightness, false);
#endif
@ -2364,46 +2449,6 @@ void rfidPreferenceLookupHandler (void) {
}
void handleWifiSetup() {
String setupPage = "<!DOCTYPE html>";
setupPage += "<html>";
setupPage += "<head>";
setupPage += "<title>WLAN-Einrichtung</title>";
setupPage += "<h1>Initiale WLAN-Einrichtung</h1>";
setupPage += "<form action='/'>";
setupPage += " SSID: <input type='text' name='ssid'><br>";
setupPage += "<br>";
setupPage += " Passwort: <input type='text' name='pw'><br>";
setupPage += "<br>";
setupPage += " <input type='submit' value='Absenden'>";
setupPage += " </form>";
setupPage += "<br><br>";
setupPage += "<form action='/restart'>";
setupPage += " <input type='submit' value='Neustart'>";
setupPage += " </form>";
setupPage += "</head>";
setupPage += "</html>";
server.send ( 200, "text/html", setupPage);
if (server.args() > 0) { // Arguments were received
for (uint8_t i=0; i < server.args(); i++) {
snprintf(logBuf, sizeof(logBuf) / sizeof(logBuf[0]), "%s: %s=%s", (char *) FPSTR(statementsReceivedByServer), server.argName(i).c_str(), server.arg(i).c_str());
loggerNl(logBuf, LOGLEVEL_INFO);
if (server.argName(i) == "ssid") {
snprintf(logBuf, sizeof(logBuf) / sizeof(logBuf[0]), "%s: %s", (char *) FPSTR(savedSsidInNvs), server.arg(i).c_str());
loggerNl(logBuf, LOGLEVEL_NOTICE);
prefsSettings.putString("SSID", server.arg(i));
} else if (server.argName(i) == "pw") {
snprintf(logBuf, sizeof(logBuf) / sizeof(logBuf[0]), "%s: %s", (char *) FPSTR(savedWifiPwdInNvs), server.arg(i).c_str());
loggerNl(logBuf, LOGLEVEL_NOTICE);
prefsSettings.putString("Password", server.arg(i));
}
}
}
}
// Initialize Soft Access Point with ESP32
// ESP32 establishes its own WiFi network, one can choose the SSID
void accessPointStart(const char *SSID, IPAddress ip, IPAddress netmask) {
@ -2416,19 +2461,29 @@ void accessPointStart(const char *SSID, IPAddress ip, IPAddress netmask) {
snprintf(logBuf, sizeof(logBuf) / sizeof(logBuf[0]), "IP-Adresse: %d.%d.%d.%d", apIP[0],apIP[1], apIP[2], apIP[3]);
loggerNl(logBuf, LOGLEVEL_NOTICE);
server.on("/", handleWifiSetup); // Show setup-page
server.on("/restart", []() { // Show restart-page
server.send(200, "text/plain", "ESP-Reset wird durchgeführt...");
ESP.restart();
wServer.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/html", basicWebsite);
});
wServer.on("/init", HTTP_POST, [] (AsyncWebServerRequest *request) {
if (request->hasParam("ssid", true) && request->hasParam("pwd", true)) {
Serial.println(request->getParam("ssid", true)->value());
Serial.println(request->getParam("pwd", true)->value());
prefsSettings.putString("SSID", request->getParam("ssid", true)->value());
prefsSettings.putString("Password", request->getParam("pwd", true)->value());
}
request->send_P(200, "text/html", basicWebsite);
});
server.begin();
wServer.on("/restart", HTTP_GET, [] (AsyncWebServerRequest *request) {
request->send(200, "text/html", "ESP wird neu gestartet...");
Serial.flush();
ESP.restart();
});
wServer.begin();
loggerNl((char *) FPSTR(httpReady), LOGLEVEL_NOTICE);
accessPointStarted = true;
/*while (true) {
server.handleClient(); // Wird endlos ausgeführt damit das WLAN Setup erfolgen kann
}*/
}
@ -3036,7 +3091,7 @@ void loop() {
}
#endif
if (wifiManager() == WL_CONNECTED || accessPointStarted) {
server.handleClient();
//server.handleClient();
}
}

18
src/website.h

@ -1,18 +0,0 @@
const char wifiSetupHtml[] PROGMEM = "<!DOCTYPE html>\n"
"<html>\n"
"<head>\n"
"<title>WLAN-Einrichtung</title>\n"
"</head>\n"
"<body>\n"
"<h1>Initiale WLAN-Einrichtung</h1>\n"
"<form action='/'>\n"
"SSID: <input type='text' name='ssid'><br/><br />\n"
"Passwort: <input type='text' name='pw'><br /><br />\n"
"<input type='submit' value='Absenden'>\n"
"</form>\n"
"<br /><br />\n"
"<form action='/restart'>\n"
"<input type='submit' value='Neustart'>\n"
"</form>\n"
"</body>\n"
"</html>\n";

22
src/websiteBasic.h

@ -0,0 +1,22 @@
static const char basicWebsite[] PROGMEM = "<!DOCTYPE html>\
<html>\
<head>\
<title>WLAN-Einrichtung</title>\
</head>\
<body>\
<form action=\"/init\" method=\"POST\">\
<fieldset>\
<legend>Initiale WLAN-Einrichtung</legend>\
<label for=\"ssid\">SSID:</label><br>\
<input type=\"text\" id=\"ssid\" name=\"ssid\" placeholder=\"SSID\" required><br>\
<label for=\"pwd\">Passwort:</label><br>\
<input type=\"password\" id=\"pwd\" name=\"pwd\" autocomplete=\"off\" required><br><br>\
<input type=\"submit\" value=\"Absenden\">\
</fieldset>\
</form>\
<form action=\"/restart\">\
<button type=\"submit\">Neustart</button>\
</form>\
</body>\
</html>\
";

5
src/websiteMgmt.h

@ -15,7 +15,7 @@ static const char mgtWebsite[] PROGMEM = "<!DOCTYPE html>\
<span class=\"navbar-toggler-icon\"></span>\
</button>\
<a class=\"navbar-brand\">\
<img src=\"./tonuino_logo.png\" width=\"30\" height=\"30\" class=\"d-inline-block align-top\" alt=\"\" />\
<img src=\"https://raw.githubusercontent.com/biologist79/Tonuino-ESP32-I2S/master/html/tonuino_logo.png\" width=\"30\" height=\"30\" class=\"d-inline-block align-top\" alt=\"\" />\
Tonuino\
</a>\
<div class=\"collapse navbar-collapse\" id=\"collapsibleNavbar\">\
@ -103,6 +103,7 @@ static const char mgtWebsite[] PROGMEM = "<!DOCTYPE html>\
<option value=\"104\">Schlafen nach 2 Stunden</option>\
<option value=\"105\">Schlafen nach Ende des Titels</option>\
<option value=\"106\">Schlafen nach Ende der Playlist</option>\
<option value=\"107\">Schlafen nach fünf Titeln</option>\
<option value=\"110\">Wiederhole Playlist (endlos)</option>\
<option value=\"111\">Wiederhole Titel (endlos)</option>\
<option value=\"112\">Dimme LEDs (Nachtmodus)</option>\
@ -195,7 +196,7 @@ static const char mgtWebsite[] PROGMEM = "<!DOCTYPE html>\
}, false);\
});\
\
let socket = new WebSocket(\"ws://%IPv4%:81/ws\");\
let socket = new WebSocket(\"ws://%IPv4%/ws\");\
socket.onmessage = function(event) {\
console.log(event.data);\
var socketMsg = JSON.parse(event.data);\

Loading…
Cancel
Save