Mejoras en la integración de externos

Tras los desarrollos de integración externa, aquí hay algunas carencias que sería bueno implementar para mejorar el uso de las integraciones externas.

  1. Recuperar y seleccionar la lista de casas con un selector.
    Hoy, si quiero dirigirme a una casa de la instalación, no puedo tener una lista.
    Por ejemplo, en esta integración, debo indicar manualmente el nombre de mi casa. Con una lista, sería más práctico.

  2. Añadir un valor decimal en la configuración.
    Quería poder indicar un precio con un decimal para calcular el monto de mi stock de pellets. Algo imposible hoy.
    image

  3. Siempre con mis precios, me gustaría poder tener una zona de texto/numérica en los widgets de las integraciones.
    Por ejemplo, siempre en mi stock de pellets, el precio cambia bastante a menudo y cuando introduzco una nueva paleta en stock, el precio ha cambiado. Para cambiar el precio, ir a la integración, cambiar el precio, volver al tablero para presionar un botón para validar la entrega es un proceso bastante molesto, en mi opinión.


    Si tuviéramos la posibilidad de indicar esto directamente en el widget, evitaría los viajes de ida y vuelta.

  4. Poder declarar dispositivos en las integraciones meteorológicas.
    El objetivo sería tener, por ejemplo, un dispositivo de Meteorología con diferentes funcionalidades como la temperatura, la presión atmosférica, etc., para poder usarlo en las escenas, hacer gráficos, etc.

Hola @Will_71,

Gracias por estos comentarios, son muy concretos y me alegra ver que tu integración de pellets está tomando forma.

Aclaro que Claude me ayudó a redactar este mensaje, pero fui yo quien reflexionó sobre cada punto :joy:

1. Elegir la casa en una lista

Sí, es una buena idea. Hoy en día, las listas dinámicas (source) solo pueden proponer dispositivos de la integración. Vamos a agregar "source": "houses": la lista mostrará los nombres de las casas y registrará su selector, es decir, el identificador que ya te devuelve GET /house. Por lo tanto, podrás hacer la correspondencia directamente.

Funcionará en todas partes donde se utilice este formato de campo: configuración, acciones, ajustes de widget y escenas. Estoy preparando una PR.

Única restricción: tendrás que aumentar la gladys_version mínima de tu manifiesto, ya que las versiones más antiguas de Gladys rechazan una fuente que no conocen.

2. Valor decimal en la configuración

En realidad, es un error. El servidor ya acepta decimales, pero el campo numérico del formulario no tiene un atributo step: el navegador solo acepta números enteros y bloquea el registro. ¡Incluso el ejemplo de la documentación (una latitud a 48.85) no pasaba! :sweat_smile:

He abierto un ticket: External integrations: `number` fields reject decimal values in the browser · Issue #3166 · GladysAssistant/Gladys · GitHub

La corrección se reduce a una línea y se aplicará a todos los formularios de las integraciones (configuración, acciones, widgets, escenas).

3. Ingresar un valor desde el widget

La necesidad es real, tu flujo actual (ir a la integración, cambiar el precio, volver al tablero de control) no es práctico.

Por otro lado, no quiero campos de entrada mostrados permanentemente en los widgets. Hemos optado porque los widgets sean de solo lectura + pulsación: es lo que permite a Gladys garantizar un rendimiento limpio en todas partes (móvil, tableta mural, tema claro u oscuro).

Mi propuesta: un botón de widget puede declarar campos. Cuando se presiona, un pequeño formulario se abre en la tarjeta, precompletado por tu integración, y Gladys valida los valores antes de enviártelos.

En tu widget, quedaría así (maqueta):

Si un valor está fuera de los límites que has declarado, el error se muestra debajo del campo:

Y una vez guardado, tu mensaje de retorno se muestra y la tarjeta se actualiza:

En cuanto a la integración, el botón gana una tabla fields, en el mismo formato que los campos de las acciones del manifiesto. Como el contenido del widget se construye a cada solicitud, el valor predeterminado puede ser el último precio que has registrado:

{
  "type": "button",
  "label": { "en": "Pallet delivered", "fr": "Palette livrée" },
  "icon": "truck",
  "action": {
    "key": "delivery",
    "fields": [
      { "key": "bags", "type": "number", "required": true, "min": 1, "max": 200, "default": 72,
        "label": { "en": "Bags delivered", "fr": "Sacs livrés" } },
      { "key": "price_per_bag", "type": "number", "required": true, "min": 0, "max": 50, "default": 7.3,
        "label": { "en": "Price per bag", "fr": "Prix par sac" } }
    ]
  }
}

Y recibes los valores ingresados, ya validados, en values:

