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. Hardware
  4. ESP8266 an ioBroker Adapter über Simple.api

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.6k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.1k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    2.8k

ESP8266 an ioBroker Adapter über Simple.api

Geplant Angeheftet Gesperrt Verschoben Hardware
24 Beiträge 9 Kommentatoren 6.9k Aufrufe 7 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.
  • TomTT Offline
    TomTT Offline
    TomT
    schrieb am zuletzt editiert von
    #4

    Ich hab auch keine Idee, wie man den ACK setzt. Die Werte werden allerdings aktualisiert, also beachte ich die roten Zahlen einfach nicht.

    Die Einheiten kannst du setzen, wenn du das Objekt anlegst.

    Im 2. Fenster steht ganz unten UNIT, da trägst du die ein.

    Kannst du jederzeit auch später machen, indem du das Objekt editierst

    Grüße

    Tom

    PI3B > Raspimatic / Opi+2 > ioBroker / ESP8266
    if (System == "running") {finger = "weg";} else {lastAction = "Rückgängig";}

    1 Antwort Letzte Antwort
    0
    • K Offline
      K Offline
      klassisch
      Most Active
      schrieb am zuletzt editiert von
      #5

      Vielen Dank für die Antworten. Leider bekomme ich gerade keine Benchrichtigungen von diesem Thread, deshalb meine späte Reaktion.

      Verwende einen ESP32 und die Methode GET mit setBulk. Die geht mit einer oder mehreren Werten. ganz praktisch, da ich meist mehrere Werte übertragen will und so geht es in einem Rutsch. setBulk soll auch noch mit POST gehen, aber ich weiß gar nicht was das ist und bin erst mal froh, dass es mit GET funktioniert.

      Das &prettyPrint hänge ich nach Papageienart dran, ohne wirklich zu verstehen warum. Vermutlich eine Art social noise der Computerwelt. Im Browser jedenfalls sieht die Antwort vom ioBroker ganz zufrieden aus. Im ESP32 werte ich sie nicht aus. Wenn ich Zustellüberwachung brauche, dann gehe ich eher auf MQTT als das selbst zu implementieren.

      Habe einen Grundatzartikel zum ack von Bluefox gefunden (https://github.com/ioBroker/ioBroker/wiki/Adapter-Development-Documentation#commands-and-statuses), den ich in etwa so interpretiere:

      • beim Einliefern durch den simpleApi wird ack auf false gesetzt und die Werte werden rot

      • Wenn ein anderes Programm den Wert abholt und verarbeitet, kann es das ack auf true setzen. Also eine Art Zustandsflag

      Keine Ahnung, ob es das genau trifft.

      @TomT: Die Unit im 2. Fenster habe ich nicht gefunden, aber da ich Objekte nutze, kann man da eine unit anlegen und die wird dann auch mit dargestellt.

      So weit scheint die Sache bei mir zu funktionieren. Bin wieder ein Stückchen weiter und danke Euch recht herzlich.

      1 Antwort Letzte Antwort
      0
      • K Offline
        K Offline
        klassisch
        Most Active
        schrieb am zuletzt editiert von
        #6

        @AlCalzone:

        Lesbare Formatierung der Antwort, siehe https://github.com/ioBroker/ioBroker.simple-api#get `
        Ah, vielen Dank, jetzt habe ich es der Spur nach vrstanden. Das ist ein Hinweis an den Empfänger in welchem Format er antworten möge.

        Mit &prettyPrint kommt sowas raus

        ! ````
        [
        {
        "id": "data.0.weather.garden.rainIntensity",
        "val": 0,
        "value": 0
        },
        {
        "id": "data.0.weather.garden.rainVelocity",
        "val": 0,
        "value": 0
        }
        ]

        Ohne &prettyPrint kommt ein json raus, bei dem firefox auf json umschaltet
        
        >! ````
        [{"id":"data.0.weather.garden.rainIntensity","val":0,"value":0},{"id":"data.0.weather.garden.rainVelocity","val":0,"value":0}]
        
        1 Antwort Letzte Antwort
        0
        • AlCalzoneA Offline
          AlCalzoneA Offline
          AlCalzone
          Developer
          schrieb am zuletzt editiert von
          #7

          @klassisch:

          Ohne &prettyPrint kommt ein json raus `
          Nicht sicher, ob du das meintest, aber auch mit prettyPrint kommt valides JSON heraus. Das hat nur mehr Leerzeichen und Zeilenumbrüche als nötig.

          Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

          1 Antwort Letzte Antwort
          0
          • K Offline
            K Offline
            klassisch
            Most Active
            schrieb am zuletzt editiert von
            #8

            @AlCalzone:

            auch mit prettyPrint kommt valides JSON heraus. Das hat nur mehr Leerzeichen und Zeilenumbrüche als nötig. `
            Ah, und deshalb der Name prettyPrint Hatte schon verglichen und gesehen, daß alle inhaltstragenden und strukturgebenden Elemente gleich zu sein scheinen. Aber ohne prettyPrint schiebt der firefox noch so eine Zwischenschicht mit json Darstellung ein (in meinem vorigen Post war das raw drin). Mit prettyPrint macht er das nicht.

            Im Alltagsbetrieb mit den ESP32 geht bei mir die Antwort eh ins off, insofern könnte ich meinem Netzwerk die paar Bytes ersparen und auf prettyPrint verzichten.

            1 Antwort Letzte Antwort
            0
            • T Offline
              T Offline
              Telefisch
              schrieb am zuletzt editiert von
              #9

              Hallo…

              ich habe dank der Anregung durch diesen Threat ein paar Leuchten mit einem Nextion-Display geschaltet.

              Schalten tue ich mittels

                    String url = "/set/";
                    url += Lights[value];
                    url += "?value=";
                    url += "true";
              
              	client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                              "Host: " + host + "\r\n" +
                              "Connection: close\r\n\r\n");
              
              

              Wie kann ich denn jetzt vom Client aus den Status einer Lampe auslesen?

              Statt /set/ müsste /getPlainValue/ zwar funktionieren aber sicher nicht mit client.print.

              Zumindest kommt bei mir immer das gleiche Ergebnis, egal welchen Zustand die Lampe hat.

              danke und Gruß

              Carsten

              Synology DS916+ (Docker), 2x Echo, 2x Dot, 2x Show

              1 Antwort Letzte Antwort
              0
              • T Offline
                T Offline
                Telefisch
                schrieb am zuletzt editiert von
                #10

                Kleines Update:

                //Darstellung der "Tasten" aktualisieren
                void update_buttons()
                {
                  // Status über WiFi holen
                  WiFiClient client;
                  delay(50);
                  if(!client.connect(host, port)){
                        return;
                  }
                  //Anforderung zusammenbauen
                  String url = "/getPlainValue/";
                  url += "Beckhoff.0.EG.Esstisch-Licht.state";
                  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                                "Host: " + host + "\r\n" +
                                "Connection: close\r\n\r\n");
                
                    while(client.connected()){
                    String line = client.readStringUntil('\n');
                      if(line=="\r"){
                        //Serial.println("headers received");
                        break;
                      }
                    }
                    String line = client.readStringUntil('\n');
                    if(line=="true"){
                      btnBulbCeiling.setPic(2);	//Bild für "An" zuweisen
                    }else{
                      btnBulbCeiling.setPic(1);  	//Bild für "Aus" zuweisen
                    }
                
                  //Zweiten Button setzen
                  if(!client.connect(host, port)){
                        return;
                  }
                  url = "/getPlainValue/";
                  url += "Beckhoff.0.EG.Esszimmer-Licht.state";
                  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                                "Host: " + host + "\r\n" +
                                "Connection: close\r\n\r\n");
                
                    while(client.connected()){
                    String line = client.readStringUntil('\n');
                      if(line=="\r"){
                        //Serial.println("headers received");
                        break;
                      }
                    }
                    line = client.readStringUntil('\n');
                    if(line=="true"){
                      btnBulbDesk.setPic(2);		//Bild für "An" zuweisen
                    }else{
                      btnBulbDesk.setPic(1);		//Bild für "Aus" zuweisen
                    }
                }
                
                

                Jetzt dauert es aber bis zu zwei Sekunden ehe der Status ankommt, daher meine Frage nach Optimierung.

                Muss immer "Connection: close\r\n\r\n" an die "Anfrage" angehängt werden?

                Das klingt für mich nach unnötigem Auf- und abbau der Verbindung. Allerdings ohne diesen String scheint sich der ESP vollends wegzuhängen.

                Gibt es vielleicht einen eleganteren Weg?

                Irgendwie habe ich noch keine (mir) verständliche Dokumentation zu ESP8266WiFi gefunden, um die es hier ja geht.

                Da wird zwar in allen Erklärungen ein Status abgeschickt aber so richtig die Zusammenhänge kapiere ich da noch nicht. :(

                greets Carsten

                Synology DS916+ (Docker), 2x Echo, 2x Dot, 2x Show

                1 Antwort Letzte Antwort
                0
                • K Offline
                  K Offline
                  klassisch
                  Most Active
                  schrieb am zuletzt editiert von
                  #11

                  Das Connection close hat mit dem ESP 8266 wifi nichts zu tun, sondern ist wohl eher ein Standard der HTTP Übertragung. Früher haben wir das einfach weggelassen . Aber dann wurde die CCU plötzlich schulmeisterlich und hat nicht mehr reagiert, wenn die Anfrage nicht nach Vorschrift erfolgt ist. Wie der ioBroker damit umgeht weiß ich nicht.

                  Gesendet von meinem ZTE A2016 mit Tapatalk

                  1 Antwort Letzte Antwort
                  0
                  • T Offline
                    T Offline
                    Telefisch
                    schrieb am zuletzt editiert von
                    #12

                    …dann ist mein „Vorhaben“ technisch wahrscheinlich nicht schneller zu lösen :( ?

                    Synology DS916+ (Docker), 2x Echo, 2x Dot, 2x Show

                    1 Antwort Letzte Antwort
                    0
                    • K Offline
                      K Offline
                      klassisch
                      Most Active
                      schrieb am zuletzt editiert von
                      #13

                      Keine Ahnung, ich weiss nicht, wo die (milli)Sekunden verloren gehen. Die paar Bytes sollten schnell ausgetauscht sein. Hast Du iregendwo noch delay() eingebaut?

                      Ich weiss auch nicht, wie responsiv der ioBroker ist. Aber Du kannst es ja mal im Browser testen. Einfach das GET weglassen, das macht der Browser dazu.

                      Bei mir geht das praktisch instantan:

                      Sowas wie

                      http://192.168.178.33:8087/getPlainValue/data.0.weather.garden.rainVelocity
                      

                      abgefeuert und die Zahl steht plain und schnörkellos da. So schnell kann ich gar nicht schauen.

                      Also wenn es bei Deinem Browser auch so schnell geht, dann liegt es irgendwie am ESP8266. Wenn aber die Antwort zum Browser schon lange dauert, dann am ioBroker, WLAN oder sowas.

                      1 Antwort Letzte Antwort
                      0
                      • T Offline
                        T Offline
                        Telefisch
                        schrieb am zuletzt editiert von
                        #14

                        …im Browser ist es auch Instant bei mir.

                        Dann muss ich den Code nochmal durchsuchen...

                        Danke erstmal

                        Synology DS916+ (Docker), 2x Echo, 2x Dot, 2x Show

                        1 Antwort Letzte Antwort
                        0
                        • K Offline
                          K Offline
                          klassisch
                          Most Active
                          schrieb am zuletzt editiert von klassisch
                          #15

                          Der Vollständigkeit halber:

                          Die Datenstruktur auf dem ioBroker muß nicht unter dem SimpleAi-Adapter liegen. Man kann auch eine eigene wie z.B.
                          > daten.0 manuell anlegen.

                          Der simpleApi Adapter verkraftet auch Strings. Sonderzeichen können dank Apollons Arbeit mit UTF-8 kodiert werden.

                          Edit > daten.0 war ein singulärer Ansatz. Der richtige Weg, aber mittlerweile der falsche Name
                          Die Community nutzt und unterstützt:

                          0_userdata
                          
                          A 1 Antwort Letzte Antwort
                          0
                          • K klassisch

                            Der Vollständigkeit halber:

                            Die Datenstruktur auf dem ioBroker muß nicht unter dem SimpleAi-Adapter liegen. Man kann auch eine eigene wie z.B.
                            > daten.0 manuell anlegen.

                            Der simpleApi Adapter verkraftet auch Strings. Sonderzeichen können dank Apollons Arbeit mit UTF-8 kodiert werden.

                            Edit > daten.0 war ein singulärer Ansatz. Der richtige Weg, aber mittlerweile der falsche Name
                            Die Community nutzt und unterstützt:

                            0_userdata
                            
                            A Offline
                            A Offline
                            Andreas_
                            schrieb am zuletzt editiert von
                            #16

                            Ich krame das Thema mal wieder aus.
                            Da ich ein einfaches Thermometer mit einem ESP8266 und zwei DS18B20 bauen wollte, war ich auf der Suche nach einer einfachen Möglichkeit Datenpunkte zu lesen und zu schreiben.
                            MQTT, Tasmota etc. sind aus meiner Sicht für so ein kleines Projet der Overkill.

                            Hier eine kurze Beschreibung:

                            Es wurden in den Objekten die Datenpunkte Temp_1 und Temp_2 angelegt um die Temperaturen vom ESP8266 zu empfangen.
                            Takt ist die Anzahl der Sekunden nach denen gemessen werden soll. Den Wert soll der ESP8266 lesen.

                            Datenpunkte.jpg

                            Hier der Code dazu:

                            /*
                                Datenpunkte lesen und schreiben mit dem simple api Adapter
                            
                                Github des Adapters:
                                https://github.com/ioBroker/ioBroker.simple-api
                            
                                Installation und Grundlagen:
                                https://www.smarthome-tricks.de/software-iobroker/iobroker-simple-api-adapter/
                            
                                Gelernt bei:
                                https://makesmart.net/esp8266-http-get-request/
                            
                                Mögliche Kommandos:
                                http://192.168.33.80:8087/help   // Adresse anpassen
                            
                            */
                            
                            #include <ESP8266WiFi.h>
                            #include <ESP8266HTTPClient.h>
                            
                            HTTPClient sender;
                            WiFiClient wifiClient;
                            
                            // WLAN-Daten
                            const char* ssid = "die SSID";
                            const char* password = "das Passwort";
                            const String host = "192.168.33.80:8087";	// anpassen
                            
                            String payload;           // String vom Webseiteninhalt
                            float tempValue_01 = 18;
                            float tempValue_02 = 3;
                            
                            // Datenpunkte
                            String strTakt = "http://192.168.33.80:8087/getPlainValue/0_userdata.0.Temperatursensor.Takt";
                            String strTemp_01 = "0_userdata.0.Temperatursensor.Temp_1";    // "_id" aus dem Datenpunkt
                            String strTemp_02 = "0_userdata.0.Temperatursensor.Temp_2";    // "_id" aus dem Datenpunkt
                            
                            //...........................................................................................................................
                            
                            void setup() {
                              Serial.begin(115200);  
                              
                              WiFi.begin(ssid, password);
                            
                              verbinden();
                              Serial.println("Verbunden!");  
                            }
                            
                            //...........................................................................................................................
                            
                            void verbinden(){
                              while (WiFi.status() != WL_CONNECTED) {
                                delay(200);
                                Serial.println();
                                Serial.print(".");
                              }  
                            }
                            
                            //...........................................................................................................................
                            
                            void get_Aufruf(String URL){
                            
                              if (WiFi.status() != WL_CONNECTED) {
                                verbinden();
                              }
                               
                              if (sender.begin(wifiClient, URL)) {  
                            
                                // HTTP-Code der Response speichern
                                int httpCode = sender.GET();
                               
                            
                                if (httpCode > 0) {
                                  
                                  // Anfrage wurde gesendet und Server hat geantwortet      
                                  if (httpCode == HTTP_CODE_OK) {       
                                    // Hier wurden die Daten vom Server empfangen, String vom Webseiteninhalt speichern
                                    payload = sender.getString(); 
                                  }
                                  
                                }else{
                                  // Falls HTTP-Error
                                  Serial.printf("HTTP-Error: ", sender.errorToString(httpCode).c_str());
                                }
                            
                                // Wenn alles abgeschlossen ist, wird die Verbindung wieder beendet
                                sender.end();
                                
                              }else {
                                Serial.printf("HTTP-Verbindung konnte nicht hergestellt werden!");
                              }
                            }  
                            //...........................................................................................................................
                            
                            
                            void loop() {
                            
                              // Wert aus Datenpunkt lesen
                              get_Aufruf(strTakt);
                              Serial.println(payload);
                              
                              
                              //Werte in Datenpunkt schreiben
                              //String url = "http://" + host + "/set/" + strTemp_01 + "?value=" + String(tempValue_01);    // für einen Datenpunkt
                                           // http://192.168.33.80:8087/set/0_userdata.0.Temperatursensor.Temp_1?value=81.1 // das soll dabei herauskommen und kann so im Browser getestet werden
                                           
                              String url = "http://" + host + "/setBulk?" + strTemp_01 + "=" + String(tempValue_01) + "&" + strTemp_02 + "=" + String(tempValue_02);    // für mehrere Datenpunkte
                                         // http://192.168.33.80:8087/setBulk?0_userdata.0.Temperatursensor.Temp_1=0.7&0_userdata.0.Temperatursensor.Temp_2=12.3
                              
                              //Serial.println();
                              //Serial.println(url);
                                
                              get_Aufruf(url);
                              
                              
                              tempValue_01 += 0.1; 
                              tempValue_02 += 0.1; 
                              delay(6000);  // Werte schreiben ist etwas langsam, 6sec sollten nicht unterschritten werden
                              
                            
                            }
                            
                            K pille0557P 2 Antworten Letzte Antwort
                            1
                            • TomTT TomT

                              Hallo,

                              Ich hab den ioBroker zwar erst seit vorgestern am laufen, aber den ESp8266 direkt an den ioBroker gebunden.

                              Einfachste Möglichkeit ist der simple.api Adapter.

                              Dazu hab ich in der Objekte Ansicht auf das + zuerst ein neues Device hinzugefügt mit Namen Wemos

                              und darunter 2 Values Wemos_Temp & Wemos_Hum
                              3351_image3.jpg

                              Dann habe ich den Arduino Script von m.yoda https://homematic-forum.de/forum/viewtopic.php?f=31&t=29321&start=20#p264856 auf die Schnelle mal etwas erweitert um folgende Zeilen :

                              // ******* Einstellungen fuer ioBroker, bitte anpassen! *******
                              String apiDeviceName = "Wemos"; // Bezeichnung des ioBroker.SimpleApi Devise
                              String tempIOBname = "Wemos_Temp"; // Bezeichnung der ioBroker Variable für die gemessene Temperatur
                              String feuchtIOBname = "Wemos_Hum"; // Bezeichnung der ioBroker Variable für die gemessene Luftfeuchtigkeit
                              const char* hostIOBroker = "192.168.XXX.YYY"; // IP-Adresse des ioBroker 
                              const int httpPortBroker = 8087; //eingetragener Port des simpleApi Adapters
                              
                              
                              
                              void melde_ioBroker() { // Werte an ioBroker melden
                                WiFiClient client;
                                if (!client.connect(hostIOBroker, httpPortBroker)) {
                                return;
                                }
                              
                                //String url = "/set/system.adapter.simple-api.0.'" + String(tempIOBname) + "'?value='" + String(temp) + "'&prettyPrint";
                                String url = "/setBulk?system.adapter.simple-api.0." + apiDeviceName + "." + tempIOBname + "=" + String(temp) + "&system.adapter.simple-api.0." + 
                                apiDeviceName + "." + feuchtIOBname + "=" + String(feucht) + "&prettyPrint";
                                // Serial.print("Requesting URL: ");
                                // Serial.println(url);
                                // This will send the request to the server
                                client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                                "Host: " + host + "\r\n" +
                                "Connection: close\r\n\r\n");
                                delay(100);
                              
                                // Read all the lines of the reply from server and print them to Serial
                                while (client.available()) {
                                String line = client.readStringUntil('\r');
                                }
                                Serial.println("Werte an iOBroker gemeldet");
                              }   
                              
                              

                              in die void Loop() Funktion wird dann noch hinter melde_CCU(); noch ein

                                  melde_ioBroker();
                              
                              

                              gehangen, und gut ist.

                              Die Werte stehen dann im ioBroker und im VIS unter

                              system.adapter.simple-api.0.Wemos.Wemos_Temp

                              und

                              system.adapter.simple-api.0.Wemos.Wemos_Hum

                              zur Verfügung.

                              Vielleicht hilft es ja einem von euch :D

                              Kommentare ?

                              Grüße

                              Tom

                              paul53P Offline
                              paul53P Offline
                              paul53
                              schrieb am zuletzt editiert von paul53
                              #17

                              Beitrag gelöscht.

                              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                              1 Antwort Letzte Antwort
                              0
                              • A Andreas_

                                Ich krame das Thema mal wieder aus.
                                Da ich ein einfaches Thermometer mit einem ESP8266 und zwei DS18B20 bauen wollte, war ich auf der Suche nach einer einfachen Möglichkeit Datenpunkte zu lesen und zu schreiben.
                                MQTT, Tasmota etc. sind aus meiner Sicht für so ein kleines Projet der Overkill.

                                Hier eine kurze Beschreibung:

                                Es wurden in den Objekten die Datenpunkte Temp_1 und Temp_2 angelegt um die Temperaturen vom ESP8266 zu empfangen.
                                Takt ist die Anzahl der Sekunden nach denen gemessen werden soll. Den Wert soll der ESP8266 lesen.

                                Datenpunkte.jpg

                                Hier der Code dazu:

                                /*
                                    Datenpunkte lesen und schreiben mit dem simple api Adapter
                                
                                    Github des Adapters:
                                    https://github.com/ioBroker/ioBroker.simple-api
                                
                                    Installation und Grundlagen:
                                    https://www.smarthome-tricks.de/software-iobroker/iobroker-simple-api-adapter/
                                
                                    Gelernt bei:
                                    https://makesmart.net/esp8266-http-get-request/
                                
                                    Mögliche Kommandos:
                                    http://192.168.33.80:8087/help   // Adresse anpassen
                                
                                */
                                
                                #include <ESP8266WiFi.h>
                                #include <ESP8266HTTPClient.h>
                                
                                HTTPClient sender;
                                WiFiClient wifiClient;
                                
                                // WLAN-Daten
                                const char* ssid = "die SSID";
                                const char* password = "das Passwort";
                                const String host = "192.168.33.80:8087";	// anpassen
                                
                                String payload;           // String vom Webseiteninhalt
                                float tempValue_01 = 18;
                                float tempValue_02 = 3;
                                
                                // Datenpunkte
                                String strTakt = "http://192.168.33.80:8087/getPlainValue/0_userdata.0.Temperatursensor.Takt";
                                String strTemp_01 = "0_userdata.0.Temperatursensor.Temp_1";    // "_id" aus dem Datenpunkt
                                String strTemp_02 = "0_userdata.0.Temperatursensor.Temp_2";    // "_id" aus dem Datenpunkt
                                
                                //...........................................................................................................................
                                
                                void setup() {
                                  Serial.begin(115200);  
                                  
                                  WiFi.begin(ssid, password);
                                
                                  verbinden();
                                  Serial.println("Verbunden!");  
                                }
                                
                                //...........................................................................................................................
                                
                                void verbinden(){
                                  while (WiFi.status() != WL_CONNECTED) {
                                    delay(200);
                                    Serial.println();
                                    Serial.print(".");
                                  }  
                                }
                                
                                //...........................................................................................................................
                                
                                void get_Aufruf(String URL){
                                
                                  if (WiFi.status() != WL_CONNECTED) {
                                    verbinden();
                                  }
                                   
                                  if (sender.begin(wifiClient, URL)) {  
                                
                                    // HTTP-Code der Response speichern
                                    int httpCode = sender.GET();
                                   
                                
                                    if (httpCode > 0) {
                                      
                                      // Anfrage wurde gesendet und Server hat geantwortet      
                                      if (httpCode == HTTP_CODE_OK) {       
                                        // Hier wurden die Daten vom Server empfangen, String vom Webseiteninhalt speichern
                                        payload = sender.getString(); 
                                      }
                                      
                                    }else{
                                      // Falls HTTP-Error
                                      Serial.printf("HTTP-Error: ", sender.errorToString(httpCode).c_str());
                                    }
                                
                                    // Wenn alles abgeschlossen ist, wird die Verbindung wieder beendet
                                    sender.end();
                                    
                                  }else {
                                    Serial.printf("HTTP-Verbindung konnte nicht hergestellt werden!");
                                  }
                                }  
                                //...........................................................................................................................
                                
                                
                                void loop() {
                                
                                  // Wert aus Datenpunkt lesen
                                  get_Aufruf(strTakt);
                                  Serial.println(payload);
                                  
                                  
                                  //Werte in Datenpunkt schreiben
                                  //String url = "http://" + host + "/set/" + strTemp_01 + "?value=" + String(tempValue_01);    // für einen Datenpunkt
                                               // http://192.168.33.80:8087/set/0_userdata.0.Temperatursensor.Temp_1?value=81.1 // das soll dabei herauskommen und kann so im Browser getestet werden
                                               
                                  String url = "http://" + host + "/setBulk?" + strTemp_01 + "=" + String(tempValue_01) + "&" + strTemp_02 + "=" + String(tempValue_02);    // für mehrere Datenpunkte
                                             // http://192.168.33.80:8087/setBulk?0_userdata.0.Temperatursensor.Temp_1=0.7&0_userdata.0.Temperatursensor.Temp_2=12.3
                                  
                                  //Serial.println();
                                  //Serial.println(url);
                                    
                                  get_Aufruf(url);
                                  
                                  
                                  tempValue_01 += 0.1; 
                                  tempValue_02 += 0.1; 
                                  delay(6000);  // Werte schreiben ist etwas langsam, 6sec sollten nicht unterschritten werden
                                  
                                
                                }
                                
                                K Offline
                                K Offline
                                klassisch
                                Most Active
                                schrieb am zuletzt editiert von
                                #18

                                @andreas_ Vielen Dank für die Ergänzung!
                                Was ich vor Jahren mal selbst geschrieben habe bleibt so und liefert zuverlässig über simpleApi ein.
                                Mittlerweile hat sich aber bei den "Fertig-Frameworks" recht viel getan.
                                Für die meisten Neuprojekte nutze ich ESPHome oder ESPEasy über MQTT Schnittstelle . Wenn MQTT schon mal installiert ist, bin ich unterm Strich schneller und bequemer unterwegs.

                                1 Antwort Letzte Antwort
                                0
                                • A Andreas_

                                  Ich krame das Thema mal wieder aus.
                                  Da ich ein einfaches Thermometer mit einem ESP8266 und zwei DS18B20 bauen wollte, war ich auf der Suche nach einer einfachen Möglichkeit Datenpunkte zu lesen und zu schreiben.
                                  MQTT, Tasmota etc. sind aus meiner Sicht für so ein kleines Projet der Overkill.

                                  Hier eine kurze Beschreibung:

                                  Es wurden in den Objekten die Datenpunkte Temp_1 und Temp_2 angelegt um die Temperaturen vom ESP8266 zu empfangen.
                                  Takt ist die Anzahl der Sekunden nach denen gemessen werden soll. Den Wert soll der ESP8266 lesen.

                                  Datenpunkte.jpg

                                  Hier der Code dazu:

                                  /*
                                      Datenpunkte lesen und schreiben mit dem simple api Adapter
                                  
                                      Github des Adapters:
                                      https://github.com/ioBroker/ioBroker.simple-api
                                  
                                      Installation und Grundlagen:
                                      https://www.smarthome-tricks.de/software-iobroker/iobroker-simple-api-adapter/
                                  
                                      Gelernt bei:
                                      https://makesmart.net/esp8266-http-get-request/
                                  
                                      Mögliche Kommandos:
                                      http://192.168.33.80:8087/help   // Adresse anpassen
                                  
                                  */
                                  
                                  #include <ESP8266WiFi.h>
                                  #include <ESP8266HTTPClient.h>
                                  
                                  HTTPClient sender;
                                  WiFiClient wifiClient;
                                  
                                  // WLAN-Daten
                                  const char* ssid = "die SSID";
                                  const char* password = "das Passwort";
                                  const String host = "192.168.33.80:8087";	// anpassen
                                  
                                  String payload;           // String vom Webseiteninhalt
                                  float tempValue_01 = 18;
                                  float tempValue_02 = 3;
                                  
                                  // Datenpunkte
                                  String strTakt = "http://192.168.33.80:8087/getPlainValue/0_userdata.0.Temperatursensor.Takt";
                                  String strTemp_01 = "0_userdata.0.Temperatursensor.Temp_1";    // "_id" aus dem Datenpunkt
                                  String strTemp_02 = "0_userdata.0.Temperatursensor.Temp_2";    // "_id" aus dem Datenpunkt
                                  
                                  //...........................................................................................................................
                                  
                                  void setup() {
                                    Serial.begin(115200);  
                                    
                                    WiFi.begin(ssid, password);
                                  
                                    verbinden();
                                    Serial.println("Verbunden!");  
                                  }
                                  
                                  //...........................................................................................................................
                                  
                                  void verbinden(){
                                    while (WiFi.status() != WL_CONNECTED) {
                                      delay(200);
                                      Serial.println();
                                      Serial.print(".");
                                    }  
                                  }
                                  
                                  //...........................................................................................................................
                                  
                                  void get_Aufruf(String URL){
                                  
                                    if (WiFi.status() != WL_CONNECTED) {
                                      verbinden();
                                    }
                                     
                                    if (sender.begin(wifiClient, URL)) {  
                                  
                                      // HTTP-Code der Response speichern
                                      int httpCode = sender.GET();
                                     
                                  
                                      if (httpCode > 0) {
                                        
                                        // Anfrage wurde gesendet und Server hat geantwortet      
                                        if (httpCode == HTTP_CODE_OK) {       
                                          // Hier wurden die Daten vom Server empfangen, String vom Webseiteninhalt speichern
                                          payload = sender.getString(); 
                                        }
                                        
                                      }else{
                                        // Falls HTTP-Error
                                        Serial.printf("HTTP-Error: ", sender.errorToString(httpCode).c_str());
                                      }
                                  
                                      // Wenn alles abgeschlossen ist, wird die Verbindung wieder beendet
                                      sender.end();
                                      
                                    }else {
                                      Serial.printf("HTTP-Verbindung konnte nicht hergestellt werden!");
                                    }
                                  }  
                                  //...........................................................................................................................
                                  
                                  
                                  void loop() {
                                  
                                    // Wert aus Datenpunkt lesen
                                    get_Aufruf(strTakt);
                                    Serial.println(payload);
                                    
                                    
                                    //Werte in Datenpunkt schreiben
                                    //String url = "http://" + host + "/set/" + strTemp_01 + "?value=" + String(tempValue_01);    // für einen Datenpunkt
                                                 // http://192.168.33.80:8087/set/0_userdata.0.Temperatursensor.Temp_1?value=81.1 // das soll dabei herauskommen und kann so im Browser getestet werden
                                                 
                                    String url = "http://" + host + "/setBulk?" + strTemp_01 + "=" + String(tempValue_01) + "&" + strTemp_02 + "=" + String(tempValue_02);    // für mehrere Datenpunkte
                                               // http://192.168.33.80:8087/setBulk?0_userdata.0.Temperatursensor.Temp_1=0.7&0_userdata.0.Temperatursensor.Temp_2=12.3
                                    
                                    //Serial.println();
                                    //Serial.println(url);
                                      
                                    get_Aufruf(url);
                                    
                                    
                                    tempValue_01 += 0.1; 
                                    tempValue_02 += 0.1; 
                                    delay(6000);  // Werte schreiben ist etwas langsam, 6sec sollten nicht unterschritten werden
                                    
                                  
                                  }
                                  
                                  pille0557P Offline
                                  pille0557P Offline
                                  pille0557
                                  schrieb am zuletzt editiert von
                                  #19

                                  @andreas_
                                  ich wollte das jetzt auch umsetzen ...
                                  unter simple.api steht mir das "+" zum Hinzufügen nicht zur Verfügung?
                                  Bildschirmfoto 2023-03-22 um 10.11.14.png
                                  unter 0_userdata schon!
                                  Bildschirmfoto 2023-03-22 um 10.11.24.png
                                  da klappt das
                                  Bildschirmfoto 2023-03-22 um 10.16.25.png
                                  ich habe allerdings überhaupt keine Ahnung wo der Code hin soll / eingetragen wird.
                                  ?

                                  CodierknechtC 1 Antwort Letzte Antwort
                                  0
                                  • pille0557P pille0557

                                    @andreas_
                                    ich wollte das jetzt auch umsetzen ...
                                    unter simple.api steht mir das "+" zum Hinzufügen nicht zur Verfügung?
                                    Bildschirmfoto 2023-03-22 um 10.11.14.png
                                    unter 0_userdata schon!
                                    Bildschirmfoto 2023-03-22 um 10.11.24.png
                                    da klappt das
                                    Bildschirmfoto 2023-03-22 um 10.16.25.png
                                    ich habe allerdings überhaupt keine Ahnung wo der Code hin soll / eingetragen wird.
                                    ?

                                    CodierknechtC Online
                                    CodierknechtC Online
                                    Codierknecht
                                    Developer Most Active
                                    schrieb am zuletzt editiert von
                                    #20

                                    @pille0557
                                    Was willst Du denn da einrichten?
                                    Möglicherweise bist Du da mit z.B. EspEasy schneller am Start.

                                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                                    Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                                    HmIP|ZigBee|Tasmota|Unifi
                                    Zabbix Certified Specialist
                                    Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                                    pille0557P 1 Antwort Letzte Antwort
                                    0
                                    • CodierknechtC Codierknecht

                                      @pille0557
                                      Was willst Du denn da einrichten?
                                      Möglicherweise bist Du da mit z.B. EspEasy schneller am Start.

                                      pille0557P Offline
                                      pille0557P Offline
                                      pille0557
                                      schrieb am zuletzt editiert von Homoran
                                      #21

                                      @codierknecht
                                      einen Wemos_D1 mit Tempertursensor DS18B20
                                      analog zu ... Wemos_D1 + DS18B20 https://github.com/jp112sdl/WemosD1_ioBroker_DS18B20/blob/master/README.md
                                      Hardware läuft schon

                                      CodierknechtC 1 Antwort Letzte Antwort
                                      0
                                      • pille0557P pille0557

                                        @codierknecht
                                        einen Wemos_D1 mit Tempertursensor DS18B20
                                        analog zu ... Wemos_D1 + DS18B20 https://github.com/jp112sdl/WemosD1_ioBroker_DS18B20/blob/master/README.md
                                        Hardware läuft schon

                                        CodierknechtC Online
                                        CodierknechtC Online
                                        Codierknecht
                                        Developer Most Active
                                        schrieb am zuletzt editiert von
                                        #22

                                        @pille0557
                                        Kann man dem kein EspEasy verpassen?
                                        Dann einfach über den MQTT-Adapter verbinden und fertig.

                                        Dein Link ist steinalt.
                                        c6f057ca-1768-493d-aa15-80cd476eb7fc-image.png

                                        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                                        Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                                        HmIP|ZigBee|Tasmota|Unifi
                                        Zabbix Certified Specialist
                                        Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                                        pille0557P 1 Antwort Letzte Antwort
                                        0
                                        • CodierknechtC Codierknecht

                                          @pille0557
                                          Kann man dem kein EspEasy verpassen?
                                          Dann einfach über den MQTT-Adapter verbinden und fertig.

                                          Dein Link ist steinalt.
                                          c6f057ca-1768-493d-aa15-80cd476eb7fc-image.png

                                          pille0557P Offline
                                          pille0557P Offline
                                          pille0557
                                          schrieb am zuletzt editiert von
                                          #23

                                          @codierknecht
                                          Ok danke, dann werde ich mir das mal ansehen …
                                          Ich fand das hier:
                                          bastelgarage
                                          aber leider keine Hinweise zum hardwaremäßigen Aufbau

                                          Ralla66R 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

                                          624

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          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