Voltcraft CO-20 USB-Luftqualitätssensor

Begonnen von C64Emulator, 04 Juni 2013, 10:50:06

Vorheriges Thema - Nächstes Thema

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Spiff

Hi,

ich habe mit der neuen Version unter Windows Probleme.
Er trennt sich immer und danach muss ich ihn komplett neu einstecken, damit das libusb Diagnosetool ihn überhaupt wieder erkennt.

Hier ein Auszug aus den Log:
2015.08.15 16:23:46.913 3: co20: CO20 device found
2015.08.15 16:23:46.914 3: co20: CO20 device opened
2015.08.15 16:23:47.936 3: NTFY return:  co20:-116
2015.08.15 16:23:56.916 1: PERL WARNING: Use of uninitialized value in subroutine entry at C:/Perl/site/lib/Device/USB/Device.pm line 748.
2015.08.15 16:23:56.967 1: PERL WARNING: Use of uninitialized value in numeric ge (>=) at ./FHEM/38_CO20.pm line 310.
2015.08.15 16:23:56.967 3: co20: disconnected
2015.08.15 16:24:01.968 3: co20: filed to find CO20 device
2015.08.15 16:26:47.824 2: co20: no device
2015.08.15 16:26:47.824 3: co20: disconnected
2015.08.15 16:26:47.826 3: co20: CO20 device found
2015.08.15 16:26:47.828 3: co20: CO20 device opened
2015.08.15 16:26:57.886 3: co20: disconnected
2015.08.15 16:27:02.887 3: co20: filed to find CO20 device


In Device.pm steht ab Zeile 748:
my $retlen = Device::USB::libusb_interrupt_read(
        $self->{handle}, $ep, $bytes, $size, $timeout
    );


Habt ihr eine Idee? Ich hoffe, es ist kein zu spezielles Windows-Problem.
Ich verwende übrigens ActivePerl 5.16.3.

Ich habe jetzt erstmal zur alten Version von co20 zurückgewechselt.

Gruß
Spiff.

Markus M.

Zitat von: Spiff am 15 August 2015, 17:18:39
Habt ihr eine Idee? Ich hoffe, es ist kein zu spezielles Windows-Problem.
Ich verwende übrigens ActivePerl 5.16.3.
Ich habe jetzt erstmal zur alten Version von co20 zurückgewechselt.

Setz bitte testhalber mal die Attribute retries und timeout (z.B. 3/10) und probier es nochmal mit der aktuellen Version.
Wenn es damit klappt dann hab ich das verbockt - sorry.

Andre, bitte die Version im Anhang zeitnah einchecken - hab vergessen ein paar Variablen zu initialisieren  :-\

Markus
Aktuell weder Smarthome noch FHEM vorhanden

Spiff

Hallo Markus!

Zitat von: Markus M. am 15 August 2015, 17:51:15
Setz bitte testhalber mal die Attribute retries und timeout (z.B. 3/10)...

Brauchte ich nicht, geht jetzt auch so (oder soll ich?).
Super, vielen Dank!! Der Abend ist gerettet. :-)
Im Übrigen kann ich jetzt auch advanced 1 setzen, ohne es als globales Attribut definieren zu müssen, das ging vorher irgendwie auch nicht. Kann aber auch mein Fehler eines fehlenden shutdown restart gewesen sein.

Danke nochmal & viele Grüße
Spiff

Markus M.

Zitat von: Spiff am 15 August 2015, 18:02:21Brauchte ich nicht, geht jetzt auch so (oder soll ich?).

Du meinst mit der Version aus dem Anhang?
Wenn du die genommen hast zeigt mir das natürlich auch, dass das Problem daran lag :)

Hmm... Entweder hatten sonst alle ausser dir die Attribute bereits gesetzt, seit 3 Wochen kein Update gemacht oder es fliegt einem tatsächlich nur bei Windows um die Ohren.
Na egal, alles wird gut ;)
Aktuell weder Smarthome noch FHEM vorhanden

Spiff

Ja, die Version aus dem Anhang funktioniert jetzt. Ich habe die alte nochmal gegengecheckt. Fehler in der neuen Version behoben. advanced ging vorher auch schon, das nehme ich auf meine Kappe. :)

Viele Grüße
Spiff

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Markus M.

Zitat von: justme1968 am 15 August 2015, 18:31:50
einchecken oder nicht :) ?

Definitiv :)
timeout und retries waren nicht initialisiert, was das USB Modul von Windows leider nicht vertragen hat.
Hab grade nachgesehen und hatte die Attribute selbst auch nicht gesetzt gehabt - Linux User waren also nicht betroffen.
Ich hab jetzt mal Standardwerte von 10sec und 3x gesetzt, das sollte funktionieren.

Ich glaube ich sollte mich langsam mal um einen Dev Account bemühen...
Aktuell weder Smarthome noch FHEM vorhanden

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Spiff

