Integración externa: Meteo France

:ok_hand:

¿Y mantienes la información de las API si pasas de un servicio a otro?

Un pequeño comentario sobre tu segundo párrafo:
image
Creo que podemos eliminar Francia para tener solo Météo de forma genérica para la elección del widget.

Sí, las claves de la API se guardan en la base de datos, por lo que puedes cambiar de una fuente a otra sin volver a introducir la clave. Y dado el tamaño de la clave de Meteo France, es mejor así. Pero bueno, Meteo France sigue siendo opcional, solo para mostrar el mapa.

Sí, está previsto para el texto, pero como aún no he reemplazado el antiguo widget del tiempo, por ahora sigue llamándose Meteo France. Lo cambiaré una vez que se haya hecho la limpieza.

¡Prefiero este enfoque! Un solo widget meteorológico, con dos integraciones separadas.

De hecho, así es como funciona todo Gladys: solo hay un widget por tipo de funcionalidad, y luego cada marca o tecnología tiene su propia integración para gestionar la comunicación con el exterior de Gladys.

La imagen está actualizada para quienes quieran probar:

docker pull willde71/gladys-test:meteofrance_integration

Por lo tanto, tenemos una integración de OpenWeather que no ha cambiado y una nueva integración de Meteo France que permite obtener los datos meteorológicos solo para Francia sin clave API.
Una clave API opcional permite obtener los mapas de vigilancia de Meteo France.

El widget meteorológico se ha actualizado completamente con el nuevo diseño. Al actualizar, el panel de control se actualizará.

La configuración del widget ha cambiado un poco, ya que ahora se encuentra la opción de elegir la fuente de datos meteorológicos:

Aquí están los detalles de las configuraciones posibles según la fuente. OpenWeather en versión gratuita no ofrece los mismos datos que Meteo France. De ahí las diferencias.

Aquí hay algunas imágenes



También he añadido un disparador y acciones en las escenas:

Un disparador en el nivel de alerta

Una acción Obtener la vigilancia de Meteo France


Las variables expuestas para su uso en los mensajes.

Una acción Enviar el mapa de vigilancia de Meteo France

Ejemplo en Telegram


He podido probarlo y es perfecto :slight_smile:
No he encontrado ningún error por mi parte :wink:

Hola @Will_71,

He lanzado Fable 5 en el proyecto de integraciones externas de tipo “Météo” para desbloquearte. :slightly_smiling_face:

El objetivo es permitirte migrar tu integración a una integración externa, para que puedas desarrollarla con total autonomía.

En cuanto al widget, claramente vamos a evolucionar lo existente inspirándonos en tu excelente propuesta. ¡Gracias por todo el trabajo que has realizado, es realmente una muy buena base!

@Will_71 :

Por info, te he invitado al repositorio de Gladys para que puedas ser invitado a revisar las PRs :slight_smile:

@Will_71 El PR del SDK:

¿Puedes revisar si el contrato de la API te parece bien?

Lo miro y te aviso

¡Genial! Claude me dice que el enfoque y el formato adoptados son normalmente suficientes y totalmente compatibles con el enfoque que has tomado con Météo France.

Por lo tanto, normalmente podrás proponer el nuevo widget y una integración externa de Météo France basándote en esta base :slight_smile:

después podremos ajustar si es necesario

Sí, la única limitación es que ahora que proporcionamos una API, todo debe seguir siendo retrocompatible y versionado en caso de cambios breaking.

Por lo tanto, ¡no se puede cambiar el formato de la API cada dos por tres!

Pero en este caso estoy bastante confiado.

Voy a hacer una integración externa gladys-openweather por mi parte

Vuela con tus propias alas, pequeño Claude:

He revisado tu PR sobre el SDK.

Aquí están los puntos que he notado

  • Tarjeta de vigilancia — WeatherPayload no tiene ningún campo de imagen. Ningún canal. No funcionará.

  • La descripción de las alertas está limitada a 2000 caracteres. No estoy seguro de que esto funcione con el boletín completo de Météo France, además también da un resumen corto.
    De mi lado tengo:

    • text — el resumen oficial, una frase (« Episodio canicular severo y duradero en curso. »), limitado a 1000 caracteres
    • bulletin — el boletín completo de varios párrafos, limitado a 4000 caracteres
  • Los disparadores de escena en función del estado de vigilancia
    En mi PR de Météo France, cada 15 minutos, checkVigilance() consulta la API para cada casa. El color del momento se compara con el del turno anterior.
    Si sube y alcanza al menos 2 (amarillo), el servicio emite EVENTS.METEO_FRANCE.NEW_VIGILANCE. scene.triggers.js:105 recupera el evento y lanza las escenas concernidas
    Es la integración la que envía la información a Gladys, espontáneamente.
    Sin embargo, onWeatherGet hace lo contrario: Gladys llama a la integración, la integración responde. La integración no tiene ningún medio para decir « está pasando algo ahora ». El SDK no expone un canal push para eso.
    Consecuencia: las escenas desencadenadas por la vigilancia ya no funcionan. A menos que el núcleo comience a interrogar las integraciones meteorológicas a intervalos regulares y a detectar las transiciones

¡Lo miro y te aviso!

¡Hola @Will_71!

Gracias por tu respuesta detallada, fue muy precisa, los tres puntos que señalaste eran reales. Acabamos de tratarlos en la PR de la API meteorológica genérica (#2738), manteniendo en cada caso la versión más genérica posible:

1. La longitud de los textos de alerta :page_facing_up:

El campo description pasa de 2000 a 5000 caracteres: tu resumen + el boletín completo caben (los boletines CAP de la NWS también superan regularmente los 2000 caracteres, no era específico de Météo France). En el widget, el boletín se muestra plegado en 3 líneas y se despliega al hacer clic, como en tu PR original.

2. Los disparadores de escena sobre la vigilancia :high_voltage:

Este era el punto más importante. Hemos hecho dos cosas:

  • Dos nuevos disparadores de escena genéricos en el núcleo: « Alerta meteorológica activada » y « Alerta meteorológica terminada », configurables por casa, tipo de fenómeno (viento, lluvia-inundación, tormentas, ola de calor… los 9 fenómenos de la vigilancia MF están en el enum) y severidad mínima. El núcleo consulta el clima cada 30 minutos y difunde las alertas: una alerta que aparece o empeora dispara, una alerta que termina dispara. Funciona con todos los proveedores, sin implementar nada en la integración.
  • Un « empujón » para la frescura: tu integración, que sabe cuándo cambia la vigilancia, puede enviar external-integration.weather.refresh (a través de requestWeatherRefresh() en el SDK). El núcleo entonces relanza inmediatamente su ciclo de verificación: la escena parte en unos segundos en lugar de esperar la próxima consulta. Es intencionalmente una señal sin datos (la doctrina « trigger, not data » que ya aplicamos a los webhooks): los datos siempre pasan por el camino normalizado.

3. Los mapas de vigilancia :world_map:

El formato pivote gana un campo images: tu integración declara hasta 3 imágenes (clave + etiqueta multilingüe), y el núcleo busca los bytes bajo demanda a través de weather.get-image (onWeatherGetImage(cb) en el SDK). El núcleo valida (solo PNG/JPEG, ≤ 500 Ko), almacena en caché durante 10 minutos y sirve la imagen desde el origen Gladys: el navegador nunca carga una URL de terceros. En el widget, una casilla « Imágenes del proveedor » muestra tus mapas J y J+1 con su etiqueta. Y es genérico: un proveedor también puede poner un radar de lluvia o una imagen satelital.

El SDK está actualizado con onWeatherGetImage y requestWeatherRefresh. Con las condiciones más finas añadidas justo antes (partly-cloudy, pouring, hail + la bandera is_day para las variantes de noche) y las alertas tipadas, todo lo que tu front mostraba debería pasar ahora por la API genérica.

No dudes en avisar si ves alguna carencia al llevar tu integración, es el piloto del tipo meteorológico, tus comentarios calibran el contrato para todos los proveedores siguientes. :folded_hands:

Bueno, he iterado bastante, he hecho bastantes pruebas con la integración externa de OpenWeather, y estoy bastante contento con el resultado :smiley:

El cursor está bien, así que voy a hacer merge.

Acabo de instalar la nueva integración externa de openweather, he recuperado la clave API que tenía con la antigua integración, he elegido la opción « gratis (clima actual + 5 días) »

pero no encuentro ninguna diferencia con la anterior?

Normalmente no hay diferencia.

El widget meteorológico que propuse era para Météo-France, por lo que debo trabajar en él para extraerlo y reemplazarlo. También debo proporcionar la integración de Météo-France.

Vale, entonces actualmente no es posible crear un dispositivo de tipo « météo » para poder usarlo en una escena.
¿Y tampoco se puede pedir a la IA que dé el pronóstico del día?