Externe API-Antwort in einer Szene verwenden

Funktionsbeschreibung
Man kann einen API-Aufruf in Szenen ausführen, aber nur, um Aktionen auf entfernten Diensten auszulösen.

Es wäre super mächtig, zusätzlich einen API-Aufruf machen und die Antwort als Variable verwenden zu können.

Konkrete Beispiele:

  • Um 6 Uhr einen Aufruf an die Wetter-API auslösen
  • Mir eine Nachricht mit den Tagesvorhersagen schicken

Oder, wenn ich das Haus verlasse, mich warnen, ob es an diesem Tag regnen wird.

Ich stelle mir die Möglichkeit vor, einen zurückgegebenen JSON-Wert abzurufen, entweder wie in JavaScript {{ reponseapi.data.meteo.pluie }} oder in grafischer Form, wie bereits mit den vorhandenen Geräten gemacht.

Sehr gute Idee! :slight_smile:

Ich denke, wir werden es in grafischer Form machen. Dann müssen wir beim Erstellen der Karte einen „Test“-Aufruf machen. Und dann die JSON-Antwort lesen und eine Liste aller verfügbaren Schlüssel erstellen und diese in die Liste der verfügbaren Variablen einfügen :slight_smile:

Ich komme darauf zurück, immer mit dem Ziel, die Szenen zu verbessern, habe ich heute Morgen Spaß daran gehabt, das zu codieren :slight_smile:

Kleines Video-Beispiel, bei dem der BTC-Preis über die Coinbase-API abgefragt und die API-Antwort in der Box „Nachricht senden“ verwendet wird :slight_smile:

Natürlich ist das nur ein Beispiel, es ist möglich, jede beliebige API-Antwort abzurufen!

https://streamable.com/ezw984

Der Pull-Request kommt bald

Hop, der PR ist auf GitHub =>

https://github.com/GladysAssistant/Gladys/pull/1148

Natürlich kann man die Daten auch in der Box „Nur fortsetzen, wenn“ verwenden:

:flushed_face: Das ist super sauber und genau das, was ich mir vorgestellt habe, als ich dieses Thema geschrieben habe!

Ich wollte, dass Gladys mir Nachrichten mit Daten schickt, die von extern abgerufen wurden, wie z. B. das Wetter, wenn ich das Haus verlasse – das ist Spitze!!! :fire:

Was passiert, wenn:

  • es kein Internet gibt?
  • Die Antwort während der Ausführung anders ist als erwartet (z. B. „API-Grenze überschritten“)?

Gute Frage, ich habe den Fall nicht behandelt, aktuell wird es ein bisschen wild werden ^^

Ich denke, man sollte die Ausführung der Szene stoppen.

Es wird wild werden, deine Nachricht wird Löcher haben.

Dann weiß ich nicht, was die Lösung wäre: Überprüfen, ob das Schema dasselbe ist, und wenn es nicht dasselbe ist, die Szene stoppen? Das Problem ist, dass einige API-Antworten möglicherweise variable Antworten haben und das muss nicht unbedingt ein Grund sein, die Ausführung der Szene zu stoppen… Gute Frage!

Ansonsten basiert man nur auf dem Rückgabecode der API.

  • Timeout von 20 Sekunden
  • Code 200 = Weiter

Der Rest stoppt die Ausführung.

Ganz im Gegenteil, ich denke, es ist nützlich, auch mit anderen Statuscodes weiterzumachen.

Beispiel:

  • Du möchtest überprüfen, ob deine Website/API mit Gladys online ist. Du erstellst eine Szene, die alle Minuten läuft und einen GET-Request an deine Website sendet. Du machst ein „Weiter nur, wenn Status != 200“ und sendest eine Nachricht „Die Website ist offline, Status = {{status}}“

  • Du möchtest ein Gerät steuern und eine Nachricht zurücksenden, wenn alles gut gelaufen ist

  • usw.

Ich denke, in vielen Fällen sollte die Szene auch mit „Fehler“-Codes weiterlaufen, gerade damit der Benutzer diese Information in der Szene verwenden kann.

Für den Fall „Internet ist offline“ scheint mir das ein besonderer Fall zu sein, und da kann man die Szene tatsächlich abbrechen.

Ansonsten könnte man in der Box einen Parameter „Szene stoppen, wenn der Rückgabecode anders ist als: „Liste der Codes auswählen“, aber das erscheint mir etwas umständlich, ich weiß nicht

Hallo @lmilcent!
Ich verstehe dein Beispiel nicht ganz, bei dem eine API verwendet wird, um das Wetter abzurufen, obwohl wir bereits einen Dienst dafür haben.
Warum nicht diesen Dienst für die Szenen verwenden, anstatt einen API-Aufruf zu machen? (Vorausgesetzt, wir haben die Aktion?)

Ansonsten ist es sauber, was du vorschlägst @pierre-gilles, aber man könnte dem Benutzer die Wahl lassen, die Szene basierend auf x oder y Gründen zu stoppen, aber das haben wir bereits mit „nur fortsetzen, wenn“ (oder?).

Falls die Antwort jedoch anders ist, warum nicht eine Option hinzufügen, um ihm zu sagen, dass er basierend auf der Benutzerauswahl stoppen soll?

Soweit ich weiß, ist das aktuell gerade nicht möglich.

Ja, daher meine Frage am Ende :smiley:.
Für mich, um diesem Wetterbedarf gerecht zu werden, müssten wir einfach die fehlenden Bausteine im Zusammenhang mit dem Wetterdienst ergänzen, heute OpenWeather, aber auch morgen TotoMeteo :stuck_out_tongue:

Genau wie die fehlenden Bausteine im Kalenderservice (der uns heute nicht viel nützt, außer dass er das Gleiche wie die nativen Apps tut [nur schlechter, weil wir derzeit nicht mit den Ereignissen interagieren können])

Ich bin mir bewusst, dass das Arbeit bedeutet, ich bin selbst Entwickler und habe nicht die Zeit (so viel Zeit wie bei der V3), um euch zu helfen ^^.
Ich äußere nur Ideen oder meine Gedanken zu bestimmten Bedürfnissen :smiley:

Abgesehen davon beobachte ich aus dem Augenwinkel den Fortschritt von Gladys (nur zur Info, seit zibee2mqtt bin ich endlich auf die V4 umgestiegen, während meine V3 weiterhin läuft, um die Lücke auszugleichen, aber das ist ein anderes Thema :stuck_out_tongue:)

Ich schließe dieses Thema, da die Funktion entwickelt wurde.