|
1 | 1 | #!/usr/bin/env python3 |
2 | 2 |
|
3 | 3 | import sys |
| 4 | +import os |
| 5 | +import yaml |
4 | 6 |
|
5 | 7 | # Import-Pfade setzen |
6 | | -sys.path.append("sds011") |
7 | | -sys.path.append("bme280") |
| 8 | +sys.path.append(os.path.join(sys.path[0],"sds011")) |
| 9 | +sys.path.append(os.path.join(sys.path[0],"bme280")) |
8 | 10 |
|
9 | 11 | import time |
10 | 12 | import json |
|
13 | 15 | from sds011 import SDS011 |
14 | 16 | from Adafruit_BME280 import * |
15 | 17 |
|
16 | | -# Logger initialisieren |
17 | | -#import logging |
18 | | -#logger = logging.getLogger() |
19 | | -#logger.setLevel(logging.INFO) |
| 18 | +# Config |
| 19 | +with open("config.yml", 'r') as ymlfile: |
| 20 | + config = yaml.load(ymlfile) |
| 21 | + |
| 22 | +# Logging |
| 23 | +import logging |
| 24 | +logging.basicConfig(level=logging.DEBUG) |
20 | 25 |
|
21 | 26 | bme280 = BME280( |
22 | 27 | address=0x76, |
|
34 | 39 | # Set dutycyle to nocycle (permanent) |
35 | 40 | dusty.dutycycle = 0 |
36 | 41 |
|
| 42 | +class Measurement: |
| 43 | + def __init__(self): |
| 44 | + pm25_values = [] |
| 45 | + pm10_values = [] |
| 46 | + dusty.workstate = SDS011.WorkStates.Measuring |
| 47 | + try: |
| 48 | + for a in range(8): |
| 49 | + values = dusty.get_values() |
| 50 | + if values is not None: |
| 51 | + pm10_values.append(values[0]) |
| 52 | + pm25_values.append(values[1]) |
| 53 | + finally: |
| 54 | + dusty.workstate = SDS011.WorkStates.Sleeping |
| 55 | + |
| 56 | + self.pm25_value = np.mean(pm25_values) |
| 57 | + self.pm10_value = np.mean(pm10_values) |
| 58 | + self.temperature = bme280.read_temperature() |
| 59 | + self.humidity = bme280.read_humidity() |
| 60 | + self.pressure = bme280.read_pressure() |
| 61 | + |
| 62 | + def sendInflux(self): |
| 63 | + cfg = config['influxdb'] |
| 64 | + |
| 65 | + if not cfg['enabled']: |
| 66 | + return |
| 67 | + |
| 68 | + data = "feinstaub,node={} SDS_P1={:0.2f},SDS_P2={:0.2f},BME280_temperature={:0.2f},BME280_pressure={:0.2f},BME280_humidity={:0.2f}".format( |
| 69 | + cfg['node'], |
| 70 | + self.pm10_value, |
| 71 | + self.pm25_value, |
| 72 | + self.temperature, |
| 73 | + self.pressure, |
| 74 | + self.humidity, |
| 75 | + ) |
| 76 | + |
| 77 | + requests.post(cfg['url'], |
| 78 | + auth=(cfg['username'], cfg['password']), |
| 79 | + data=data, |
| 80 | + ) |
| 81 | + |
| 82 | + def sendLuftdaten(self): |
| 83 | + if not config['luftdaten']['enabled']: |
| 84 | + return |
| 85 | + |
| 86 | + self.__pushLuftdaten('https://api-rrd.madavi.de/data.php', 0, { |
| 87 | + "SDS_P1": self.pm10_value, |
| 88 | + "SDS_P2": self.pm25_value, |
| 89 | + "BME280_temperature": self.temperature, |
| 90 | + "BME280_pressure": self.pressure, |
| 91 | + "BME280_humidity": self.humidity, |
| 92 | + }) |
| 93 | + self.__pushLuftdaten('https://api.luftdaten.info/v1/push-sensor-data/', 1, { |
| 94 | + "P1": self.pm10_value, |
| 95 | + "P2": self.pm25_value, |
| 96 | + }) |
| 97 | + self.__pushLuftdaten('https://api.luftdaten.info/v1/push-sensor-data/', 11, { |
| 98 | + "temperature": self.temperature, |
| 99 | + "pressure": self.pressure, |
| 100 | + "humidity": self.humidity, |
| 101 | + }) |
| 102 | + |
| 103 | + |
| 104 | + def __pushLuftdaten(self, url, pin, values): |
| 105 | + requests.post(url, |
| 106 | + json={ |
| 107 | + "software_version": "python-dusty 0.0.1", |
| 108 | + "sensordatavalues": [{"value_type": key, "value": val} for key, val in values.items()], |
| 109 | + }, |
| 110 | + headers={ |
| 111 | + "X-PIN": str(pin), |
| 112 | + "X-Sensor": config['luftdaten']['sensor'], |
| 113 | + } |
| 114 | + ) |
| 115 | + |
| 116 | + |
37 | 117 |
|
38 | 118 | def run(): |
39 | | - pm25_values = [] |
40 | | - pm10_values = [] |
41 | | - dusty.workstate = SDS011.WorkStates.Measuring |
42 | | - try: |
43 | | - for a in range(8): |
44 | | - values = dusty.get_values() |
45 | | - if values is not None: |
46 | | - pm10_values.append(values[0]) |
47 | | - pm25_values.append(values[1]) |
48 | | - finally: |
49 | | - dusty.workstate = SDS011.WorkStates.Sleeping |
50 | | - |
51 | | - pm25_value = np.mean(pm25_values) |
52 | | - pm10_value = np.mean(pm10_values) |
53 | | - |
54 | | - print('pm2.5 = {:f} '.format(pm25_value)) |
55 | | - print('pm10 = {:f} '.format(pm10_value)) |
56 | | - |
57 | | - temperature = bme280.read_temperature() |
58 | | - humidity = bme280.read_humidity() |
59 | | - pressure = bme280.read_pressure() |
60 | | - |
61 | | - print('Temp = {:0.2f} deg C'.format(temperature)) |
62 | | - print('Humidity = {:0.2f} %'.format(humidity)) |
63 | | - print('Pressure = {:0.2f} hPa'.format(pressure/100)) |
| 119 | + m = Measurement() |
| 120 | + |
| 121 | + print('pm2.5 = {:f} '.format(m.pm25_value)) |
| 122 | + print('pm10 = {:f} '.format(m.pm10_value)) |
| 123 | + print('Temp = {:0.2f} deg C'.format(m.temperature)) |
| 124 | + print('Humidity = {:0.2f} %'.format(m.humidity)) |
| 125 | + print('Pressure = {:0.2f} hPa'.format(m.pressure/100)) |
| 126 | + |
| 127 | + m.sendLuftdaten() |
| 128 | + m.sendInflux() |
64 | 129 |
|
65 | 130 |
|
66 | 131 | starttime = time.time() |
|
0 commit comments