INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
nur ein URL aufruf ohne PHP
29.03.2016, 16:46 (Dieser Beitrag wurde zuletzt bearbeitet: 29.03.2016 19:43 von toto1975.)
Beitrag #1
nur ein URL aufruf ohne PHP
Hallo in die Runde,

ich habe mir ein Ethernet Shield zugelegt um damit eine Verbindung zu mein OpenHab-System zu bekommen. Die Daten können mit einen einfachen Aufruf einer URL an OpenHAB übergeben werden z.B.:

Code:
curl --header "Content-Type: text/plain" --request POST --data "ON" http://Benutzer:Passwort.@192.168.192.58:8080 /rest/items/Monitor


Wie kann ich dies mit dem Arduino inkl. Ethernet Shield machen?

Ich habe bis jetzt nur Beispiele gefunden wie ich Daten per Get an einen Webserver übergeben kann.

Gibt es eine Seite (wenn möglich in deutsch) wo so etwas gut beschrieben ist?

Viele Grüße
Torsten

Kurzes Update

mit folgenden Code kann ich eine Verbindung aufbauen:
Code:
#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
  0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01 };

//byte mac[] =   {0xf0, 0x1f, 0xaf, 0x33, 0x62, 0x2f };

IPAddress ip(192,168,192,7);

// initialize the library instance:
EthernetClient client;

char server[] = "192.168.192.58";

double dummyValue = 7.5;

void setup()
{
  Serial.begin(9600);

  // attempt a DHCP connection:
  Serial.println("Attempting to get an IP address using DHCP:");
  if (!Ethernet.begin(mac)) {
    // if DHCP fails, start with a hard-coded address:
    Serial.println("failed to get an IP address using DHCP, trying manually");
    Ethernet.begin(mac, ip);
  }

  Serial.print("My address:");
  Serial.println(Ethernet.localIP());
}

void loop()
{
    // connect to the server
    if (client.connect(server, 8080))
    {
        // print to serial monitor
        Serial.println("connected...");
        Serial.println("ARDUINO: forming HTTP request message");

        // send data the server through GET request
        client.print("GET /rest/items/Monitor/state");
        client.print("");
        client.println(" HTTP/1.1");
        client.print("HOST: ");
        client.println(server);
        client.println();

        Serial.println("ARDUINO: HTTP message sent");        

        // give server some time to receive and store data
        // before asking for response from it
        delay(1000);

        // get the response from the page and print it to serial port
        // to ascertain that data was received properly
        if(client.available())
        {
            Serial.println("ARDUINO: HTTP message received");
            Serial.println("ARDUINO: printing received headers and script response...\n");

            while(client.available())
            {
                char c = client.read();
                Serial.print(c);
            }
        }
        else
        {
            Serial.println("ARDUINO: no response received / no response received in time");
        }

        client.stop();
    }
    // do nothing forever after:
    while(true);
}

Auf dem Seriellen Monitor bekomme ich nun folgende Ausgabe:
Code:
Attempting to get an IP address using DHCP:
My address:192.168.192.7
connected...
ARDUINO: forming HTTP request message
ARDUINO: HTTP message sent
ARDUINO: HTTP message received
ARDUINO: printing received headers and script response...

HTTP/1.1 200 OK
Date: Tue, 29 Mar 2016 18:34:26 GMT
X-Atmosphere-first-request: true
X-Atmosphere-tracking-id: 76491880-a124-4230-b004-e3601277a7d6
Expires: -1
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Content-Type: text/plain
Transfer-Encoding: chunked
Server: Jetty(8.1.3.v20120522)

3
OFF
0

Was auch schon mal passt Smile

Allerdings ist es mir noch nicht gelungen einen Wert "zu übergeben". OpenHab bietet dazu mehrere Möglichkeiten an: https://github.com/openhab/openhab/wiki/Samples-REST

