Sporadischer Fehler "No data received from sensor. Check all connections"

  • Hallo,


    ich benutze den Raspberry Pi4 mit der Raspberry Pi High Quality Kamera (12MP) für eine Fotobox.

    Sporadisch stürzt mein Python-Skript mit folgender Fehlermeldung ab:

    "picamera.exc.PiCameraRuntimeError: No data recevied from sensor. Check all connections, including the SUNNY chip on the camera board"


    Zeitpunkt des Problems:

    Ich habe eine Vorschau, also ein Bildschirm zeigt das aktuelle Bild, das von der Kamera übertragen wird. Mit der Betätigung eines Knopfes wird ein Countdown gestartet.

    -> Dies ist der Zeitpunkt an dem der Fehler auftritt und das Pythonskript abstürtzt.

    Verbindungen habe ich natürlich überprüft, hier scheint alles in Ordnung zu sein. Wenn ich das Pythonskript wieder neu starte, funktioniert es wieder den ganzen Tag.


    Am nächsten Tag starte ich die Fotobox wieder, und der Fehler tritt nicht auf, am übernächsten Tag vielleicht schon wieder. Also sehr sporadisch.

    Soweit ich das bisher eingrenzen konnte, GLAUBE ICH, dass das Problem vor allem kurz nach dem Start des Pythonskripts auftritt.



    Hat jemand eine Idee woran das liegen könnte?


    Vielen Dank schon mal.

  • Ohne das Programm kann man nur raten.


    Ich würde z.B. die Exception picamera.exc.PiCameraRuntimeError abfangen, dann einen sleep und dann wiederholen.

    Möglicherweise muss das Kamera-Objekt neu instanziiert werden. Das hängt von dem Modul ab, dass verwendet wird.

  • Wenn Du Dein Script nicht herzeigen willst und das Camera Modul beiderseits fest verbunden ist und genügend Strom erhält, dann kannst Du auch in den Logfiles [/var/log/kern* , sys*] nachsehen, was da schiefläuft.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Vielen Dank für eure schnellen Antworten! Ich bin momentan unterwegs und habe leider keinen Zugriff auf den Code (und ihn leider auch nicht mehr genau genug im Kopf...). Wenn ich wieder Zuhause bin, stelle ich Ihn gerne hier rein.

    Danke jedenfalls schon mal für eure Tipps, ich denke die könnten schon sehr hilfreich sein. Für mich ist es vor allem deshalb so irritierend, weil es so sporadisch auftritt und ich das Problem auch nicht nachstellen kann.

  • Ich habe mir das nochmal angesehen und bin leider nicht viel weiter gekommen. Konnte den Fehler auch nicht mehr nachstellen.

    Im Anhang habe ich nochmal das Python-Skript gepackt.

    Der kritische Fehler tritt auf, wenn der Button 1 gedrückt wird und die Methoden "self.ui.screenCapture(self)" und "self.ui.lightOn(self)" gerufen werden (siehe Zeile 492 - 496.

    Ich habe mit den Leuten nochmal gesprochen die den Absturz "miterlebt" haben. Ich habe mir eigentlich gedacht, dass die Methode "screenCapture(self, Form) verantworlich sein müsste. Aber der Block von Zeile 194 - 211 wird eigentlich (normal??) nie durchlaufen, da "self.isLive" immer "True" sein müsste. Die "try" und "excepts" habe ich erst kürzlich eingefügt. Zum fehlerhaften Zeitpunkt war das also noch nicht abgefangen, daher weiß ich nicht ob das schon Abhilfe bringt....


    Habe ich hier kritische Stellen? Oder sollte ich die Methoden "self.ui.screenCapture(self)" und "self.ui.lightOn(self)" nicht so kurz nacheinander aufrufen?

  • In der Methode "self.ui.lightOn(self)" schalte ich einen GPIO auf "high" (zum Zeitpunkt dieses Aufrufs tritt das Problem auf).

    In der Methode "self.ui.lightOff(self)" schalte ich den gleichen GPIO auf "low" - allerdings in einem thread.


    Könnte der thread hier sporadisch Probleme machen?

    So dass der thread irgendwie hängen geblieben ist und der GPIO immer noch ausgeschaltet werden soll o.ä. und diese Exception eher irreführend ist?

  • Die Verwendung von _thread weist auf einen Code-Smell hin. Eigentlich sollte man threading.Thread verwenden und QT hat QThread. Den Code muss ich mir @home ansehen.

    Ok, das sollte ich dann auf jeden Fall schon mal ändern denke ich. Aber kann das auch zu solchen irreführenden Fehlern "picamera.exc.PiCameraRuntimeError" führen oder ist das eher ein anderes Problem?

  • DeaD_EyE

    RTFM

    Falls es euch interessiert. Ich habe den import von _thread rausgeschmissen und seitdem ist das Problem nicht mehr aufgetreten. Allerdings habe ich keine wirklichen Langzeit-Tests gemacht, und da das Problem sehr sporadisch aufgetreten ist, muss das noch nichts heißen....

  • Jetzt habe ich gerade nochmal ausführlich getestet und das Problem tritt auf einmal ständig auf (bei jedem zweiten Foto :((( )

    Verantwortlich ist die Methode

    Code
    self.camera.stop_preview()

    also das beenden der Vorschau.

  • Hallo,


    ist der Code denn von dir oder hast du denn + die config-file irgendwo her?


    Auf den ersten Blick ist das ein großes Chaos für mich. Es geht schon los, dass das 'initSystem' das in einer Klasse steckt in der '__init__' einer anderen Klasse aufgerufen wird.

    Was steckt denn hinter fotoboxCfg['nopi'] ?


    Kann es sein, dass die Kameraverbindung immer offen ist und du dadurch Fehler bekommst? Jedes Objekt/Verbindung/Datei die geöffnet wird, sollte nach der Verwendung wieder geschlossen werden. Pi-Camera kann auch mit dem 'with'-Statemant verwendet werden, dann übernimmt das Schließen automatisch.


    Nur mal so als Gedanke. Ansonsten würde ich das Programm mal stark reduzieren und Schritt für Schritt immer wieder testen, irgendwann solltest du ja an den Punkt kommen von geht -> geht nicht mehr.


    Grüße

    Dennis

    🎧 Melancholie in meinem Kopf, schenk mir Glück in meinem Herz, die Dunkelheit als Freund - wohltuender Schmerz🎧

  • @ Der kritische Fehler tritt auf, wenn der Button 1 gedrückt wird und die Methoden "self.ui.screenCapture(self)" und "self.ui.lightOn(self)" gerufen werden


    Wenn lightOn den Fehler verursacht, dann hast Du möglicherweise einen Spannungsabfall, der das BS beeiträchtigt.

    Anzahl /Verschaltung der LEDs oder untaugliches Netzteil, könnten die Ursache sein, die auch in den Logfiles dokumentiert sein sollte.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Danke für den Tipp! Ich glaube genau hier liegt das Problem. Leider kam ich anhand der Logfiles nicht drauf..

    Scheinbar ührt "self.ui.lightOn(self)" dazu, dass die Verbindung zur Kamera nicht mehr richtig funtioniert und somit der preview beendet wird.

    Der Absturz ist dann später bei "self.camera.stop_preview()", vermutlich weil hier ein preview gestoppt werden soll der gar nicht mehr läuft.


    "self.ui.lightOn(self)" schaltet ein Relais, laut Beschreibung sollte es eig. für den Raspberry einwandfrei geeignet sein. Es funktioniert ja auch, allerdings in Verbindung mit der Kamera kommt es wohl zu diesem blöden Fehler, wahrscheinlich wegen Spannungsprobleme.


    Ein erneutes starten der Vorschau in der Methode "def screenCapture(self, Form)" brachte mir beim rumprobieren jetzt Abhilfe. Seit ich das eingebaut habe hatte ich keinen Absturz mehr.

  • Ich habe den Code im Netz gefunden und ihn erweitert. Er war davor sicherlich nicht 100% sauber und ich habe es bestimmt auch noch schlimmer gemacht ?( . Bin noch Anfänger auf dem Gebiet, hab dadurch aber schon einiges gelernt und nehme mir Deine Worte zu Herzen -> ich werde mal versuchen "aufzuräumen".


    Zu deinen Fragen:

    - fotoboxCfg['nopi'] -> Es kann konfiguriert werden ob eine Raspi-Cam angeshclossen ist oder eine andere Digitalkamera

    - Die Verbindung ist immer offen, das ist aber schon so gewollt. Es soll halt immer ein aktueller Livestream ausgegeben werden, bis jemand den Button drückt um ein Foto zu machen, anschließend wird die Vorschau beendet und das soeben geschossene Foto angezeigt. Anschließend wieder zurück zum Livestream...