staging.inyokaproject.org

FreeTec NC7004 "USB-Temperatur-/Luftfeuchtigkeits-Datenlogger V2" von Pearl auslesen

Status: Gelöst | Ubuntu-Version: Lubuntu 18.04 (Bionic Beaver)
Antworten |

Kate-ubuntu

Anmeldungsdatum:
18. Juli 2013

Beiträge: 99

Hallo zusammen,

ich habe hier schon ab und an sehr gute Hilfe bekommen, nun habe ich ein weiteres Anliegen, mit dem ich nicht weiter komme, und würde mich sehr über Eure Hilfe freuen.

Ich habe mir den o.g. Logger vor einigen Tagen zugelegt. Die Herstellerfirma Pearl bietet keinen Linux-Support, aber zu meiner Freude fand ich die quelloffene Lesesoftware freetecreader hier: https://github.com/hoehermann/freetecreader. Ich habe sie unter /opt/ installiert. Leider funktioniert das Auslesen damit bislang nicht, auch kann ich das Gerät nicht im Dateimanager sehen. Offenbar ist es ein HID-Gerät.

Ich fand bei Euch diesen Thread https://forum.ubuntuusers.de/topic/blutzuckermessgeraete-free-style-libre-und-akk/ mit einem ähnlichen Problem und habe versucht, die dortigen Informationen für mich zu nutzen. Immerhin habe ich nun schon einen Symlink - siehe unten, das Auslesen funktioniert aber nach wie vor nicht.

Zunächst einige Informationen zum Gerät (per USB-Kabel ans Notebook gehängt):

"lsusb" liefert

1
Bus 003 Device 004: ID 10c4:8468 Cygnal Integrated Products, Inc.

"dmesg" liefert

1
2
3
4
5
6
7
8
usb 3-1: USB disconnect, device number 3

[ 8633.076084] usb 3-1: new full-speed USB device number 4 using uhci_hcd
[ 8633.252381] usb 3-1: New USB device found, idVendor=10c4, idProduct=8468
[ 8633.252389] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 8633.252395] usb 3-1: Product: HIDtoSPI Slave
[ 8633.252400] usb 3-1: Manufacturer: SLAB
[ 8633.262652] hid-generic 0003:10C4:8468.0003: hiddev0,hidraw1: USB HID v1.01 Device [SLAB HIDtoSPI Slave] on usb-0000:00:1d.1-1/input0

Wie im verlinkten Thread (https://forum.ubuntuusers.de/post/8852663/quote/) vorgeschlagen habe ich mir die udev-Attribute für das Gerät anzeigen lassen mit

1
2
3
for device in /dev/hidraw*; do
    udevadm info --query=all -a --name="$device"
done

Ergebnis für das Gerät:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  looking at parent device '/devices/pci0000:00/0000:00:1d.1/usb3/3-1':
    KERNELS=="3-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bMaxPower}=="64mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bcdDevice}=="0000"
    ATTRS{bmAttributes}=="80"
    ATTRS{busnum}=="3"
    ATTRS{configuration}==""
    ATTRS{devnum}=="4"
    ATTRS{devpath}=="1"
    ATTRS{idProduct}=="8468"
    ATTRS{idVendor}=="10c4"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="SLAB"
    ATTRS{maxchild}=="0"
    ATTRS{product}=="HIDtoSPI Slave"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="unknown"
    ATTRS{speed}=="12"
    ATTRS{urbnum}=="11"
    ATTRS{version}==" 1.10"

und habe gemäß diesem Beitrag: https://forum.ubuntuusers.de/post/8852939/quote/ eine udev-Regel in /etc/udev/rules.d/99-freetecreader.rules abgelegt:

1
KERNEL=="hidraw*", SUBSYSTEMS=="usb", ATTRS{idProduct}=="8468", ATTRS{idVendor}=="10c4", SYMLINK+="freetecreader", GROUP="plugdev", MODE="0660

