Go Down

Topic: Web client mit Taster und LED (Read 17286 times) previous topic - next topic

Haustechno

#15
Jan 19, 2014, 12:13 pm Last Edit: Jan 19, 2014, 01:15 pm by Haustechno Reason: 1
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

skorpi080

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 *****");
  }
}

playground.arduino.cc/PmWiki/433Mhz-Funkmodule
[Arduino IDE] Feinheiten und Tricks  forum.arduino.cc/index.php?topic=632403.0

skorpi080

#17
Jan 19, 2014, 01:30 pm Last Edit: Jan 19, 2014, 01:38 pm by skorpi08 Reason: 1
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
playground.arduino.cc/PmWiki/433Mhz-Funkmodule
[Arduino IDE] Feinheiten und Tricks  forum.arduino.cc/index.php?topic=632403.0

Haustechno

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€

skorpi080

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
playground.arduino.cc/PmWiki/433Mhz-Funkmodule
[Arduino IDE] Feinheiten und Tricks  forum.arduino.cc/index.php?topic=632403.0

Haustechno

#20
Jan 19, 2014, 02:01 pm Last Edit: Jan 19, 2014, 02:05 pm by Haustechno Reason: 1
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:

skorpi080

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

playground.arduino.cc/PmWiki/433Mhz-Funkmodule
[Arduino IDE] Feinheiten und Tricks  forum.arduino.cc/index.php?topic=632403.0

Haustechno

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:

skorpi080

Was ist das für eine Software?
Was ist das für ein Server?
Woher kennst du die klartext Befehle?
playground.arduino.cc/PmWiki/433Mhz-Funkmodule
[Arduino IDE] Feinheiten und Tricks  forum.arduino.cc/index.php?topic=632403.0

Haustechno

Also,
die software ist Homeputerstudio von der firma Contronics:
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/

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

Haustechno

also kann ich auch später eigene Sensoren und Aktoren damit realisieren mit arduino :smiley-mr-green:

skorpi080

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
playground.arduino.cc/PmWiki/433Mhz-Funkmodule
[Arduino IDE] Feinheiten und Tricks  forum.arduino.cc/index.php?topic=632403.0

skorpi080

playground.arduino.cc/PmWiki/433Mhz-Funkmodule
[Arduino IDE] Feinheiten und Tricks  forum.arduino.cc/index.php?topic=632403.0

Haustechno

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

Haustechno

leider kenn ich das system nicht,aber alles was mit knx zu tuen hat ist eigentlich teuer und kompliziert :(

Go Up