From 5af13e87143b5b3da4d742549953e536e2620e4e Mon Sep 17 00:00:00 2001 From: Keir Rice Date: Sat, 24 Sep 2022 22:25:41 +1200 Subject: [PATCH] Fixed mistake in unpacking the data. Also fixed an issue with the CRC calculation. The CRC calculations need the raw bytes, not unpacked values. --- octoprint_enclosure/SHTC3.py | 35 ++++++++++++----------------------- 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/octoprint_enclosure/SHTC3.py b/octoprint_enclosure/SHTC3.py index 6eb2c98..78c8def 100644 --- a/octoprint_enclosure/SHTC3.py +++ b/octoprint_enclosure/SHTC3.py @@ -70,18 +70,7 @@ def write_then_read(bus, address, cmd, read_length): bus.i2c_rdwr(write, read) - return bytearray(read) - - -def process_crc(bytes_array): - """Assume the last byte in the array is the CRC and check it matches the rest of the message. - Return just the message bytes.""" - crc_byte = bytes_array[-1] - bytes_array = bytes_array[:-1] - - if not crc_calculator.verify_checksum(bytes_array, crc_byte): - raise RuntimeError('Checksum failed') - return bytes_array + return bytes(read) def to_relative_humidity(raw_data): @@ -102,22 +91,22 @@ def to_temperature(raw_data): def sample_temperature(bus, address): - send_command(bus, CMD_RESET) + send_command(bus, address, CMD_RESET) time.sleep(0.001) - send_command(bus, CMD_WAKE) + send_command(bus, address, CMD_WAKE) time.sleep(0.001) try: result = write_then_read(bus, address, CMD_NORMAL_STRETCH_T, 3) - raw_temp, crc = struct.unpack(">HI", result) - if not crc_calculator.verify_checksum(result[:-1], crc): + if not crc_calculator.verify_checksum(result[0:2], result[2]): raise SHTC3ReadError('CRC Mismatch') + raw_temp, crc = struct.unpack(">HB", result) return to_temperature(raw_temp) finally: - send_command(bus, CMD_SLEEP) + send_command(bus, address, CMD_SLEEP) def sample_humidity(bus, address): @@ -128,11 +117,11 @@ def sample_humidity(bus, address): try: result = write_then_read(bus, address, CMD_NORMAL_STRETCH_RH, 3) - raw_rh, crc = struct.unpack(">HI", result) - if not crc_calculator.verify_checksum(result[:-1], crc): + if not crc_calculator.verify_checksum(result[0:2], result[2]): raise SHTC3ReadError('CRC Mismatch') + raw_rh, crc = struct.unpack(">HB", result) return to_relative_humidity(raw_rh) finally: @@ -148,14 +137,13 @@ def sample_both(bus, address): try: result = write_then_read(bus, address, CMD_NORMAL_STRETCH_T, 6) - raw_temp, crc_temp, raw_rh, crc_rh = struct.unpack(">HI>HI", result) - - if not crc_calculator.verify_checksum(result[0:2], crc_temp): + if not crc_calculator.verify_checksum(result[0:2], result[2]): raise SHTC3ReadError('CRC Mismatch') - if not crc_calculator.verify_checksum(result[3:5], raw_rh): + if not crc_calculator.verify_checksum(result[3:5], result[5]): raise SHTC3ReadError('CRC Mismatch') + raw_temp, crc_temp, raw_rh, crc_rh = struct.unpack(">HBHB", result) temperature = to_temperature(raw_temp) humidity = to_relative_humidity(raw_rh) @@ -177,6 +165,7 @@ def main(): try: temperature, humidity = sample_both(bus, address) print('{0:0.1f} | {1:0.1f}'.format(temperature, humidity)) + except Exception: print('-1 | -1')