diff --git a/src/w1thermsensor/core.py b/src/w1thermsensor/core.py index 0e155a9..4e99966 100644 --- a/src/w1thermsensor/core.py +++ b/src/w1thermsensor/core.py @@ -252,12 +252,18 @@ class W1ThermSensor: self.name, self.id) ) - if ( - len(data) < 1 - or data[0].strip()[-3:] != "YES" - or "00 00 00 00 00 00 00 00 00" in data[0] - ): - raise SensorNotReadyError(self) + # raise SensorNotReadyError(self) + while True: + if ( + len(data) < 1 + or data[0].strip()[-3:] != "YES" + or "00 00 00 00 00 00 00 00 00" in data[0] + ): + time.sleep(0.2) + with self.sensorpath.open("r") as f: + data = f.readlines() + else: + break return data @@ -274,16 +280,19 @@ class W1ThermSensor: :raises SensorNotReadyError: if the sensor is not ready yet :raises ResetValueError: if the sensor has still the initial value and no measurement """ - raw_temperature_line = self.get_raw_sensor_strings()[1] - return evaluate_temperature( - raw_temperature_line, - self.RAW_VALUE_TO_DEGREE_CELSIUS_FACTOR, - unit, - self.type, - self.id, - self.offset, - self.SENSOR_RESET_VALUE, - ) + res = -1000.0 + while res == -1000.0: + raw_temperature_line = self.get_raw_sensor_strings()[1] + res = evaluate_temperature( + raw_temperature_line, + self.RAW_VALUE_TO_DEGREE_CELSIUS_FACTOR, + unit, + self.type, + self.id, + self.offset, + self.SENSOR_RESET_VALUE, + ) + return res def get_corrected_temperature(self, unit: Unit = Unit.DEGREES_C) -> float: """Returns the temperature in the specified unit, corrected based on the calibration data @@ -474,7 +483,8 @@ def evaluate_temperature( # check if the sensor value is the reset value if value == sensor_reset_value: - raise ResetValueError(sensor_id) + # raise ResetValueError(sensor_id) + return -1000.0 else: # Fallback to precalculated value for other sensor types value = get_raw_temperature(raw_temperature_line)