HAllo an Alle,
Sollte mein Thread hier falsch sein, dann bitte ich einen Admin höflich darum meinen Thread entsprechend zu verschieben und es mir mitzuteilen. Ich bin noch neu und kenne mich jetzt noch nicht so gut aus.
Ich habe da ein Problem mit einem Toggle Button:
Ich habe ein ESP8266 auf dem ich im SPIFFS eine index.html und ein style.css abgelegt habe.
Das Problem ist, dass wenn die index.html Seite erneut aufgerufen wird
request->send(SPIFFS, "/index.html", String(), false, processor)
dann ist der Button wieder auf default obwohl er zuvor "checked" war.
Wie kann ich nun über eine Variable oder was auch immer dem request ein entsprechenden status mit übergeben, den die Checkbox dann entsprechend übernimmt. Mir fehlt hier der Ansatz. Ich mache das über EspAsynchronwebServer.h.
Ich habe im Netz ein Besipiel gefunden hierwo es an sich schön erklärt wird, aber da wird die ESP8266WebServer.h verwendet und dann kennt er in meinem Sketch verschiedene Befehle nicht.
Das Hin- und Her schalten mache ich im Moment über Buttons mit "AN" und "AUS" und ich wollte es ein wenig aufhübschen aber da fehlen mir einfach die Kenntnisse.
In meiner Index.html steht folgendes....
<div class="toggle text">
<label>
<input type="checkbox" id="RoofHatch" onchange="state_Change(this)" >
<span class="slider"></span>
</label>
</div>
<script>
function state_Change(element) {
var xhttp = new XMLHttpRequest();
if (element.checked){
xhttp.open("GET", "openClose_RoofHatch?button_state=1", true);
document.getElementById("RoofHatch_state").innerHTML = "AUF"
} else if (!element.checked){
xhttp.open("GET", "openClose_RoofHatch?button_state=0", true);
document.getElementById("RoofHatch_state").innerHTML = "ZU"
}
xhttp.send();
}
</script>
in meinem Sketch steht folgendes: (Auszug)
server.on("/openClose_RoofHatch", HTTP_GET, [](AsyncWebServerRequest *request){
if(request->hasArg("button_state")){
String button_state = request->arg("button_state");
String curr_state = "ZU";
if (button_state == "1"){
Serial.println("Dachluke öffnen");
//set RoofHatchSpeed
analogWrite(enA, RoofHatchSpeed);
// set Pins to set moving direction of RoofHatch motor
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
curr_state = "AUF";
}
else
{
Serial.println("Dachluke schliessen");
//set RoofHatchSpeed
analogWrite(enA, RoofHatchSpeed);
// set Pins to set moving direction of RoofHatch motor
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
curr_state = "ZU";
}
request->send_P(200, "text/plane", "0");
}
});
Wenn ich nur den Toggle Button betätige funktioniert auch alles wie es soll, jedoch nicht wenn ich einen anderen Button oder so betätige bzw. über den oben geschreibenen Befehl die index.html aus dem Speicher schicke.
Ich hoffe ich konnte es einigermassen beschreiben und habe auch entsprechen Infos reingepackt damit ihr es versteht. WEnn nicht, dann schreibt was ihr noch wissen wollt.
Viele Grüße
Thorsten