Mein Nutzer befindet sich bereits in der Gruppe plugdev. Es gibt jetzt (bei angestecktem Gerät) einen Symlink /dev/freetecreader, der auf ein hidraw-Gerät zeigt, das dem Besitzer root und der Gruppe plugdev gehört.

Nun hoffte ich, dass der Aufruf vom "Freetecreader" funktioniert mit

1
python3 freetecreader.py

Leider erscheint (mit vorangestelltem "sudo" gleichlautend) die Fehlermeldung:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
Traceback (most recent call last):
  File "freetecreader.py", line 123, in <module>
    ftd = FreeTecDevice(data = data, debug = args.debug)
  File "freetecreader.py", line 16, in __init__
    self.hd = hidapi.Device(vendor_id=vendor_id, product_id=product_id)
  File "/usr/lib/python3/dist-packages/hidapi.py", line 154, in __init__
    serial_number)
TypeError: initializer for ctype 'wchar_t *' must be a cdata pointer, not NoneType
Exception ignored in: <bound method Device.__del__ of <hidapi.Device object at 0xb6a76b0c>>
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/hidapi.py", line 164, in __del__
    if self._device is not None:
AttributeError: 'Device' object has no attribute '_device'

(während sich die Hilfe mit "python3 freetecreader.py -h" anzeigen lässt).

Und hier komme ich nicht weiter (fand im Web zu dieser Art Fehlermeldung nur diesen einen Link: https://github.com/trackmastersteve/alienfx/issues/41). Hidapi hat irgendein Problem (findet die Serial Number nicht?).

Noch eine vielleicht wichtige Info:

Getestet unter Linux mit Python 3.6.6 und hidapi 0.2.1.

https://github.com/hoehermann/freetecreader

Ich habe hier folgende Versionen: python3 3.6.9 und python3-hidapi 0.2.1-1.1, wenn ich das richtig sehe. Wollte aber python3 nicht downgraden.

Ich wäre Euch für jede Hilfe bei diesem Problem dankbar. Meine Programmierkenntnisse sind leider rudimentär und uralt (Algol68 hieß das glaube ich), mit Python habe ich keine Erfahrung - ich bitte hier um Nachsicht.

Viele Grüße Kate

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Kate-ubuntu schrieb:

Ich habe mir den o.g. Logger vor einigen Tagen zugelegt.

Was macht denn dieser Logger und was hast Du damit vor?

Leider erscheint (mit vorangestelltem "sudo" gleichlautend) die Fehlermeldung:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
Traceback (most recent call last):
  File "freetecreader.py", line 123, in <module>
    ftd = FreeTecDevice(data = data, debug = args.debug)
  File "freetecreader.py", line 16, in __init__
    self.hd = hidapi.Device(vendor_id=vendor_id, product_id=product_id)
  File "/usr/lib/python3/dist-packages/hidapi.py", line 154, in __init__
    serial_number)
TypeError: initializer for ctype 'wchar_t *' must be a cdata pointer, not NoneType
Exception ignored in: <bound method Device.__del__ of <hidapi.Device object at 0xb6a76b0c>>
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/hidapi.py", line 164, in __del__
    if self._device is not None:
AttributeError: 'Device' object has no attribute '_device'

(während sich die Hilfe mit "python3 freetecreader.py -h" anzeigen lässt).

Ich kenne mich wenig mit Python und gar nicht mit der Anbindung von C-Code in Python aus. Die Fehlermeldung sieht aber für mich so aus, dass es ein Problem mit genau dieser Integration gibt. Das könnte daran liegen, dass sich mindestens eine der beiden Seiten (Python 3 oder die Shared Lib, die hier genutzt wird) geändert hat, ohne dass die andere angepasst wurde.

Kate-ubuntu

(Themenstarter)

Anmeldungsdatum:
18. Juli 2013

Beiträge: 99

Hallo rklm,

das ging ja schnell -danke ☺

rklm schrieb:

Kate-ubuntu schrieb:

