Error en el nuevo disparador con retraso

@pierre-gilles, creo que he detectado un defecto en el disparador con retraso: He activado la opción ‹ retardo › en un disparador, y me parece que la otra opción ‹ solo si se supera el umbral › ya no se tiene en cuenta correctamente.

Concretamente, estoy monitorizando la temperatura de mi nevera para que no esté demasiado fría. Quiero que Gladys me avise si baja de los 0°, pero solo si esto dura más de 5 minutos, sin repetir la información en cada nueva medición que siga por debajo de 0°.

Por lo tanto, tengo este disparador:

Pero observo esto en mis alertas de Telegram:

Y en el mismo período, aquí está la curva de temperatura:

El disparador solo debería haberse activado una vez, a las 18:37. Pero no las dos siguientes.

¿Es correcto mi análisis?

Efectivamente, eso no es normal :slight_smile:

He creado un issue en Github:

Volveré contigo tan pronto como pueda revisarlo, según mi calendario probablemente será en enero de 2025. ¡(¡Fin de año ocupado!)

¡Vale, gracias! No es crítico, así que puede esperar un poco…

Hola @StephaneB :slight_smile:

Acabo de hacer algunas pruebas y parece que funciona correctamente. No logro reproducir un mal funcionamiento.

En tu caso, como las temperaturas oscilan alrededor de 0°C, es posible que un valor vuelva a 0°C y luego vuelva a -0.1°C, lo que reinicia el funcionamiento ya que el umbral se ha vuelto a cruzar.

Tus mensajes no pueden certificar el error, ya que tus mensajes se activan con un « obtener el último estado » que se activa después de los 5 minutos de espera, por lo que no es el mismo valor que el del disparador.

Si quieres que sigamos investigando, tendríamos que extraer de tu base de datos los valores reales recibidos por Gladys y reproducir el mismo escenario, pero bueno, dime si es un comportamiento que sigues viendo o no :slight_smile:

Gracias por haber intentado reproducirlo. Lo voy a revisar más de cerca y te aviso.

@pierre-gilles,
He vuelto a encontrar el problema que no habías logrado reproducir. Por lo tanto, según yo, sigue presente. Mi nueva situación puede ser más fácil de reproducir:

  • En Gladys, he definido un dispositivo MQTT de tipo « interruptor ».
  • Un flujo de node-red monitorea mi red cada 5 minutos y envía « 0 » o « 1 » al dispositivo MQTT, según la conexión a internet: ausente o presente.
  • En Gladys, una escena debería activarse cuando el dispositivo MQTT pasa a 0 y se mantiene así durante al menos 12 minutos. Aquí está su configuración:

El problema, cuando se pierde la conexión a internet y node-red envía un « 0 » cada 5 minutos, es el siguiente:

  • Al recibir el primer « 0 », la escena detecta el cambio a OFF y me notifica después de 12 minutos. Esto está bien.
  • Pero después de estas 12 minutos, un nuevo « 0 » recibido reinicia el disparador que activa la escena nuevamente después de 12 minutos.
  • Por lo tanto, en la práctica, la escena se activa cada 15 minutos (cuando solo me interesa el primer disparo).

Con este contexto, ¿logras reproducirlo?

Hola @StephaneB :slight_smile:

Acabo de hacer una prueba con exactamente el comportamiento que me has descrito (pero reduciendo el tiempo de espera a 1 minuto para que sea más fácil de ver)

El comportamiento funciona perfectamente en mi caso, solo recibí un mensaje, 1 minuto después de recibir el primer 0:

En mi opinión, en tu caso, el estado vuelve a 1 entre los dos 0.

Puedes investigar usando el widget « gráfico » en un sensor binario para ver cuándo pasa de 0 a 1.

Gracias por tomarte el tiempo de probar, @pierre-gilles. Pero no estoy seguro de que estemos haciendo exactamente la misma prueba :wink:.

He verificado, y mi dispositivo no vuelve a 1 entre dos activaciones. Como es un sensor binario, estoy seguro de ello con el widget gráfico que permite ver los inicios y finales del estado ‹ 0 ›.

Voy a intentar precisar lo que ocurre en mi caso:

  • antes de las 13h: el dispositivo MQTT está en 1
  • 13h: el dispositivo MQTT pasa a 0. La escena no se activa (pero en segundo plano debe comenzar a verificar el retraso de activación de 12 minutos). Comportamiento correcto.
  • 13h05: el dispositivo MQTT recibe ‹ 0 › nuevamente. No pasa nada. Comportamiento correcto.
  • 13h10: el dispositivo MQTT recibe ‹ 0 › nuevamente. No pasa nada. Comportamiento correcto.
  • 13h12: el dispositivo MQTT no ha recibido nada, pero la escena se activa (12 minutos después de las 13h). Comportamiento correcto.
  • 13h15: el dispositivo MQTT recibe ‹ 0 › nuevamente. No pasa nada (pero es aquí donde sospecho que el activador comienza nuevamente a verificar el retraso de 12 minutos). Pero por ahora, comportamiento correcto.
  • 13h20: el dispositivo MQTT recibe ‹ 0 › nuevamente. No pasa nada. Comportamiento correcto.
  • 13h25: el dispositivo MQTT recibe ‹ 0 › nuevamente. No pasa nada. Comportamiento correcto.
  • 13h27: el dispositivo MQTT no ha recibido nada, pero la escena se activa (12 minutos después de las 13h15). Y es este comportamiento el que no es conforme, ya que el dispositivo MQTT no ha vuelto a 1 desde las 13h12.

¿Es esto lo que has reproducido?

Sí, es eso, y tengo el comportamiento esperado :slight_smile:

Acabo de hacer una prueba aún más cercana a tu caso, enviando múltiples 0 (durante el tiempo de espera y después del tiempo de espera):

¡Y tengo el comportamiento esperado correcto! Lo siento :sweat_smile:

Si quieres investigar más, en los registros debes tener 2 registros:

2025-05-29T14:40:39+0200 <info> scene.triggers.js:61 (Object.device.new-state) Programando temporizador para verificar el estado de device_feature "mqtt:connexion-internet-perdue" en 60000ms

(Iniciar temporizador)

Y:

2025-05-29T14:41:39+0200 <info> scene.triggers.js:43 (Object.device.new-state) Scene trigger device.new-state: El temporizador para el sensor mqtt:connexion-internet-perdue ha finalizado.

(Fin del temporizador)

En mis pruebas, el temporizador solo se inicia una vez

Bueno, pues me pondré a ello el sábado o el domingo, te mantendré informado.

¡Manténme al tanto!

Bueno, pues este disparador funciona perfectamente. Y debe ser yo el que está bugueado :stuck_out_tongue_winking_eye:

Disculpa por haberte hecho perder el tiempo, @pierre-gilles

Aprovecho para cerrar el tema.