gladys.onWidgetAction('pellets', async (actionKey, params, { settings, values }) => {
  if (actionKey === 'delivery') {
    await stock.addDelivery(values.bags, values.price_per_bag);
    return { message: { fr: `+${values.bags} sacs enregistrés` } };
  }
});

Algunas reglas previstas:

  • Máximo 4 campos, de tipo número, texto, casilla de verificación o lista;
  • el formulario solo aparece después de la pulsación, la tarjeta en reposo no cambia;
  • como los botones de widget actuales, es utilizable por cualquier usuario conectado: estos valores deben tratarse, por lo tanto, como un evento (una entrega), no como una modificación de la configuración de la integración.

Esto aún no está especificado ni desarrollado. ¿Qué opinas? ¿Esto cubriría tu caso?

4. Declarar dispositivos en las integraciones meteorológicas

Para el uso en escenas, no es necesario dispositivos: desde Gladys 5.1, cualquier integración, incluida una integración meteorológica, puede declarar sus propios disparadores y acciones de escena (scene_triggers y scene_actions en el manifiesto). Por ejemplo:

  • una acción « Obtener el clima actual » que devuelve la temperatura, la presión, el viento… en outputs. Las acciones siguientes de la escena pueden utilizar estos valores, y una condición « Continuar solo si » permite filtrarlos;
  • un disparador activado por tu integración cuando algo ocurre (« lluvia anunciada en la hora », por ejemplo).

Para los gráficos, una integración meteorológica también puede declarar un widget con un componente chart alimentado por sus propios datos.

Por otro lado, no soy muy favorable a mezclar los conceptos de dispositivo y clima. En Gladys, un dispositivo es algo físico: un equipo que controlas o un sensor que mide en tu casa. El clima son datos proporcionados por un servicio, con su propio formato (condiciones actuales, pronósticos por hora y por día, alertas) y su propio widget. Si transformamos los pronósticos en dispositivos, terminamos con falsos sensores mezclados con los verdaderos (en las habitaciones, los gráficos, las escenas…), y cada proveedor meteorológico crearía los suyos a su manera.

Si necesitas una temperatura exterior real medida, un sensor físico sigue siendo la mejor solución, y él será un dispositivo.

¡Muchas gracias por estos comentarios!

¡Hola a todos!

Este tema está ahora en desarrollo.

Se ha abierto una PR para aceptar decimales en los campos number de las integraciones externas:

No dudes en seguir la PR, probar (opcional, especialmente para pequeñas solicitudes) y dar tus comentarios aquí si es necesario.

Gracias por tu respuesta @pierre-gilles.
Todas tus propuestas cubren mis necesidades.

En cuanto a la parte de Meteorología, personalmente, ya lo hago a través de escenas, pero era una solicitud de un usuario que simplemente quería obtener esto a través de dispositivos para evitar hacer escenas.

¡Hola a todos!

Este tema ahora está en desarrollo.

Se ha abierto una PR para permitir que un botón de acción de widget abra un formulario:

No duden en seguir la PR, probar (opcional, especialmente para pequeñas solicitudes) y dar sus comentarios aquí si es necesario.

¡Hola a todos!

Este tema ahora está en desarrollo.

Se ha abierto una PR para permitir que las integraciones externas elijan una casa de una lista (source: "houses"):

No duden en seguir la PR, probar (opcional, especialmente para pequeñas solicitudes) y dar sus comentarios aquí si es necesario.

@Will_71 ¿Qué opinas de este PR: External integration widgets: let an action button open a form by Pierre-Gilles · Pull Request #3168 · GladysAssistant/Gladys · GitHub? :slight_smile:

Lo miro esta noche y te aviso.

@pierre-gilles, para mí está bien. :star_struck: :clap:

He modificado mi integración externa y la he validado en tu imagen.

.

@pierre-gilles no entiendo por qué no podríamos crear dispositivos « meteorológicos » ya que en las integraciones « calidad del aire », « vigieau », « índice UV », « speed test », « precios de combustible », « programas de televisión », etc. … crean dispositivos que podemos usar en las escenas.

Genial, lo integraré en la próxima versión de Gladys :slight_smile:

Ya respondí aquí :slight_smile:

@pierre-gilles: mi pregunta era mucho más precisa:
no entiendo por qué no podríamos crear dispositivos « meteorológicos » ya que en las integraciones « calidad del aire », « vigieau », « índice UV », « speed test », « precios de combustible », « programas de televisión », etc.… sí crean dispositivos que podemos usar en las escenas.

los dispositivos de estas integraciones externas no corresponden a dispositivos físicos, sino a proveedores: entonces, ¿por qué la integración externa de Météo-France no podría hacer lo mismo?