Ich habe mir den o.g. Logger vor einigen Tagen zugelegt.

Was macht denn dieser Logger und was hast Du damit vor?

Temperatur und Luftfeuchtigkeit in einem bestimmten Raum meiner Wohnung über einen längeren Zeitraum (Einstellung: alle 60 Minuten) aufzeichnen und auswerten per Tabelle und Grafik. Ein .csv würde mir dazu reichen, dann würde ich es mit LibreOffice Calc machen. Aber auch der Export als .csv klappt mit der in der Hilfe angegebenen Option "--csv" nicht (gleiche Fehlermeldung, wie ja auch zu erwarten). Die Windows-Software macht auch nicht mehr und ist überhaupt recht spartanisch (habe ich mir auf einem anderen Rechner kurz angesehen; Ubuntu-Installation unter wine hat zwar geklappt, aber das liefert auch eine Fehlermeldung und funktioniert nicht - dazu würde ich notfalls einen weiteren Thread aufmachen; aber vorerst möchte ich es noch mit einem Linux-Programm versuchen).

Ich kenne mich wenig mit Python und gar nicht mit der Anbindung von C-Code in Python aus. Die Fehlermeldung sieht aber für mich so aus, dass es ein Problem mit genau dieser Integration gibt. Das könnte daran liegen, dass sich mindestens eine der beiden Seiten (Python 3 oder die Shared Lib, die hier genutzt wird) geändert hat, ohne dass die andere angepasst wurde.

Hm, damit kenne ich mich auch nicht aus - aber zumindest könnte es schonmal die Richtung zeigen.

Danke erstmal ☺ Kate

Kate-ubuntu

(Themenstarter)

Anmeldungsdatum:
18. Juli 2013

Beiträge: 99

Hallo zusammen,

das ursprünglich geschilderte Problem Kate-ubuntu schrieb:

... fand ich die quelloffene Lesesoftware freetecreader hier: https://github.com/hoehermann/freetecreader. Ich habe sie unter /opt/ installiert. Leider funktioniert das Auslesen damit bislang nicht, ...

... habe ich zwar nicht lösen können, fand aber heute bei meiner (schon fast aufgegebenen) Recherche eine für mich ausreichend funktionierende Lösung, indem ich auf https://github.com/hoehermann beim freetecreader das Symbol unten rechts mit der Verzweigung angeklickt habe und hier landete: https://github.com/hoehermann/freetecreader/network/members und von dort dann auf einer Seite, wo ein Fork des hoehermann/freetecreaders angeboten wird:

https://github.com/coldhand7/freetecreader

Nachdem ich so wie dort vorgeschlagen vorging, erhielt ich zunächst beim Aufruf von des Programms mit "python3 freetecreader.py" die Fehlermeldung:

Used HIDAPI lib: hidapi-libusb Reading from device… 99% Done. Traceback (most recent call last): File "freetecreader.py", line 118, in <module> raise RuntimeError("Incorrect device ROM magic number (is %04x, should be 55aa). This software is not meant to be used with your device."%(init_ok)) RuntimeError: Incorrect device ROM magic number (is 5555, should be 55aa). This software is not meant to be used with your device.

Damit kann ich ohne weitere Recherche nicht viel anfangen. Als ich "python3 freetecreader.py --csv" probierte (das Auslesen des Gerätes als .csv ist mir das Wichtigste) erschien die Meldung:

Used HIDAPI lib: hidapi-libusb Reading from device… 99% Done. Device ID: 892bb080 WARNING: Unknown settings detected (only the exact combination of 24h format, degrees celsius, and 5 minute sample interval was tested). Expect havoc.

Das "hacoc" (Verwüstung) war dann auch der Fall. Nachdem ich in der Datei "freetecreader.py" die entsprechende Stelle, an der das "5 minute sample interval" eingetragen ist, auf 60 Minuten geändert hatte, wie von mir auf dem Gerät eingestellt, hat es funktioniert. Ich konnte ein .csv mit plausiblen Daten exportieren (und im LibreOffice Calc - mit dem Tabulator als Trennzeichen - aufrufen).

