Last active
May 20, 2024 20:15
-
-
Save librarian/306e06c51fe5f53ded6ebc761580b62b to your computer and use it in GitHub Desktop.
Basic programm to use hidapi and report temp/co2 from Holtek Semiconductor, Inc. USB-zyTemp (hidapi is python3-hidapi in debian buster)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from hidapi import Device | |
vid = 0x04d9 | |
pid = 0xa052 | |
try: | |
print("Opening the device") | |
h = Device(vendor_id=vid, product_id=pid, blocking=False) | |
#h.open(vid, pid) # TREZOR VendorID/ProductID | |
print("Manufacturer: %s" % h.get_manufacturer_string()) | |
print("Product: %s" % h.get_product_string()) | |
print("Serial No: %s" % h.get_serial_number_string()) | |
#print("Get feature report:") | |
#print(h.get_feature_report(bytes(1),2)) | |
print("Send feature report:") | |
h.send_feature_report(bytearray([0xc4, 0xc6, 0xc0, 0x92, 0x40, 0x23, 0xdc, 0x96]), report_id=bytes(1)) | |
try: | |
while True: | |
r = h.read(8) | |
if r: | |
# print('read: "{}"'.format(r)) | |
metric = r[0] | |
value = r[1] | |
value_thousands = r[2] | |
checksum = r[3] | |
r4 = r[4] | |
if r4 != 0x0d: | |
continue | |
print("Unexpected data from device") | |
value_sum = metric + value + value_thousands | |
#if checksum != metric + value + value_thousands: | |
# continue | |
# print("Checksum error") | |
metric_name = "" | |
value_shifted = value << 8 | |
metric_value = value_shifted + value_thousands | |
if metric == 0x42: | |
metric_name = "Temperature" | |
metric_value = metric_value / 16 - 273.15 | |
elif metric == 0x50: | |
metric_name = "CO2" | |
elif metric == 0x44: | |
metric_name = "Humidity" | |
else: | |
continue | |
metric_name = "Unknown" | |
print(hex(metric), metric_name, "%.1f" % metric_value) | |
finally: | |
print("Closing the device") | |
h.close() | |
h.close() | |
except IOError as ex: | |
print(ex) | |
print("You probably don't have the hard-coded device.") | |
print("Update the h.open() line in this script with the one") | |
print("from the enumeration list output above and try again.") | |
print("Done") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment