URL Argumente ...

Moinsen ...

Arduino-Umgebung mit ESP8266-01.
Kleines Projekt mit Simpel-Webserver.
Aufruf des Webservers vom Client aus mit URL-Argumenten:

z.B. http://192.168.0.99/?X=2&Y=6&Z=8

Soweit funktioniert das auch alles.
Mit
server.on("/", handleArgs);
wird die Callback festgelegt und dort mit
server.arg("X") (usw.)
der Argumentwert gelesen.

Nun zum Problem.

Ich habe auch eine Unterseite, die eine eigene Callback
bekommt.
server.on("/STORE", TakeParam);
Bei Aufruf von 192.168.0.99/STORE
landet das Programm auch in TakeParam().

ABER:
Ich möchte auch hier URL-Parameter übergeben.
192.168.0.99/STORE?X=2&Y=6&Z=8ein

Und das will nicht funktionieren.
Hab ich irgendetwas falsch gemacht?
(Heißt: Anzahl Args = 0 wird gemeldet mit server.args())
Kann das jemand nachvollziehen, dass es nicht geht.
Oder besser, mir sagen DASS es geht - und wie... ?

Vielen Dank
Gruß
Andree

Hmmm ....

Also:
Ich generiere eine Webseite, die den Benutzer auffordert, bestimmte Werte zu betätigen.
Damit er (oder wer auch immer) diese URL (mit /STORE) nicht auch einfach so mal eingibt, generiere ich
einen Freigabecode, den ich als Parameter zurück geben will. (Freigabecode ist im Server gespeichert
und muss stimmen, damit Übernahmebefehl angenommen wird)

In Firefox mit CTRL-U kann man ja den Seiten-Code aufrufen.
Dort steht dann z.B.

Es wird also bei Anklicken des Buttons die URL
"http://192.168.0.200/STORE?R=11"
aufgerufen.

Im ESP-Code lande ich dann darauf hin in der Callback-Routine TakeParam (s.o.)
und gebe mir als erstes im SeriellenMonitor die Anzahl der Parameter aus
DEBUG1_PRINTLN("TakeParam...");
DEBUG1_PRINT ("Anzahl Args: ");
DEBUG1_PRINTLN(server.args());

Dort wird 0 angezeigt.

Das ist mein Problem.

Hilft das weiter?
Gruß
A.

Hi

Dann müsste STORE Deine aktive darzustellende Seite sein, oder?
Wenn STORE ein Verzeichnis ist (wovon ich ausgehe), müsste dort ein / dran.

Wenn dieses STORE kein Verzeichnis ist und nur dem Arduino sagen soll 'hier wird's jetzt speziell' - dann übergib dieses STORE ebenfalls als Parameter.

MfG

amshh:
Dort steht dann z.B.

Versuch mal anstatt den Parameter an die URL anzuhängen ein im Form.

Man Jungs .... das geht aber auch schnell hier ... da kommt man ja kaum nach !
Vielleicht noch als Hinweis:

Mit ESP-Programmierung/Arduino beschäftige ich mich erst ein paar Tage. Mein Wissen beschränkt sich
daher auf viel Gelese im Intermet aber wenig eigene Erfahrung!

Also:
@postmaster-ino
"....STORE Deine aktive darzustellende Seite sein"
Nicht wirklich. Ich will es eben nur benutzen, um über server.on in eine bestimmte
Callback-Routine zu steuern und dort dann die übergebenen Parameter (die ich ja gerade
nicht bekomme) zu verarbeiten.
STORE selbst als Parameter zu übergeben ist ein Idee, die sicherlich funktionieren wird.
Danke dafür.
Aber es ist eine Verlegenheitslösung. Denn soweit ich finden konnte, müssen Parameter
als Anhang an eine Resource möglich sein.
Mit / als Abschluss hinter STORE hatte ich auch schon experimteriert. Ohne Erfolg.

@noiasca
Kann ich nicht nachvollziehen.
Da, wie geschrieben, GAR KEINE Parameter ankommen. (server.args()) = 0), werde ich auch nicht
auf server.argName(0) oder server.arg(0) (sinnvoll) zugreifen können ....

@Rintin
Werde ich testen.

(Danke an alle; heute keine schnellen Rückmeldungen mehr von mir)

Gruß
A.

amshh:
Damit er (oder wer auch immer) diese URL (mit /STORE) nicht auch einfach so mal eingibt, generiere ich
einen Freigabecode, den ich als Parameter zurück geben will. (Freigabecode ist im Server gespeichert
und muss stimmen, damit Übernahmebefehl angenommen wird)

Und warum dann nicht "POST" ?

generiere ich
einen Freigabecode

Wo wird der generiert?
Auf dem Server oder im Client?

Gruß Fips

Adresszeile Browser:

http://192.168.178.43/STORE?X=2&Y=6&Z=8ein

Ausgabe Esp8266:

File Not Found

URI: /STORE
Method: GET
Arguments: 3
X: 2
Y: 6
Z: 8ein

Gruß Fips

Hi

Du könntest ?STORE&X=2&Y=6&Z=8ein anhängen - dann müsste STORE eine leere Variable darstellen.

Ob POST oder GET wird wohl Geschmackssache sein, Beides geht.
(wobei ...&Y=6 doch bereits POST darstellt, oder? Wir rufen die Seite ja nicht aus einer Form aus auf ... ggf. verwechsle ich gerade POST und GET - wäre nicht das erste Mal ;))

MfG

@Derfips
Bitte mal eben vom eigentlichen Zweck (Freigabecode) trennen.
Und reduzieren auf die Frage:

Kann man im Arduino/ESP-Code mit
server.arg("R")
einen Parameterinhalt abholen, wenn es eben nicht nur die reine IP

http://192.168.0.99/?R=4

ist (funktioniert ohen Probleme) , sondern auch noch eine Sub-Resource

http://192.168.0.99/STORE?R=4
(oder viellciht doch http://192.168.0.99/STORE/?R=4 teste ich nochmal)

dazwischen steht.

Nur darauf brauche ich eine Antwort.
(Und darum auch keinen vollständigen Sketch)

Post #8 scheint dies mit Ja zu beantworten.
Damit weiß ich dann, dass ich weiter suchen muss.
Oder aber den Vorschlag im Post #9 übernehmen. Das sollte auf jeden Fall funktionieren.

Danke an alle.
Reicht mir soweit.
A.

... nochmal.. (hat mir natürlich keine Ruhe gelassen ...)

Wer suchet der findet.

Habe irgendwann dann gelesen, dass bei input >> formaction bei dem angegebenen Link keine mit
"?" angehängten Parameter erlaubt sind. u.A. wird hier darüber diskutiert.

Habe dann den bereits weiter oben vorgeschlagenen zusätzlichen hidden input (Danke @Rintin) addiert, so dass dann folgendes dabei heraus kommt:

Und dann erhalte ich im Code mit server.arg("R") auch wie erwartet den Wert.

So. Nochmals Danke.
Schönes Wochenende!
A.