Guten Tag alle zusammen,
da mein altes Thema noch im Alten Forum hängt kann ich dort nicht weiter posten.
Aber grundlegend habe ich versucht mit dem Arduino UNO und einem Ethernetshield einen Webserver zu errichten.
Dies ist mir auch gelungen.
Grundlegende Problematik war früher das ich eine Passwortabfrage realisieren wollte via " GET", dies hat auch schlussendlich geklappt.
Jedoch, neues Jahr neue Herrausforderungen.
Die Abfrage mit GET geht zwar aber nun will ich mehr, undzwar eine " Richtige" internetseite.
Nach diesem Motto : Arduino wird via Ip im Browser aufgerufen und es zeigt sich eine “Log In” Page.
Nachder erfolgreichen Eingabe des Passworts möchte ich zu ein paar “Links” gelangen : Temperatur Drinnen / Draußen / Luffeuchtigkeit/ IO Controll.
Problem ist in dem Zusammenhang das ich Zwar die Login seite bekomme jedoch scheitert es dann schon an den Links.
Also habe ich einfach mal alle Daten ( Temp, innen aussen, IO controll usw ) auf die Seite nach dem Einloggen gepackt.
Nicht schön aber geht erstmal, das IO Controll geht Via Checkboxen… sobalt ich eine Anhake fliege ich wieder auf die “Login” page,
Ist auch klar weil in der URL nichtmehr das Passwort steht was ich mit GET abfrage…
Wie lässt sich das ganze lösen?
Ich hatte mal den Ansatz via POST jedoch weiß ich weder genaue syntax noch richtige Anwendung.
Code etwas unsauber, jedoch funktional. ( Luftfeuchtemessung ist zurzeit noch nicht integriert)
#include <String.h>
#include <Wire.h>
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
#define ONE_WIRE_BUS 7
DeviceAddress insideThermometer, outsideThermometer;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
float tempC = sensors.getTempC(insideThermometer);
float Temperatur;
//##################################################################################################
byte mac[] = {0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX}; // MAC Adresse des Arduino Boards
byte ip[] = {192, 168, 178, 5 }; // IP Adresse des Arduino Boards
byte gateway[] = {192, 168,178, 1 }; // Gateway Fritzbox
byte subnet[] = {255, 255, 255, 0 }; // Subnet Maske
Server server = Server(80); // Port Einstellung (Standard 80)
//##################################################################################################
LiquidCrystal lcd(9, 8, 5, 4, 3, 2);
//##################################################################################################
int ledPin = 5;
String readString = String(30);
boolean LEDON = false;
//##################################################################################################
////
String PW= "POST /?Passwort=Passwort";
////
void setup() {
Wire.begin();
Ethernet.begin(mac, ip);//, gateway, subnet); // Ethernet starten
server.begin(); // Auf Clients warten
Serial.begin(9600);
sensors.begin();
lcd.begin(16, 2);
pinMode(10,OUTPUT);
}
void loop() {
float tempC = sensors.getTempC(insideThermometer);
Client client = server.available(); // Prüfen, ob Client Seite aufruft
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (readString.length() < 30)
{
readString = readString + c;
}
Serial.print(c);
if (c == '\n') {
if(readString.indexOf("LED")>0)
{
digitalWrite(ledPin, HIGH);
LEDON = true;
}
if(readString.indexOf("LED")<1)
{
digitalWrite(ledPin, LOW);
LEDON = false;
}
//############################################################################################
server.print("HTTP/1.0 200 OK\r\nServer: arduino\r\nContent-Type: text/html\r\n\r\n");
server.print("<HTML><HEAD><TITLE>");
server.print("Arduino Temperatur");
server.print("</TITLE>");
server.print("</HEAD><BODY>");
server.print("<body bgcolor='#CCFFCC'>");
server.print("<b> <font color='#2076CD'> Arduino Temperaturmonitor </font color></b>
");
server.print("
");
server.print("ArduinoUNO Temperaturen : ");
server.println("<form method=post/getvalue name=PASSWORTABF >Passwort <input name=Passwort type=text >
<input type=submit value=Bestätigen></form>");
if(readString.startsWith(PW))
{
{
if (tempC < frierpunkt)
server.print( "<font color='#FF0000'> Achtung Glatteis Gefahr!</font color>" );
}
server.print("
");
server.print("
");
server.print("Aussen Temperatur ");
server.print(tempC);
server.print(" C");
server.print("
");
server.print("
");
server.print("Zimmer Temperatur ");
server.print(Temperatur);
server.print(" C");
server.print("<meta http-equiv= refresh content=100; URL=http://19.168.178.5/");
server.print(" Celsius
");
server.print(" </BODY></HTML> ");
server.print("
");
server.print("
");
//!!
// Hier startet die zurzeit auskommentierte Checkbox abfrage!
//!!
// server.println("<form method=get name=LED><input type=checkbox name=Passwort/Check value=1>LED
<input type=submit value=Besaetigen></form>");
// server.println("
");
//server.print("LED Status: ");
//if (LEDON)
//server.println("<font color='green' size='3'>EIN");
// else
//server.println("<font color='red' size='3'>AUS");
}
readString="";
delay(10); // Kurz warten, um Daten zu senden
client.stop(); // Verbindung mit dem Client trennen
}
}}}
{
Temperatur = analogRead(A3);
Temperatur = (5.0 * Temperatur *100.0 )/1024.0;
Serial.print (Temperatur);
}
{
if (!sensors.getAddress(insideThermometer, 0));
sensors.requestTemperatures();
Serial.println(sensors.getTempCByIndex(0));
float tempC = sensors.getTempC(insideThermometer);
}
lcd.setCursor(0, 0);
lcd.print("In");
lcd.setCursor(4, 0);
lcd.print(Temperatur);
lcd.setCursor(0, 1);
lcd.print("Out");
lcd.setCursor(4, 1);
lcd.print(tempC);
lcd.setCursor(9, 1);
lcd.print(" ");
//{
// if(tempC >weiss)
//{
//digitalWrite(5,HIGH);
// digitalWrite(6,HIGH);
//digitalWrite(7,HIGH);
//}
//if(tempC < blau)
//{
//digitalWrite(5,LOW);
//digitalWrite(6,HIGH);
// digitalWrite(7,LOW);
//}
//if(tempC >gelb)
//{
//digitalWrite(5,HIGH);
// digitalWrite(6,LOW);
//digitalWrite(7,HIGH);
//}
//if(tempC >rot)
//{
//digitalWrite(5,LOW);
//digitalWrite(6,LOW);
//digitalWrite(7,HIGH);
//}
//}
}