def __init__(self, ready, logger, sensor_id): threading.Thread.__init__(self) list_devices_i2c = [ 'ADS1x15', 'AM2315', 'ATLAS_PT1000', 'BMP', 'HTU21D', 'MCP342x', 'SHT2x', 'TMP006', 'TSL2561' ] self.thread_startup_timer = timeit.default_timer() self.thread_shutdown_timer = 0 self.ready = ready self.logger = logger self.lock = {} self.sensor_id = sensor_id self.control = DaemonControl() self.pause_loop = False self.verify_pause_loop = True self.setup_sensor_conditionals() with session_scope(MYCODO_DB_PATH) as new_session: sensor = new_session.query(Sensor) sensor = sensor.filter(Sensor.id == self.sensor_id).first() self.i2c_bus = sensor.i2c_bus self.location = sensor.location self.device_type = sensor.device self.sensor_type = sensor.device_type self.period = sensor.period self.multiplexer_address_raw = sensor.multiplexer_address self.multiplexer_bus = sensor.multiplexer_bus self.multiplexer_channel = sensor.multiplexer_channel self.adc_channel = sensor.adc_channel self.adc_gain = sensor.adc_gain self.adc_resolution = sensor.adc_resolution self.adc_measure = sensor.adc_measure self.adc_measure_units = sensor.adc_measure_units self.adc_volts_min = sensor.adc_volts_min self.adc_volts_max = sensor.adc_volts_max self.adc_units_min = sensor.adc_units_min self.adc_units_max = sensor.adc_units_max self.sht_clock_pin = sensor.sht_clock_pin self.sht_voltage = sensor.sht_voltage # Edge detection self.switch_edge = sensor.switch_edge self.switch_bouncetime = sensor.switch_bouncetime self.switch_reset_period = sensor.switch_reset_period # Relay that will activate prior to sensor read self.pre_relay_id = sensor.pre_relay_id self.pre_relay_duration = sensor.pre_relay_duration self.pre_relay_setup = False self.next_measurement = time.time() self.get_new_measurement = False self.measurement_acquired = False self.pre_relay_activated = False self.pre_relay_timer = time.time() relay = new_session.query(Relay).all() for each_relay in relay: # Check if relay ID actually exists if each_relay.id == self.pre_relay_id and self.pre_relay_duration: self.pre_relay_setup = True smtp = new_session.query(SMTP).first() self.smtp_max_count = smtp.hourly_max self.email_count = 0 self.allowed_to_send_notice = True # Convert string I2C address to base-16 int if self.device_type in list_devices_i2c: self.i2c_address = int(str(self.location), 16) # Set up multiplexer if enabled if self.device_type in list_devices_i2c and self.multiplexer_address_raw: self.multiplexer_address_string = self.multiplexer_address_raw self.multiplexer_address = int(str(self.multiplexer_address_raw), 16) self.multiplexer_lock_file = "/var/lock/mycodo_multiplexer_0x{:02X}.pid".format( self.multiplexer_address) self.multiplexer = TCA9548A(self.multiplexer_bus, self.multiplexer_address) else: self.multiplexer = None if self.device_type in ['ADS1x15', 'MCP342x'] and self.location: self.adc_lock_file = "/var/lock/mycodo_adc_bus{}_0x{:02X}.pid".format( self.i2c_bus, self.i2c_address) # Set up edge detection of a GPIO pin if self.device_type == 'EDGE': if self.switch_edge == 'rising': self.switch_edge_gpio = GPIO.RISING elif self.switch_edge == 'falling': self.switch_edge_gpio = GPIO.FALLING else: self.switch_edge_gpio = GPIO.BOTH # Set up analog-to-digital converter elif self.device_type == 'ADS1x15': self.adc = ADS1x15_read(self.i2c_address, self.i2c_bus, self.adc_channel, self.adc_gain) elif self.device_type == 'MCP342x': self.adc = MCP342x_read(self.i2c_address, self.i2c_bus, self.adc_channel, self.adc_gain, self.adc_resolution) else: self.adc = None self.device_recognized = True # Set up sensor if self.device_type in ['EDGE', 'ADS1x15', 'MCP342x']: self.measure_sensor = None elif self.device_type == 'RPiCPULoad': self.measure_sensor = RaspberryPiCPULoad() elif self.device_type == 'RPi': self.measure_sensor = RaspberryPiCPUTemp() elif self.device_type == 'DS18B20': self.measure_sensor = DS18B20(self.location) elif self.device_type == 'DHT11': self.measure_sensor = DHT11(pigpio.pi(), int(self.location)) elif self.device_type in ['DHT22', 'AM2302']: self.measure_sensor = DHT22(pigpio.pi(), int(self.location)) elif self.device_type == 'HTU21D': self.measure_sensor = HTU21D_read(self.i2c_bus) elif self.device_type == 'AM2315': self.measure_sensor = AM2315_read(self.i2c_bus) elif self.device_type == 'ATLAS_PT1000': self.measure_sensor = Atlas_PT1000(self.i2c_address, self.i2c_bus) elif self.device_type == 'K30': self.measure_sensor = K30() elif self.device_type == 'BMP': self.measure_sensor = BMP(self.i2c_bus) elif self.device_type == 'SHT1x_7x': self.measure_sensor = SHT1x_7x_read(self.location, self.sht_clock_pin, self.sht_voltage) elif self.device_type == 'SHT2x': self.measure_sensor = SHT2x_read(self.i2c_address, self.i2c_bus) elif self.device_type == 'TMP006': self.measure_sensor = TMP006_read(self.i2c_address, self.i2c_bus) elif self.device_type == 'TSL2561': self.measure_sensor = TSL2561_read(self.i2c_address, self.i2c_bus) else: self.device_recognized = False self.logger.debug("[Sensor {}] Device '{}' not " "recognized:".format(self.sensor_id, self.device_type)) raise Exception("{} is not a valid device type.".format( self.device_type)) self.edge_reset_timer = time.time() self.sensor_timer = time.time() self.running = False self.lastUpdate = None