An die Geräteeinstellungen, die teils nicht am Gerät selbst änderbar sind, komme ich mit diesem Programm offenbar nicht ran; das ist für mich aber ok, weil ich die für mich relevanten Einstellungen am Gerät vornehmen konnte (Details darüber, was am Gerät einstellbar ist und was nur per Software, könnt Ihr bei Bedarf der auf der Pearl-Website downloadbaren Bedienungsanleitung entnehmen).

Vielleicht hilft das ja jemandem weiter, der diesen - vergleichsweise preiswerten - Temperatur- und Luftfeuchtigkeitslogger benutzen möchte. Ich bin mit github bisher nicht so vertraut, habe etwas dazugelernt, und bedanke mich bei allen, die meine Frage gelesen haben, und bei rklm für den Versuch, mir weiter zu helfen.

Viele Grüße

Kate

hoehermann

Anmeldungsdatum:
30. Oktober 2007

Beiträge: 29

Moin Kate

Es freut mich, dass du meine Software brauchen kannst. Ich habe gerade ein Update veröffentlicht. https://github.com/hoehermann/freetecreader kann jetzt auch Messreihen verarbeiten, wo das Intervall nicht auf exakt fünf Minuten eingestellt ist. ☺

Viele Grüße
Hermann

Kate-ubuntu

(Themenstarter)

Anmeldungsdatum:
18. Juli 2013

Beiträge: 99

Moin Hermann,

das ist ja nett, dass Du Dich hier meldest ☺ Meine späte Reaktion liegt daran, dass anderes anlag und der Temperatur-Logger auch mehr im Sommer interessant für mich ist.

Hattest Du mitbekommen, dass das Auslesen in eine csv-Datei bei mir nur mit dem Fork von "coldhand" überhaupt funktioniert hat? Und das im Prinzip auch schon bevor ich in der Datei "freetecreader.py" das "5 minute sample interval" auf 60 Minuten geändert hatte, nur waren die ausgelesenen Daten eben "Datensalat".

Bei Deiner (Original-)Version wurde dagegen beim Versuch, die Daten als .csv zu exportieren garnichts ausgelesen (zur Fehlermeldung siehe oben). Von daher habe ich Zweifel, ob es Sinn macht, nun noch einmal Deine Version zu probieren.

Aber für andere Mitleser könnte Deine Info natürlich interessant sein.

Viele Grüße Kate

hoehermann

Anmeldungsdatum:
30. Oktober 2007

Beiträge: 29

Bei Deiner (Original-)Version wurde dagegen beim Versuch, die Daten als .csv zu exportieren garnichts ausgelesen (zur Fehlermeldung siehe oben). Von daher habe ich Zweifel, ob es Sinn macht, nun noch einmal Deine Version zu probieren.

Nun ja dir hilft es n der Tat nicht, aber für mich ist das schon interessant. Ich will ja auch wissen, ob die neue Version nicht nur für mich, sondern auch für andere besser funktioniert. 😉

Kate-ubuntu

(Themenstarter)

Anmeldungsdatum:
18. Juli 2013

Beiträge: 99

Ja, das verstehe ich ☺

Für mich (und evtl. andere?) könnte interessant sein, ob Dir zu meinen o.g. Problemen mit Deiner Version etwas einfällt. Denn womöglich hätte Deine Version ja mehr Funktionen zu bieten für mich (und andere) als der Fork.

Gruß Kate

hoehermann

Anmeldungsdatum:
30. Oktober 2007

Beiträge: 29

Kate-ubuntu schrieb:

Für mich (und evtl. andere?) könnte interessant sein, ob Dir zu meinen o.g. Problemen mit Deiner Version etwas einfällt. Denn womöglich hätte Deine Version ja mehr Funktionen zu bieten für mich (und andere) als der Fork.

