-#!/usr/bin/env python
+#!/usr/bin/env python3
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 fonts.ttf import RobotoMedium as UserFont
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.
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:
# Compensation factor for temperature
-comp_factor = 1.2
+comp_factor = 2.25
# Raspberry Pi ID to send to Luftdaten
id = "raspi-" + get_serial_number()
# 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
-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:
+ time_since_update = time.time() - update_time
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:
- logging.info(e)
+ print(e)