Externe Integration: Meteo France

:ok_hand:

Und behältst du die API-Infos, wenn man von einem Dienst zum anderen wechselt?

Kleine Anmerkung zu deinem zweiten Absatz:
image
Ich denke, wir können Frankreich entfernen, um einfach nur Wetter als generische Option für die Widget-Auswahl zu haben.

Ja, die API-Schlüssel bleiben in der Datenbank gespeichert, sodass du von einer Quelle zur anderen wechseln kannst, ohne den Schlüssel erneut einzugeben. Und angesichts der Größe des Schlüssels von Meteo France ist das auch besser. Aber Meteo France bleibt optional, nur um die Karte anzuzeigen.

Ja, das ist für den Text geplant, aber da ich das alte Wetter-Widget noch nicht ersetzt habe, heißt es vorerst immer noch Meteo France. Ich werde es ändern, sobald die Arbeit erledigt ist.

Ich bevorzuge diesen Ansatz! Ein einziges Wetter-Widget mit zwei separaten Integrationen.

Tatsächlich funktioniert Gladys so: Es gibt nur ein Widget pro Funktionsart, und jede Marke oder Technologie hat ihre eigene Integration, um die Kommunikation mit der Außenwelt von Gladys zu verwalten.

Das Bild ist für alle, die es ausprobieren möchten, auf dem neuesten Stand:

docker pull willde71/gladys-test:meteofrance_integration

Es gibt also eine OpenWeather-Integration, die unverändert geblieben ist, und eine neue Meteo France-Integration, mit der Wetterdaten nur für Frankreich ohne API-Schlüssel abgerufen werden können.
Ein optionaler API-Schlüssel ermöglicht den Zugriff auf die Meteo France-Warnkarten.

Das Wetter-Widget wurde vollständig mit dem neuen Design umgestellt. Beim Update wird das Dashboard aktualisiert.

Die Widget-Konfiguration hat sich etwas geändert, da jetzt die Wahl der Wetterdatenquelle möglich ist:

Hier sind die Details der möglichen Konfigurationen je nach Quelle. OpenWeather in der kostenlosen Version bietet nicht die gleichen Daten wie Meteo France. Daher die Unterschiede.

Hier sind einige Bilder



Ich habe auch einen Auslöser und Aktionen in den Szenen hinzugefügt:

Ein Auslöser für den Warnlevel

Eine Aktion, um die Meteo France-Warnung abzurufen


Die Variablen, die für die Verwendung in Nachrichten freigegeben werden.

Eine Aktion, um die Meteo France-Warnkarte zu senden

Beispiel in Telegram


Ich konnte es testen und es ist perfekt :slight_smile:
Ich habe keine Fehler auf meiner Seite gefunden :wink:

Hallo @Will_71,

Ich habe Fable 5 für dich auf dem Gebiet der externen Integrationen vom Typ „Wetter“ freigeschaltet. :slightly_smiling_face:

Das Ziel ist es, dir zu ermöglichen, deine Integration in eine externe Integration zu migrieren, damit du sie eigenständig weiterentwickeln kannst.

Was das Widget betrifft, werden wir das Bestehende definitiv weiterentwickeln und uns von deinem hervorragenden Vorschlag inspirieren lassen. Danke für all die Arbeit, die du investiert hast – es ist wirklich eine sehr gute Grundlage!

@Will_71 :

Für Info habe ich dich zum Gladys-Repo eingeladen, damit du zu PR-Reviews eingeladen werden kannst :slight_smile:

@Will_71 Der PR des SDKs:

Kannst du mal schauen, ob dir der API-Vertrag gut erscheint?

Ich schaue mal und halte dich auf dem Laufenden.

Super! Claude sagt mir, dass der gewählte Ansatz und das Format normalerweise ausreichen und vollständig kompatibel mit dem Ansatz sind, den du mit Météo France verfolgt hast.

Also normalerweise kannst du das neue Widget und eine externe Integration von Météo France auf dieser Grundlage vorschlagen :slight_smile:

danach können wir auch anpassen, falls nötig

Ja, das einzige Problem ist, dass wir jetzt, wo wir eine API bereitstellen, rückwärtskompatibel bleiben und bei Änderungen mit Breaking Changes versionieren müssen.

Also kein Recht, das API-Format alle paar Tage zu ändern!

Aber ich bin eher zuversichtlich.

Ich werde auf meiner Seite eine externe Integration gladys-openweather durchführen.

Flieg jetzt mal los, kleiner Claude:

Ich habe deinen PR zum SDK angesehen.

Hier sind die Punkte, die ich bemerkt habe

  • Warnkarte — WeatherPayload hat kein Bildfeld. Kein Kanal. Wird nicht funktionieren.

  • Die Beschreibung der Warnungen ist auf 2000 Zeichen begrenzt. Nicht sicher, ob das mit der vollständigen Wettervorhersage von Meteo France klappt, aber es gibt auch eine kurze Zusammenfassung.
    Von meiner Seite habe ich:

    • text — die offizielle Zusammenfassung, ein Satz (« Schwere und anhaltende Hitzewelle im Gange. »), begrenzt auf 1000 Zeichen
    • bulletin — die vollständige mehrabsätzige Vorhersage, begrenzt auf 4000 Zeichen
  • Szenenauslöser in Abhängigkeit vom Warnzustand
    In meinem PR meteo france alle 15 Minuten, fragt checkVigilance() die API für jedes Haus ab. Die aktuelle Farbe wird mit der des vorherigen Durchgangs verglichen.
    Wenn sie ansteigt und mindestens 2 (gelb) erreicht, sendet der Dienst EVENTS.METEO_FRANCE.NEW_VIGILANCE. scene.triggers.js:105 empfängt das Ereignis und startet die betroffenen Szenen
    Es ist die Integration, die die Information an Gladys weiterleitet, spontan.
    Dagegen macht onWeatherGet das Gegenteil: Gladys ruft die Integration auf, die Integration antwortet. Die Integration hat keine Möglichkeit zu sagen « etwas passiert gerade ». Das SDK bietet keinen Push-Kanal dafür.
    Folge: Die durch die Warnung ausgelösten Szenen funktionieren nicht mehr. Es sei denn, der Core beginnt selbst, die Wetterintegrationen in regelmäßigen Abständen abzufragen und die Übergänge zu erkennen

