+class SensorHistorico(SensorCalibrado):
+
+ def __init__(self, valorBajo, valorAlto, sigma, periodo):
+ # Listado de los valores de las últimas 24hs (inicializado con None)
+ self.historial = [(None, None) for i in xrange(int(24 * 60 * 60 / periodo))]
+ SensorCalibrado.__init__(self, valorBajo, valorAlto, sigma, periodo)
+
+ def getValor(self):
+ "Simula la medición del dispositivo físico."
+ nuevo = SensorCalibrado.getValor(self)
+ hora = time.strftime("%c")
+ self.actualizarHistorial(nuevo, hora)
+ return nuevo
+
+ def actualizarHistorial(self, valor, hora):
+ self.historial.pop(0)
+ self.historial.append((valor, hora))
+ actualizarHistorial = synchronized('historialLock')(actualizarHistorial)
+
+ def getMin(self):
+ minimo = (None, None)
+ for (valor, hora) in self.historial:
+ if minimo[0] is None or valor <= minimo[0]:
+ minimo = (valor, hora)
+ return minimo
+ getMin = synchronized('historialLock')(getMin)
+
+ def getMax(self):
+ maximo = (None, None)
+ for (valor, hora) in self.historial:
+ if valor >= maximo[0]:
+ maximo = (valor, hora)
+ return maximo
+ getMax = synchronized('historialLock')(getMax)
+
+ valorMinimo = property(getMin, doc="Mínimo de las últimas 24hs como " \
+ "tupla (minimo, hora).")
+ valorMaximo = property(getMax, doc="Máximo de las últimas 24hs como " \
+ "tupla (maximo, hora).")
+
+
+class SensorHumedad(SensorHistorico):
+
+ def __init__(self):
+ SensorHistorico.__init__(self, (0.0, 0.0), (100.0, 100.0), 0.3, 300.0)
+
+ def initMu(self):
+ return self.rnd.gauss(70.0, 5.0)
+
+
+class SensorVelocidadViento(SensorHistorico):
+
+ def __init__(self):
+ SensorHistorico.__init__(self, (0.0, 0.0), (100.0, 100.0), 0.1, 0.5)
+
+ def initMu(self):
+ return self.rnd.gauss(30.0, 8.0)
+
+