NEWS
Rest-API - Verständnisproblem
-
@rene55
Stimmt - habe ich auf die Schnelle verwechselt.@codierknecht Alles gut. Ich hatte auch nicht auf eine schnelle Antwort gehofft. :blush:
-
@codierknecht Alles gut. Ich hatte auch nicht auf eine schnelle Antwort gehofft. :blush:
@rene55 sagte in Rest-API - Verständnisproblem:
Ich hatte auch nicht auf eine schnelle Antwort gehofft
Warum nicht? :grin: :grin: :grin:

-
Der Titel ist etwas beschränkt, daher hier mein Ansinnen mit ein paar mehr Worten. Ich habe seit geraumer Zeit den Simple-Api im Einsatz, hauptsächlich um Daten von ESPxx ins Sytem zu bekommen. Es hat mal irgendwo geheißen, dass 'man' mittelfristig auf den leistungsfähigerern Rest-API umsteigen sollte.
Mit der Swagger-Seite komme ich so nicht wirklich zurecht. Erster Versuch war das Auslesen eines States. http://192.168.69.112:8093/v1/state/0_userdata.0.Test.Werte.Value liefert mir den richtigen Wert. Nun möchte ich diesen Wert mit einem anderen Wert überschreiben. Und hier komme ich nicht weiter. Der Versuch im Swagger via 'patch' den Wert zu setzen schlägt fehl. Mögliche Fehlermeldung:{ "id": "0_userdata.0.Test.Werte.Value", "error": "Error: The state contains no properties! At least one property is expected!" }Wie ich dann den http-Befehl in den ESP bekomme ist dann noch die zweite Baustelle.
Das ist übrigens nicht der erste Versuch mit Rest-API, ich habe bisher immer erfolglos abgebrochen. Muss doch gehen oder denke ich hier völlig falsch?
-
Der Titel ist etwas beschränkt, daher hier mein Ansinnen mit ein paar mehr Worten. Ich habe seit geraumer Zeit den Simple-Api im Einsatz, hauptsächlich um Daten von ESPxx ins Sytem zu bekommen. Es hat mal irgendwo geheißen, dass 'man' mittelfristig auf den leistungsfähigerern Rest-API umsteigen sollte.
Mit der Swagger-Seite komme ich so nicht wirklich zurecht. Erster Versuch war das Auslesen eines States. http://192.168.69.112:8093/v1/state/0_userdata.0.Test.Werte.Value liefert mir den richtigen Wert. Nun möchte ich diesen Wert mit einem anderen Wert überschreiben. Und hier komme ich nicht weiter. Der Versuch im Swagger via 'patch' den Wert zu setzen schlägt fehl. Mögliche Fehlermeldung:{ "id": "0_userdata.0.Test.Werte.Value", "error": "Error: The state contains no properties! At least one property is expected!" }Wie ich dann den http-Befehl in den ESP bekomme ist dann noch die zweite Baustelle.
Das ist übrigens nicht der erste Versuch mit Rest-API, ich habe bisher immer erfolglos abgebrochen. Muss doch gehen oder denke ich hier völlig falsch?
-
Ach schau mal
Hier gibts ein issue dazu
https://github.com/ioBroker/ioBroker.rest-api/issues/54Wenn du es selbst programmierst kannst du ja den richtigen Header setzen
@oliverio
Wobei man für das einfache Setzen eines State japatchauch gar nicht benötigthttp://192.168.179.13:8093/v1/command/setState?id=0_userdata.0.Test.differenz&state=42 -
@oliverio
Wobei man für das einfache Setzen eines State japatchauch gar nicht benötigthttp://192.168.179.13:8093/v1/command/setState?id=0_userdata.0.Test.differenz&state=42Wenn er bei simple api bleibt.
Der arbeitet nur mit der get Methode und was gemacht werden soll steht in der Adresse als Parameter drin.Rest api und simple api sind unterschiedlich.
Das eine ist direkt im Admin eingebaut, das andere ist ein zusätzlicher Adapter -
@oliverio
Wobei man für das einfache Setzen eines State japatchauch gar nicht benötigthttp://192.168.179.13:8093/v1/command/setState?id=0_userdata.0.Test.differenz&state=42@codierknecht Erster Erfolg: mit http://192.168.69.112:8093/v1/command/setState?id=0_userdata.0.Test.Werte.Value&state=41 funktioniert es.
-
Wenn er bei simple api bleibt.
Der arbeitet nur mit der get Methode und was gemacht werden soll steht in der Adresse als Parameter drin.Rest api und simple api sind unterschiedlich.
Das eine ist direkt im Admin eingebaut, das andere ist ein zusätzlicher Adapter@oliverio sagte in Rest-API - Verständnisproblem:
Wenn er bei simple api bleibt.
Bleibt er ja nicht. Er hat Rest-API ... so wie ich in meinem letzten Beispiel auch.
-
Ach schau mal
Hier gibts ein issue dazu
https://github.com/ioBroker/ioBroker.rest-api/issues/54Wenn du es selbst programmierst kannst du ja den richtigen Header setzen
-
@oliverio sagte in Rest-API - Verständnisproblem:
Wenn er bei simple api bleibt.
Bleibt er ja nicht. Er hat Rest-API ... so wie ich in meinem letzten Beispiel auch.
Dann sorry, sieht zu ähnlich aus
Bei echtem Rest wäre aber so ein Befehl unnötigAber ist halt alles philosophisch die Unterscheidung
-
Dann sorry, sieht zu ähnlich aus
Bei echtem Rest wäre aber so ein Befehl unnötigAber ist halt alles philosophisch die Unterscheidung
@oliverio sagte in Rest-API - Verständnisproblem:
sieht zu ähnlich aus
Darum komme ich da auch ständig durcheinander :grin:
-
@oliverio sagte in Rest-API - Verständnisproblem:
sieht zu ähnlich aus
Darum komme ich da auch ständig durcheinander :grin:
@codierknecht Jetzt muss ich nur noch schauen, wenn es für API einen Benutzer mit Password gibt. Im Simple-Api wurde es einfach hinten angehangen.
-
@codierknecht Jetzt muss ich nur noch schauen, wenn es für API einen Benutzer mit Password gibt. Im Simple-Api wurde es einfach hinten angehangen.
@rene55 sagte in Rest-API - Verständnisproblem:
wenn es für API einen Benutzer mit Password gibt
Wer macht denn sowas? ;-)
Basic-Authentication müsste wohl als zusätzlicher Header mitgegeben werden.

