Ich habe mir einen kleinen Webserver programmiert. Dieser hat verschiedene Eingabefelder, in denen Werte gespeichert werden können (so zumindest der Plan).
Das funktioniert auch, so lange ich nur ein Formular habe und nach dem Absenden in der Url alle mit "if (request->getParam(" abgefragten Parameter stehen.
Jetzt würde ich allerdings gerne ein zweites Formular einbauen, welches andere Parameter schickt. Da in dem Fall aber nicht die Parameter vom ersten Formular mit in der Url stehen.
Dann bin ich über "hasParam" gestolpert, das bringt aber leider auch keine Abhilfe.
Aktuell sieht der Code zur Abfrage der Url so aus:
void getSettings(){
server.on("/get", HTTP_GET, [] (AsyncWebServerRequest *request) {
String tempTargetNew, tempOffsetNew, humidityTargetNew, humidityOffsetNew;
if(request->hasParam(PARAM_tempTarget), true){
Serial.println("paramter gefunden");
if (request->getParam(PARAM_tempTarget)->value() != "") {
tempTargetNew = request->getParam(PARAM_tempTarget)->value();
int tTN = tempTargetNew.toInt();
preferences.putInt("tempT", tTN);
Serial.print("Target: ");
Serial.println(preferences.getInt("tempT"));
}
if (request->getParam(PARAM_tempOffset)->value() != "") {
tempOffsetNew = request->getParam(PARAM_tempOffset)->value();
int tON = tempOffsetNew.toInt();
preferences.putInt("tempOff", tON);
Serial.print("Offset: ");
Serial.println(preferences.getInt("tempOff"));
}
Serial.println("job1 done");
}
if(request->hasParam(PARAM_humidityTarget), true){
if (request->getParam(PARAM_humidityTarget)->value() != "") {
humidityTargetNew = request->getParam(PARAM_humidityTarget)->value();
int hTN = humidityTargetNew.toInt();
preferences.putInt("humidityT", hTN);
Serial.print("Humidity Target: ");
Serial.println(preferences.getInt("humidityT"));
}
if (request->getParam(PARAM_humidityOffset)->value() != "") {
humidityOffsetNew = request->getParam(PARAM_humidityOffset)->value();
int hTN = humidityOffsetNew.toInt();
preferences.putInt("humidityOff", hTN);
Serial.print("Humidity Offset: ");
Serial.println(preferences.getInt("humidityO"));
}
Serial.println("job2 done");
}
request->send(LittleFS, "/index.html", "text/html");
});
}
Auch der Versuch, beide Formulare über eine jeweils eigene Funktion abzurufen hat nicht funktioniert - dann geht die Erste, bei der Zweiten startet er ständig neu ->
`
Guru Meditation Error: Core 1 panic'ed (LoadProhibited). Exception was unhandled.
`
void getSettings(){
// Send a GET request to <ESP_IP>/get?input1=<inputMessage>
server.on("/get", HTTP_GET, [] (AsyncWebServerRequest *request) {
// GET input1 value on <ESP_IP>/get?input1=<inputMessage>
//---------------- Temperatur-Einstellung ------------------------------
String tempTargetNew, tempOffsetNew;
if (request->getParam(PARAM_tempTarget)->value() != "") {
tempTargetNew = request->getParam(PARAM_tempTarget)->value();
int tTN = tempTargetNew.toInt();
preferences.putInt("tempT", tTN);
Serial.print("Target: ");
Serial.println(preferences.getInt("tempT"));
}
if (request->getParam(PARAM_tempOffset)->value() != "") {
tempOffsetNew = request->getParam(PARAM_tempOffset)->value();
int tON = tempOffsetNew.toInt();
preferences.putInt("tempOff", tON);
Serial.print("Offset: ");
Serial.println(preferences.getInt("tempOff"));
}
Serial.println("job1 done");
request->send(LittleFS, "/index.html", "text/html");
});
}
// ------------------Humidity--------------------------------------------
void humidity(){
server.on("/get", HTTP_GET, [] (AsyncWebServerRequest *request) {
String humidityTargetNew, humidityOffsetNew;
if (request->getParam(PARAM_humidityTarget)->value() != "") {
humidityTargetNew = request->getParam(PARAM_humidityTarget)->value();
int hTN = humidityTargetNew.toInt();
preferences.putInt("humidityT", hTN);
Serial.print("Humidity Target: ");
Serial.println(preferences.getInt("humidityT"));
}
if (request->getParam(PARAM_humidityOffset)->value() != "") {
humidityOffsetNew = request->getParam(PARAM_humidityOffset)->value();
int hTN = humidityOffsetNew.toInt();
preferences.putInt("humidityOff", hTN);
Serial.print("Humidity Offset: ");
Serial.println(preferences.getInt("humidityO"));
}
request->send(LittleFS, "/index.html", "text/html");
//request->send(200, "text/html", "HTTP GET request sent to your ESP on input field (" + inputParam1 + ") with value: " + alarmStart + ", (" + inputParam2 + ") with value: " + alarmEnd + ", (" + inputParam3 + ") with value: " + alarmPower + "<br><a href=\"/\">Return to Home Page</a>");
});
}
Hat mir jemand einen Tipp, wie ich das hinbekommen könnte, ohne immer alle möglichen Parameter mit in die Url packen zu müssen?
EDIT:
Heisst er kommt mit diesen beiden Varianten klar (vielleicht etwas verständlicher):
meine_ip/get?tempTarget=60&tempOffset=2
meine_ip/get?tempTarget=&tempOffset=&humidityTarget=20&humidityOffset=2
Aber damit nicht:
meine_ip/get?humidityTarget=20&humidityOffset=2