Arduino Forum

International => Deutsch => Topic started by: Haustechno on Jan 16, 2014, 05:32 pm

Title: Web client mit Taster und LED
Post by: Haustechno on Jan 16, 2014, 05:32 pm
Abend zusammen,

ich habe mir folgenden code zusammengezimmert,bei dem ich auch  die ClickButton verwende:
/
Code: [Select]
/---------------------------Bibliotheken hinzufügen
#include <SPI.h>                                                                // Spi Bus Bibliothek
#include <Ethernet.h>                                                           // Ethernet Bibliothek
#include "ClickButton.h"                                                        // Taster Bibliothek
//***************************TCPIP Server Einstellungen                        
byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };                           // Mac adresse
IPAddress serverIP(192,168,178,22);                                             // IP Adresse des servers
int serverPort=54711;                                                           // Port des Servers
EthernetClient client;                                                          // Starten des clients
//---------------------------Taster variablen
const int buttons = 3;                                                          // Anzahl der Taster und deren Variablen
//---------------------------LED
const int ledPin[buttons] = { 6, 7, 8 };                                        // Arduino pins to the LEDs
int ledState[buttons]     = { 0, 0, 0 };                                        // Led Zustand
int LEDfunction[buttons]  = { 0, 0, 0 };                                        // Led Funktionen
//---------------------------Arduino Eingangpins der Taster
const int buttonPin1 = 2;                                                       // Taster1 Konstante
const int buttonPin2 = 3;                                                       // Taster2 Konstante
const int buttonPin3 = 5;                                                       // Taster3 Konstante
//---------------------------Buttons in array schreiben
ClickButton button[3] = {
 ClickButton (buttonPin1, LOW, CLICKBTN_PULLUP),
 ClickButton (buttonPin2, LOW, CLICKBTN_PULLUP),
 ClickButton (buttonPin3, LOW, CLICKBTN_PULLUP),
};
//===========================Programm Setup
void setup()
{
//---------------------------Serial debug starten
  Serial.begin(9600);
//***************************Server code  
  if (Ethernet.begin(mac) == 0) {                                              // Starte internet Verbindung
   Serial.println("DHCP Fehlgeschlagen");
 }
 delay(1000);                                                                  // Pause zum initialisieren des Lan shields
 Serial.println("Verbinde mit dem Server...");                                 // Debug serial
if (client.connect(serverIP, serverPort)) {                                     // wenn klient verbunden
 Serial.println("Verbunden mit dem Server");                                   // Debug serial
 
//-------------------------Funktion Test beim Start
  String webtaster2an="swebtaster2=an";                                        //Text der gesendet werden soll
   Serial.println("Gesendete Nachricht:"+webtaster2an);                        //Debug serial
   client.println(webtaster2an);                                               // Text senden
 
 }
 else {
 
   Serial.println("Verbindung Fehlgeschlagen");                                // Debug serial bei Felschlagen der Verbindung
   }
//*************************Ende Server
 for (int i=0; i<buttons; i++)
 {
   pinMode(ledPin[i],OUTPUT);                                                  //Led pins als Ausgang deffinieren
//-------------------------Button Timer
   button[i].debounceTime   = 20;                                              //timer debounce
   //button[i].longClickTime  = 1000;                                            // Timer für drücken Lang
 }
}
//========================Programm Loop
void loop()
{
//************************Server Code
 if (client.available()) {                                                     // wenn rückantwort vom Server kommt
  char c = client.read();                                                      // Variable server antwort
  Serial.print(c);                                                             // Debug serial rückantwort
//************************Ende Server Code
  }
 for (int i=0; i<buttons; i++)
 {
   //---------------------Zustand aller Buttons aktualisieren
   button[i].Update();
   //---------------------Speichern der Tastendrücke in Funktion
   if (button[i].clicks != 0) LEDfunction[i] = button[i].clicks;
   //---------------------Funktion 1
   if(button[i].clicks == 1) ledState[i] = !ledState[i];
}
 //-----------------------LED Update
 for (int i=0; i<buttons; i++)
 {
   digitalWrite(ledPin[i],ledState[i]);
 }
}


Der client funktioniert prima was den DHCP angeht,und die Zeile:

Code: [Select]
String webtaster2an="swebtaster2=an";                                        //Text der gesendet werden soll
   Serial.println("Gesendete Nachricht:"+webtaster2an);                        //Debug serial
   client.println(webtaster2an);  


wird ja beim start einmal ausgeführt zum test,und dies funktioniert auch,der Aktor am Server wird eingeschaltet.

So, nun möchte ich mit den drei Tastern parallel zu der LED einen text an den Server senden,also:

- Taster1 gedrückt=)Led geht an=)   Text senden an Server(webtaster1=an)
- Taster1 gedrückt=)Led geht  aus=) Text senden an Server(webtaster1=aus)


Wie kann ich die zeile zum Textsenden mikt den zuständen der LEDs verknüpfen?

Mfg.
Haustechno



Title: Re: Web client mit Taster und LED
Post by: sschultewolter on Jan 16, 2014, 05:49 pm
Mir ist der Einsatzzweck jetzt nicht so ganz klar. Sind die Taster nun ortsnah am Arduino inkl. EthernetShield verdrahtet und es geht letzten Endes nur über eine Ausgabe auf dem Client?

