class Scale: def __init__(self): self.config = Config() # config init self.config_data = self.config.get_config_data() self.hx = HX711(5, 6) # initialize scale self.is_calibrated = self.config_data['SCALE'].getboolean( "calibrated") # check config if scale is calibrated self.ratio = 0 # scale ratio for calibration self.offset = 0 self.value = 0 self.result = 0 self.data = 0 if self.is_calibrated: self.hx.set_offset(float(self.config_data["SCALE"]['offset'])) self.config_ratio = self.config_data["SCALE"][ 'ratio'] # get scale ratio of config self.hx.set_scale(float(self.config_ratio)) def setup(self): try: self.offset = self.hx.read_average() self.hx.set_offset(self.offset) return True except Exception as e: return False def has_error(self): value_list = [] try: for x in range(15): self.hx.power_up() value_list.append(self.hx.get_grams()) self.hx.power_down() time.sleep(0.1) print(value_list) median_val = median(value_list) print(median_val) if value_list[3] == median_val: return True else: return False except: return True def calibrate(self, weight): try: self.value = int(weight) measured_weight = (self.hx.read_average() - self.hx.get_offset()) self.ratio = int(measured_weight) / self.value self.hx.set_scale(self.ratio) self.config.set_scale(ratio=self.ratio, offset=self.hx.get_offset(), calibrated=1) return True except ValueError: return False def get_data(self): try: self.hx.power_up() val = self.hx.get_grams() measure_weight = round((val / 1000), 2) self.hx.power_down() return measure_weight except Exception as e: pass def calibrated(self): self.is_calibrated = self.config_data['SCALE'].getboolean("calibrated") return self.is_calibrated def reset(self): self.config.set_scale() def tare(self): pass @staticmethod def clean(): GPIO.cleanup()
class ApiData: def __init__(self): self.config = Config() self.config_data = self.config.get_config_data() self.dht22 = DHT22(self.config_data['DHT22']['pin']) self.DS18B20 = DS18B20() self.json_data = {} self.log = Log() self.ds18b20_temp = [] self.dht22_data = [] def error_message(self, device, exception_msg): self.log.write_log( "something went wrong by collecting the {0} api data! Error: {1}". format(device, exception_msg)) def get_data(self): ds18b20_thread = Thread(target=self.get_ds18b20_data) dht22_thread = Thread(target=self.get_dht22_data) ds18b20_thread.start() dht22_thread.start() ds18b20_thread.join() dht22_thread.join() return self.json_data def get_ds18b20_data(self): sensor_counter = self.DS18B20.device_count() try: if sensor_counter != 0: for x in range(sensor_counter): self.ds18b20_temp.append(self.DS18B20.tempC(x)) if len(self.ds18b20_temp) != 0: for x in range(len(self.ds18b20_temp)): if not self.ds18b20_temp[x] == 85: self.json_data["DS1820B-{}".format( x)] = "{0} {1}".format(self.ds18b20_temp[x], "°C") elif self.ds18b20_temp[x] == 998: self.json_data["DS1820B-{}".format(x)] = "{0}".format( "VCC not connected") else: self.json_data["DS1820B-{}".format(x)] = "{0}".format( "GND or DATA not connected") except Exception as e: self.error_message("ds18b20", e) def get_dht22_data(self): try: dht22data = self.dht22.get_data() self.json_data["dht22 hum"] = "{0} {1}".format( dht22data['hum'], "%") self.json_data["dht22 temp"] = "{0} {1}".format( dht22data['temp'], "°C") except Exception as e: self.error_message("dht22", e)