Ich habe die Änderungen von "coldhand7" in meine Version übernommen (bzw. die Änderungen, die mir gefallen).

Er benutzt eine andere Methode zum Auswählen des Datenloggers. Es scheint, ich verbinde zum erstbesten USB-Gerät der sogenannten HID-Klasse. Er hingegen sucht gezielt nach einem Logger. Bei mir funktionieren beide Methoden gleich gut. Ich kann mir aber vorstellen, dass es zu Fehlverhalten kommen kann, wenn mehrere dieser HID USB-Geräte angeschlossen sind.

Kate-ubuntu

(Themenstarter)

Anmeldungsdatum:
18. Juli 2013

Beiträge: 99

Ich danke Dir. Falls ich irgendwann Deine neue Version probieren sollte, melde ich mich ☺

Gruß Kate

Kate-ubuntu

(Themenstarter)

Anmeldungsdatum:
18. Juli 2013

Beiträge: 99

Kate-ubuntu schrieb:

Ich danke Dir. Falls ich irgendwann Deine neue Version probieren sollte, melde ich mich ☺

Hallo Hermann (hoehermann),

wie versprochen melde ich mich hier. Ich habe Deine "neue" Version inzwischen sowohl auf dem alten Notebook (Toshiba Satellite A100-547 mit Ubuntu 20.04 LTS), als auch auf einem neuen Convertible (Lenovo IdeaTab D330 mit Ubuntu 20.04 LTS) installiert und ausprobiert. Es funktioniert!