Das ist die entscheidende Stelle im Sketch, hoffe ich hab die Variablen passend aus der ClickFunktion übernommen, kenne diese Lib nicht.
Code: [Select]

 //************************Server Code
 if (client.available()) {                                                     // wenn rückantwort vom Server kommt
   char c = client.read();                                                      // Variable server antwort
   Serial.print(c);                                                             // Debug serial rückantwort

   for(int i = 0; i < buttons; i++) {
     client.print("Webtaster");
     client.print(i); //Bennenung beginnt bei 1
     // client.print(i+1); //Bennenung beginnt bei 1
     client.print(" = ");
      if(ledState[i] == 1) client.println("AN");
     else client.println("AUS");
   }
 }
 //************************Ende Server Code


Ausgabe auf Client sollte wie folgt aussehen:
Code: [Select]

Webtaster0 = AN
Webtaster1 = AUS
Webtaster2 = AUS


Ach Mist, jetzt hab ich das hier gemacht und ich hab bei dir nicht richtig gelesen.

Was du suchst, ist die Textfinder Lib. Dort wird gezeigt, wie du entsprechend parsen kannst. Hierbei kannst du die Adresse dann direkt in den Browser schreiben, oder aber du machst dir eine html Seite, wo du diese als Button klicken kannst.

Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 16, 2014, 05:54 pm
Hallo,
ja Taster und LED sind am Arduino,daher auch der client drauf.

Server horcht auf dem Port des clients und auf klartext Befehle wenn z.b. "webtaster2=an" ankommt,
dann wird der Schaltaktor 2 eingeschaltet.

Grundlegend soll also wenn Taster gedrückt und led ein,dann deffinierten text an server senden.
Dabei dient die LED neben dem Taster als optische Anzeige.
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 16, 2014, 06:00 pm
Danke,

