def read_sensors(all_curr_readings, location, ADS1115): """ Generic version to work with any number of locations Read data from all sensors :param all_curr_readings: dictionary to hold all readings :param location: supports any number of unique hydro tanks :param ADS1115: AdaFruit ads1115 16 bit. Supports any number of sensors """ # Get the readings from any 1-Wire temperature sensors. This sensor is submerged in the tank for key, value in sensors.items(): if value["is_connected"] is True: if value["sensor_type"] == "1_wire_temp": try: sensor_reading = (round(float(read_1_wire_temp(key)), value["accuracy"])) except (sensor_reading == 0): sensor_reading = 0 ref_temp = 25 all_curr_readings.append( [value["name"], sensor_reading, location]) if value["is_ref"] is True: ref_temp = sensor_reading # Get the readings from any Gravity pH sensors # ADS channel P0 if value["sensor_type"] == "gravity_ph": # Create single-ended input on channel 0 try: # chan = AnalogIn(ads, ADS.P0) # set the gain value and then read the sensor voltage ads1115_r.setGain(ADS1115_REG_CONFIG_PGA_6_144V) adc0 = ads1115_r.readVoltage(0) # Create differential input between channel 0 and 1 # chan = AnalogIn(ads, ADS.P0, ADS.P1) # debug # print("{:>5}\t{:>5.3f}".format(chan.value, chan.voltage)) # get ph compensated value based on submerged temperature value ph_comp = ph.readPH(adc0['r'], ref_temp) all_curr_readings.append( [value["name"], ph_comp, location]) except (ph_comp == 0): sensor_reading = 0.0 # Get the readings from any Gravity Electrical Conductivity sensors # ADS channel P1 if value["sensor_type"] == "gravity_ec": # Create single-ended input on channel 0 try: # chan = AnalogIn(ads, ADS.P1) ads1115_r.setGain(ADS1115_REG_CONFIG_PGA_6_144V) adc1 = ads1115_r.readVoltage(1) ec_comp = ec.readEC(adc1['r'], ref_temp) all_curr_readings.append( [value["name"], ec_comp, location]) except (ec_comp == 0): sensor_reading = 0.0 # Get the readings from any Gravity ORP sensors # ADS channel P2. Measured in milli-volts if value["sensor_type"] == "gravity_orp": # Create single-ended input on channel 0 try: chan = AnalogIn(ads_r, ADS.P2) # debug # print("{:>5}\t{:>5.3f}".format(chan.value, chan.voltage)) all_curr_readings.append( [value["name"], chan.value, location]) except (chan == []): sensor_reading = 0.0 # Get the readings from Optomax water level sensor if value["sensor_type"] == "optomax_digital_liquid_sensor": try: if GPIO.input(gpio_pin) == 0: # debug # print("GPIO pin 12 is: ", GPIO.input(gpio_pin)) all_curr_readings.append([value["name"], 0, location]) if GPIO.input(gpio_pin) == 1: all_curr_readings.append([value["name"], 1, location]) except (GPIO.UNKNOWN()): log.error("GPIO.UNKNOWN this should never happen")