Merge pull request #73 from pimoroni/patch-user-projects-readme
[EVA-2020-02-2.git] / examples / luftdaten.py
index dd6e967708664f4e3be22233904f576f2ea3c240..84f111776c6f65c0e3d0b5e39b75c8d31625d60a 100755 (executable)
@@ -1,25 +1,20 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 import requests
 import ST7735
 
 import requests
 import ST7735
+import time
 from bme280 import BME280
 from pms5003 import PMS5003, ReadTimeoutError
 from subprocess import PIPE, Popen, check_output
 from PIL import Image, ImageDraw, ImageFont
 from bme280 import BME280
 from pms5003 import PMS5003, ReadTimeoutError
 from subprocess import PIPE, Popen, check_output
 from PIL import Image, ImageDraw, ImageFont
+from fonts.ttf import RobotoMedium as UserFont
 
 try:
     from smbus2 import SMBus
 except ImportError:
     from smbus import SMBus
 
 
 try:
     from smbus2 import SMBus
 except ImportError:
     from smbus import SMBus
 
-import logging
-
-logging.basicConfig(
-    format='%(asctime)s.%(msecs)03d %(levelname)-8s %(message)s',
-    level=logging.INFO,
-    datefmt='%Y-%m-%d %H:%M:%S')
-
-logging.info("""luftdaten.py - Reads temperature, pressure, humidity,
+print("""luftdaten.py - Reads temperature, pressure, humidity,
 PM2.5, and PM10 from Enviro plus and sends data to Luftdaten,
 the citizen science air quality project.
 
 PM2.5, and PM10 from Enviro plus and sends data to Luftdaten,
 the citizen science air quality project.
 
@@ -120,32 +115,35 @@ def send_to_luftdaten(values, id):
     pm_values = dict(i for i in values.items() if i[0].startswith("P"))
     temp_values = dict(i for i in values.items() if not i[0].startswith("P"))
 
     pm_values = dict(i for i in values.items() if i[0].startswith("P"))
     temp_values = dict(i for i in values.items() if not i[0].startswith("P"))
 
-    resp_1 = requests.post("https://api.luftdaten.info/v1/push-sensor-data/",
-             json={
-                 "software_version": "enviro-plus 0.0.1",
-                 "sensordatavalues": [{"value_type": key, "value": val} for
-                                      key, val in pm_values.items()]
-             },
-             headers={
-                 "X-PIN":    "1",
-                 "X-Sensor": id,
-                 "Content-Type": "application/json",
-                 "cache-control": "no-cache"
-             }
+    pm_values_json = [{"value_type": key, "value": val} for key, val in pm_values.items()]
+    temp_values_json = [{"value_type": key, "value": val} for key, val in temp_values.items()]
+
+    resp_1 = requests.post(
+        "https://api.luftdaten.info/v1/push-sensor-data/",
+        json={
+            "software_version": "enviro-plus 0.0.1",
+            "sensordatavalues": pm_values_json
+        },
+        headers={
+            "X-PIN": "1",
+            "X-Sensor": id,
+            "Content-Type": "application/json",
+            "cache-control": "no-cache"
+        }
     )
 
     )
 
-    resp_2 = requests.post("https://api.luftdaten.info/v1/push-sensor-data/",
-             json={
-                 "software_version": "enviro-plus 0.0.1",
-                 "sensordatavalues": [{"value_type": key, "value": val} for
-                                      key, val in temp_values.items()]
-             },
-             headers={
-                 "X-PIN":    "11",
-                 "X-Sensor": id,
-                 "Content-Type": "application/json",
-                 "cache-control": "no-cache"
-             }
+    resp_2 = requests.post(
+        "https://api.luftdaten.info/v1/push-sensor-data/",
+        json={
+            "software_version": "enviro-plus 0.0.1",
+            "sensordatavalues": temp_values_json
+        },
+        headers={
+            "X-PIN": "11",
+            "X-Sensor": id,
+            "Content-Type": "application/json",
+            "cache-control": "no-cache"
+        }
     )
 
     if resp_1.ok and resp_2.ok:
     )
 
     if resp_1.ok and resp_2.ok:
@@ -155,7 +153,7 @@ def send_to_luftdaten(values, id):
 
 
 # Compensation factor for temperature
 
 
 # Compensation factor for temperature
-comp_factor = 1.2
+comp_factor = 2.25
 
 # Raspberry Pi ID to send to Luftdaten
 id = "raspi-" + get_serial_number()
 
 # Raspberry Pi ID to send to Luftdaten
 id = "raspi-" + get_serial_number()
@@ -166,19 +164,25 @@ HEIGHT = disp.height
 
 # Text settings
 font_size = 16
 
 # Text settings
 font_size = 16
-font = ImageFont.truetype("fonts/Asap/Asap-Bold.ttf", font_size)
+font = ImageFont.truetype(UserFont, font_size)
 
 # Display Raspberry Pi serial and Wi-Fi status
 
 # Display Raspberry Pi serial and Wi-Fi status
-logging.info("Raspberry Pi serial: {}".format(get_serial_number()))
-logging.info("Wi-Fi: {}\n".format("connected" if check_wifi() else "disconnected"))
+print("Raspberry Pi serial: {}".format(get_serial_number()))
+print("Wi-Fi: {}\n".format("connected" if check_wifi() else "disconnected"))
+
+time_since_update = 0
+update_time = time.time()
 
 # Main loop to read data, display, and send to Luftdaten
 while True:
     try:
 
 # Main loop to read data, display, and send to Luftdaten
 while True:
     try:
+        time_since_update = time.time() - update_time
         values = read_values()
         values = read_values()
-        logging.info(values)
-        resp = send_to_luftdaten(values, id)
-        logging.info("Response: {}\n".format("ok" if resp else "failed"))
+        print(values)
+        if time_since_update > 145:
+            resp = send_to_luftdaten(values, id)
+            update_time = time.time()
+            print("Response: {}\n".format("ok" if resp else "failed"))
         display_status()
     except Exception as e:
         display_status()
     except Exception as e:
-        logging.info(e)
+        print(e)