leider geht das nicht :(
Oder gibt es dan eine einfachere Möglichkeit ohne die lib?
Title: Re: Web client mit Taster und LED
Post by: sschultewolter on Jan 16, 2014, 06:22 pm
Was steht in Zeile 79?
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 16, 2014, 06:43 pm
Tja gute Frage,
ich bin neulung :(,und hab keine Ahnung wie die gezählt werden???
Werden da auch die // Zeilen mitgezählt?
Wie kann ich die Zeilennummern anzeigen lassen?
Title: Re: Web client mit Taster und LED
Post by: sschultewolter on Jan 16, 2014, 07:16 pm
Ganz unten links im Arduino Fenster steht eine Zahl, die gibt die Zeile an, schau mal, was da steht, wenn du die 79 erwischt hast.
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 16, 2014, 07:27 pm
ok Danke wieder was gelernt ;-)

Zeile 79:
  for (int i=0; i<buttons; i++)
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 16, 2014, 07:32 pm
Ok,
eine Klammer war zuviel :smiley-roll-blue:

Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 16, 2014, 08:04 pm
ok compilieren geht nun,aber es ist leider nicht das was ich wollte,sorry

Also ich brauche quasi nur ein beispiel für die Erkennung des Zustands der leds.
D.h.
Taster ist als toggle mit led verknüpft,also kurzes drücken Led an,nochmaliges drücken Led aus.
Dies geht ja mit dem code schon.

Jedoch möchte ich z.b.:
- wenn led1 auf high geht ,dann den Text einmalig  an die ip und port gesendet wird,nicht dauernd!
- wenn led1 auf low geht,dann der Text einmalig an die ip und port gesendet wird,nicht dauernd


Hoffe habe es nun genauer beschrieben,

Title: Re: Web client mit Taster und LED
Post by: sschultewolter on Jan 16, 2014, 08:29 pm
Also klappt es nun so wie gewollt, nur dass er es halt dauerhaft zum server kommt?
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 16, 2014, 08:46 pm
Könnte ja vielleicht dass helfen:
http://forum.arduino.cc/index.php?topic=182861.15

Ansonsten dieses:
http://startingelectronics.com/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-IO/
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 18, 2014, 12:10 pm
Morgen zusammen,

@sschultewolter

Also der code sendet dauern den server zu,so das ich die funktion nichtmal testen konnte :(

@scorpi08

deine links sind auch interresant,leider aber nicht das was ich möchte,sorry.

Also nochmal,
- ich habe Taster und Leds direkt am arduino
- ich möchte mit den Tastern die leds als toggle schalten können d.h.:

* klick Taster1,led1 an
(einmaliges senden eines Textes an server ip und port)

* nochmaliger klick taster1, led1 aus
(einmaliges senden eines Textes an server ip und port)

Mein problem ist,das ich nicht weiß ,wo und wie ich in dem code nun die Anweisungen wegen dem senden
der Texte an Server einfüge :(


Die Funktion an sich sollte halt dafür sein,wenn ich an dem Taster1 klicke,und die Led1 als optische Anzeige für on angeht,
dann soll der text "webtaster1=an" an den server gesendet werden,der weiter weg steht,und an dem dann ein Schaltaktor ist,und der dann einen Verbraucher einschaltet.

So hoffe nun es ist jetzt besser zu verstehen was ich erreichen möchte,

EDIT: im Anhang ein shot der serial Ausgabe und der antwort des Servers auf die für das Testsenden in dem setup teil meines codes

Mfg.
Haustechno
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 18, 2014, 05:52 pm
Code: [Select]

void loop()
{
  if(button1.clicks == 1)
  {
    ledState = !ledState;
Daten_senden(temp1, temp2);
  }

}

void Daten_senden(float T1, float T2)
{
  if (client.connect(server, 80)) // Verbindung zum Server aufbauen
  {
    Serial.println("Verbunden, Sende Daten...");
  }
  else
  {
    Serial.println(" ***** VERBINDUNG KANN NICHT HERGESTELLT WERDEN *****");
  }
}



Wie das nun mit dem Text senden weiß ich nicht aber wenn du ein externen Webserver hast wie in http://forum.arduino.cc/index.php?topic=182861.15
dann kann man es so machen, dass der Text immer ändert sobald die LED an ist oder aus. Da braucht der Arduino kein Text senden, es wird per HTML geregelt.
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 12:05 pm
Morgen,

@scorpi08

Also der server ist eine Haussteuerungs software die halt auf dem Port befehle entgegennimmt,und diese bestättigt.
Get und set Befehle werden engegengenommen und verarbeitet,also keine website oder ähnliches.

meine Idee war halt ein 6fach Wand-Taster incl. LCD Modul,aber auf lan Bassis halt zu bauen.
Dieser soll halt an die Haussteuerung bestimmte Texte wie "gWeter" senden,und bekommt als antwort dann Aussentemperatur und Feuchte.

Also beim Taster 1 drücken,der text: "sWebtaster1=an" einmalig an Ip und Port senden,und bekommt als antwort "set ok" zurück.
Die led neben Taster 1 soll dannquasi parallel zu dem geschaltetem Aktor am Server an und ausgehen.
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 12:13 pm
Alles was ich möchte ist in dem code vom post 1 halt den text beim ein oder aus einmalig senden.
Also es muss halt je nach zustand der led ein text gesendet werden.
Also:
-  led 1 an  =text senden "sWebtaster1=an" einmalig
- led 1 aus =text senden "sWebtaster1=aus" einmalig

EDIT:
Im Anhang noch mein prototyp des Wandtasters
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 01:08 pm
Sketch:
Code: [Select]
#include "ClickButton.h"
#include <SPI.h>
#include <Ethernet.h> 
//ETHERNET-SETTINGS
byte mac[]     = { 0x5D, 0xA2, 0xFA, 0x2D, 0x36, 0x3C };    // MAC-Adresse des Arduino
byte ip[]      = { 192, 168, 178, 178 };                     // IP-Adresse des Arduino
byte gateway[] = { 192, 168, 178, 1 };                    // Gateway
byte subnet[]  = { 255, 255, 255, 0 };                    // SubNet
byte server[]  = { 192, 168, 178, 2 };                     // IP-Adresse des Servers
EthernetClient client;
char host[]    = "localhost";                      // Domain
char schreiben[]     = "/save.php"; // Pfad zur PHP-Datei zum schreiben
char key[]     = "DEINPASSWORTEGALWELCHES";                     // Kennwort aus PHP-Datei
char c;                                                     // Variable für Rückgabe des Servers



// the LED
const int ledPin = 8;
int ledState = 1;

// the Button
const int buttonPin1 = 3;
ClickButton button1(buttonPin1, LOW, CLICKBTN_PULLUP);

// Arbitrary LED function
int LEDfunction = 0;


void setup()
{
delay(1000);
  Serial.begin(9600);
  Serial.flush();
  delay(200);
  Serial.println("Ethernet initialisieren..."); 
  Ethernet.begin(mac, ip);

  delay(1000);
  pinMode(ledPin,OUTPUT); 

  // Setup button timers (all in milliseconds / ms)
  // (These are default if not set, but changeable for convenience)
  button1.debounceTime   = 20;   // Debounce timer in ms
  button1.multiclickTime = 250;  // Time limit for multi clicks
  button1.longClickTime  = 1000; // time until "held-down clicks" register
}


void loop()
{
  // Update button state
  button1.Update();
  // Save click codes in LEDfunction, as click codes are reset at next Update()
  if (button1.clicks != 0) LEDfunction = button1.clicks;


  // Simply toggle LED on single clicks
  // (Cant use LEDfunction like the others here,
  //  as it would toggle on and off all the time)
  if(button1.clicks == 1)
  {
    ledState = !ledState;
   
   Daten_senden(ledState,ledState);
    delay(700);

  byte maxReads = 10; //Seconds
  while ((maxReads-- > 0) && client.connected())              // Antwort des Servers lesen
  {
    delay(1000);
    while (client.available())
    {
      char response = client.read();
      Serial.print(response);
    }
  }
  client.stop();
  Serial.println("Done.");
  client.flush();
}
 

  // blink faster if double clicked
  if(LEDfunction == 2) ledState = (millis()/500)%2;

  // blink even faster if triple clicked
  if(LEDfunction == 3) ledState = (millis()/200)%2;

  // slow blink (must hold down button. 1 second long blinks)
  if(LEDfunction == -1) ledState = (millis()/1000)%2;

  // slower blink (must hold down button. 2 second loong blinks)
  if(LEDfunction == -2) ledState = (millis()/2000)%2;

  // even slower blink (must hold down button. 3 second looong blinks)
  if(LEDfunction == -3) ledState = (millis()/3000)%2;


  // update the LED
  digitalWrite(ledPin,ledState);

}


/******************************
                              *
  Daten an Server schickenn   *
                              *
*******************************/
void Daten_senden(boolean T1, boolean T2)
{
  if (client.connect(server, 80)) // Verbindung zum Server aufbauen
  {
    Serial.println("Verbunden, Sende Daten...");
    client.print("GET " + String(schreiben));
    Serial.println("GET " + String(schreiben));
    client.print("?T1=");
    Serial.print("?T1=");
    client.print(T1);
    Serial.println(T1);
    client.print("&T2=");
    Serial.print("&T2=");
    client.print(T2);
    Serial.println(T2);
    client.print("&key=" + String(key));
    Serial.print("&key=" + String(key));
    client.println(" HTTP/1.1");
    Serial.println(" HTTP/1.1");
    client.print("Host: " + String(host));
    Serial.print("Host: " + String(host));
    client.println();
    Serial.println();
    client.println("User-Agent: Arduino");
    Serial.println("User-Agent: Arduino");
    client.println("Connection: close");
    Serial.println("Connection: close");
    client.println();
    Serial.println();
  }
  else
  {
    Serial.println(" ***** VERBINDUNG KANN NICHT HERGESTELLT WERDEN *****");
  }
}

Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 01:30 pm
Wieso machst du es nicht mit rs485?
http://forum.arduino.cc/index.php?topic=206317.0

Ansonsten stellt hier einer sein Projekt vor, allerdings ohne code.
http://forum.arduino.cc/index.php?topic=203022
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 01:43 pm
Tja die Frage ist ganz einfach zu beantworten:
- keine Kabeverlegung da Lan/wlan/Powerline schon vorhanden ist
- flexible Installation auch im Außenbereich wie Gartenhaus,Garage usw
-vor allem keine Sendebeschrenkung obwohl per Funk
:smiley-mr-green:

EDIT:
wifi to serial Module bekommst du schon unter 20€
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 01:52 pm
Taster muss Strom haben, also kabel her.
Processor muss auch jeder Taster haben.
Dazu kommt noch jeder Taster muss ein WLAN modul haben oder halt ein Kabel fürs LAN. Denke es wird teurer als max485 (8€ 100 Stück)

Dass mit Beschränkung ist so eine sache....


Hast  den Sketch getestet? Hier meine SerialMonitor Ausgabe:
Code: [Select]
Verbunden, Sende Daten...
GET /save.php
?T1=1
&T2=1
&key=MEINPASSWORT123 HTTP/1.1
Host: localhost
User-Agent: Arduino
Connection: close

HTTP/1.1 200 OK
Date: Sun, 19 Jan 2014 12:12:10 GMT
Server: Apache
X-Powered-By: PHP/5.5.3
Content-Length: 27
Connection: close
Content-Type: text/html

Temperaturwerte gespeichertDone.
Verbunden, Sende Daten...
GET /save.php
?T1=0
&T2=0
&key=MEINPASSWORT123 HTTP/1.1
Host: localhost
User-Agent: Arduino
Connection: close

HTTP/1.1 200 OK
Date: Sun, 19 Jan 2014 12:12:15 GMT
Server: Apache
X-Powered-By: PHP/5.5.3
Content-Length: 27
Connection: close
Content-Type: text/html

Temperaturwerte gespeichertDone.



EDIT: Dann kannst du genauso KNX einbauen
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 02:01 pm
Wie gesagt,
- kabel zu Stromversorgung ist doch schon vorhanden,rs485 kabel nicht!
Rechne mal die Renovierung dies Hauses mit bei umstellung auf Rs485 :smiley-eek-blue:

- Datenübertragung per wlan.lan,powerline ist weitaus grösser ,was auch mehr erweiterungen ermöglicht für die Zukunft!
- kosten der wlan,lan,powerline sind  dank der Vielfalt an erweiterungen vertretbar und liegen um die 20€
  Ein guter 868mhz transciver kostet das gleiche,vergiss mal die 433mhz spielerei......


Zu deinem Code ich weiß leider nicht wirklich wie ioch dein einsetzen soll,sorry :|

ich muss ne ip und port eingeben können,also 192.168.178.22 port:45711,also nix mit php oder so....

ich möchte infach nur den code vom post 1 je nach zustand der led halt den text einmalig senden,das ist alles.
Dann geht auch meine haussteuerung per lan :smiley-mr-green:
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 02:16 pm
Code: [Select]
byte ip[]      = { 192, 168, 178, 178 };                     // IP-Adresse des Arduino
byte gateway[] = { 192, 168, 178, 1 };                    // Gateway
byte subnet[]  = { 255, 255, 255, 0 };                    // SubNet
byte server[]  = { 192, 168, 178, 2 };                     // IP-Adresse des Servers


Code: [Select]
client.connect(server, 80);                     // connect to server mit dem Port 80

Da hast du es doch.

Auf dem Server liegt ne php datei, da gibst du die an
Code: [Select]
char schreiben[]     = "/save.php";  // Pfad zur PHP-Datei zum schreiben

Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 02:26 pm
also ich glaube entwerder verstehe ich da was nicht oder wir reden an einander vorbei XD

Also der Server der Haussteuerung hat keinerlei php datei,es ist eine serversoftware wie gesagt die einfach nur auf Schaltbefehle oder Anfragen via KLARTEXT wartet,und dann demnach die Schaltvorgänge oder Anfragen intern weiter verarbeitet.

Also nichts mit PHP Datei auf dem Server sondern eine direkte Anweisung via KLARTEXT an ip und port.
Es ist keine Internetseite!

Hmm irgendwie verstehe wir uns nicht :smiley-red:
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 02:29 pm
Was ist das für eine Software?
Was ist das für ein Server?
Woher kennst du die klartext Befehle?
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 02:36 pm
Also,
die software ist Homeputerstudio von der firma Contronics:
http://www.contronics.de/home.html (http://www.contronics.de/home.html)

Die soft kann per kommandozeile gesteuert werden,um diese per lan oder internet zu steuern gibt es das tool :
http://homematic-forum.de/downloads/ServerExecStudio/ (http://homematic-forum.de/downloads/ServerExecStudio/)

in der Software dann kann ich objekte anlegen wie z.b. "Websteuerung"
Und dann halt per tcpip mit dem Objekt mit  set und get Befehlen arbeiten.

D.h. ich schreibe in das Objekt "Websteuerung" über tcpip z.b. sWebtaster1=an,
somit schaltet die Software den Aktor an der mit dem webtaster1 verknüpft ist ein.


Also die klartexte bestimme ich selber,die namen der Aktoren und Sensoren auch
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 02:39 pm
also kann ich auch später eigene Sensoren und Aktoren damit realisieren mit arduino :smiley-mr-green:
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 02:44 pm
Code: [Select]
#include "ClickButton.h"
#include <SPI.h>
#include <Ethernet.h> 
//ETHERNET-SETTINGS
byte mac[]     = { 0x5D, 0xA2, 0xFA, 0x2D, 0x36, 0x3C };    // MAC-Adresse des Arduino
byte ip[]      = { 192, 168, 178, 178 };                     // IP-Adresse des Arduino
byte gateway[] = { 192, 168, 178, 1 };                    // Gateway
byte subnet[]  = { 255, 255, 255, 0 };                    // SubNet
byte server[]  = { 192, 168, 178, 2 };                     // IP-Adresse des Servers
EthernetClient client;
char host[]    = "localhost";                      // Domain
char c;                                                     // Variable für Rückgabe des Servers



// the LED
const int ledPin = 8;
int ledState = 1;

// the Button
const int buttonPin1 = 3;
ClickButton button1(buttonPin1, LOW, CLICKBTN_PULLUP);

// Arbitrary LED function
int LEDfunction = 0;


void setup()
{
delay(1000);
  Serial.begin(9600);
  Serial.flush();
  delay(200);
  Serial.println("Ethernet initialisieren..."); 
  Ethernet.begin(mac, ip);

  delay(1000);
  pinMode(ledPin,OUTPUT); 

  // Setup button timers (all in milliseconds / ms)
  // (These are default if not set, but changeable for convenience)
  button1.debounceTime   = 20;   // Debounce timer in ms
  button1.multiclickTime = 250;  // Time limit for multi clicks
  button1.longClickTime  = 1000; // time until "held-down clicks" register
}


void loop()
{
  // Update button state
  button1.Update();
  // Save click codes in LEDfunction, as click codes are reset at next Update()
  if (button1.clicks != 0) LEDfunction = button1.clicks;


  // Simply toggle LED on single clicks
  // (Cant use LEDfunction like the others here,
  //  as it would toggle on and off all the time)
  if(button1.clicks == 1)
  {
    ledState = !ledState;
   
   Daten_senden(ledPin,ledState);
    delay(700);

  byte maxReads = 10; //Seconds
  while ((maxReads-- > 0) && client.connected())              // Antwort des Servers lesen
  {
    delay(1000);
    while (client.available())
    {
      char response = client.read();
      Serial.print(response);
    }
  }
  client.stop();
  Serial.println("Done.");
 
}
 

  // blink faster if double clicked
  if(LEDfunction == 2) ledState = (millis()/500)%2;

  // blink even faster if triple clicked
  if(LEDfunction == 3) ledState = (millis()/200)%2;

  // slow blink (must hold down button. 1 second long blinks)
  if(LEDfunction == -1) ledState = (millis()/1000)%2;

  // slower blink (must hold down button. 2 second loong blinks)
  if(LEDfunction == -2) ledState = (millis()/2000)%2;

  // even slower blink (must hold down button. 3 second looong blinks)
  if(LEDfunction == -3) ledState = (millis()/3000)%2;


  // update the LED
  digitalWrite(ledPin,ledState);

}


/******************************
                              *
  Daten an Server schickenn   *
                              *
*******************************/
void Daten_senden(boolean LED1, boolean ZUSTAND)
{
  if (client.connect(server, 80)) // Verbindung zum Server aufbauen
  {
    Serial.println("Verbunden, Sende Daten...");
    client.print("GET ");
    Serial.println("GET ");
    client.print("?LED1=");
    Serial.print("?LED1=");
    client.print(LED1);
    Serial.println(LED1);
    client.print("&ZUSTAND=");
    Serial.print("&ZUSTAND=");
    client.print(ZUSTAND);
    Serial.println(ZUSTAND);
    client.println(" HTTP/1.1");
    Serial.println(" HTTP/1.1");
    client.print("Host: " + String(host));
    Serial.print("Host: " + String(host));
    client.println();
    Serial.println();
    client.println("User-Agent: Arduino");
    Serial.println("User-Agent: Arduino");
    client.println("Connection: close");
    Serial.println("Connection: close");
    client.println();
    Serial.println();
  }
  else
  {
    Serial.println(" ***** VERBINDUNG KANN NICHT HERGESTELLT WERDEN *****");
  }
}



So wird dann nur an die ip:port gesendet
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 03:02 pm
Kann man ayControl auch so nutzen?
http://aycontrol.com/home/
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 03:02 pm
Hmm,
also ausser das im serialmonitor initialisieren kommt passiert nix :(

ich versteh das nicht,sorry

Also ip hab ich ja angepasst,also 192.178.178.22 ist die des servers
port ist ja 54711
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 03:06 pm
leider kenn ich das system nicht,aber alles was mit knx zu tuen hat ist eigentlich teuer und kompliziert :(
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 03:06 pm
Es wird ja auch nur gesendet wenn der Button gedrückt wurde.

IP, Port, Button und LED
hast du alles im sketch angepasst?

bei
Code: [Select]
char host[]    = "localhost";  

gib auch die ip ein und nicht localhost
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 03:07 pm
Ich mein nur die aycontrol Software nutzen, so wie du es mit der von Homematic Software vor hast.
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 03:49 pm
Also hab das nun so:
Code: [Select]
#include "ClickButton.h"
#include <SPI.h>
#include <Ethernet.h>  
//ETHERNET-SETTINGS
byte mac[]     = { 0x5D, 0xA2, 0xFA, 0x2D, 0x36, 0x3C };    // MAC-Adresse des Arduino
byte ip[]      = { 192, 168, 178, 178 };                     // IP-Adresse des Arduino
byte gateway[] = { 192, 168, 178, 1 };                    // Gateway
byte subnet[]  = { 255, 255, 255, 0 };                    // SubNet
byte server[]  = { 192, 168, 178, 22 };                     // IP-Adresse des Servers
EthernetClient client;
char host[]    = "192.168.178.22";                      // Domain
char c;          


und hier:
Code: [Select]
if (client.connect(server, 45711)) // Verbindung zum Server aufbauen

taster an pin3 und die led an pin 8

leider tut sich nix,weder schaltet die led noch empfange ich was am server

EDIT:
keine verbindung möglich kommt nach einiger zeit
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 03:58 pm
byte gateway[] = { 192, 168, 178, 1 };    ist die adresse von deinem Router
byte ip[]      = { 192, 168, 178, 178 };   kannst du frei wählen muss aber im selben Netzwerk befinden wie der Router also 192, 168, 178,  muss bei beiden dann stimmen

Was sagt Serial Monitor?
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 04:05 pm
ok nun geht was :smiley-mr-green:

hier die serial ausgabe:
Code: [Select]
Ethernet initialisieren...<\r><\n>
Verbunden, Sende Daten...<\r><\n>
GET <\r><\n>
?LED1=8<\r><\n>
&ZUSTAND=0<\r><\n>
HTTP/1.1<\r><\n>
Host: 192.168.178.22<\r><\n>
User-Agent: Arduino<\r><\n>
Connection: close<\r><\n>
<\r><\n>
GetOk<\r><\n>
Done.<\r><\n>

Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 04:21 pm
leider sieht das beim server kaotisch aus,siehe anhang.

dort werden viele sachen gesendet,dabei soll aber nur ein "swebtaster1=an" oder "swebtaster1=aus" an den Server ankommen
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 04:29 pm
Sagt mir nix
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 04:32 pm
Also wenn taster gedrückt,dann senden wir mit dem code doch nicht nur den text "swebtaster1=an"
sondern noch vieles andere siehe server bild.
da sendest du die ip, usw.
damit kammt dann natürlich error am server,denn ein Objekt ip gibt es da nicht :D

es muss wirklich nur den text enthalten sonst nix!
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 04:38 pm
Dann also nur dass lassen was drin sein soll und zB sowas löschen:
Code: [Select]
    client.println(" HTTP/1.1");
    Serial.println(" HTTP/1.1");
    client.print("Host: " + String(host));
    Serial.print("Host: " + String(host));
    client.println();
    Serial.println();
    client.println("User-Agent: Arduino");
    Serial.println("User-Agent: Arduino");
    client.println("Connection: close");
    Serial.println("Connection: close");
    client.println();
    Serial.println();
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 04:40 pm
ja das was ankommen muss am server muss so aussehen:

Also nicht den zustand der led senden,sondern ja nach zustand der led den text
aslo:
- wenn led an=)senden "swebtaster2=an"
- wenn led aus=) senden "swebtaster2=aus"

nicht den zustand der led!
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 04:50 pm
und wie hast du dieses hinbekommen?
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 04:52 pm
das hier ist über die kommandozeile also vom pc aus nicht vom arduino
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 04:58 pm
Nunja, ich hab ein Mac und es gibt die Software nur für Fail bzw Win :D

Schmeiß mal eben vmware an und teste es direkt
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 05:00 pm
Erklär mal was man da installieren muss, wo wie wann
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 05:11 pm
aslo nimm zuerst die client server und die exe von da:
http://homematic-forum.de/downloads/ServerExecStudio/ (http://homematic-forum.de/downloads/ServerExecStudio/)

beides ins lauferk c: ablegen

Server und client haben beine ini dateien.
die client ini sieht so aus:
[
Code: [Select]
ClientExecStudio]
TcpIp_Port=54711
Server_Ip_Or_Name=192.168.178.22


ip und port kanntst du selber wählen.

die server ini sieht so aus:
Code: [Select]
[ServerExecStudio]
TcpIp_Port=54711
Password=

beides einstellbar, muss aber gleich sein in beiden inis.
.
somit startest du den server und das fenster für debug.

dann cmd und eigeben cd c:\
damit bist du ic:/
dann eigeben:
C:\clientexecstudio swebtaster2=an und enter

somit sollte im debug fenster dann natürlich der text mit nem error kommen,da du ja nicht sie Homeputersoft und das Objekt hast.aber zum testen reicht es :smiley-mr-green:
so dann starte den server,bekommst ein icon in der sidebar,rechtsklick dann auf monitor
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 05:13 pm
Und was hat es mit der Software zu tun?
http://www.contronics.de/download/cl-software.html?type=rss
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 05:17 pm
die contronicd kann eben nicht direkt über tcpip arbeiten,das geht nur mit der erweiterung dem  server tool
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 05:32 pm
Welche ip muss ich da eingeben, Arduino oder die vom pc?
Bekomme keine verbindung?
Wo kann man nachsehen welche ip der pc hat? beim mac weiß ichs
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 05:39 pm
also in dem server ini  nur den port eingeben des pc auf dem die exe halt liegt,ip bekommste unter
Start,verbinden mit,alle verbindungen anzeigen,dann rechtsklick auf verbindung dann haste die ip des pcs.

in der klientexe dann halt diese ip und den gleichen port
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 05:39 pm
Homeputer CL Studio hab ich drauf
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 05:42 pm
hier die cdm dann
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 05:44 pm
ja aber du hast noch keine objekte angelegt usw.

am besten ich bastel dir ne fertige testdatei
das dauert aber bischen ok
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 05:45 pm
jo mach das, bekomme immer noch keine verbindung
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 05:55 pm
so hier die testdatei
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 05:58 pm
OK, hab nun verbindung mit dem client und server.
Was soll ich nun mit der datei?
hab die geöffnet. Wo muss was eingestellt werden, ip, port zentrale
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 06:02 pm
also datei öffen mit der linken ecke in der soft, dann auf den zahnradsymbol in der homeputer klicken,somit öffnet die testdatei
wenn es geht sag bescheid
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 06:06 pm
Ja da steht als Projekt, testdatei
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 06:06 pm
ja und haste die 4 buttons im fenster?
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 06:10 pm
Nö.
Welches zahnradsymbol?
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 06:13 pm
also oben links projekt öffnen dann auf das symbol:


ok muss gleich zu arbeit leider,ansonsten morgen weiter wenn du zeit hast
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 06:22 pm
Hier mal ein bildchen


Code: [Select]
void Daten_senden(boolean T1, boolean T2)
{
  if (client.connect(server, 2110)) // Verbindung zum Server aufbauen
  {
    Serial.println("Verbunden, Sende Daten...");
    client.print("swebtaster=an");
    client.println();
  }
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 19, 2014, 07:16 pm
so vom Handy schnell,

also super sieht doch gut aus :D

mit dem klick auf das auge kanntat du die visualisierung öffnen da hast du dann die 4 taster sichtbar.
mit "gwebtaster" kanntst du nun den zustand auch abfragen :smiley-mr-green:

meld mich morgen weiter...
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 19, 2014, 07:19 pm
Für Homeputer CL Studio muss man wohl erst registrieren, hat mit dem Zahnrad Button nicht geklappt
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 20, 2014, 07:46 am
Morgen,
ok hier der link zum komplettem Paket :D
Homeputer.rar (http://www.file-upload.net/download-8535085/Homeputer.rar.html)

ich hoffe das geht mit dem runterladen....

Also das senden geht nun,auch wenn immer nur an gesendet wird,aber es geht
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 21, 2014, 08:36 am
Teste dies mal:

Code: [Select]
#include "ClickButton.h"
#include <SPI.h>
#include <Ethernet.h> 
//ETHERNET-SETTINGS
byte mac[]     = { 0x5D, 0xA2, 0xFA, 0x2D, 0x36, 0x7C };    // MAC-Adresse des Arduino
byte ip[]      = { 192, 168, 178, 178 };                     // IP-Adresse des Arduino
byte gateway[] = { 192, 168, 178, 1 };                    // Gateway
byte subnet[]  = { 255, 255, 255, 0 };                    // SubNet
byte server[]  = { 192, 168, 178, 2 };                     // IP-Adresse des Servers
EthernetClient client;
char host[]    = "192, 168, 178, 2 ";                      // Domain
                                                    // Variable für Rückgabe des Servers


// the LED
const int ledPin8 = 8;
const int ledPin9 = 9;


int ledState1 = 0;
int ledState2 = 0;
int ledState3 = 0;
int ledState4 = 0;


// the Button
const int buttonPin1 = 5;
ClickButton button1(buttonPin1, LOW, CLICKBTN_PULLUP);

const int buttonPin2 = 2;
ClickButton button2(buttonPin2, LOW, CLICKBTN_PULLUP);

const int buttonPin3 = 3;
ClickButton button3(buttonPin3, LOW, CLICKBTN_PULLUP);

const int buttonPin4 = 4;
ClickButton button4(buttonPin4, LOW, CLICKBTN_PULLUP);

// Arbitrary LED function
int LEDfunction = 0;


void setup()
{
  Serial.begin(9600);
  Serial.println("Ethernet initialisieren..."); 
  Ethernet.begin(mac, ip);
 
  pinMode(ledPin8,OUTPUT); 
  pinMode(ledPin9,OUTPUT); 


  // Setup button timers (all in milliseconds / ms)
  // (These are default if not set, but changeable for convenience)
  button1.debounceTime   = 20;   // Debounce timer in ms
   button2.debounceTime   = 20;   // Debounce timer in ms
    button3.debounceTime   = 20;   // Debounce timer in ms
     button4.debounceTime   = 20;   // Debounce timer in ms

}


void loop()
{
  // Update button state
  button1.Update();
  // Save click codes in LEDfunction, as click codes are reset at next Update()
  if (button1.clicks != 0) LEDfunction = button1.clicks;


  // Simply toggle LED on single clicks
  // (Cant use LEDfunction like the others here,
  //  as it would toggle on and off all the time)
  if(button1.clicks == 1)
  {
    ledState1 = !ledState1;
    if (client.connect(server, 2110)) // Verbindung zum Server aufbauen
        {
          Serial.println("Verbunden, Sende Daten...");
     if(ledState1 == 1) {
     client.print("webtaster1=an");
     Serial.print("webtaster1=an");
     Serial.print(ledState1);
     }
      else {
      client.print("webtaster1=aus");
      Serial.print("webtaster1=aus");
     Serial.print(ledState1); 
      }
     }
     client.stop();
}

if(button2.clicks == 1)
  {
    ledState2 = !ledState2;
   

if(button3.clicks == 1)
  {
    ledState3 = !ledState3;
   


if(button4.clicks == 1)
  {
    ledState4 = !ledState4;
   

}


  // update the LED
  digitalWrite(ledPin8,ledState1);
  digitalWrite(ledPin9,ledState2);


}
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 21, 2014, 05:34 pm
Abend,
also laut serialausgabe sieht es gut aus,sehe auch an den Lan shield leds das es was sendet,aber obwohl Port und Ip korrekt ist kommt am server nichts an :-(

Ich kann leider keinen unterschied zu dem coder der zumindest sendet un der server es bekommt erkennen :|
Code: [Select]
#include <ClickButton.h>
#include <SPI.h>
#include <Ethernet.h>  
//ETHERNET-SETTINGS
byte mac[]     = { 0x5D, 0xA2, 0xFA, 0x2D, 0x36, 0x3C };                    // MAC-Adresse des Arduino
byte ip[]      = { 192, 168, 178, 178 };                                    // IP-Adresse des Arduino
byte gateway[] = { 192, 168, 178, 1 };                                      // Gateway
byte subnet[]  = { 255, 255, 255, 0 };                                      // SubNet
byte server[]  = { 192, 168, 178, 22 };                                     // IP-Adresse des Servers
EthernetClient client;
char host[]    = "192.168.178.22";                                          // Domain
char c;          

const int ledPin = 8;                                                       // LED1 Pin
int ledState = 0;                                                           // Variable led1


const int buttonPin1 = 3;                                                   // Taster1
ClickButton button1(buttonPin1, LOW, CLICKBTN_PULLUP);                      // ButtonPin Pullup aktivieren

int LEDfunction = 0;                                                        // Arbitrary LED function
//===============================SETUP==================================
void setup()
{
delay(100);
 Serial.begin(9600);
 Serial.flush();
 delay(200);
 Serial.println("Ethernet initialisieren...");                             // Debug Serial
 Ethernet.begin(mac, ip);                                                  // Ethernet Initialisieren

 delay(1000);
 pinMode(ledPin,OUTPUT);                                                   // Led Pin als Ausgang deffinieren
 button1.debounceTime   = 0;                                               // Debounce time
}
//===============================LOOP===================================
void loop()
{
 
 button1.Update();                                                         // Update Taster Zustand
 if (button1.clicks != 0) LEDfunction = button1.clicks;                    // speichere tasterklick in LEDfunction
 if(button1.clicks == 1)                                                   // Toggle beim klick
 {
   ledState = !ledState;
   
  Daten_senden1(ledState,ledState);
   //delay(70);

 byte maxReads = 10;                                                       //Seconds
 while ((maxReads-- > 0) && client.connected())                            // Antwort des Servers lesen
 {
   //delay(1000);                                                            // Verzögerung für Empfang
   while (client.available())
   {
     char response = client.read();
     Serial.print(response);
   }
 }
 client.stop();                                                           // Client STOP
 Serial.println("Done.");                                                 // Debug Serial
 client.flush();
}
 digitalWrite(ledPin,ledState);
}
/******************************
                             *
 Daten an Server schickenn   *
                             *
*******************************/
void Daten_senden1(boolean T1, boolean T2)
{
 if (client.connect(server, 54711))                                       // Verbindung zum Server aufbauen
 {
   Serial.println("Verbunden,Sende Daten...");                           // Debug Serial
   client.print("swebtaster2=an");                                        // Inhalt vom Text
   client.println();                                                      // Textsenden
 }
 else
 {
   Serial.println("*VERBINDUNG KANN NICHT HERGESTELLT WERDEN*");        // Debug Serial
 }
}


Wie gesagt hier funktioniert  zwar das mit dem taster und der led nicht so ganz,jedoch das senden an den server geht.

Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 21, 2014, 05:41 pm
client.println();      


Füge dieses mal hinzu
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 21, 2014, 05:54 pm
und an welcher stelle? :smiley-sad-blue:
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 21, 2014, 06:04 pm
Code: [Select]
client.print("webtaster1=an");
    [b]client.println();[/b]
    Serial.print("webtaster1=an");
    Serial.print(ledState1);
   
    }
     else {
     client.print("webtaster1=aus");
     [b]client.println();[/b]
     Serial.print("webtaster1=aus");
    Serial.print(ledState1);  
     }


   

prima nungeht es Danke
Title: Re: Web client mit Taster und LED
Post by: skorpi080 on Jan 21, 2014, 06:38 pm
Es funktioniert auch wenn du das ln anfügst, also so:
client.println("webtaster1=an");

das brauchst du dann nicht mehr:
client.println();
Title: Re: Web client mit Taster und LED
Post by: Haustechno on Jan 21, 2014, 06:45 pm
ok
Besten DANK! ;)

EDIT:
siehe Anhang