Medición de tensión, corriente y firebase

Hola grupo!

Estoy trabajando hace tiempo para poder entregar un proyecto final de un curso de android, la apk quedo lista y funcionando. Concurro al foro por el embebido que se conecta a la aplicación, paso a contar.

El sistema se basa en medición de tensión y corriente, esos valores se suben a una base de datos en forma de potencia (Tensión por corriente) y así se mi consumo mensual de corriente. Para eso estoy utilizando un esp8266 y el ide de arduino.

Las mediciones funcionan correctamente, hago dos mediciones en paralelo y con un 4066 (Switch controlado) puedo unir ambas mediciones en una sola entrada analógica. El software carga bien los datos cada minuto, también procesa bien las horas y días, el tema es que de un momento al otro se detiene el programa

El código utilizado voy a subirlo a pastebin ya que excedo la cantidad de caracteres máximos permitidos si lo pego aca y tampoco puedo ingresarlo como un comentario:

La idea se divide en 3 partes:

  1. cada dos interrupciones (cada medio segundo) obtiene el segundo por servidor NTP, lo almacena en un arreglo de 60 lugares.
  2. Si llego a la cantidad de 60 segundos almacena en firebase el promedio en el lugar del valor de minuto actual
  3. Si la hora cambio trae los valores de firebase, pone en cero todos los minutos y almacena según la hora del día que sea
  4. Si el la hora es cero (cambio el día) almacena en el numero de día actual para así poder ir formando el consumo mensual.

Problemática:

  • Al dejarlo horas funcionando llega un punto que por alguna razón (por la que vengo a pedir ayuda) se detiene luego de poner los minutos de firebase en cero.

Debuggs:
Existen tres posibles problemas:

  • Servidor NTP, para eso por cada pasada sumo uno a un contador, almaceno en firebase y ademas, tengo un Led testigo que queda encendido en el momento en que se detiene indicándome si el servidor NTP no esta obteniendo mas los horarios (El led queda encendido luego de horas de funcionamiento).

  • Conexión Wifi, el ESP8266 intenta reconectarse una vez que pierde la conexión pero para asegurarme puse una subrutina para reconexionar y leds que avisan si esta conectado o no (Ya esta probado y funciona bien la reconexión), problema descartado.

  • Lógica, dudo de esta parte porque si fuese un problema de lógica no tendría que funcionar todas las horas que lo dejo pero si lo hace y de un momento a otro deja de hacerlo. Sin embargo, dejo dispuesta esta causa.

  • Los if contienen una condición que debe cumplirse para ingresar, esta la utilizo para que no entre nuevamente una vez que la hora cambio y el minuto se mantiene durante 60 segundos (en caso contrario perdería un minuto de medición y por cada vez que pase pondría en cero un montón de variables. Si cambia el minuto, hora o día la variable se reinicia esperando nuevamente ese suceso.

  • Librería TICKER, esta parte podría ser un muy posible problema ya que en el momento de reiniciar variables de firebase tengo que apagar las interrupciones y luego volver a prenderlas para que no se sobrescriban datos.

Verificaciones:
Mi aplicación registra minuto a minuto en gráficas y al dejarlo muchas horas reviso y puedo verificar el momento en el que se detuvo, siempre coincide con el ciclo que trae los valores de firebase de minutos, los almacena en la hora del día y se detiene ahí en la hora actual. Ayer lo deje toda la noche funcionando y a las 5am obtuvo todos los datos de la hora 4am, los almaceno en la hora 4 del día, puso todos los minutos de la hora en cero y ahí se detuvo luego de 556 pasadas por el mismo lugar.

Dicho todo esto espero que puedan ayudarme, gracias!!