Hallo zusammen,
beim Versuch einigen Temperatur- und Luftfeuchteunstimmigkeiten von einem Humidity V2 Bricklet und einem Air Quality Bricklet bin ich durch diverse Forenbeiträge auf das Stichwort "Self Heating" gekommen, und wollte daher mal die Samplerate eines Humidity Bricklets auslesen und ggf. reduzieren, um die etwa 3° Übertemperatur zu reduzieren (gemessen zu einem zusätzlichen Temperatur-Bricklet).
Bei dem Versuch wird jedoch nur ein leeres Datenpacket zurückgegeben. Wie kann ich hier weiter debuggen, bzw. begehe ich hier einen trivialen Fehler?
Hier die Fehlermeldung:
(test_packaging) mweigand@pidwig2:~/Projekte/20190406_TF_OW_HUM$ ./bug_hum_v2.py
Humidity: 53.73 %RH
Temperature: 2279 degC
Traceback (most recent call last):
File "./bug_hum_v2.py", line 22, in <module>
print(h.get_samples_per_second())
File "/home/mweigand/.virtualenvs/test_packaging/lib/python3.7/site-packages/tinkerforge/bricklet_humidity_v2.py", line 321, in get_samples_per_second
return self.ipcon.send_request(self, BrickletHumidityV2.FUNCTION_GET_SAMPLES_PER_SECOND, (), '', 'B')
File "/home/mweigand/.virtualenvs/test_packaging/lib/python3.7/site-packages/tinkerforge/ip_connection.py", line 1194, in send_request
return unpack_payload(response[8:], form_ret)
File "/home/mweigand/.virtualenvs/test_packaging/lib/python3.7/site-packages/tinkerforge/ip_connection.py", line 251, in unpack_payload
x = struct.unpack(f, data[:length])
struct.error: unpack requires a buffer of 1 bytes
(test_packaging) mweigand@pidwig2:~/Projekte/20190406_TF_OW_HUM$ vim bug_hum_v2.py
(test_packaging) mweigand@pidwig2:~/Projekte/20190406_TF_OW_HUM$ ./bug_hum_v2.py
Humidity: 53.73 %RH
Temperature: 22.8 degC
Traceback (most recent call last):
File "./bug_hum_v2.py", line 22, in <module>
print(h.get_samples_per_second())
File "/home/mweigand/.virtualenvs/test_packaging/lib/python3.7/site-packages/tinkerforge/bricklet_humidity_v2.py", line 321, in get_samples_per_second
return self.ipcon.send_request(self, BrickletHumidityV2.FUNCTION_GET_SAMPLES_PER_SECOND, (), '', 'B')
File "/home/mweigand/.virtualenvs/test_packaging/lib/python3.7/site-packages/tinkerforge/ip_connection.py", line 1194, in send_request
return unpack_payload(response[8:], form_ret)
File "/home/mweigand/.virtualenvs/test_packaging/lib/python3.7/site-packages/tinkerforge/ip_connection.py", line 251, in unpack_payload
x = struct.unpack(f, data[:length])
struct.error: unpack requires a buffer of 1 bytes
Wenn ich den Testcode (angehängt) mit ipython --pdb laufen lasse sehe ich, dass die Binärdaten leer sind:
error: unpack requires a buffer of 1 bytes
> /home/mweigand/.virtualenvs/test_packaging/lib/python3.7/site-packages/tinkerforge/ip_connection.py(251)unpack_payload()
249 f = '<' + f
250 length = struct.calcsize(f)
--> 251 x = struct.unpack(f, data[:length])
252
253 if '!' in o:
ipdb> f
'<B'
ipdb> data
b''
Hier der Testcode:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
HOST = "pi2"
PORT = 4223
UID = "Di5" # Change XYZ to the UID of your Humidity Bricklet 2.0
from tinkerforge.ip_connection import IPConnection
from tinkerforge.bricklet_humidity_v2 import BrickletHumidityV2
if __name__ == "__main__":
ipcon = IPConnection() # Create IP connection
h = BrickletHumidityV2(UID, ipcon) # Create device object
ipcon.connect(HOST, PORT) # Connect to brickd
# Don't use device before ipcon is connected
# Get current humidity
humidity = h.get_humidity()
print("Humidity: " + str(humidity/100.0) + " %RH")
print("Temperature: {} degC".format(h.get_temperature() / 100.0))
print(h.get_samples_per_second())
ipcon.disconnect()
Ausgeführt in einem virtualenv auf Debian testing (Python 3.7) mit folgenden Pythonpacketen:
Master Brick 2.1 (FW 2.4.10)
Humidity Bricklet 2.0 (FW 2.0.4)
Neuster Brickd auf einem Raspberry Pi (Version 2.3.2).
Danke für jegliche Hilfe,
Maximilian