Exemple #1
0
    temperature = float(temperaturedata[2:])
    temperature = temperature / 1000 
    return temperature


sensorsToMonitor = getThermometerList()
publishIntervalMins = sensor_common.config.getint('intervals','temp_publish_mins')
start = sensor_common.getStart(publishIntervalMins)
sensor_common.waitUntil(start, True)

while True:
    sensorReadings = []
    #Create space in sensorsReadings for readings for each sensor
    for sensorId in sensorsToMonitor:
        sensorReadings.append([])
    #For each minute between now and the final reading, take a reading
    for x in range(publishIntervalMins):
        start = start + datetime.timedelta(seconds=60)
        sensor_common.waitUntil(start, True)
        print("Reading @ " + str(datetime.datetime.now()))
        for y in range(len(sensorsToMonitor)):
            currentTemp = readTemperature(sensorsToMonitor[y])
            sensorReadings[y].append(currentTemp)
    #Calculate and publish aggregate reading to messagebus
    print("Publishing @ " + str(datetime.datetime.now()))
    for z in range(len(sensorReadings)):
        aggReading = sum(sensorReadings[z])/float(len(sensorReadings[z]))
        aggSensorId = sensorsToMonitor[z]
        message = sensor_common.enqueueSensorMessage(aggReading, aggSensorId, start)
        print("Publishing : " + str(message))
    # set up the SPI interface pins
    GPIO.setup(SPIMOSI, GPIO.OUT)
    GPIO.setup(SPIMISO, GPIO.IN)
    GPIO.setup(SPICLK, GPIO.OUT)
    GPIO.setup(SPICS, GPIO.OUT)

    sensorsToMonitor = []
    for x in range(sensor_common.config.getint('adc_sensors', 'count')):
        sensorsToMonitor.append(sensor_common.config.get('adc_sensors', str(x)))
    #print sensorsToMonitor

    readingIntervalMins = sensor_common.config.getint('intervals','soil_reading_mins')
    start = sensor_common.getStart(readingIntervalMins)
    sensor_common.waitUntil(start, True)
 
    while True:
        #Read and publish for each sensor
        print("Publishing @ " + str(datetime.datetime.now()))
        for i in range(len(sensorsToMonitor)):
            sensorId = sensorsToMonitor[i]
            sensorReading = readadc(i, SPICLK, SPIMOSI, SPIMISO, SPICS)
            moisturePerc = 100.0 - ((sensorReading / 4096.0) * 100.0)
            message = sensor_common.enqueueSensorMessage(moisturePerc, sensorId, start)
            print("Publishing : " + str(message))        
        #Wait until next reading point
        sys.stdout.flush()
        start = start + datetime.timedelta(seconds=(readingIntervalMins * 60))
        sensor_common.waitUntil(start, True)
finally:
    print("Cleaning up GPIO.");
    GPIO.cleanup()