Ich schau mal und komm dann wieder auf dich zu!

Hallo @Will_71!

Vielen Dank für dein detailliertes Feedback, es war sehr treffend, die drei von dir aufgezeigten Mängel waren tatsächlich vorhanden. Wir haben sie gerade im PR des generischen Wetter-APIs (#2738) behandelt, wobei wir jeweils die generischste Version beibehalten haben:

1. Die Länge der Warntexten :page_facing_up:

Das Feld description wird von 2000 auf 5000 Zeichen erweitert: Deine Zusammenfassung und der vollständige Bulletin passen hinein (die Bulletins der NWS überschreiten auch regelmäßig 2000 Zeichen, das war nicht spezifisch für Météo France). Im Widget wird das Bulletin auf 3 Zeilen gefaltet und beim Klicken entfaltet, wie in deinem ursprünglichen PR.

2. Die Szenen-Triggers auf die Warnung :high_voltage:

Das war der wichtigste Punkt. Wir haben zwei Dinge gemacht:

  • Zwei neue generische Szenen-Triggers im Core: „Wetteralarm ausgelöst“ und „Wetteralarm beendet“, konfigurierbar pro Haus, Phänomentyp (Wind, Regen-Überschwemmung, Gewitter, Hitzewelle… die 9 Phänomene der MF-Warnung sind im Enum enthalten) und minimale Schwere. Der Core fragt das Wetter alle 30 Minuten ab und differenziert die Alarme: Ein Alarm, der erscheint oder sich verschlimmert, löst aus, ein Alarm, der endet, löst aus. Das funktioniert mit allen Anbietern, ohne etwas auf der Integrationsseite zu implementieren.
  • Ein „Nudge“ für die Frische: Deine Integration, die weiß, wann sich die Warnung ändert, kann external-integration.weather.refresh senden (über requestWeatherRefresh() im SDK). Der Core startet dann sofort seinen Überprüfungszyklus: Die Szene geht in wenigen Sekunden los, anstatt auf die nächste Abfrage zu warten. Das ist absichtlich ein Signal ohne Daten (die Doktrin „Trigger, nicht Daten“, die wir bereits für Webhooks anwenden): Die Daten gehen immer über den normalisierten Weg.

3. Die Warnkarten :world_map:

Das Pivot-Format erhält ein Feld images: Deine Integration deklariert bis zu 3 Bilder (Schlüssel + mehrsprachige Beschriftung), und der Core holt die Bytes auf Anfrage über weather.get-image (onWeatherGetImage(cb) im SDK). Der Core validiert (nur PNG/JPEG, ≤ 500 KB), speichert 10 Minuten im Cache und dient das Bild von der Gladys-Quelle: Der Browser lädt nie eine Drittanbieter-URL. Im Widget zeigt ein Kästchen „Bilder des Anbieters“ deine Karten für Tag und Tag+1 mit ihrer Beschriftung an. Und es ist generisch: Ein Anbieter kann dort auch ein Regenradar oder ein Satellitenbild einfügen.

Das SDK ist mit onWeatherGetImage und requestWeatherRefresh aktualisiert. Mit den feineren Bedingungen, die gerade hinzugefügt wurden (partly-cloudy, pouring, hail + das Flag is_day für die Nachtvarianten) und den typisierten Warnungen sollte jetzt alles, was dein Frontend anzeigt, über die generische API laufen.

Zögere nicht, wenn du noch einen Mangel siehst, indem du deine Integration vorantreibst, sie ist der Pilot des Wettertyps, deine Rückmeldungen kalibrieren den Vertrag für alle folgenden Anbieter. :folded_hands:

Also, ich habe viel iteriert, viele Tests mit der externen OpenWeather-Integration durchgeführt und bin mit dem Ergebnis ganz zufrieden :smiley:

Der Cursor ist gut, also werde ich mergen!

Ich habe gerade die neue externe Integration von openweather installiert und den API-Schlüssel, den ich mit der alten Integration hatte, wiederhergestellt. Ich habe die Option „Kostenlos (Aktuelles Wetter + 5 Tage)“ gewählt, aber ich sehe keinen Unterschied zur alten Integration?

Normalerweise gibt es da keinen Unterschied.

Das Wetter-Widget, das ich vorgeschlagen habe, war für Meteo France, also muss ich daran arbeiten, es zu extrahieren und durch dieses zu ersetzen. Außerdem muss ich die Integration von Meteo France bereitstellen.

Okay, also ist es aktuell nicht möglich, ein Gerät vom Typ „Wetter“ zu erstellen, um es in einer Szene zu verwenden?
Und kann man auch nicht die KI bitten, das Wetter des Tages zu geben?