Adding Enviro+ with Cayenne

after spending a few hours ive updated the Python script to read in everything from the Envrio+ Hat board. Attached below. Ive also included a screenshot to show how this is configured.

#this python script works with Pimoroni Envrio+ Air Hat and the additional particle sensor
#shop.pimoroni.com
#this script reads in the BME280 weather sesonor, LTR-559 light and proximity sensor
#MICS6814 Gas sensor which detects 3 types of gases
#PMS5003 particulate matter sensor, reading in PM1, PM2.5 and PM10 particulates
#Triggers can be created within Cayenne dashboard as needed

#!/usr/bin/env python
import cayenne.client
import time
import logging
from pms5003 import PMS5003, ReadTimeoutError
from enviroplus import gas
import requests
import ST7735
#import ltr559
from ltr559 import LTR559
ltr559 = LTR559()

from bme280 import BME280

try:
    from smbus2 import SMBus
except ImportError:
    from smbus import SMBus

# Cayenne authentication info. This should be obtained from the Cayenne Dashboard.
MQTT_USERNAME  = "axxxxxxxxeb2"
MQTT_PASSWORD  = "17xxxxxxx2e3"
MQTT_CLIENT_ID = "39xxxxxxxx1e6c"


client = cayenne.client.CayenneMQTTClient()
client.begin(MQTT_USERNAME, MQTT_PASSWORD, MQTT_CLIENT_ID, loglevel=logging.INFO)
# For a secure connection use port 8883 when calling client.begin:
# client.begin(MQTT_USERNAME, MQTT_PASSWORD, MQTT_CLIENT_ID, port=8883, loglevel=logging.INFO)

i=0
timestamp = 0


# our code from Enviroplus weather.py ----

logging.basicConfig(
    format='%(asctime)s.%(msecs)03d %(levelname)-8s %(message)s',
    level=logging.INFO,
    datefmt='%Y-%m-%d %H:%M:%S')

logging.info("""weather.py - Print readings from the BME280 weather sensor.

Press Ctrl+C to exit!

""")

bus = SMBus(1)
bme280 = BME280(i2c_dev=bus)

# ----------------------------------

# Create PMS5003 instance
pms5003 = PMS5003()

pms5003.reset()
print ('resetting our pms')
time.sleep(5)

while True: 
    client.loop()
    
    if (time.time() > timestamp + 10):
        #client.celsiusWrite(1, i)
        #client.luxWrite(2, i*10)
        #client.hectoPascalWrite(3, i+800)
        
        #grab values from Enviro+ monitor. Grab code from Enviro examples
        #Temperature, humidity,pressure etc
        temperature = bme280.get_temperature()
        #print ('Temperature ', temperature)
        pressure = bme280.get_pressure()

        #print ('Pressure hPa ', pressure)
        humidity = bme280.get_humidity()
        
        #read our values in from our particle sensor
        pm_values = pms5003.read()
        
        #grab our individual particles
        #P2 - p2.5 combustion particles, organic compounds etc)
        P2 = pm_values.pm_ug_per_m3(2.5)
        #P10 - Dust, pollen, mould spores
        P10 = pm_values.pm_ug_per_m3(10)
        #P1 = ultrafine particles
        P1 = pm_values.pm_ug_per_m3(1)
        
        
        #print ('P2 ', P2)
        #print ('P1 ', P1)
        
        #grab our gases (reducing, oxidising, and NH3)
        readings = gas.read_all()
        reduce = readings.reducing
        oxidise = readings.oxidising
        nhthree = readings.nh3
        #print ('Gas Reducing',readings.reducing)
        
        #oxidising = gasreadings.oxidising()
        #nh3 = gasreadings.nh3
        
        #grab our light level in Lux
        lightlevel = ltr559.get_lux()
        
        #grab proximity - set a trigger in Cayenne if someone walks in front of it
        distance = ltr559.get_proximity()
        
        
        #send values to Cayenne
        
        client.virtualWrite(1, temperature, "temp", "c")
        client.virtualWrite(2, pressure, "bp", "hPa")
        client.virtualWrite(3, humidity, "rel_hum", "%")
        
        client.virtualWrite(4, P1, "pm", "micrograms")
        client.virtualWrite(5, P2, "pm", "micrograms")
        client.virtualWrite(6, P10, "pm", "micrograms")
        
        client.virtualWrite(7, reduce, "null")
        client.virtualWrite(8, oxidise, "null")
        client.virtualWrite(9, nhthree, "null")
        
        client.virtualWrite(10, lightlevel, "lum", "%")
        client.virtualWrite(11, distance, "prox", "Centimeter")
        
        
        
        timestamp = time.time()
        i = i+1
        print (timestamp)
3 Likes