From 2046e8efc00369bf3ae3420bbcc2a540dca31bdb Mon Sep 17 00:00:00 2001 From: Jerry Needell Date: Sat, 28 Apr 2018 16:14:34 -0400 Subject: [PATCH 1/3] fix DHT22 handling of negative temperatures --- adafruit_dht.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/adafruit_dht.py b/adafruit_dht.py index 068405f..b4d8da8 100644 --- a/adafruit_dht.py +++ b/adafruit_dht.py @@ -148,17 +148,23 @@ def measure(self): for byte_start in range(0, 80, 16): buf.append(self._pulses_to_binary(pulses, byte_start, byte_start+16)) - # humidity is 2 bytes if self._dht11: + # humidity is 1 byte self._humidity = buf[0] else: + # humidity is 2 bytes self._humidity = ((buf[0]<<8) | buf[1]) / 10 - # temperature is 2 bytes if self._dht11: + # temperature is 1 byte self._temperature = buf[2] else: - self._temperature = ((buf[2]<<8) | buf[3]) / 10 + # temperature is 2 bytes + # MSB ist sign, bits 0-14 are magnitude) + self._temperature = (((buf[2] & 0x7f)<<8) | buf[3]) / 10 + # set sign + if buf[2] & 0x80: + self._temperature = -self.temperature # calc checksum chk_sum = 0 From c8dbbdb7790693791c72a420e992c0306625fb27 Mon Sep 17 00:00:00 2001 From: Jerry Needell Date: Sat, 28 Apr 2018 16:25:49 -0400 Subject: [PATCH 2/3] fix typo --- adafruit_dht.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adafruit_dht.py b/adafruit_dht.py index b4d8da8..9ed07b4 100644 --- a/adafruit_dht.py +++ b/adafruit_dht.py @@ -164,7 +164,7 @@ def measure(self): self._temperature = (((buf[2] & 0x7f)<<8) | buf[3]) / 10 # set sign if buf[2] & 0x80: - self._temperature = -self.temperature + self._temperature = -self._temperature # calc checksum chk_sum = 0 From 2aaaf1b340abbe5562ed1a11947dcf418534a1eb Mon Sep 17 00:00:00 2001 From: Jerry Needell Date: Sat, 28 Apr 2018 17:03:15 -0400 Subject: [PATCH 3/3] fix pylint issue --- adafruit_dht.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/adafruit_dht.py b/adafruit_dht.py index 9ed07b4..e7e8595 100644 --- a/adafruit_dht.py +++ b/adafruit_dht.py @@ -160,12 +160,12 @@ def measure(self): self._temperature = buf[2] else: # temperature is 2 bytes - # MSB ist sign, bits 0-14 are magnitude) - self._temperature = (((buf[2] & 0x7f)<<8) | buf[3]) / 10 + # MSB is sign, bits 0-14 are magnitude) + raw_temperature = (((buf[2] & 0x7f)<<8) | buf[3]) / 10 # set sign if buf[2] & 0x80: - self._temperature = -self._temperature - + raw_temperature = -raw_temperature + self._temperature = raw_temperature # calc checksum chk_sum = 0 for b in buf[0:4]: @@ -176,7 +176,6 @@ def measure(self): # check sum failed to validate raise RuntimeError("Checksum did not validate. Try again.") - else: raise RuntimeError("A full buffer was not returned. Try again.")