USB Schnittstelle blockiert jeweils nach siebenter Datenabfrage

  • Ich möchte mit dem für Debian compilierten Tool te923con 0.6.1 meine HIDEKI Wetterstation über USB abfragen.


    Nach dem Aufruf wird ein 96Byte Textstring mit den aktuellen Daten zurückgegeben. (Pi ZeroW mit DietPi/node-red/ Scargill script ).


    Das klappt leider nur genau siebenmal hintereinander dann friert der Pi ein und ich kann nur noch rebooten.


    Die USB-Schnittstelle scheint nicht mehr zu antworten. In node-red erscheint Fehler -16 Konfigurationsfehler.


    Was kann ich tun?

  • Und wenn du das Script veröffentlicht, könnte man es sich ansehen, und dir ohne wild herumzuraten, auch helfen.


    Da das Script (noch) nicht da ist, meine Vermutung:

    Du öffnest den USB-Port zum Lesen, schließt ihn aber anschließend nicht, und dann sind zu viele Filehandle offen, die sich gegenseitig blockieren.

    Selber denken,
    wie kann man nur?

  • Ischhh habe gar kein script sondern nur laut Anleitung von https://www.wiki.boxpirates.to/index.php?title=PI_Anderes.


    Zuerst die Installation der nötigen Software "te923con" um die TFA Nexus auszulesen:

    • cd /home/pi

     sudo apt-get install gcc -> ist vermutlich schon auf dem PI!  sudo apt-get install libusb-dev  sudo wget http://te923.fukz.org/downloads/te923tool-0.6.1.tgz  sudo tar -xvzf te923tool-0.6.1.tgz  cd te923tool-0.6.1/  make all  sudo cp te923con /usr/bin/

    Jetzt müssen noch udev-rules für das USB-Gerät angelegt werden:

    • sudo nano /etc/udev/rules.d/99-te923.rules

     ATTRS{idVendor}=="1130", ATTRS{idProduct}=="6801", MODE="0660", GROUP="plugdev", RUN="/bin/sh -c 'echo -n $id:1.0 > /sys/bus/usb/drivers/usbhid/unbind mit STRG + O Änderungen speichern, nächste Abfrage Enter und mit STRG + X Nano verlassen sudo udevadm control --reload-rules


    libusb war schon vorhanden.

    Edited once, last by satsatt ().

  • Das habe ich schon gesehen. Ich schlußfolgere daraus, daß mit fortschreitender Entwicklung Windowsanwendungen vielleicht nicht mehr funktionieren , Linux aber mit Sicherheit nicht mehr ( zumindest für den Ungeübten ).


    Eigendlich habe ich eine Antwort wie " nach dem Aufruf von te923.con mußt Du die Schnittstelle mit dem Befehl XXX wieder schließen erhofft " .-))


    Ok google ist groß ich hab da noch was.


    Danke für die Hilfe

  • Pi ZeroW mit DietPi/node-red/ Scargill script

    Da steht weder was von DietPi noch von Node-red in Deiner Anleitung. Warum bringst Du weitere Unsicherheiten in eine Anleitung, die auf Raspbian wheezy aufsetzt? Probier doch mal aus, ob das Skript überhaupt auf einem aktuellen Raspbian läuft.

  • Installation auf RPi 3B+ mit Raspian stretch full funktioniert wie gewünscht aber auf dem Pi Zero kommt es zum Einfrieren.


    Eigendlich wollte ich eine "kleine Lösung mit ZeroW" um den Textstring ca. alle Minute zu einem MQTT Broker zu senden.

  • Pi Zero kommt es zum Einfrieren.

    der Pi0 hat nur einen Prozessorkern und nur die Hälfte des Hauptspeichers eines RPi2/3. Bist Du sicher, dass der tatsächlich "eingefroren" ist und nicht nur ausgelastet?

  • uhha hab Erbarmen



  • Es funktioniert ja ein paarmal aber dann komm ich nur noch mit Ctrl C da raus.


    Code
    pi@pizero1:~ $ te923con
    1552418252:21.80:40:i:i:21.90:20:21.80:20:21.50:38:20.90:40:991.8:i:3:0:13:0.0:0.0:21.8:272
  • so siehts aus wenn es noch funktioniert


    • Official Post
    Code
    open("/dev/bus/usb/001/002", O_RDWR)    = 3
    ioctl(3, USBDEVFS_GETDRIVER, 0xbed49ff8) = 0
    ioctl(3, USBDEVFS_IOCTL, 0xbed4a0e8)    = 0
    ioctl(3, USBDEVFS_SETCONFIGURATION, 0xbed4a0fc) = -1 EBUSY (Device or resource busy)
    write(2, "Error while setting configuratio"..., 41Error while setting configuration (-16).
    ) = 41

    Nur so ne Idee. Der Zero hat soweit ich mich erinnere im Gegensatz zu RPi3 keinen internen USB-HUB. Evtl. liegt hier der Kümmel im Käse. :conf:

  • beim sechsten mal


    Ich hoffe fuser richtig aufgerufen zu haben?


    Code
    pi@pizero1:~ $ sudo fuser -m -u /dev/bus/usb/001/002
    /dev/bus/usb/001/002:     1(root)    63(root)    99(root)   191(systemd-timesync)   215(root)   217(nobody)   226(messagebus)   239(avahi)   240(root)   241(root)   244(avahi)   257(root)   308(root)   314(root)   334(root)   338(root)   368(root)   380(root)   413(root)   417(root)   502(root)   503m(root)   512(root)   574(root)   582(pi)   585(pi)   590(pi)   599(pi)   635(pi)   642(pi)   647(pi)   666(pi)   668(pi)   669(pi)   671(pi)   679(pi)   687(root)   695(pi)   707(pi)   714(pi)   726(pi)   732(root)   742(pi)   746(pi)   750(pi)   754(pi)   794(pi)   802(root)   812(pi)
  • Hm. Zum call USBDEVFS_SETCONFIGURATION, der in Deinem ersten strace den Fehler produziert, habe ich das hier gefunden:

    Warning

    Avoid using this call until some usbcore bugs get fixed, since it does not fully synchronize device, interface, and driver (not just usbfs) state.

    Aber wenn's auf dem Pi 3 läuft, kann's das ja eigentlich nicht sein.

    Ich hoffe fuser richtig aufgerufen zu haben?

    Nein, durch die Option "-m" listest Du alle Prozesse auf, die irgendein file unter /dev offen haben. Lass die mal weg und verwende stattdessen "-l". "-u" gerne auch.

  • das ergibt

    Code
    pi@pizero1:~ $ sudo fuser -l -u /dev/bus/usb/001/002
    HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
    STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
    UNUSED