return self.mu
def run(self):
+ #TODO Alguna forma de pausarlo
while 1:
# Hacer algún signal al monitor de los sensores
self.valorActual = self.getValor()
self.valorAlto)
+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)
+
+
if __name__ == '__main__':
DEBUG = True
sensor = SensorDireccionViento()
sensor.setDaemon(True)
sensor.start()
- SensorCalibrado.initMu = lambda self: 10
- sensor2 = SensorCalibrado((0.0,0.0), (100.0,100.0), 0.2, 0.5)
+ sensor2 = SensorHumedad()
sensor2.setDaemon(True)
sensor2.start()
+ sensor3 = SensorVelocidadViento()
+ sensor3.setDaemon(True)
+ sensor3.start()
time.sleep(2)
sensor2.valorBajo = (0.0, -10.0)
sensor2.valorAlto = (100.0, 10.0)
+ print sensor3.valorMinimo, sensor3.valorMaximo
time.sleep(3)
+ print sensor3.valorMinimo, sensor3.valorMaximo