NEWS
Wemos Sketch: brauche Spezialist
-
Hallo,
ich habe mir ein Wemos Sketch geschrieben.
Lese damit Ultraschall Sensor sowie BME 280 aus.
Beides wird per mqtt korrekt an iobroker (Adapter mqtt) übertragen.
Weiterhin habe ich mit 8266webserver einen Webserver installiert. Hiermit bekomme per Browser-IP Daten vom Wemos am PC angezeigt.Das alles klappt soweit.
Nun möchte ich aber per Browser-Befehl, z.B. die Altitude ändern.
Befehl wäre z.B. (zumindest würde ich mir dies vorstellen):
192.168.243.175/alti=300Mit den 300 will ich dann im Sketch weiter arbeiten.
versucht habe ich schon:
server.on("/alti", HTTP_GET, handlealti);Das Sketch reagiert darauf; aber nur auf "alti".
wenn ich "=300" dran hänge, klappt dies nicht.
Ich habe ich dann rumgespielt mit
hasarg() oder auch server.arg.Aber irgendwie bekomme ich dies nicht hin.
Also ganz konkret:
Wie bekomme ich die Zahl (z.B. 300) übertragen ins Sketch damit ich damit weiterarbeiten kann.Danke im Voraus.
mfg
Dieter -
@bahnuhr bin mir nicht sicher... muss da nicht wo ein "?" rein?
Etwa so: 192.168.243.175?alti=300 -
mein server.on sieht so aus:
server.on("/alti", HTTP_GET, handlealti);Bei: 192.168.243.175/alti
wird korrekt zu "handlealti" verzweigt. -
von wo aus möchtest du den befehl senden?
Aus einer Visualisierung heraus oder über ein skript im javascripot-adapter von iobroker? -
erstmal im pc browser (chrome).
Später evtl. über javascript als request Befehl.
-
Wenn du es aus dem javascript adapter versenden möchtest, dann schaue mal hier
https://www.twilio.com/blog/2017/08/http-requests-in-node-js.html
Das erste Beispielund hier die API bei NODE zum https objekt, da dürfte das Beispiel bei
https.get(url[, options][, callback])[s
interessant sein. -
@bahnuhr ok wenn dann aus einer visualisierung, dann
https://api.jquery.com/jquery.get/und direkt aus dem browser, dann einfach tippen
-
sorry hab mir den post nochmal durchgelesen.
dann wäre korrekt, was lenny geschrieben hat -
falls du das programmieren eines webservers auf der wemos seite meinst (sorry so deutlich hast du dich da nicht ausgedrückt), dann schau mal hier
https://randomnerdtutorials.com/esp8266-web-server/
da ist ein beispiel drin mit Übertragung von parameter
-
@OliverIO sagte in Wemos Sketch: brauche Spezialist:
sorry so deutlich hast du dich da nicht ausgedrückt
bin noch am üben
Dein Link hatte ich schon gesehen. Klappt aber nicht.
Weil der loop den Ablauf blockiert.
(schwierig ausgedrückt).Bin aber ein bißchen weiter.
Habe folgenden Schnipsel gefunden.
Damit klappt es bisher ganz gut, muss aber noch daran rumfeilen.while (client.connected()) { if (client.available()) { char c = client.read(); if (readString.length() < 100) { readString = readString + c; } if (c == '\n' ) { if(readString.indexOf("alti") > -1){ int DP = (readString.indexOf("=")); //Zeichen '=' suchen String su; su = readString.substring(DP+1,readString.length()); alti = su.toInt(); //alti ((int(readString.charAt(DP+1))-48)*10) + (int(readString.charAt(DP+2))-48); // die 2 Zeichen nach dem '=' in Zahl wandeln } Serial.println ("----------------------------"); Serial.print("Alti= "); Serial.println (alti/5); Serial.println ("----------------------------"); break; } } }
-
@OliverIO sagte in Wemos Sketch: brauche Spezialist:
dann wäre korrekt, was lenny geschrieben hat
meinst du das?
"muss da nicht wo ein "?" rein?"Das klappt bei mir nicht.
-
Ich sende euch mal mein Probierscript.
Damit empfange ich nun zuverlässig Werte per sketch.
#include <ESP8266WiFi.h> const char* ssid = "Mueller-7390"; const char* password = "abcde"; long zahl = 0; int alti; String readString; WiFiServer server(80); void setup() { Serial.begin(9600); delay(10); // Connect to WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); // Start the server server.begin(); Serial.println("Server started"); // Print the IP address Serial.print("Use this URL : "); Serial.print("http://"); Serial.print(WiFi.localIP()); Serial.println("/"); } void loop() { // Check if a client has connected WiFiClient client = server.available(); if (client) { boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); if (readString.length() < 100) { readString = readString + c; } if (c == '\n' ) { if(readString.indexOf("alti") > -1){ int DP = (readString.indexOf("=")); //Zeichen '=' suchen String su; su = readString.substring(DP+1,readString.length()); alti = su.toInt(); //alti ((int(readString.charAt(DP+1))-48)*10) + (int(readString.charAt(DP+2))-48); // die 2 Zeichen nach dem '=' in Zahl wandeln } Serial.println ("----------------------------"); Serial.print("Alti= "); Serial.println (alti/5); Serial.println ("----------------------------"); break; } } } readString=""; // give the web browser time to receive the data delay(1); // close the connection: client.stop(); //Serial.println("client disonnected"); } delay(1000); zahl = zahl +1; Serial.println(zahl); //Serial.println(""); }
URL ist z.B.: http://192.168.243.87/alti=2800
und per Monitor wird dann ausgegeben:
-
@bahnuhr said in Wemos Sketch: brauche Spezialist:
while (client.connected()) { if (client.available()) { char c = client.read(); if (readString.length() < 100) { readString = readString + c; } if (c == '\n' ) { if(readString.indexOf("alti") > -1){ int DP = (readString.indexOf("=")); //Zeichen '=' suchen String su; su = readString.substring(DP+1,readString.length()); alti = su.toInt(); //alti ((int(readString.charAt(DP+1))-48)*10) + (int(readString.charAt(DP+2))-48); // die 2 Zeichen nach dem '=' in Zahl wandeln } Serial.println ("----------------------------"); Serial.print("Alti= "); Serial.println (alti/5); Serial.println ("----------------------------"); break; } } }
das sieht schon mal ganz gut aus. du bist auf dem richtigen weg
muss ich manchmal auch mich langsam ran tasten. -
@bahnuhr said in Wemos Sketch: brauche Spezialist:
@OliverIO sagte in Wemos Sketch: brauche Spezialist:
dann wäre korrekt, was lenny geschrieben hat
meinst du das?
"muss da nicht wo ein "?" rein?"Das klappt bei mir nicht.
da das auf dem wemos eigentlich kein webserver ist, sondern nur ne netzein/ausgabeschnittstelle
die so tut als ob es ein webserver ist, kannst du das ignorieren.
Das Fragezeichen kommt von diversen standards. Da du sender und empfänger selber programmierst, kannst du machen was du willst.
du hättest es ggfs. beachten müssen, falls das wemos teil wirklich ein paar webserverstandards eingebaut hätte.