ich würde gerne meinen Arduino nutzen um ein wenig Hausautomatisierung zu betreiben...
Im Moment will ich Relais schalten ...
und zwar wahlweise über einen Taster (EIN/AUS) und zusätzlich mit einem weiteren Taster für einen definierbaren Zeitraum EIN
oder mittels einer HTML Seite mit den gleichen Funktionen...
Was ich mit den div Tutorials bzw. anderen Sketchen schon hinbekommen habe, ist das Ein- & Ausschalten des/der Relais mittels HTML, was nicht klappt und da hab ich sicher nur einen Knoten irgendwo ist das EIN für den Zeitraum.....
Das klappt zwar vom Grundsatz her schon, allerdings bekomme ich nach dem Zeitablauf und dem AUS gleich wieder ein EIN, weil im Browser immer noch der Aufruf steht der ausgelesen wird... und das krieg ich nicht gebacken.
Sketch ist anbei, Relais hängt an Pin 8
Bei Switch_1 ist der erste Button das "klassische" AN/AUS und der rechts daneben aktiviert den Timer...
Wer den SerialMonitor aktiviert sieht wo ich herumprobiert habe ...
Vielen Dank für Euere Unterstützung schon jetzt!
P.S. das Schalten per Taster (ohne HTML) ist noch nicht eingebaut...
Ich sehe das Problem in der while(client.connected())-Schlaufe.
Da drin wird time1 zwar nie verändert (also aufgrund der Zeit neu gesetzt), aber es wird so eingesetzt, wie wenn das passieren würde.
Zudem bedienst Du den Client nicht komplett, somit kann die Verbindung länger offen bleiben, als gewünscht.
client.println("HTTP/1.1 200 OK");
Wieso gibst Du vor, HTTP 1.1 zu unterstützen, gibst aber nur die notwendigen Header für HTTP 1.0 aus? Ändere das mal, es könnte schon einige Probleme beheben.
Parador:
Das klappt zwar vom Grundsatz her schon, allerdings bekomme ich nach dem Zeitablauf und dem AUS gleich wieder ein EIN, weil im Browser immer noch der Aufruf steht der ausgelesen wird... und das krieg ich nicht gebacken.
Wenn Du die Parameter per GET in der URL-Adresse übergibst, müßtest Du die Server-Respons abhängig davon machen, ob die Adresse mit oder ohne GET-Parameter aufgerufen wurde.
Falls Parameter übergeben wurden, beantwortest Du die Anfrage NICHT mit "HTTP/1.1 200 OK" und dem danach folgenden Sermon, sondern nur mit:
client.println("HTTP/1.1 302 Moved Temporarily");
client.println("Location: /");
Dann ruft der Browser nach Erhalt dieser Seitenumleitung sofort die Defaultseite des Servers auf, bevor die Zeit abgelaufen ist, und da er dann keine Parameter mehr im Aufruf hat, wird dann auch nichts wieder gleich nochmal geschaltet.
vielen Dank für die Anregungen, die Idee von jurs fand ich am "einfachsten" und habe ich gleich mal probiert...
nun erkennt der UNO das der Timer läuft und macht dann einen 302 Redirect... leider lädt und lädt und lädt dann die Seite und bringt kein Resultat mehr...
Du wertest die GET-Anfrage nicht sauber aus, bevor Du im Sketch darauf reagierst.
Deine Programmlogik ist falsch.
Deine (falsche) Programmlogik ist momentan irgendwas in der Art:
egal welche GET-Anfrage an den Server gestellt wird
Wenn timer_switch_1_state == "an", dann leite auf die Startseite um
ansonsten verarbeite die Parameter in der Anfrage, schalte entsprechend und zeige die Seite an
Die richtige Programmlogik müßte so aussehen:
unterscheide die GET-Anfragen, die an den Server gestellt werden
Wenn die Anfrage keine Parameter enthält, zeige die Seite an
ansonsten verarbeite die Parameter in der Anfrage, schalte entsprechend und leite auf die Startseite um
Um die Anwendung leicht wartbar zu machen, solltest Du Eingabe-Verarbeitung-Ausgabe innerhalb des Programms sauber und übersichtlich trennen und nicht spaghettimäßig unübersichtlich miteinander verweben.