Skip to content

Instantly share code, notes, and snippets.

@andersk
Created September 1, 2020 20:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andersk/356b35eda59bb8bb46bfab948b8ac7df to your computer and use it in GitHub Desktop.
Save andersk/356b35eda59bb8bb46bfab948b8ac7df to your computer and use it in GitHub Desktop.
Argos script to monitor AQI from PurpleAir
#!/usr/bin/env python
import json
from datetime import datetime
import requests
SENSOR_ID = 4372
data = requests.get("https://www.purpleair.com/json", {"show": SENSOR_ID}).json()
result = data["results"][0]
stats = json.loads(result["Stats"])
conc = float(stats["v1"])
conc = int(conc * 10) / 10
# EPA 454/B-18-007 Table 2
green = (0, 228, 0)
yellow = (255, 255, 0)
orange = (255, 126, 0)
red = (255, 0, 0)
purple = (143, 63, 151)
maroon = (126, 0, 35)
# EPA 454/B-18-007 Table 1, 5
for (aqi_low, aqi_high, conc_low, conc_high, color_low, color_high) in [
(0, 50, 0.0, 12.0, green, yellow),
(51, 100, 12.1, 35.4, yellow, orange),
(101, 150, 35.5, 55.4, orange, red),
(151, 200, 55.5, 150.4, red, purple),
(201, 300, 150.5, 250.4, purple, maroon),
(301, 400, 250.5, 350.4, maroon, maroon),
(401, 500, 350.5, 500.4, maroon, maroon),
(501, 999, 500.5, 99999.9, maroon, maroon),
]:
if conc < conc_high + 0.05:
break
t = (conc - conc_low) / (conc_high - conc_low)
aqi = round(aqi_low + (aqi_high - aqi_low) * t)
color = "#" + "".join(
format(round(low + (high - low) * t), "02x")
for low, high in zip(color_low, color_high)
)
print(f'AQI <span color="{color}">{aqi}</span>')
print("---")
print(result["Label"])
if "humidity" in result:
print(f"Humidity {result['humidity']}%")
if "temp_f" in result:
print(f"Temperature {result['temp_f']}°F")
if "pressure" in result:
print(f"Pressure {result['pressure']} mbar")
print(
"Updated",
datetime.fromtimestamp(stats["lastModified"] / 1000).isoformat(timespec="seconds"),
)
print("Retrieved", datetime.now().isoformat(timespec="seconds"))
print(
f"View on PurpleAir | href='https://www.purpleair.com/map?select={SENSOR_ID}#14/{result['Lat']}/{result['Lon']}'",
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment