Hallo zusammen, schalte über meinen ESP32 Webserver z.B. Homeserver ein.
Jetzt würde ich gerne dass mich mein ESP automatisch nach dem Einschalten auf die Weboberfläche des Homeservers weiter leitet.
Wie kann ich das integrieren?
Hallo,
auf der HTML Seite des Webservers einen Link zum Homeserver unterbringen. ?
HTML brauchts da nicht
HTTP Status 301 oder 302
wie genau machst du das? Nur Strommäßig? WOL Magic Packet?
Wie lange dauert es, dass der Homeserver nach dem Einschalten die Weboberfläche anzeigen kann?
Hallo, der Homeserver ist selber gebaut und die weboberfläche ist nach ca. 2 sec erreichbar. Was nicht erreichbar ist, sind die Festplatten, das dauert dann ca. 40-90 sec.
Aus diesem Grund baue ich eine wartezeit über "delay(3000);" ein und dan sollte die Weboberfläche des Homeservers aufgerufen werden.
Mir ist aber leider nicht klar wie ich das in einem code wie z.b. diesen umsetzen kann.
server.on("/"+Device_2_Name+"-on", HTTP_GET, [](){
G2status = HIGH;
server.send(200, "text/html", SendHTML(G0status,G1status,G2status,G3status,));
digitalWrite(RelayPin1, HIGH);
Serial.println(Device_2_Name + " wird gestartet " );
delay(3000);
**Weiterleitung an IP zum Homeserver =????**
Hallo,
dann beschreibe noch mal ein bisschen genauer was Du da vorhast. Das mit dem delay(3000) ist vermutlich ganz schlecht.
ich weiß nicht wie das gehen könnte mit dem von @combie combie gemachten Vorschlag. Allerdings der client ( Brauser) sollte vom ESPServer die neue Adresse , also die des Homeservers haben und die muss er dann aufrufen. Du hast doch da jetzt ein server.send (), anscheinden ist das ja ein HTML text der da gesendet wird. Dann könnte in dem HTML doch die neue Adresse mit href angegeben werden.
Evenntuell denke ich ja auch zu kompliziert.
Heinz
Hallo erste einmal danke für euere Antworten.
@Rentner:
Leider ist mir nicht ganz klar wie ich das ganze genauer beschreiben soll, aber ich versuch es mal.
Um Strom zu sparen möchte ich das mein Homeserver nicht die ganze zeit laufen muss.
Aus diesem Grund habe ich in in meinem ESP-Webserver integriert mit welchen ich ja auch noch andere Geräte und Lampen schalten kann.
Nach dem Start des Homeservers, möchte ich dass ich automatisch auf die Weboberfläche geleitet werde und diese IP nicht extra aufrufen muss. Auf der Weboberfläche des Homeservers ist dann ersichtlich wann welche Daten abrufbar sind.
Meine Weboberfläche des ESP ist so aufgebaut:
String SendHTML(uint8_t G1stat,uint8_t G2stat,uint8_t G3stat){
String ptr = "<!DOCTYPE html> <html>\n";
ptr +="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
ptr +="<title>Smart Home Control</title>\n";
ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
ptr +="body{margin-top: 15px;} h1 {color: #444444;margin: 15px auto 7px;} h3 {color: #444444;margin-bottom: 10px;}\n";
ptr +=".button {display: block;width: 360px;background-color: #3498db;border: none;color: white;padding: 7px 15px;text-decoration: none;font-size: 20px;margin: 0px auto 5px;cursor: pointer;border-radius: 2px;}\n";
ptr +=".button-on {background-color: #424242;}\n";
ptr +=".button-on:active {background-color: #2980b9;}\n";
ptr +=".button-off {background-color: #0B610B;}\n";
ptr +=".button-off:active {background-color: #2c3e50;}\n";
ptr +="p {font-size: 14px;color: #888;margin-bottom: 10px;}\n";
ptr +="</style>\n";
ptr +="</head>\n";
ptr +="<body>\n";
ptr +="<h1>Smarthome Web Server</h1>\n";
if(G1stat)
{ptr +="<a class=\"button button-off\" href=\"/"+Device_1_Name+"-off\">" + Device_1_Name + " ausschalten</a>\n";}
else
{ptr +="<a class=\"button button-on\" href=\"/"+Device_1_Name+"-on\">" + Device_1_Name + " einschalten</a>\n";}
if(G2stat)
{ptr +="<a class=\"button button-off\" href=\"/"+Device_2_Name+"-off\">" + Device_2_Name + " ausschalten</a>\n";}
else
{ptr +="<a class=\"button button-on\" href=\"/"+Device_2_Name+"-on\">" + Device_2_Name + " einschalten</a>\n";}
if(G3stat)
{ptr +="<a class=\"button button-off\" href=\"/"+Device_3_Name+"-off\">" + Device_3_Name + " ausschalten</a>\n";}
else
{ptr +="<a class=\"button button-on\" href=\"/"+Device_3_Name+"-on\">" + Device_3_Name + " einschalten</a>\n";}
ptr +="</body>\n";
ptr +="</html>\n";
return ptr;
}
Der Code ist stark verkürzt. Ingesammt werden 32 Geräte damit geschaltet.
"Nach dem Start" des Homeservers hast du eben noch keinen Homeserver.
Was ich mir vorstellen könnte:
Du hast also ein
server.on("/"+Device_2_Name+"-on", serverwecken);
im void serverwecken()
startest du den server und servierst eine HTML Seite,
z.B. ein Iframe auf den Server - der wird zum Aufrufzeitpunkt noch leer sein (weil der Server noch nicht läuft)
und in den metadaten machst du einen Refresh in 5 sec auf die IP des Servers - in der Hoffnung dass der dann schon läuft
schön ist was anderes, aber jedenfalls kein blockierendes delay ...
Hallo,
ich bin jetzt nicht der HTML Spezi. Mich hat das Thema aber angetriggert.
ich habe jetzt eine Variante mit einem Java Skript das die Verzögerung macht und dann ein neues Fenster mit der neuen URL öffnet. Das ist jetzt keine Weiterleitung in dem Sinne.
Also Du solltest nach dem einschalten des Relais eine neue Seite an den Brause senden. Du hast deine HTML Seite ja als String festgelegt. Ich bin da ehr der Freund von einem File auf dem Filesystem des ESP. Aber egal. Wie Du die Seite in einen String bekommst weist Du ja sicher.
Teil aus Deinem Post oben geändert , ungetestet sieht das in etwa so aus.
server.on("/"+Device_2_Name+"-on", HTTP_GET, [](){
G2status = HIGH;
server.send(200, "text/html", SendHTML_Seite2();
digitalWrite(RelayPin1, HIGH);
Serial.println(Device_2_Name + " wird gestartet " );
Als neue URL habe ich die IP meines ESP32 Homeservers angegeben, das wird bei Dir ja ähnlich sein. Vermutlich gibt es noch eine Möglichkeit das auch im gleichen Tab zu machen.
Hier die zweite Seite mit der "Umleitung"
Nachtrag .
Muss ich alles zurücknehmen , die zweite Seite wird ständig neu geladen . Klappt so nicht
Hallo,
jetzt sollte es klappen.
<!DOCTYPE HTML>
<html lang="de">
<head>
<meta charset='UTF-8'>
<meta name='viewport' content='width=device-width, initial-scale=1'>
<title>Weiterleiten</title>
<script>
addEventListener('DOMContentLoaded', ()=>{
iid= setInterval(count,100);
let zahl=100;
function count() {
zahl= zahl-1;
wert.innerHTML = zahl/10;
if (zahl<=0){
//window.open('http://192.168.178.10');
window.location='http://192.168.178.10';
window.clearInterval(iid);
}
}
});
</script>
</head>
<body>
Wird weitergeleitet in
<span id="wert">0</span>s
</body>
</html>
Ich habe als Beispiel mal das ESP32-Beispiel Webserver->HelloServer minimal umgebaut um eine solche Status 302 Weiterleitung zu basteln.
Einzig eine Funktion habe ich angepasst:
void handleRoot() {
digitalWrite(led, 1);
server.sendHeader("Location","https://www.youtube.com/watch?v=4OBf_Gn8efs");
server.send(302);
digitalWrite(led, 0);
}
Nach dem Start des Programms sagt es mir u.A.:
IP address: 192.168.2.109
Nach Eingabe im Browser http://192.168.2.109 und Enter, führt eine Weiterleitung zu einer meiner Lieblingsbands
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.