NEWS
ESP8266 an ioBroker Adapter über Simple.api
-
…im Browser ist es auch Instant bei mir.
Dann muss ich den Code nochmal durchsuchen...
Danke erstmal
-
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
-
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.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 }
-
Beitrag gelöscht.
-
@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. -
@andreas_
ich wollte das jetzt auch umsetzen ...
unter simple.api steht mir das "+" zum Hinzufügen nicht zur Verfügung?
unter 0_userdata schon!
da klappt das
ich habe allerdings überhaupt keine Ahnung wo der Code hin soll / eingetragen wird.
? -
@pille0557
Was willst Du denn da einrichten?
Möglicherweise bist Du da mit z.B. EspEasy schneller am Start. -
@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 -
@pille0557
Kann man dem kein EspEasy verpassen?
Dann einfach über den MQTT-Adapter verbinden und fertig.Dein Link ist steinalt.
-
@codierknecht
Ok danke, dann werde ich mir das mal ansehen …
Ich fand das hier:
bastelgarage
aber leider keine Hinweise zum hardwaremäßigen Aufbau -
nimm doch einfach eine Tasmota Version. Dann haste alles einfachst im IO per Mqtt.