X-Git-Url: https://git.llucax.com/z.facultad/75.59/weathemulator.git/blobdiff_plain/82a461b46a90cbbf783ff4b7bb0a13c6bb3f5f7d..27bce1f66927aa05c32a8b87d2164e8aab15b87b:/src/sensor.py?ds=inline diff --git a/src/sensor.py b/src/sensor.py index f073387..da38687 100644 --- a/src/sensor.py +++ b/src/sensor.py @@ -51,6 +51,7 @@ class Sensor(Synchronizable, threading.Thread): 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() @@ -143,17 +144,80 @@ class SensorCalibrado(Sensor): 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