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("  ");
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?
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)