def sample_AQ():
    dust_sensor = sds011.SDS011(uartAQ)
    dust_sensor.set_reporting_mode_query()
    dust_sensor.sleep()

    while True:
        #Datasheet says to wait for at least 30 seconds...
        print('Start fan for 15 seconds.')
        dust_sensor.wake()
        sleep(65)

        #Returns NOK if no measurement found in reasonable time
        status = dust_sensor.read()
        #Returns NOK if checksum failed
        pkt_status = dust_sensor.packet_status

        #Stop fan
        dust_sensor.sleep()

        if (status == False):
            print('Measurement failed.')
        elif (pkt_status == False):
            print('Received corrupted data.')
        else:
            print('PM25: ', dust_sensor.pm25)
            print('PM10: ', dust_sensor.pm10)

        sleep(55)
    def __init__(self, uart, meas_dur):
        #Declare an SDS011 object
        self._sds011 = sds011.SDS011(uart)

        #Stop fan
        self._sds011.sleep()

        #True if fan is (supposed to be) ON, False otherwise
        self._fan_status = False
        self._fan_time_running = None

        #Timing for measure
        self._meas_dur = meas_dur
        self._last_meas_time = None

        #Attributes for PM25 and PM10
        self._pm25 = None
        self._pm10 = None
Exemple #3
0
    def __init__(self, device, name, measure_interval, warmup_delay,
                 number_of_measurements):
        import sds011

        super(Collector, self).__init__()
        self._finish_event = threading.Event()

        self._sleep = warmup_delay.total_seconds() > 0
        self._warmup_delay = warmup_delay
        self._measure_interval = measure_interval
        self._number_of_measurements = number_of_measurements

        _LOGGER.info("measure_interval: %s",
                     self._measure_interval.total_seconds())
        _LOGGER.info("warmup_delay: %s", self._warmup_delay.total_seconds())

        self._sensor = sds011.SDS011(device, use_query_mode=True)
        self._sensor.sleep(self._sleep)

        self._entities = [Sensor(name, "PM2.5"), Sensor(name, "PM10")]
parser = argparse.ArgumentParser(prog="Particle sensor script",
                                 description="Commit measurement")
parser.add_argument("sensor", help="sensor file path")
parser.add_argument("endpoint", help="API endpoint")
"""
This script measures PM2.5 and PM10 concentration with SDS011 sensor. When
executed the script launches SDS011 fan and lets it work for 90 seconds to
make shure that the sensor measurement is filled with recent air in maximum
volume. It also makes 5 measurements and calculates mean value to minimize
some errors.
"""