Mit folgenden Code bekomme ich immer folgenden Fehler
Code:
client.print("POST /rest/items/Monitor/");
        client.print("ON");
        client.println(" HTTP/1.1");
        client.print("HOST: ");
        client.println(server);
        client.println();

Code:
Attempting to get an IP address using DHCP:
My address:192.168.192.7
connected...
ARDUINO: forming HTTP request message
ARDUINO: HTTP message sent
ARDUINO: HTTP message received
ARDUINO: printing received headers and script response...

HTTP/1.1 404 Not Found
Date: Tue, 29 Mar 2016 18:42:38 GMT
X-Atmosphere-first-request: true
X-Atmosphere-tracking-id: ac4f6f03-43d0-4fda-8741-629005fbdaa8
Expires: -1
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Content-Length: 0
Server: Jetty(8.1.3.v20120522)

Hat hier noch einer Idee wie ich einen Wert übergeben kann? Abfragen funktioniert ja

Danke und Gruß
Torsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.03.2016, 13:52
Beitrag #2
RE: nur ein URL aufruf ohne PHP
versuche doch die Beispiele aus dem Arduino Playground:

http://playground.arduino.cc/Code/WebClient

Du hast die POST Daten wenn ich es richtig gesehen habe in deinem Test nicht an die richtige Stelle im HTTP Aufruf gepackt.

Müsste so aussehen:

Code:
POST /rest/items/Monitor/
HTTP/1.1
Host: www.wasweissich.de
ON
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.04.2016, 22:14
Beitrag #3
RE: nur ein URL aufruf ohne PHP
Hallo,

ich habe den Fehler endlich gefunden... Es war der Link zu meinen OpenHAB System
"GET /CMD?Monitor=ON;" ist richtig.

Code:
// send data the server through GET request
        client.print(GET /CMD?Monitor=ON);
        client.print("");
        client.println(" HTTP/1.1");
        client.print("HOST: ");
        client.println(server);
        client.println();

        Serial.println("ARDUINO: HTTP message sent");        

        // give server some time to receive and store data
        // before asking for response from it
        delay(200);
        client.stop();
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.04.2016, 08:26
Beitrag #4
RE: nur ein URL aufruf ohne PHP
gut das es jetzt klappt.
Ich habe auch gerade angefangen mich mit OpenHAB zu beschäftigen und bereite gerade einen Pi als Server vor -- hast Du auch schon mal Steuerkommandos von OpenHAB aus zu Arduino probiert?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  PID ohne Library MeisterQ 5 534 01.05.2016 09:23
Letzter Beitrag: MeisterQ
  Rampe ohne Delay DC-Motor de_flexus 3 1.946 22.11.2015 13:07
Letzter Beitrag: frank2000
  Doppelblitz ohne Delay cleko 3 864 12.11.2015 08:02
Letzter Beitrag: Bitklopfer
  LED ohne Brightnes Mathias 2 465 21.10.2015 16:33
Letzter Beitrag: Mathias
  mal wieder ein kleines Problem mit blinken ohne delay :) Sbbfreack 6 1.734 06.07.2015 15:59
Letzter Beitrag: Sbbfreack
  Hilfe Möchte meinen schritt Motor ohne mastermann7 4 1.028 09.06.2015 14:28
Letzter Beitrag: fraju
  Arduino / ATtiny Uhrzeit ohne RTC und LCD - geht das? Gelegenheitsbastler 6 1.901 12.05.2015 11:42
Letzter Beitrag: itsy
  Blink ohne Delay - Merkwürdiger Fehler rave 7 1.837 11.05.2015 06:29
Letzter Beitrag: Bitklopfer
  Neuen Sketch aufspielen ohne aktuellen Sketch zu starten Trisher 11 1.873 02.03.2015 22:18
Letzter Beitrag: Trisher
  Suche Beispiel für je einmal ausgeführte Unterprogramme mit Aufruf durch Tasten Marlox 42 6.615 28.12.2014 22:49
Letzter Beitrag: Marlox

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste