Comobox to string Arduino Webserver

Wie kann ich den ausgewählten Wert der comobox auslesen?

Das ist leicht: einfach in der Zeile 42 darauf abfragen.

In anderen Worten: ohne Angabe der Hardware und einem Mustersketch geht da gar nichts.

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>

#include <WiFiUdp.h>
#include <TimeLib.h>


//Wlan Name
const char* ssid = "";
//Wlan Passwort
const char* password = "";

// NTP Servers:
static const char ntpServerName[] = "de.pool.ntp.org";
const int timeZone = 1;

WiFiUDP Udp;
unsigned int localPort = 8888;  // local port to listen for UDP packets

time_t getNtpTime();
void digitalClockDisplay();
void printDigits(int digits);
void sendNTPpacket(IPAddress &address);

//Webserver starten
WiFiServer server(80);

int gpio13Led = 13;
int gpio12Relay = 12;

bool lamp = 0;
bool relais = 0;

void setup(void) {
 Serial.begin(9600);
 delay(5000);
 Serial.println("");

 WiFi.persistent(false);
 WiFi.mode(WIFI_OFF);
 WiFi.mode(WIFI_STA);
 WiFi.begin(ssid, password);
 WiFi.config(IPAddress(192, 168, 100, 128), IPAddress(192, 168, 100, 20), IPAddress(255, 255, 252, 0), IPAddress(192, 168, 100, 1));
 while (WiFi.status() != WL_CONNECTED)delay(500);
 WiFi.mode(WIFI_STA);

 pinMode(gpio13Led, OUTPUT);
 digitalWrite(gpio13Led, lamp);

 pinMode(gpio12Relay, OUTPUT);
 digitalWrite(gpio12Relay, relais);

 //Auf Netzwerkverbindeung warten
 Serial.println("");
 Serial.print("Verbindungsaufbau mit:  ");
 Serial.println(ssid);
 while (WiFi.status() != WL_CONNECTED) {
   delay(500);
   if (lamp == 0) {
     digitalWrite(gpio13Led, 1);
     lamp = 1;
   } else {
     digitalWrite(gpio13Led, 0);
     lamp = 0;
   }
   Serial.print(".");
 }
 Serial.println("Verbunden");
 Serial.print("IP-Adresse: ");
 Serial.println(WiFi.localIP());

 Serial.println("Starte UDP");
 Udp.begin(localPort);
 Serial.print("Local port: ");
 Serial.println(Udp.localPort());
 Serial.println("warte auf TimeSync");
 setSyncProvider(getNtpTime);
 setSyncInterval(300);

 //Automatisch immer Eingeschaltet am Anfang
 relais = 1;
 digitalWrite(gpio13Led, LOW);
 digitalWrite(gpio12Relay, relais);

 server.begin();
 Serial.println("HTTP Server gestartet");
}

time_t prevDisplay = 0; // when the digital clock was displayed

void loop(void) {
 WiFiClient client = server.available();
 client.println("HTTP/1.1 200 OK");
 client.println("Content-Type: text/html");
 client.println("Connection: close");  // the connection will be closed after completion of the response
 client.println("Refresh: 30");  // refresh the page automatically every 5 sec

 String request = client.readStringUntil('\r');
 Serial.println(request);
 client.flush();



 client.println();
 client.println("<!DOCTYPE html>");
 client.println();
 client.println("<head>\n<meta charset='UTF-8'>");
 client.println("<title>Neustart Steckdose S20</title>");
 client.println("</head>\n<body>");
 client.println("<H2>Aktuelle Uhrzeit:");
 client.println(hour());
 client.println(":");
 client.println(minute());
 client.println(" ");
 client.println("Datum:");
 client.println(day());
 client.println(".");
 client.println(month());
 client.println(".");
 client.println(year());
 //client.println(":");
 //client.println(second());
 client.println("</H2>");
 if ((hour()==15) && (minute()==59)){
   if(second()<=4){
   relais = 0;
   digitalWrite(gpio12Relay, relais);
   delay(5000);
   relais = 1;
   digitalWrite(gpio12Relay, relais);
   }
 }



 client.println("<H2>Zeitschaltuhr</H2>");
 client.println("<H4>Neustart planen:</H4>");
 client.println("<select name=„stundewaehlen“ style=“width:160px“>");
 client.println("<option selected value=„0“>Stunde auswählen</option>");
 for (int i = 1; i <= 24; i++) {
   client.println("<option value=");
   client.println(i);
   client.println(">");
   client.println(i - 1);
   client.println("</option>");
 }
 client.println("</select>");
 client.println("<select name=„minutewaehlen“ style=“width:160px“>");
 client.println("<option selected value=„0“>Minute auswählen</option>");
 for (int i = 1; i <= 60; i++) {
   client.println("<option value=");
   client.println(i);
   client.println(">");
   client.println(i - 1);
   client.println("</option>");
 }
 client.println("</select>");

 client.println("&nbsp&nbsp");

 client.println("Steckdose wird um ....Neugestartet");
 client.println("
");
 client.println("
");
 // Hier war der Neustart button
 client.println("
");
 client.println("
");
 client.print("Steckdose ist aktuell: ");
 if (relais == 1) {
   client.print("An");
 } else {
   client.print("Aus");
 }

 client.println("<pre>");

 if (timeStatus() != timeNotSet) {
   if (now() != prevDisplay) { //update the display only if time has changed
     prevDisplay = now();
     digitalClockDisplay();
   }
 }
}

void digitalClockDisplay()
{
 // digital clock display of the time
 Serial.print(hour());
 printDigits(minute());
 printDigits(second());
 Serial.print(" ");
 Serial.print(day());
 Serial.print(".");
 Serial.print(month());
 Serial.print(".");
 Serial.print(year());
 Serial.println();
 //  server.send(200, "text/html", "<head><meta http-equiv='refresh' content='60'; URL=http://192.168.100.119'></head>Test");
}

void printDigits(int digits)
{
 // utility for digital clock display: prints preceding colon and leading 0
 Serial.print(":");
 if (digits < 10)
   Serial.print('0');
 Serial.print(digits);
}

/*-------- NTP code ----------*/

const int NTP_PACKET_SIZE = 48; // NTP time is in the first 48 bytes of message
byte packetBuffer[NTP_PACKET_SIZE]; //buffer to hold incoming & outgoing packets

time_t getNtpTime()
{
 IPAddress ntpServerIP; // NTP server's ip address

 while (Udp.parsePacket() > 0) ; // discard any previously received packets
 Serial.println("Transmit NTP Request");
 // get a random server from the pool
 WiFi.hostByName(ntpServerName, ntpServerIP);
 Serial.print(ntpServerName);
 Serial.print(": ");
 Serial.println(ntpServerIP);
 sendNTPpacket(ntpServerIP);
 uint32_t beginWait = millis();
 while (millis() - beginWait < 1500) {
   int size = Udp.parsePacket();
   if (size >= NTP_PACKET_SIZE) {
     Serial.println("Receive NTP Response");
     Udp.read(packetBuffer, NTP_PACKET_SIZE);  // read packet into the buffer
     unsigned long secsSince1900;
     // convert four bytes starting at location 40 to a long integer
     secsSince1900 =  (unsigned long)packetBuffer[40] << 24;
     secsSince1900 |= (unsigned long)packetBuffer[41] << 16;
     secsSince1900 |= (unsigned long)packetBuffer[42] << 8;
     secsSince1900 |= (unsigned long)packetBuffer[43];
     return secsSince1900 - 2208988800UL + timeZone * SECS_PER_HOUR;
   }
 }
 Serial.println("No NTP Response :-(");
 return 0; // return 0 if unable to get the time
}

// send an NTP request to the time server at the given address
void sendNTPpacket(IPAddress & address)
{
 // set all bytes in the buffer to 0
 memset(packetBuffer, 0, NTP_PACKET_SIZE);
 // Initialize values needed to form NTP request
 // (see URL above for details on the packets)
 packetBuffer[0] = 0b11100011;   // LI, Version, Mode
 packetBuffer[1] = 0;     // Stratum, or type of clock
 packetBuffer[2] = 6;     // Polling Interval
 packetBuffer[3] = 0xEC;  // Peer Clock Precision
 // 8 bytes of zero for Root Delay & Root Dispersion
 packetBuffer[12] = 49;
 packetBuffer[13] = 0x4E;
 packetBuffer[14] = 49;
 packetBuffer[15] = 52;
 // all NTP fields have been given values, now
 // you can send a packet requesting a timestamp:
 Udp.beginPacket(address, 123); //NTP requests are to port 123
 Udp.write(packetBuffer, NTP_PACKET_SIZE);
 Udp.endPacket();
}

Hardware: ich nutze ein ESP8266
Ziel: ich will bestimmte Endgeräte automatisch um eine bestimmte Uhrzeit neustarten.
Frage: wie kann ich eine Comobox auslesen? ich bräuchte die Funktion um den neustart per Webbrowser zu planen.

xXIVXx:
Frage: wie kann ich eine Comobox auslesen?

Mit Javascript!!

Was hat das mit dem Esp.. zu tun?

Gruß Fips

aha ESP.

Dann würde ich als erstes mal das ganze umbauen gemäß Beispiel

ESP8266WebServer | HelloServer

dann den Select in ein Form packen
anschließend mittels POST an den Server schicken
und bequem im server.argName(i) / server.arg(i) abfragen was im Select steht.

Derfips:
Mit Javascript!!

Was hat das mit dem Esp.. zu tun?

Gruß Fips

Ich wurde ja gefragt welche Hardware ich verwende.

hättest du lust mir ein beispiel zu zeigen?

noiasca:
aha ESP.

Dann würde ich als erstes mal das ganze umbauen gemäß Beispiel

ESP8266WebServer | HelloServer

dann den Select in ein Form packen
anschließend mittels POST an den Server schicken
und bequem im server.argName(i) / server.arg(i) abfragen was im Select steht.

Der select ist doch schon in einer form ?! Oder verstehe ich da was falsch?

xXIVXx:
Ich wurde ja gefragt welche Hardware ich verwende.

Du stellst deine Frage im falschem Forum.

Das auslesen wie du es nennst geht nur mit Html oder Javascript.

xXIVXx:
hättest du lust mir ein beispiel zu zeigen?

Gerne!

Gruß Fips

xXIVXx:
Der select ist doch schon in einer form ?! Oder verstehe ich da was falsch?

in deinem Sketch den du oben gepostet hast, habe ich zwischen body und erstem select kein form gesehen.

Vieleicht hab ich mich auch getäuscht, kann ja vorkommen.

Hab jetzt auch kein gesehen.

Müsste auf HTML-Seite ungefähr so funktionieren: Auswahllisten

ich hab mal den Sketch aus dem anderen Thread um eine Seite mit einer Select box erweitert damit du ein Beispiel hast.

Viele Anmerkungen:

  • ich habe einen NodeMCU, vieleicht musst du die 3 Pins die ich nutze anpassen
  • wie schon weiter oben angemerkt, ich nutze als Basis ESP8266WebServer | HelloServer
  • Das was Fips par excellence macht, sind bei mir nur die ersten Gehversuche, wie man einen Server gestaltet. Es soll lediglich die Verwendung des ESP8266WebServers verdeutlichen, wie man ein paar Seiten macht, wie das Zusammenspiel zwischen dein einzelnen Komponenten ist.
  • Das Beispiel kommt eigentlich von hier: ESP8266 Webserver - Webclient - Kommunikation zwischen zwei ESP - reduziert auf den webserver und mit einer zusätzlichen Seite mit dem select.
  • das Select macht nichts außer dass es im Serial.Monitor erkannt wird
  • was mir dann noch aufgefallen ist, dein Versuch eine Zeiteingabe mit einem Select zu machen finde ich eigenartig. Da gibt es heute eigentlich ein eigenes Attribut für ein Input-Feld und überlässt die Aufbereitung dem Browser. Nur so als start: HTML Input Types, wenn es nicht gefällt gibt es ja noch CSS.

so ca sieht es aus, hinten drann ist dann noch eine blanke Seite mit dem Select

Gute Nacht.

esp8266_server.zip (7.35 KB)