if __name__ == "__main__":
    args = parser.parse_args()
    try:
        sensor = sds011.SDS011(args.sensor, use_query_mode=True)
        sensor.sleep(sleep=False)
        pm2_5 = np.empty(0)
        pm10 = np.empty(0)
        time.sleep(60)
        for _ in range(5):
            time.sleep(30)
            meas = sensor.query()
            pm2_5 = np.append(pm2_5, meas[0])
            pm10 = np.append(pm10, meas[1])
            time.sleep(2)
        pm2_5 = pm2_5[1:].mean()
        pm10 = pm10[1:].mean()
        sensor.sleep()
        sensor.ser.close()
        r = requests.post(
import sds011
import time
import paho.mqtt.client as paho

sensor = sds011.SDS011("/dev/ttyUSB0", use_query_mode=True)

def on_connect(client, userdata, flags, rc):
    print("Succesfully connected to MQTT broker" % (rc))

client = paho.Client()
client.on_connect = on_connect
client.connect("10.10.10.11", 1883)
client.loop_start()

freq = 900  # refresh rate

try:
  while True:
    sensor.sleep(sleep=False)
    time.sleep(15)  # Allow time for the sensor to measure properly
    pm25, pm10 = sensor.query()
    (rc, mid) = client.publish("satellite/sensor/pm25/state", pm25, qos=1)
    (rc, mid) = client.publish("satellite/sensor/pm10/state", pm10, qos=1)
    print("PM2.5:", pm25, "PM10:", pm10)
    sensor.sleep()
    time.sleep(freq - 15)
except KeyboardInterrupt:
  print("You pressed ctrl-c, quitting")
  sys.exit(0)
Exemple #6
0
bmp280_sensor = bmp280.BMP280(i2c)
ccs811_sensor = CCS811.CCS811(i2c)
uart = UART(1,
            baudrate=9600,
            bits=8,
            parity=None,
            stop=1,
            tx=12,
            rx=14,
            rts=-1,
            cts=-1,
            txbuf=256,
            rxbuf=256,
            timeout=5000,
            timeout_char=2)
dust_sensor = sds011.SDS011(uart)

time.sleep(2)


# from sensor import read_sensors, post_sensors_data
def read_sensors():
    data = {}
    #data['unit_id'],
    #data['registered'],
    data['bmp280_temperature'] = bmp280_sensor.temperature
    data['bmp280_pressure'] = bmp280_sensor.pressure
    data['si7021_temperature'] = si7021_sensor.temperature
    data['si7021_humidity'] = si7021_sensor.relative_humidity

    ccs811_sensor.put_envdata(si7021_sensor.relative_humidity,
Exemple #7
0
        file.write(str(message))
        file.write("\n")
        file.close()	

def write_csv(time, pm_25, pm_10, temp, humidity, temp2, pressure, fname):

    with open(fname,'a') as file:
        line = ""+str(time)+";"+str(pm_25)+";"+str(pm_10)+";"+str(temp)+";"+str(humidity)+';'
        line = line +str(temp2)+';'+str(pressure)
        file.write(line)
        file.write('\n')
        file.close()

# Try to attach serial port to Particle Sensor vlues
try:
    sensor = sds011.SDS011("/dev/ttyAMA0", use_query_mode="True")
    #sensor = sds011.SDS011("/dev/ttyUSB0", use_query_mode="True")
except Exception as e:
    write_log(e)

rpr=sensor.query()
print(rpr)
pm_25, pm_10 = sensor.query()
#print "PM 2.5:",pm_25,"μg/m^3  PM 10:",pm_10,"μg/m^3"
print("PM 2.5:{} μg/m^3  PM 10:{} μg/m^3".format(pm_25, pm_10))
#print(".  appears {} times.".format(i, key, wordBank[key]))

# Sensor should be set to Adafruit_DHT.DHT11,
# Adafruit_DHT.DHT22, or Adafruit_DHT.AM2302.
sensorDHT = Adafruit_DHT.DHT22
Exemple #8
0
#### START OF USER CUSTOMISABILITY HERE ####
comparison_data = 'pm25'  # Select the data to be pulled from API can be: pm25, pm10, co, o3, p, so2, t, w
api_token = 'demo'  # You can enter their own API token for use if desired
api_location = 'shanghai'  # You can enter their own location data here
sensor_path = "/dev/ttyUSB0"  # You may need to enter the path of the SDS011 sensor
monitor_size_x = 800  # You can adjust the size of the window created - Make it the same as your screen for full screen
monitor_size_y = 480  # You can adjust the size of the window created - Make it the same as your screen for full screen
#### END OF USER CUSTOMISABILITY HERE ####


api_link = 'http://api.waqi.info/feed/' + api_location + '/?token=' + api_token  # The link to the AQI API


try:
    sensor = sds011.SDS011(sensor_path, use_query_mode=True)
    sensor.sleep()  # Tests sensor is working by placing it in sleep
except:
    sensor = 'NO_SENSOR'



def setUpGUI():  # This is the code that creates and updates the GUI
    sg.ChangeLookAndFeel('BlueMono')  # Colour scheme for window
    live_aqi, time, average_aqi, per_change, live_api = getData()  # Runs the get_data() sub routine to get the data
    average_aqi = average_aqi[0]  # average_aqi holds multiple values, one rounded, one non-rounded
    actual_file_size = os.stat('data.csv').st_size / (1024*1024)
    actual_file_size = "%.4f" % actual_file_size
    max_data = open('max_data_size.txt', 'r')
    max_file_size = max_data.readline()
    max_data.close()
Exemple #9
0
import sds011
import time
import cloud

sensor = sds011.SDS011()
report = cloud.connect()

while True:
    try:
        measurements = sensor.read()
        if measurements is None:
            pass
        else:
            report.compose(*measurements)
            time.sleep_ms(5000)
    except KeyboardInterrupt as e:
        print('KeyboardInterrupt')
Exemple #10
0
import time
import sys
import signal

__author__ = "Grzegorz Deneka"
__license__ = "GPL3"
__status__ = "PoC"
__version__ = "0.01"

serial_device = "/dev/ttyUSB0"  # REQ Read and Write access
sleep_time = 300  # 5 min
sleep_warm_up = 30

if __name__ == "__main__":
    try:
        sensor = sds011.SDS011(serial_device, use_query_mode=True)
    except OSError as e:
        print(e.strerror)
        sys.exit(1)

    def signal_heandler(signum, frame):
        sensor.sleep()
        print("Sensor Off. Good Bye! ", signum)
        sys.exit(signum)

    signal.signal(signal.SIGINT, signal_heandler)
    signal.signal(signal.SIGTERM, signal_heandler)

    print("(pm2.5, pm10)")

    while True:
Exemple #11
0
    print("ValueError parsing config.ini file. Check number datatypes!")
    sys.exit()

# Initialise I2C bus.
i2c = busio.I2C(board.SCL, board.SDA)
# Initialize the sensor
sensor = adafruit_bme680.Adafruit_BME680_I2C(i2c)

raspid = get_raspid()

now = datetime.datetime.now()
runNo = now.strftime("%Y%m%d%H%M")
hostname = socket.gethostname()

# Initialize the dust sensor
dust = sds011.SDS011(dust_port, use_query_mode=True)


print("Session: ", session)
print("runNo: ", runNo)
print("raspid: ", raspid)
print("hostname: ", hostname)
print("location: ", location)

# Create the InfluxDB object
client = InfluxDBClient(host, port, user, password, dbname)


# BME680 configuration
# Set sensor configs
#sensor.set_humidity_oversample(bme680.OS_2X)