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()