Allerdings mit den von Coldhand für den Fork (https://github.com/coldhand7/freetecreader) geschilderten Vorbereitungen, also z.B. "Kopieren von 99-hid_freetec_nc_7004.rules nach /etc/udev/rules.d/".

Ich habe noch einige kleine Anpassungen vorgenommen, obwohl ich nichts von Python verstehe. Z.B. im Dateinamen des erzeugten .csv-Files habe ich vorn "DataLogger-" stehen. Und da ich Datum und Uhrzeit in der Ergebnis-Datei in LibreOffice Calc auf zwei Spalten verteilt habe möchte, habe ich bei den Spalten-Überschriften und -Inhalten etwas geändert (u.a. das Wort Uhrzeit eingefügt).

Ein Wunsch von mir wäre eine Fortschrittskontrolle im Terminal, so wie es Coldhands Version hat (einfach rüberkopieren des mutmaßlich dafür zuständigen Absatzes im .py-File hat erwartungsgemäß nicht funktioniert. Aber natürlich ist das hier kein Wunschkonzert und es ist auch so super ☺ Nur falls Du Lust haben solltest...

Besonders erfreulich finde ich, dass ein Fehler von Coldhands Version bei Deiner nicht auftritt. Diese erzeugt ab und zu (nach Ab- und Anstecken des Gerätes?) in der Ergebnis-Datei vervielfachte Datensätze mit gleicher Datensatznummer und Zeitangabe, aber unsinnigen Temperatur- und Luftfeuchtigkeitswerten (6503,5 und 235). Es scheinen zwar keine Datensätze stattdessen zu fehlen, aber ich muss vor der Auswertung immer die unsinnigen Datensätze aus den (großen) Dateien raussuchen und -löschen.

Die korrekte Erstellung eines Starters (beim Fork ging das problemlos) habe ich bislang nicht hinbekommen. Im Terminal starte ich das Programm aus dem Verzeichnis opt/freetecreader mit

1
./freetecreader.py --csv --suffix _$(date +%Y-%m-%d_%a_%H-%M)

In meinem Starter-Versuch steht:

[Desktop Entry]
Type=Application
Name=FreeTec
Name[de_DE]=FreeTec1.desktop
Exec=bash -c "/opt/freetecreader/freetecreader.py --csv --suffix _$(date +%Y-%m-%d_%a_%H-%M)"
Path=../../opt/freetecreader/freetecreader.py
Icon=/opt/freetecreader/DataLogger.png
Terminal=true
Comment=Start ueber bash (ohne xterm)

Der (das?) "suffix" wird nicht in den Dateinamen übertragen, der lautet einfach

DataLogger-892bb080_--__-.csv

Die Datei selbst ist offenbar korrekt. Wahrscheinlich ein banaler Fehler - kann mir jemand helfen?

Einen Gruß, Kate

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Kate-ubuntu schrieb:

Die Datei selbst ist offenbar korrekt. Wahrscheinlich ein banaler Fehler - kann mir jemand helfen?

Vermutlich wird in der Desktop-Datei keine Command Subsitution gemacht. Am einfachsten verschiebst Du den Aufruf in ein Skript, das Du dann in der Desktop-Datei einträgst.

Kate-ubuntu

(Themenstarter)

Anmeldungsdatum:
18. Juli 2013

Beiträge: 99

Wollte mich - wenn auch etwas spät - noch für den Tipp bedanken, rklm ☺

Ich hatte das zunächst erfolglos probiert (wenn man sich kaum mit Skripten und garnicht mit python auskennt, geht das nicht so mal eben) und ich hab's dann erstmal beiseite gelegt. Melde mich, wenn ich da was hinbekomme.

Gruß, Kate

Kate-ubuntu

(Themenstarter)

Anmeldungsdatum:
18. Juli 2013

Beiträge: 99

Kate-ubuntu schrieb:

Melde mich, wenn ich da was hinbekomme.

Es funktioniert jetzt (nach einer sehr punktuellen Recherche, Grundlagenwissen fehlt nach wie vor).

Starter FreeTec1.desktop

[Desktop Entry]
Type=Application
Name=FreeTec
Name[de_DE]=FreeTec1.desktop
Exec=bash -c "/home/kate/.local/share/applications/freetec1.sh"
Path=home/kate/.local/share/applications/freetec1.sh
Icon=/opt/freetecreader/4055_DataLogger3.3.2.0.png
Terminal=true
Comment=Start ueber bash (ohne xterm)

Das von dort aufgerufene Bash-Skript freetec1.sh:

1
2
3
4
5
#!/bin/bash
# Hilfsskript fuer FreeTec1.desktop
ZEITPUNKT=$(date +%a_%Y-%m-%d_%H-%M)
echo "Freetec-DataLogger gestartet: $ZEITPUNKT"
bash -c "/opt/freetecreader/freetecreader.py --csv --suffix _$ZEITPUNKT ; read"

Was mich noch stört:

  • Im aufgerufenen Bash-Fenster gibt es keine "beendet"-Meldung und die Bash kehrt nicht zu einer Eingabezeile zurück, wie man das vom Terminal kennt, wenn ein Befehl ausgeführt wurde. Schließen tut es sich nach drücken der Return-Taste (was wohl mit dem "read"-Befehl im Skript zusammenhängt).

  • Es gibt keine Fortschrittsanzeige (in Prozent).

Lässt sich das noch einfach einbauen? (Müsste sonst selbst gelegentlich nochmal recherchieren.)

An sich ist das Problem aus dem Thread-Titel damit auch gelöst, jetzt geht's nur noch um Komfort-Aspekte ☺

Gruß, Kate

hoehermann

Anmeldungsdatum:
30. Oktober 2007

Beiträge: 29

Moin Kate

Bitte entschuldige, dass ich erst jetzt antworte. Die Benachrichtigungen über neue Beiträge in diesem Thema kamen irgendwie nicht an. Vielleicht vom Spamfilter gefressen.

Eine Fortschrittsanzeige lasse ich im Debug-Modus einblenden. Er kann mit --debug eingeschaltet werden. ☺

Für weitere Funktionswünsche und Fehlermeldungen, öffne gerne eine Anfrage auf https://github.com/hoehermann/freetecreader/issues – da schaue ich häufiger rein als hier.

Viele Grüße

Hermann

Antworten |