co2meter icon indicating copy to clipboard operation
co2meter copied to clipboard

No data is returned with read_data()

Open davidskeck opened this issue 4 years ago • 16 comments

Hello,

I have followed the setup instructions for Windows, but when I try to follow the example, I get no data from the read_data() call.

import co2meter as co2
mon = co2.CO2monitor()
mon.info  # data is returned here
mon.read_data()  # this call waits forever and has no printout

Any ideas?

davidskeck avatar Apr 25 '20 19:04 davidskeck

:+1: I get the same issue

crgwbr avatar Aug 18 '20 13:08 crgwbr

Hello guys, sorry for coming back late to you.

Unfortunately I don't have any device with Windows installed anymore, so I suspect that I could not be of a help any time soon here..

But in case you figure out the solution by yourself - could you please let me know about it, so I'll add it to the readme. Many thanks!

vfilimonov avatar Aug 24 '20 06:08 vfilimonov

FWIW, this wasn't a Windows issue for me—I got the same problem on MacOS and Raspbian Linux.

crgwbr avatar Aug 24 '20 15:08 crgwbr

I encountered the same issue with my ZGm053UKA which identified itself as:

>>> mon.info
{'vendor_id': 1241, 'product_id': 41042, 'manufacturer': 'Holtek', 'product_name': 'USB-zyTemp', 'serial_no': '2.00'}

I found this document describing the protocol, which matches what a raw hid read was giving me. i.e. it's not encrypted. The following solved the issue for me:

     def hid_read(self):
         """ Read 8-byte string from HID device """
-        msg = self._h.read(8)
-        return self._decrypt(msg)
+        return self._h.read(8)
 
     @contextmanager
     def co2hid(self, send_magic_table=True):

Hope that's helpful.

a-r-w avatar Sep 09 '20 03:09 a-r-w

@a-r-w I can confirm that your fix also worked for me. OS X 10.14.6, Python3, Device: TFA-Dostmann AirControl Mini CO2.

Thanks!

olli666 avatar Jan 01 '21 19:01 olli666

Hello all. I've added an argument to __init__: bypass_decrypt. If set to True, read_data will not call _decrypt. Please let me know if it's ok and I'll push the new version to pypi.

@a-r-w Thanks a lot for the solution!

vfilimonov avatar Jan 01 '21 21:01 vfilimonov

New co2meter.py is not working. The hack from a-r-w already works fine.

`Olivers-MacMini2018:co2meter Oliver$ ls

pycache co2meter.sh log_co2.csv usage.txt co2meter.py co2meter_old.py readCO2meter.py Olivers-MacMini2018:co2meter Oliver$ python3 Python 3.9.0 (default, Dec 4 2020, 12:07:11) [Clang 10.0.0 (clang-1000.10.44.4)] on darwin Type "help", "copyright", "credits" or "license" for more information.

import co2meter as co2 mon = co2.CO2monitor() mon.read_data() co2 temp 2021-01-03 19:24:48 None None

Olivers-MacMini2018:co2meter Oliver$ python3 Python 3.9.0 (default, Dec 4 2020, 12:07:11) [Clang 10.0.0 (clang-1000.10.44.4)] on darwin Type "help", "copyright", "credits" or "license" for more information.

import co2meter as co2 mon = co2.CO2monitor() mon.read_data() co2 temp 2021-01-03 19:25:51 1072 22.0375

`

olli666 avatar Jan 03 '21 18:01 olli666

import co2meter as co2
mon = co2.CO2monitor(bypass_decrypt=True)
mon.read_data()

should do the same as https://github.com/vfilimonov/co2meter/issues/16#issuecomment-689278278

vfilimonov avatar Jan 03 '21 19:01 vfilimonov

Works perfectly. Sorry for the inconvinience.

olli666 avatar Jan 03 '21 19:01 olli666

Hi @vfilimonov, glad it was useful. I can also confirm 5d4187dbd666163911601e0076336e42a4045afc is working fine for me with bypass_decrypt=True. Thank you!

a-r-w avatar Jan 03 '21 19:01 a-r-w

I tried a-r-w's hack and the new commit's bypass-decrypt approach but I am still getting the hang-up when calling read_data(). Has anyone had this issue with the newer Co2Meters? Is there maybe a new way that the data is encrypted or something? Mine's info is: {'vendor_id': 1241, 'product_id': 41042, 'manufacturer': 'Holtek', 'product_name': 'USB-zyTemp', 'serial_no': '2.00'}

Pinkers avatar Jun 28 '21 18:06 Pinkers

Hi @Pinkers Thank you for your interest in co2meter and I’m sorry about your issues.

To be honest there’s little what I can do or suggest about other vendors. I did not find any proper documentation and just hacked myself out looking for boots and pieces in the Internet and other repos (see readme - resources).

Where exactly the code hangs?

It worth looking at what self._h.read() returns for different message lengths. Perhaps the message is not encrypted but shorter/longer.

If encrypted - worth trying different magic words - e.g. your vendor name.

That are the obvious things that come to my mind to start with.

vfilimonov avatar Jun 30 '21 06:06 vfilimonov

@vfilimonov Thank you so much for the quick reply! After many days of debugging it is now working though I have no idea why. The only thing that has changed is that I ran it with the proprietary software found here. Maybe that configured the HID driver for the device or something, honestly I am stumped. But I really appreciate the help, and I am grateful it is now working

Pinkers avatar Jun 30 '21 21:06 Pinkers

To update this, read_data() only returns when the ZG.exe (proprietary software mentioned earlier) is running first, then the CO2Meter is connected via USB, then read_data() is called. Any insights into why are welcome.

Pinkers avatar Jul 20 '21 00:07 Pinkers

I can also confirm this issue, With the device TFA AIRCO2NTROL COACH ({'vendor_id': 1241, 'product_id': 41042, 'manufacturer': 'Holtek', 'product_name': 'USB-zyTemp', 'serial_no': '2.00'}), read_data() only shows values when the ZG.exe was started before.

eriwst avatar Sep 27 '21 09:09 eriwst

@Pinkers @eriwst thank you for reporting. I've added the note to readme.md.

vfilimonov avatar Sep 27 '21 11:09 vfilimonov