Extension tiempo espera perro guardian

Buenas, el tiempo maximo de espera del perro guardian es de 8 segundos si no he leido mal, esto, para ciertos proyectos quiza se queda muy corto, tengo 2 ideas en mente para aumentar dicho tiempo de espera, una de ellas, quiza la mas factible, seria crear un perro guardian desde cero con la libreria Time, la segunda, incrementar un segundo contador externo a la libreria siendo cada incremento un aumento de 8 segundos hasta llegar al tiempo de espera esperado. Alguien tiene idea de cual podria ser otra opcion?

Hola Oskar.
Entiendes el concepto de watchdog? Cual es para ti su función?

Buenas, si no creeo entender mal, si tras el tiempo de espera previamente establecido, no se ha refrescado el contador, el perro muerde, pero, por ejemplo, si el maximo tiempo de espera no es suficiente, si una funcion por su naturalidad tardase 10 segundos, la regresesion del oscilador del propio perro guardian, ya habria saltado, dado un error forzado, en cambio, mas de 20 segundos por ejemplo, seria un error natural

No. El perro guardian o watchdog se usa para evitar colgadas en el arduino o cualquier procesador o microprocesador
Tu hablas de usar una librería con un procesador que esta atascado, no esta corriendo nada, ningún código o esta en un loop infinito por eso, a los 8 segundos salta!!!

Ampliar ese tiempo no tiene sentido. Incluso 8 seg es mucho pero tendrá su justificación que no pongo en duda.

Se comprende?

mmm nop, no me refiero a eso, por ejemplo, hacemos una funcion, por ejemplo, incrementar el valor de una variable, por ejemplo, con un contador simple, esto se hace en un loop infinito, con un tiempo de espera entre incrementos de 1 minuto por ejemplo, justo despues del incremento, llamamos al perro, para que refresque su contador interno, todo funciona correctamente durante 30 minutos, por razones extrañas; por ejemplo, el tiempo de espera, es decir, la funcion delay, se queda colgada, como el contador interno del perro guardian, ya ha llegado a su nivel minimo, muerde, y reinicia el programa, hasta aqui, bien no?

Para mi no tiene sentido.
Delay colgado.. todo puede pasar. Pero porque 30 min?
Primero un programa que usa un delay de 30 min para mi es una burrada y entiende bien que quiero decir. Usar delay de 30 min para mi es algo que no considero. Pero entiendo que es un ejemplo.
Para mi puede pasar lo que tu dices con un puntero que se quedó posicionado donde no debe.
Esa situación ocurre en programas con manejo Web y de hecho son de los que mas he leido/respondido.

En esas situaciones 30 min son un mundo y 8 segundos en cambio estan bien.
Sigo sin ver la razón de expandir un watchdog en tiempo.
Seguimos viendo diferentes justificaciones del watchdog.

Esto

Incrementar el valor de una variable, por ejemplo, con un contador simple, esto se hace en un loop infinito, con un tiempo de espera entre incrementos de 1 minuto por ejemplo, justo despues del incremento

No implica llamar al watchdog. Es un mal código de tu parte o mía. Eso lo ves en el puerto serie.. lo corriges y ya. No veo la razón para que esa situación amedite un watchdog.
Pero bueno te dejo avanzar porque tal vez este siendo negativo con tu objetivo.
A ver que opinan los demas.

creo, que, no te paras a leer bien las explicaciones, ya nos ha pasado varias veces entre ambos, no he expuesto que use un delay de 30 minutos, si no que, a los 30 minutos de su funcionamiento, deja de funcionar por las razones que sean externas al codigo, cuando hay funciones, que por su naturaleza tardan mas de 8 segundos, para mi, esto provocaria un error forzado, reiniciando todo el codigo, sin ser un problema de codigo

Oskar_Sanchez:
pero, por ejemplo, si el maximo tiempo de espera no es suficiente, si una funcion por su naturalidad tardase 10 segundos, la regresesion del oscilador del propio perro guardian, ya habria saltado, dado un error forzado, en cambio, mas de 20 segundos por ejemplo, seria un error natural

Ni siquiera una función que dure 10 segundos es habitual (si no está hecha con fines de prueba solamente).

Como dijo surbyte, el watchdog debería ser únicamente para reiniciar el programa en caso de un cuelgue, no para detectar ciclos infinitos provocados o funciones que, por código, se tardan demasiado.
Si es "normal" que la función se tarde tanto, entonces por qué no llamar el reinicio del temporizador dentro de este?

Una sólo vez intenté usarlo con buenos resultados, recuerdo haber hecho todo lo que quise, en base a esta información y algo más que se me ocurrió intentar:

Uso del watchdog

buena idea, llamar de nuevo dentro de la nueva subrutina, o añadir un segundo contador como habia mencionado, pero, ambas opciones, tienen sus riesgos, por ejemplo, llamar dentro de la subrutina, si, solo hubiera una instruccion, que es la que durase tanto tiempo, no haria su faena correctamente, añadir un contador, tampoco … ahi es donde quiza este el verdadero problema

Oskar_Sanchez:
solo hubiera una instruccion, que es la que durase tanto tiempo, no haria su faena correctamente, añadir un contador, tampoco ... ahi es donde quiza este el verdadero problema

Cualquier función de la mayoría de librerías, no suele tardar más del milisegundo. En teoría, estos estan optimizados para tardar el menor tiempo posible.
El 99% de la causa de funciones lentas, es el código creado por uno mismo...

Ahi te doy toda la razon, pero, pensando en todo lo que pueda fallar en un proyecto como el que estoy desarrollando, es menester añadir un perro guardian ya sea el propio de arduino, o uno realizado a medida, se me ocurre un ejemplo, necesitamos disponer de cobertura satelital en todo momento, pero, por diferencias geograficas, no siempre se dispondra de ella, en el momento que no hay señal por ejemplo GSM, podriamos poner una espera de 5 segundos para intentar restablecer la comunicacion, si no lo consigue, y siempre pensando que sea problema del propio modulo GSM ahi si seria eficiente el perro guardian de 8 segundos, teniendo 3 segundos extra ... pero, si, no es culpa del propio modulo, si no, por culpa de las condiciones geograficas, aqui abria un error forzado, una solucion, seria llamar a una subrutina, refrescando de nuevo el contador, y forzando el reincio guardando previamente los valores necesarios en la eeprom para su futura lectura al reinicio provocado por el perro guardian

Pero todo eso lo estas suponiendo... arma y genera/provoca la falla y mira como se comporta con lo establecido.
Por algo definieron 8 segundos y no 80. No te parece?

Tienes tanto de que preocuparte para estar llendo tan lejos con este tema (estas en tu derecho de hacerlo) que de por si dudo que puedas obtener una solución, salvo que sea externa como bien dijiste. Un timer externo o un ATtinyXX que reciba un pulso de tu arduino principal y si no lo hace, tu reseteas con ese ATtinyXX al principal.

quiza, el perro guardian, no esta muy desarrollado en operaciones a una escala mayor a una respuesta de milisegundos, por ejemplo, un caso bastante practico seria en los routers, si cada 2 segundos no has recibido un solo byte, activa el reinicio pensando en que sea un problema del propio router, si por ende, era un problema de la distribuidora, en los 30-60 segundos que tarda el reinicio del aparato ya se habra solucionado ... un cliente de juegos online que tenia el servidor en portugal por cuestiones legales de juego online, frecuentemente, la compañia le dejaba colgado por un fallo propio de instalacion, teniendo que ir un conocido hasta el piso donde se alojaba el servidor, la solucion, fue hacer un dispositivo de reinicio via sms para no tener que molestar tanto al amigo, dado que tardaron 3 meses en solventar la incidencia

a mi modo de ver el proyecto, quiero asegurar el funcionamiento del dispositivo todo lo que pueda, todo es muy complejo cuando se pretende hacer algo tan exacto, usando la alarma de un RTC DS3231 cada x segundos por ejemplo, es la solucion mas fiable a corto plazo, y estas muy acertado, por ahora, desconozco si hay algun reloj en tiempo real que disponga de mas de 2 alarmas como el 3231, pues, no puedo pretender llevar el artilugio de 3231

A ver si entiendo…
Para qué reiniciar todo el programa si lo que creo que necesitas es un “timeout” (tiempo de espera) de… una conexión de red?

Para desenredar el asunto, creo que ya va siendo hora que compartas el código; para así ver qué librerías estás usando para tu propósito.

Te pido esto porque librerías como Ethernet tienen la función connect (clase Client); el cuál retorna si la conexión fue exitosa o no.
Con base en esto, ahí decides qué hacer en caso de…

Son hipoteticos casos, en mi caso, lo unico que pretendo salvoguardar es el correcto funcionamiento de arduino bajo cualquier imprevisto pensado. Ya sea una conexion de red, una conexion satelital, o cualquiera de las operaciones posibles, siempre hay que pensar en como salir de ahi siempre cuando sea un problea provocado por hardware.

Las 3 soluciones planteadas, las tengo desarrolladas, pero, con sus contras muy a la vista, la mas efectiva, es poner un segundo contador al propio perro guardian multiplicando entre tantas veces como se quiera el tiempo definido maximo de la libreria.

Cuando tenga los ensayos realizados, los compartire para quien le pueda sacar provecho. De hecho, los contadores inteligentes de consumo de luz, tienen el perro guardian esperando 1 minuto por todos los ruidos generados del exterior.