コード例 #1
0
ファイル: scale.py プロジェクト: ramawardhanaa/samsi
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()
コード例 #2
0
ファイル: api_data.py プロジェクト: ramawardhanaa/samsi
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)