-
Dann sorry, sieht zu ähnlich aus
Bei echtem Rest wäre aber so ein Befehl unnötigAber ist halt alles philosophisch die Unterscheidung
-
@rene55 sagte in Rest-API - Verständnisproblem:
wenn es für API einen Benutzer mit Password gibt
Wer macht denn sowas? ;-)
Basic-Authentication müsste wohl als zusätzlicher Header mitgegeben werden.

@codierknecht Ja, mit ein Grund, auf was 'modernes' umzusteigen! Wobei ich dann noch erlernen muss, wie ich denn im ESP einen curl abgesetzt bekommen - andere Baustelle (aber gehört ins Gesamtpaket).
-
@codierknecht Ja, mit ein Grund, auf was 'modernes' umzusteigen! Wobei ich dann noch erlernen muss, wie ich denn im ESP einen curl abgesetzt bekommen - andere Baustelle (aber gehört ins Gesamtpaket).
-
@codierknecht Ja, mit ein Grund, auf was 'modernes' umzusteigen! Wobei ich dann noch erlernen muss, wie ich denn im ESP einen curl abgesetzt bekommen - andere Baustelle (aber gehört ins Gesamtpaket).
@rene55 sagte in Rest-API - Verständnisproblem:
Wobei ich dann noch erlernen muss, wie ich denn im ESP einen curl abgesetzt bekommen
Wie @OliverIO schreibt. einfach per http.
Swagger nimmt
curlweil man aus curl-Beispielen es eigentlich für jede Variante ableiten kann, z.B. PowerShell usw.
Bei curl sind die einzelnen Option schön getrennt und klar ersichtlich, z.B. ob es POST oder GET ist, ob ein Header übergeben wird usw. -
@oliverio Wäre mir am liebsten. Nur das, was ich dafür brauche aus dem Swagger rauszukriegen übersteigt (aktuell) meinen Wissensstand.
Einfach ChatGPT befragen.
Gerade für Code, insbesondere wenn die lernbasis groß ist, gibt es schon die 90% Idee wie man zum Ziel kommt, auch wenn da manchmal Fehler enthalten sind.
Hier mal eine Abfrage von gerade ebenAuf einem ESP (z. B. ESP32 oder ESP8266) kannst du eine HTTP-
PATCH-Anfrage mit derHTTPClient-Bibliothek in der Arduino-IDE ausführen. Hier ist ein Beispielcode, der zeigt, wie du einePATCH-Anfrage mit JSON-Daten an einen Server sendest:Beispielcode für ESP32/ESP8266:
#include <WiFi.h> // Für ESP32 (nutze <ESP8266WiFi.h> für ESP8266) #include <HTTPClient.h> const char* ssid = "Dein_WLAN_Name"; const char* password = "Dein_WLAN_Passwort"; const char* serverUrl = "http://example.com/api/resource"; // Ziel-URL für PATCH void setup() { Serial.begin(115200); WiFi.begin(ssid, password); // Warten, bis WiFi verbunden ist while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Verbinde mit WiFi..."); } Serial.println("WiFi verbunden!"); HTTPClient http; http.begin(serverUrl); // URL setzen http.addHeader("Content-Type", "application/json"); // JSON-Header setzen // JSON-Daten für das Patch-Request String jsonPayload = "{\"key1\":\"value1\",\"key2\":\"value2\"}"; int httpResponseCode = http.PATCH(jsonPayload); // PATCH-Request senden if (httpResponseCode > 0) { Serial.print("HTTP Response Code: "); Serial.println(httpResponseCode); String response = http.getString(); Serial.println("Antwort: " + response); } else { Serial.print("Fehler bei PATCH: "); Serial.println(http.errorToString(httpResponseCode).c_str()); } http.end(); // Verbindung schließen } void loop() { // Kein Code hier nötig }Erklärung:
- WiFi-Verbindung herstellen: Der ESP verbindet sich mit dem WLAN.
- HTTPClient verwenden: Mit
http.begin(serverUrl)wird die Verbindung zum Server aufgebaut. - Header setzen:
http.addHeader("Content-Type", "application/json")teilt dem Server mit, dass JSON gesendet wird. - PATCH-Request senden:
http.PATCH(jsonPayload)sendet die JSON-Daten an den Server. - Antwort auslesen: Der HTTP-Response-Code und die Server-Antwort werden über die serielle Konsole ausgegeben.
Falls dein Server HTTPS verwendet, solltest du stattdessen
WiFiClientSecureundHTTPClientverwenden.Falls du weitere Fragen hast oder es für dein Projekt anpassen möchtest, sag Bescheid!
-
@rene55 sagte in Rest-API - Verständnisproblem:
Wobei ich dann noch erlernen muss, wie ich denn im ESP einen curl abgesetzt bekommen
Wie @OliverIO schreibt. einfach per http.
Swagger nimmt
curlweil man aus curl-Beispielen es eigentlich für jede Variante ableiten kann, z.B. PowerShell usw.
Bei curl sind die einzelnen Option schön getrennt und klar ersichtlich, z.B. ob es POST oder GET ist, ob ein Header übergeben wird usw.@bananajoe Ja soweit alles ok. Wie schon erwähnt, mit Simple-Api (und den ESPs) läuft das bei mir schon geraume Zeit - sowohl zum ESP als auch zurück. Das blöde ist gerade nur, dass ich nicht zu Hause bin und natürlich keinen ESP hier habe. Ich mache jetzt hier nur aus dem Browser heraus.