Ach so, gibt es eigentlich überhaupt die Möglichkeit, mehrere Sticks an einem PC zu unterscheiden? Ich habe bisher nur einen Stick, überlege aber, mehr davon zu kaufen, falls das irgendwann mal geht. Es wäre natürlich schade, wenn die Werte dann bunt und zufällig durcheinandergewürfelt würden. :)

Gruß
Spiff

justme1968

du kannst im define bus:device mit angeben. dann wird die automatische suche deaktiviert und du sprichst ein konkretes device direkt an.

beides bekommst du per lsusb.

du musst aber sicher stellen das sich die reihenfolge am bus nicht ändert. also alles aus. beide sticks rein und dann booten. am besten zwei drei mal und jeweils nach den werten schauen.

wenn du zusätzliche devices an den usb bus anschliesst kann sich die nummerierung nach einem neustart ändern.

da die dinger scheinbar keine eindeutige id oder seriennummer haben geht es so viel ich weiss leider nicht genauer.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Markus M.

Zitat von: justme1968 am 15 August 2015, 19:27:20da die dinger scheinbar keine eindeutige id oder seriennummer haben geht es so viel ich weiss leider nicht genauer.

Euer Einstieg falls ihr es reinbasteln wollt:
get co20device stick_data -> $hash->{SERIALNUMBER}  ;)
Aktuell weder Smarthome noch FHEM vorhanden

Spiff

Ah cool, dann ginge es also doch noch besser!
Meiner z.B. hat 48313631373015082216 (uffz!) als Serialnumber.

Wie würde man das am besten machen? Ich denk mal laut, vielleicht kann ich versuchen, das einzubauen.

Wenn das define in meinem Fall dann so aussieht: define co20-Wohnzimmer co20 48313631373015082216
müsste ja erstmal über das Modul eine Verbindung zum ersten co20-Stick hergestellt werden, über das get stick_data die Serialnumber herausgefunden werden und wenn die gleich der im define stehenden Nummer ist, wird die Adresse für das zu definierende Gerät übernommen. Wenn nicht: weiter zum nächsten Stick.
Das Aktualisieren der Seriennummer sollte man immer direkt nach dem Connect und vor der Zuordnung zur Aktualisierung durchführen, falls 2 Sticks die Adresse getauscht haben und auf das dann falsche gespeicherte Internal zugegriffen würde.
Dann müsste man wahrscheinlich noch einbauen, dass er es nicht in einer Endlosschleife immer wieder von vorne versucht, sobald alle Sticks abgefragt wurden und kein passender dabei war, oder? Obwohl... er soll ja eigentlich auch merken, wenn ein Stick eingesteckt wird.

Gruß
Spiff.

justme1968

ich würde es etwas anders machen:

bei einem bestimmten parameter (z.b. MASTER) geht das modul beim starten alle sticks durch und legt automatisch für jeden ein stick ein device an.

das definieren von hand würde ich nur als notlösung sehen weil man erst etwas anlegen muss um die id zu bekommen und dann damit erst das eigentliche device anlegen kann.

also kann man es auch gleich automatisieren.

oder fällt jemandem ein fall ein bei dem mehr als ein stick am system steckt aber nur einer eingebunden werden soll?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Spiff

Zitat von: justme1968 am 15 August 2015, 21:26:00
bei einem bestimmten parameter (z.b. MASTER) geht das modul beim starten alle sticks durch und legt automatisch für jeden ein stick ein device an.
Du meinst, sofern der gefundene Stick nicht schon angelegt wurde?

Zitat von: justme1968 am 15 August 2015, 21:26:00
oder fällt jemandem ein fall ein bei dem mehr als ein stick am system steckt aber nur einer eingebunden werden soll?
Nein, das dürfte im Normalfall niemand wollen. :-)

Das mit dem Autocreate finde ich super! Ist man ja auch schon von HM-Geräten z.B. "gewohnt". :)

Also du würdest IMMER einen Master definieren, der auch definiert bleibt? Was ist mit plug-&-pray-Funktionalitäten? Mir wäre ein automatisches Suchen, sobald ein solcher Stick eingesteckt wird, lieber, als es manuell anzustoßen - oder meintest du die Master-Geschichte nur, wenn man neu anfängt bzw. einen neuen Stick hinzufügen will? Das wäre gut!
Ich würde es gut finden, wenn die gleichen Commandos wie bei den anderen Modulen verwendet werden, in dem Fall wäre"autocreate" vielleicht richtig? Schon vorhandene Sticks neu zu organisieren, weil man die Sticks von Wohnzimmer und Schlafzimmer ausgetauscht hat, sollte kaum vorkommen.

Und wenn, um sicher zu gehen:
vielleicht kann man zum Identifizieren die LED der Sticks benutzen: bei einem set co20 identify könnte man KNOB_CO2_VOC_level_warn2 einmal auf 0 setzen, dann auf einen extrem hohen Wert, das 3x wiederholt und dann wieder auf den ursprünglichen Wert. Wenn die LED darauf "live" reagiert, müsste der jeweilige Stick rot blinken. Vorraussetzung ist natürlich, dass man den ursprünglichen Wert auslesen kann, damit man nichts verstellt.

Gruß
Spiff