Ubidots Community

Calculo Horas frio

Necesito obtener la cantidad de horas en la cual una variable de temperatura ha estado bajo losn7 deg celcius. Esto en un rango de tiempo dado, desde el 1 de mayo hasta el 1 de agosto.

He realizado una variable syntetica con un expresion como when(temp<7, timestamp), pero esto me enrrega el tiempo en mSegundos pero desde el primer registro de la variable que fue ya hace como 2 años atras.

Cualquier ayuda muchas gracias.

Buenas tardes, @jip007

Espero que estés muy bien,

Las variable sinteticas permiten hacer análisis en tiempo real pero, en este caso para facilitar este calculo de ahora en adelante. Yo recomendaría configurar primero un evento que actualice una variable de alerta cuando la temperatura esté por debajo de 7 grados. Dicho evento actualizaría una variable llamada, por decir algo, “alerta de temperatura” con un 1 y cuando este en condiciones normales, es decir cuando cambie de un valor inferior a 7 a uno superior o igual a 7, actualizaría la variable “alerta de temperatura” con un 0 ¿Si me hago a entender?.

Para mayor información sobre los eventos y el retorno a condiciones normales, revisar por favor este artículo.

Con base en esa variable de “alerta de temperatura” podrías implementar fácilmente este ejemplo de nuestro artículo sobre variables sintéticas avanzadas para calcular por cuanto tiempo la variable de temperatura ha estado en un valor menor a 7 grados. Esto creo que te ayudara a implementar ese proceso de ahora en adelante en tiempo real pero, para análisis data histórica como la que tú necesitas, recomiendo hacer el análisis por fuera de la plataforma descargando la data de la variable dentro de las fechas de interés y hacer los análisis usando Python/Pandas u otra herramienta similar que permita analizar series de tiempo. Allí podrías agrupar los datos por valores menores a 7 grados y luego sumas los intervalos de tiempo.

Cordialmente,

-Santiago

Santiago, genial, muchas gracias por la informacion.

Originalmente habia implementado esto:
where(ambtemp<=7, ambtemp.timestamp)/3600000 …eso me detecta bien el humbral de <=7°C y me entrega el timestamp.

En base a eso como podria generar la ventana de tiempo que deseo?, desde 1 mayo a 1 agosto?

He visto la funcion “rolling”, pero no se si me servira.

Quedo atento a tu opinion, gracias

Buenos días @jip007

Ninguno de los rangos de tiempo disponibles en las variables sinteticas te permite sacar la cantidad que necesitas en la ventana del del 1 de mayo hasta el 1 de agosto.

Sin embargo una forma de obtener una serie que indique la cantidad de horas que una variable ha estando por debajo de una valor de referencia o threshold cada mes, se obtiene con la siguiente expresion:

threshold = 14
actualValue =  ambtemp
previousValue = shift(ambtemp ,-1)
actualTime = ambtemp.timestamp
previousTime = shift(ambtemp.timestamp, -1)
dT = (actualTime - previousTime)/3600000
sum(where(actualValue <=threshold and previousValue<=threshold, dT),"1M")

Asi queda la sintetica implementada a partir de una variable cruda llamada dew_point

Espero que esto te pueda ayudar a comprender mejor las posibilidades y limitaciones de las variables sintéticas,

Saludos,

-Santiago