Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Arduino und RestfulAPI

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    945

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    690

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

Arduino und RestfulAPI

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
communication
11 Beiträge 2 Kommentatoren 824 Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • ThisoftT Thisoft

    Hallo zusammen,

    ich habe einen Arduino der mir mittels eines Ultraschallsensors einen Füllstand misst. Diesen möchte ich jetzt gern an ioBroker übermitteln und wollte dafür die RestfulAPI verwenden. Allerdings scheitere ich bisher daran wie ich das im Arduino-Code schreiben muss :-( Hier mein momentaner Versuch:

    #include <ArduinoHttpClient.h>
    
    EthernetClient client;
    HttpClient http = HttpClient(client,IPString,8087); 
    String contentType = "application/x-www-form-urlencoded";       
    String postData;   
       
    postData = "?value=" + IPString;
    http.post("/set/javascript.1.Regenwasser.RegentankDuino.IP", contentType, postData);
            int statusCode = http.responseStatusCode();
            String response = http.responseBody();
    
            Serial.print("Status code: ");
            Serial.println(statusCode);
            Serial.print("Response: ");
            Serial.println(response);
    
    

    Ich erhalte da aber immer nur einen StatusCode -2 zurück. Habe auch schon verschiedene Varianten im POST und auch mal mit GET versucht und komme nicht drauf was dieser ArduinoHttpClient da von mir haben will.
    Wäre toll wenn mir da jemand weiterhelfen könnte.

    Danke schon mal.

    M Online
    M Online
    MCU
    schrieb am zuletzt editiert von
    #2

    @thisoft Was steht denn im IPString?

    NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
    Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

    ThisoftT 1 Antwort Letzte Antwort
    0
    • M MCU

      @thisoft Was steht denn im IPString?

      ThisoftT Offline
      ThisoftT Offline
      Thisoft
      schrieb am zuletzt editiert von
      #3

      @mcu Im IPString steht die IP-Adresse - ist doch aber eigentlich auch egal solange eben irgend welche Zeichen drinstehen - oder?

      String IPString = "192.168.137.30";
      

      22 HM-Geräte; PivCCU2 auf RasPi

      ioBroker-Multihost; Ubuntu-Master auf Intel-Atom und 3 RasPi-Clients

      M 1 Antwort Letzte Antwort
      0
      • ThisoftT Thisoft

        @mcu Im IPString steht die IP-Adresse - ist doch aber eigentlich auch egal solange eben irgend welche Zeichen drinstehen - oder?

        String IPString = "192.168.137.30";
        
        M Online
        M Online
        MCU
        schrieb am zuletzt editiert von MCU
        #4

        @thisoft Wenn ich es richtig verstehe, möchtest du die IP von deinem Ardunio an ioBroker senden über simpleApi?
        https://github.com/amcewen/HttpClient/blob/master/examples/SimpleHttpExample/SimpleHttpExample.ino
        Nach dem Beispiel würde es ausreichen, wenn http.get genutzt wird (192.168.178.80 Beispiel musst du mit Deiner ioBroker-IP ersetzen)

        EthernetClient client;
        HttpClient http(client); 
        String postData;   
        String IPString = '192.168.178.30';
        postData = "?value=" + IPString;
        err = http.get('192.168.178.80:8087', '/set/javascript.1.Regenwasser.RegentankDuino.IP'+postData);
        if (err = 0)
        {
          Serial.print("Connect ok Data send");
        }
        else
        {
         Serial.print("Connect failed: ");
         Serial.println(err);
        }
        http.stop();
        

        NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
        Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

        ThisoftT 1 Antwort Letzte Antwort
        0
        • M MCU

          @thisoft Wenn ich es richtig verstehe, möchtest du die IP von deinem Ardunio an ioBroker senden über simpleApi?
          https://github.com/amcewen/HttpClient/blob/master/examples/SimpleHttpExample/SimpleHttpExample.ino
          Nach dem Beispiel würde es ausreichen, wenn http.get genutzt wird (192.168.178.80 Beispiel musst du mit Deiner ioBroker-IP ersetzen)

          EthernetClient client;
          HttpClient http(client); 
          String postData;   
          String IPString = '192.168.178.30';
          postData = "?value=" + IPString;
          err = http.get('192.168.178.80:8087', '/set/javascript.1.Regenwasser.RegentankDuino.IP'+postData);
          if (err = 0)
          {
            Serial.print("Connect ok Data send");
          }
          else
          {
           Serial.print("Connect failed: ");
           Serial.println(err);
          }
          http.stop();
          
          ThisoftT Offline
          ThisoftT Offline
          Thisoft
          schrieb am zuletzt editiert von
          #5

          @mcu Ja das verstehst du richtig. Wobei die IP jetzt nur erstmal zum Testen ist.
          Du hast mir auf jeden Fall erstmal weitergeholfen indem der von dir verlinkte HttpClient mir schon mal wesentlich besser zusagt als der "ArduinoHttpClient" den ich da bisher im Einsatz hatte.
          Im Prinzip klappt das wie in deinem Beispiel angegeben. Allerdings bekomme ich immer nur eine -1 in err, also "keine Verbindung" wenn ich das richtig sehe. Die Ethernet-Verbindung steht aber, zumindest kann ich über den EthernetClient erfolgreich eine MQTT-Verbindung aufbauen. Ebenso hab ich den API-Aufrufstring erfolgreich im Browser getestet.
          Ich bin im Moment etwas ratlos und mach für heute erstmal Schluss. Vielleicht habe ich ja morgen den Geistesblitz... oder du siehst meinen Fehler... :-)

          22 HM-Geräte; PivCCU2 auf RasPi

          ioBroker-Multihost; Ubuntu-Master auf Intel-Atom und 3 RasPi-Clients

          M 1 Antwort Letzte Antwort
          0
          • ThisoftT Thisoft

            @mcu Ja das verstehst du richtig. Wobei die IP jetzt nur erstmal zum Testen ist.
            Du hast mir auf jeden Fall erstmal weitergeholfen indem der von dir verlinkte HttpClient mir schon mal wesentlich besser zusagt als der "ArduinoHttpClient" den ich da bisher im Einsatz hatte.
            Im Prinzip klappt das wie in deinem Beispiel angegeben. Allerdings bekomme ich immer nur eine -1 in err, also "keine Verbindung" wenn ich das richtig sehe. Die Ethernet-Verbindung steht aber, zumindest kann ich über den EthernetClient erfolgreich eine MQTT-Verbindung aufbauen. Ebenso hab ich den API-Aufrufstring erfolgreich im Browser getestet.
            Ich bin im Moment etwas ratlos und mach für heute erstmal Schluss. Vielleicht habe ich ja morgen den Geistesblitz... oder du siehst meinen Fehler... :-)

            M Online
            M Online
            MCU
            schrieb am zuletzt editiert von MCU
            #6

            @thisoft lt. Beschreibung:

            int get(const char* aServerName, uint16_t aServerPort, const char* aURLPath, 
                        const char* aUserAgent =NULL)
            

            versuch mal den get anders:

            EthernetClient client;
            HttpClient http(client); 
            String postData;   
            String IPString = '192.168.178.30';
            postData = "?value=" + IPString;
            err = http.get('192.168.178.80',8087, '/set/javascript.1.Regenwasser.RegentankDuino.IP'+postData,'');
            if (err = 0)
            {
              Serial.print("Connect ok Data send");
            }
            else
            {
             Serial.print("Connect failed: ");
             Serial.println(err);
            }
            http.stop();
            
            

            Mit WiFi hab ich es hinbekommen, EthernetClient nicht im Einsatz.
            Hab es nur mit #include <ESP8266WiFi.h> gemacht auf einem D1 Mini.

            #include <ESP8266WiFi.h>
            const char ssid[] = "DeineWLANSSID";
            const char pass[] = "DeinWLANPasswort";
            int werteCount = 0;
            //IPAddress server(74,125,232,128);  // numeric IP for Google (no DNS)
            IPAddress server(192, 168, 178, 89); // ioBroker
            //char server[] = "www.google.com";    // name address for Google (using DNS)
            
            WiFiClient client;
            
            void printWiFiStatus() {
              Serial.print("SSID: ");
              Serial.println(WiFi.SSID());
              IPAddress ip = WiFi.localIP();
              Serial.print("IP Address: ");
              Serial.println(ip);
              long rssi = WiFi.RSSI();
              Serial.print("signal strength (RSSI):");
              Serial.print(rssi);
              Serial.println(" dBm");
            }
            
            
            void setup() {
              Serial.begin(115200);
              WiFi.begin(ssid, pass);
              while (WiFi.status() != WL_CONNECTED) {
                  Serial.print(".");
                  delay(1000);
                }
              Serial.println("Connected to wifi");
              printWiFiStatus();
            
              Serial.println("\nStarting connection to server...");
              if (client.connect(server, 8087)) {
                Serial.println("connected to server");
                // Make a HTTP request:
                client.println("GET /set/0_userdata.0.Power1?value=20 HTTP/1.1");
                client.println("Connection: close");
                client.println();
                client.stop();
              }
            }
            
            void loop() {
              delay(10000);
              if (client.connect(server, 8087)) {
                Serial.println("connected to server");
                // Make a HTTP request:
                werteCount++;
                //String Senden ="GET /set/0_userdata.0.Power1?value=" + werteCount + " HTTP/1.1";
                //sprintf(senden,"GET /set/0_userdata.0.Power1?value=%i HTTP/1.1",werteCount);
                String Senden = "GET /set/0_userdata.0.Power1?value=" + String(werteCount) + " HTTP/1.1";
                client.println(Senden);
                //client.println("Host: www.google.com");
                client.println("Connection: close");
                client.println();
                Serial.println("Daten wurde gesendet");
                client.stop();
              }
            }
            

            NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
            Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

            ThisoftT 1 Antwort Letzte Antwort
            0
            • M MCU

              @thisoft lt. Beschreibung:

              int get(const char* aServerName, uint16_t aServerPort, const char* aURLPath, 
                          const char* aUserAgent =NULL)
              

              versuch mal den get anders:

              EthernetClient client;
              HttpClient http(client); 
              String postData;   
              String IPString = '192.168.178.30';
              postData = "?value=" + IPString;
              err = http.get('192.168.178.80',8087, '/set/javascript.1.Regenwasser.RegentankDuino.IP'+postData,'');
              if (err = 0)
              {
                Serial.print("Connect ok Data send");
              }
              else
              {
               Serial.print("Connect failed: ");
               Serial.println(err);
              }
              http.stop();
              
              

              Mit WiFi hab ich es hinbekommen, EthernetClient nicht im Einsatz.
              Hab es nur mit #include <ESP8266WiFi.h> gemacht auf einem D1 Mini.

              #include <ESP8266WiFi.h>
              const char ssid[] = "DeineWLANSSID";
              const char pass[] = "DeinWLANPasswort";
              int werteCount = 0;
              //IPAddress server(74,125,232,128);  // numeric IP for Google (no DNS)
              IPAddress server(192, 168, 178, 89); // ioBroker
              //char server[] = "www.google.com";    // name address for Google (using DNS)
              
              WiFiClient client;
              
              void printWiFiStatus() {
                Serial.print("SSID: ");
                Serial.println(WiFi.SSID());
                IPAddress ip = WiFi.localIP();
                Serial.print("IP Address: ");
                Serial.println(ip);
                long rssi = WiFi.RSSI();
                Serial.print("signal strength (RSSI):");
                Serial.print(rssi);
                Serial.println(" dBm");
              }
              
              
              void setup() {
                Serial.begin(115200);
                WiFi.begin(ssid, pass);
                while (WiFi.status() != WL_CONNECTED) {
                    Serial.print(".");
                    delay(1000);
                  }
                Serial.println("Connected to wifi");
                printWiFiStatus();
              
                Serial.println("\nStarting connection to server...");
                if (client.connect(server, 8087)) {
                  Serial.println("connected to server");
                  // Make a HTTP request:
                  client.println("GET /set/0_userdata.0.Power1?value=20 HTTP/1.1");
                  client.println("Connection: close");
                  client.println();
                  client.stop();
                }
              }
              
              void loop() {
                delay(10000);
                if (client.connect(server, 8087)) {
                  Serial.println("connected to server");
                  // Make a HTTP request:
                  werteCount++;
                  //String Senden ="GET /set/0_userdata.0.Power1?value=" + werteCount + " HTTP/1.1";
                  //sprintf(senden,"GET /set/0_userdata.0.Power1?value=%i HTTP/1.1",werteCount);
                  String Senden = "GET /set/0_userdata.0.Power1?value=" + String(werteCount) + " HTTP/1.1";
                  client.println(Senden);
                  //client.println("Host: www.google.com");
                  client.println("Connection: close");
                  client.println();
                  Serial.println("Daten wurde gesendet");
                  client.stop();
                }
              }
              
              ThisoftT Offline
              ThisoftT Offline
              Thisoft
              schrieb am zuletzt editiert von
              #7

              @mcu Vielen Dank für Deine Bemühungen!

              Ich hatte gestern nur wenig Zeit, aber dein erster Vorschlag hat so auch nicht funktioniert.

              Der Weg mit dem ESP-WiFi dürfte funktionieren. Das habe ich mit einem ESP auch schon mal so realisiert. Allerdings will ich bei diesem Projekt explizit einen Arduino mit LAN-Verbindung verwenden da ich den LAN-Anschluss dort zur Verfügung habe und WLAN soweit möglich vermeiden möchte.

              Das kann doch eigentlich gar nicht so schwierig sein - vermutlich übersehe ich nur irgend eine Kleinigkeit...

              22 HM-Geräte; PivCCU2 auf RasPi

              ioBroker-Multihost; Ubuntu-Master auf Intel-Atom und 3 RasPi-Clients

              M 1 Antwort Letzte Antwort
              0
              • ThisoftT Thisoft

                @mcu Vielen Dank für Deine Bemühungen!

                Ich hatte gestern nur wenig Zeit, aber dein erster Vorschlag hat so auch nicht funktioniert.

                Der Weg mit dem ESP-WiFi dürfte funktionieren. Das habe ich mit einem ESP auch schon mal so realisiert. Allerdings will ich bei diesem Projekt explizit einen Arduino mit LAN-Verbindung verwenden da ich den LAN-Anschluss dort zur Verfügung habe und WLAN soweit möglich vermeiden möchte.

                Das kann doch eigentlich gar nicht so schwierig sein - vermutlich übersehe ich nur irgend eine Kleinigkeit...

                M Online
                M Online
                MCU
                schrieb am zuletzt editiert von
                #8

                @thisoft Hier noch ein anderes Beispiel

                /*
                 * Created by ArduinoGetStarted.com
                 *
                 * This example code is in the public domain
                 *
                 * Tutorial page: https://arduinogetstarted.com/tutorials/arduino-http-request
                 */
                
                #include <SPI.h>
                #include <Ethernet.h>
                
                // replace the MAC address below by the MAC address printed on a sticker on the Arduino Shield 2
                byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
                
                EthernetClient client;
                
                int    HTTP_PORT   = 8087;
                String HTTP_METHOD = "GET";
                char   HOST_NAME[] = "192.168.178.80";
                String PATH_NAME   = "/set/0_userdata.0.Power0";
                String queryString = "?value=70";;
                
                void setup() {
                  Serial.begin(9600);
                
                  // initialize the Ethernet shield using DHCP:
                  if (Ethernet.begin(mac) == 0) {
                    Serial.println("Failed to obtaining an IP address using DHCP");
                    while(true);
                  }
                
                  // connect to web server on port 80:
                  if(client.connect(HOST_NAME, HTTP_PORT)) {
                    // if connected:
                    Serial.println("Connected to server");
                    // make a HTTP request:
                    // send HTTP header
                    client.println(HTTP_METHOD + " " + PATH_NAME + queryString + " HTTP/1.1");
                    client.println("Host: " + String(HOST_NAME));
                    client.println("Connection: close");
                    client.println(); // end HTTP header
                
                    // send HTTP body
                    //client.println(queryString);
                
                    while(client.connected()) {
                      if(client.available()){
                        // read an incoming byte from the server and print it to serial monitor:
                        char c = client.read();
                        Serial.print(c);
                      }
                    }
                
                    // the server's disconnected, stop the client:
                    client.stop();
                    Serial.println();
                    Serial.println("disconnected");
                  } else {// if not connected:
                    Serial.println("connection failed");
                  }
                }
                
                void loop() {
                
                }
                
                

                NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
                Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

                ThisoftT 1 Antwort Letzte Antwort
                1
                • M MCU

                  @thisoft Hier noch ein anderes Beispiel

                  /*
                   * Created by ArduinoGetStarted.com
                   *
                   * This example code is in the public domain
                   *
                   * Tutorial page: https://arduinogetstarted.com/tutorials/arduino-http-request
                   */
                  
                  #include <SPI.h>
                  #include <Ethernet.h>
                  
                  // replace the MAC address below by the MAC address printed on a sticker on the Arduino Shield 2
                  byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
                  
                  EthernetClient client;
                  
                  int    HTTP_PORT   = 8087;
                  String HTTP_METHOD = "GET";
                  char   HOST_NAME[] = "192.168.178.80";
                  String PATH_NAME   = "/set/0_userdata.0.Power0";
                  String queryString = "?value=70";;
                  
                  void setup() {
                    Serial.begin(9600);
                  
                    // initialize the Ethernet shield using DHCP:
                    if (Ethernet.begin(mac) == 0) {
                      Serial.println("Failed to obtaining an IP address using DHCP");
                      while(true);
                    }
                  
                    // connect to web server on port 80:
                    if(client.connect(HOST_NAME, HTTP_PORT)) {
                      // if connected:
                      Serial.println("Connected to server");
                      // make a HTTP request:
                      // send HTTP header
                      client.println(HTTP_METHOD + " " + PATH_NAME + queryString + " HTTP/1.1");
                      client.println("Host: " + String(HOST_NAME));
                      client.println("Connection: close");
                      client.println(); // end HTTP header
                  
                      // send HTTP body
                      //client.println(queryString);
                  
                      while(client.connected()) {
                        if(client.available()){
                          // read an incoming byte from the server and print it to serial monitor:
                          char c = client.read();
                          Serial.print(c);
                        }
                      }
                  
                      // the server's disconnected, stop the client:
                      client.stop();
                      Serial.println();
                      Serial.println("disconnected");
                    } else {// if not connected:
                      Serial.println("connection failed");
                    }
                  }
                  
                  void loop() {
                  
                  }
                  
                  
                  ThisoftT Offline
                  ThisoftT Offline
                  Thisoft
                  schrieb am zuletzt editiert von
                  #9

                  @mcu Super, das funktioniert :-) Du bist mein Held! Danke! Und was mir am Besten daran gefällt ist dass man keinerlei zusätzliche Lib o.ä. braucht.

                  Allerdings kommt da jetzt gleich meine nächste Frage ;-), kann man jetzt über die RestfulAPI auch was an den Arduino senden? Also so dass man innerhalb des "if(client.available())" darauf reagieren könnte?

                  22 HM-Geräte; PivCCU2 auf RasPi

                  ioBroker-Multihost; Ubuntu-Master auf Intel-Atom und 3 RasPi-Clients

                  M 1 Antwort Letzte Antwort
                  0
                  • ThisoftT Thisoft

                    @mcu Super, das funktioniert :-) Du bist mein Held! Danke! Und was mir am Besten daran gefällt ist dass man keinerlei zusätzliche Lib o.ä. braucht.

                    Allerdings kommt da jetzt gleich meine nächste Frage ;-), kann man jetzt über die RestfulAPI auch was an den Arduino senden? Also so dass man innerhalb des "if(client.available())" darauf reagieren könnte?

                    M Online
                    M Online
                    MCU
                    schrieb am zuletzt editiert von
                    #10

                    @thisoft Reicht es nicht, wenn du im loop mit getPlainvalue abfragst "Soll ich was holen?"
                    Oder halt direkt die Werte abfragen, die du holen willst.

                    https://github.com/ioBroker/ioBroker.simple-api

                    NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
                    Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

                    ThisoftT 1 Antwort Letzte Antwort
                    0
                    • M MCU

                      @thisoft Reicht es nicht, wenn du im loop mit getPlainvalue abfragst "Soll ich was holen?"
                      Oder halt direkt die Werte abfragen, die du holen willst.

                      https://github.com/ioBroker/ioBroker.simple-api

                      ThisoftT Offline
                      ThisoftT Offline
                      Thisoft
                      schrieb am zuletzt editiert von
                      #11

                      @mcu Ja, du hast schon recht, das reicht auch.

                      Vielen Dank nochmal.

                      22 HM-Geräte; PivCCU2 auf RasPi

                      ioBroker-Multihost; Ubuntu-Master auf Intel-Atom und 3 RasPi-Clients

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      787

                      Online

                      32.6k

                      Benutzer

                      82.0k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe