Posts by BigRed

    Soooooo.... es war wirklich der 1000µF-Kondensator, der gefehlt hat! Danke an alle für den heißen Tipp (der im Nachhinein selbstverständlich wirkt).


    Ich habe mir allerdings immer noch nicht "getraut", ihn ohne Widerstand aufzuladen und habe es so gemacht wie in dem Bild im Anhang... und wenn das funktioniert, sind ja alle zufrieden ;-) (zur Erklärung: die Linie oben ist die Verbindung, die zum Raspberry Pi bzw. zum Relais geht)


    Also - danke nochmal!

    Einschaltverzögerung ist nicht bewusst - ist quasi ein Nebeneffekt der Abschaltverzögerung. Dabei entlädt sich ein Kondensator und das dranhängende Relais knipst irgendwann alles ab (auch die Batterie) - beim Einschalten muss der Kondensator erst geladen werden und das dauert ca. 1 Sekunde. Daher die Verzögerung beim Einschalten. Ich habe also zwei Verbraucher eigentlich: Das Relais und der Pi (das Relais geht aber erst bei 3 Volt aus).


    Ich probiere morgen mal mehr Kapazität aus und gebe euch Bescheid... danke schon mal!


    Den Elko hätte ich übrigens nicht "in den Strom" gelegt sondern nur nebendran - der Widerstand wäre dann zwischen Stromversorgung des Pi und dem Kondensator (der dann an GND hängt).


    Goldcaps kenne ich... ich glaube, was da nervt ist eben dieser (Innen-) Widerstand.

    Ok. Habe es gerade mit einem 220µF-Kondensator probiert. Der ist wohl noch zu klein und mehr hab ich nicht. Werde morgen mal mein Glück bei Con*** versuchen...


    Glücklicherweise hab ich ne kleine Anschaltverzögerung drin in meiner selbstgebauten USV - ich hätte bei 1000µF irgendwie Angst, dass wenn das im laufenden Betrieb passieren würde, er der restlichen Schaltung den Saft abziehen würde und diese völlig kollabiert - aber Angst liegt ja oft an mangelnder Erfahrung.

    Hallo,


    Ich habe mir die letzten Tage eine Art selbstgebaute USV gebaut, bei der ich zwischen Netzgerät und Akku umschalte. Mit meinem (natürlich trägen) Messgerät funktioniert das sehr gut. Nun ist das so, dass der Raspberry Pi Zero einen Reset macht, wenn ich das Netzteil abziehe. Die Spannung erhöht sich bei diesem Vorgang von ca. 5V auf 5,2 Volt (die Batterie scheint etwas mehr zu liefern)... also laut Messgerät.


    Ich nehme an, dass bei "meinem Vorgang" (also wenn ich das Netzgerät abziehe) einige Millisekunden die Spannung abfällt, und zwar so, dass das mit meinem Messgerät nicht mehr messbar ist. Ich habe schon auf google gesucht und leider nicht gefunden, wie viele Millisekunden der Raspberry Pi verträgt bzw. ob andere Leute ähnliche Probleme haben.


    Meine (vielen) Fragen an die Elektronik-Fachmänner unter euch:


    1. Kann es sein, dass auch eine Spannungs-Erhöhung den Reset verursachen kann?
    2. Angenommen meine Vermutung stimmt: Würde es etwas bringen, wenn ich einen Kondensator an den Eingang des Pi schalte? Dieser muss ja leider über einen Widerstand aufgeladen werden und beim Entladen wird auch wieder etwas Spannung abfallen...


    Danke für jede Hilfe. Bin nämlich ratlos :-(

    Hi ihr :-)


    Manchmal kommt man auch mit dummen Fragen weiter :-)


    Also, als ich mir das Betriebssystem mal genauer angeschaut habe, stellte ich fest: beides "Raspbian GNU/Linux 8 (jessie)" (mit cat /etc/os-release).


    Als ich dann allerdings genauer hingeschaut habe (Pi Zero: 4.4.11, 23. Mai 2016; Pi 3: 4.4.34, 23. November 2016) stellte ich sehr schnell fest, wo genau ich nicht hin- und damit durchgeblickt habe - auf die Release Notes. RealVNC scheint neu drin zu sein (siehe Anhang).


    Vielen Dank für die Hilfe!!!

    Hi ihr!


    das mag jetzt eine Anfängerfrage sein, aber ich blick leider nicht mehr durch. Ich hab auf meinem Raspberry 3 problemlos einen VNC-Server zum Laufen bringen können, indem ich diesen einfach nur bei den Einstellungen "enabled" habe.


    Auf meinem Raspberry Pi Zero habe ich diesen Menüeintrag nicht und ich finde nirgends, wie ich RealVNC auf den RaspberryPi-Zero installieren kann. Kann mir dabei vielleicht jemand helfen? Habe ich das falsche Betriebssystem oder geht das einfach nicht?


    Wenn ich "sudo apt-get install realvnc-vnc-server" eingebe kommt, dass ich den schon installiert habe (ich habe vorhin einige Dinge ausprobiert - kann sein, dass ich das aus Versehen installiert habe - letztlich erscheint Real VNC trotzdem nicht in den Einstellungen und ich kann mich auch nicht verbinden).


    Danke vielmals und Sorry wegen der "Anfängerfrage"

    Ich habe gerade versucht, die MessageBox vom subprocess-call aus mit


    Code
    sudo -u pi python MessageBox.py


    aufzurufen, weil der user "pi" an der GUI angemeldet ist. Bekomme leider wieder den Fehler mit der fehlenden Display-Environment-Variable...
    Automatisch zusammengefügt:[hr]
    Ich habe die Antwort!!! (Sorry für das viele Fragen!! :( )


    Ich muss folgende Environment-Variablen setzen (in MessageBox.py) damit es funktioniert:


    Code
    # Set Display Environment Variable
    os.environ["XAUTHORITY"] = "home/pi/.Xauthority"
    os.environ["DISPLAY"] = ":0.0"


    Vielen Dank für eure Zeit!

    Hi,


    Ich bin mir jetzt nicht mehr sicher, mit welchem Benutzer das Skript läuft.


    Ich starte durch ein init.d Skript mein python-Programm "Background.py" - das mache ich übrigens mit "sudo".
    "Background.py" wiederum ruft mit dem subprocess-befehl dann das Programm "MessageBox.py" auf. Das mache ich auch mit sudo. Also eigentlich mache ich alles mit "sudo".


    Wenn ich auf der Shell "echo $DISPLAY" eingebe, bekomme ich als Antwort: :0.0
    Wenn ich auf der Shell "sudo echo $DISPLAY" eingebe, bekomme ich die selbe Antwort. Also hat, so wie ich das verstanden habe, der Superuser auch das Display :0.0

    Hi,


    Danke für den Tipp! Ich hatte eigentlich schon auf Fehlerhandling geachtet, nur leider habe ich den stderr-Parameter nicht angegeben :no_sad:


    Falsch:

    Code
    (stdout, stderr) = subprocess.Popen(['sudo', '/usr/bin/python', 'MessageBox.py'], stdout=subprocess.PIPE).communicate()
    logger.info("Answer of message box is " + stdout)
    if stderr is not None:
     logger.info("Error of message box is " + stderr)
    else:
     logger.info("MessageBox closed without errors")


    Richtig:

    Code
    (stdout, stderr) = subprocess.Popen(['sudo', '/usr/bin/python', 'MessageBox.py'], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
    logger.info("Answer of message box is " + stdout)
    if stderr is not None:
     logger.info("Error of message box is " + stderr)
    else:
     logger.info("MessageBox closed without errors")


    Klar: Der Pfad für die MessageBox muss angegeben werden!!! (das war der Fehler)


    Nun bekomme ich jedoch einen neuen Fehler, mit dem ich nichts anfangen kann:

    Quote


    no display name and no $DISPLAY environment variable



    und wenn ich os.environ["Display"] = ":0" eingebe, dann kommt folgender Fehler:

    Quote


    couldn't connect to display ":0"


    Scheinbar reicht es nicht, einen subprocess aufzurufen, damit dieser sich dann die GUI "greift". Hat jemand eine Idee, welche Display-Environment-Variable er akzeptieren könnte? Danke schon mal!

    Hi,


    Ich habe mir das Ganze nochmal durchgelesen und bin zu dem Schluss gekommen, dass das alles nicht ganz zu mir passt. Mein Skript muss auch laufen, wenn KEINE GUI vorhanden ist und kein Benutzer eingeloggt o.ä.


    Was ich nun also gemacht habe:



    • Mein Skript, das beim Booten gestartet wird (ich nenne es mal "StartSkript.py"), enthält nun KEINE GUI-Elemente mehr (z.B. Tkinter)
    • Wenn ich in meinem Skript, das keine GUI Elemente mehr enthält, eine MessageBox öffnen möchte, rufe ich einen subprocess (mit POpen) auf, der dann ein "MessageBox.py"-Skript startet und die Antwort per stdout/PIPE ausliest.


    Das funktioniert, wenn ich "StartSkript.py" über die Konsole starte.


    Leider funktioniert es immer noch nicht, wenn ich "StartSkript.py" beim hochfahren des Raspberry PI starte. Die "nicht GUI-Elemente" meines Programms funktionieren hervorragend. Sobald ich jedoch eine MessageBox öffnen will und das Skript "MessageBox.py" starte, ist keine MessageBox zu sehen. Wo ist diese MessageBox hin? Kann mir das jemand von euch erklären? Das wäre super!


    Also dass in dem Moment, wo ich MessageBox.py die GUI nicht geladen ist, kann definitv nicht mehr sein...


    Danke schon mal!
    Automatisch zusammengefügt:[hr]


    Versuch mal, an den Anfang Deines Skripts ein


    Code
    os.environ["DISPLAY"] = ":0"


    zu setzen.


    habe ich versucht... leider ohne Erfolg. Danke trotzdem!

    Danke für den Tipp! Werde mich da mal einlesen...


    In dem init-Skript starte ich eigentlich schon ein "start.sh"-Skript, dass als ersten Befehl ein "Sleep 20" hat, d.h. mein Python Skript wird 20 Sekunden nachdem das Init-Skript aufgerufen wird aufgerufen (start.sh wird in der init.d-Datei mit "&" aufgerufen, also eigentlich als "separater Thread", soweit ich das verstanden habe)... 20 Sekunden sollten also eigentlich ausreichen.


    Wann wird eigentlich die grafische Umgebung geladen? Erkennt der Raspberry Pi, dass ein HDMI-Kabel angeschlossen ist? Falls weder HDMI noch VPN verbunden ist, wird dann überhaupt eine grafische Oberfläche geladen?

    Hallo,


    Ich konnte mein Python-Skript erfolgreich mit einem Init-Skript (/etc/init.d und dann mit update.rc angemeldet) starten, allerdings gehen die "Fenster" (also der GUI-Teil der Applikation) nicht auf, wenn sie aufgehen sollen (erstellt mit TKInter).


    Wenn ich das Skript mit /etc/profile starte, dann klappt das mit dem Öffnen des Fensters, nur leider wird das Python-Skript dann zwei Mal beim StartUp gestartet.


    Hat jemand eine Idee, warum der "GUI-Teil" meines Skripts nicht funktioniert, wenn ich es mit einem Init-Skript unter /etc/init.d starte? Danke schon mal!

    Ich bin auch nach einem "Charger" mit so einem Output. Wo finde ich denn so ein Modell? Ich kann anhand des Bildes nicht erkennen, nach was ich suchen kann ;-)


    Danke! (falls diesen alten Post noch jemand liest)

    Hi!


    Super! Vielen Dank für die Hilfe erst Mal! Das hat mir schon mal ein viel besseres Bild verschafft.


    Das mit dem Shutdown im Callback habe ich mir auch überlegt.


    Jetzt kommt allerdings mein zweites Vorhaben: Ich möchte eine Message-Box aufmachen, in der der Benutzer 10 Sekunden Zeit hat, den Shutdown abzubrechen. Ich würde dann nämlich eher die Message-Box (die ja wahrscheinlich blockierend ist) im Callback aufpoppen lassen. Die while-Schleife würde dann nach einem bestimmten Timeout (sleep) den Shutdown übernehmen, wenn ich ihn durch eine "cancel"-Variable im Callback nicht überspringe. Störe ich damit irgendwie die Raspberry-Pi-Verarbeitung der GPIO-Ports, wenn ich an der Stelle, also im Callback, blockiere? Kann es sein, dass andere Interrupts nicht verarbeitet werden, bis ich den Callback freigebe?

    Ich hab mehrere Dinge vor, die mir selbst allerdings auch nicht ganz klar sind ;-)


    Im ersten Schritt möchte ich den Pi kontrolliert runter fahren, wenn ein Eingang auf HIGH geschaltet wird. Ich hätte dafür jetzt einen Add_event_detect gemacht und in der while Schleife auf eine Variable geprüft (also nicht while 1, sondern while <variable==1>) und im Callback hätte ich die Variable auf 0 gesetzt (vor der while-Schleife natürlich auf 1). In der while-Schleife dann jedes Mal 1 sek. schlafen und nach der while-Schleife ein shutdown.

    Hi!


    Vielen Dank für eure Antworten. Es ist also eher ungünstig, z.B. einen Eingang über eine while -Schleife auszulesen, so wie ich das verstanden habe.
    Es liegt sicherlich in der Aufgabe des Programmieren, die CPU nicht allzu sehr auszulasten. Schade, dass sehr viele Beispiele (z.B. für Anfänger) auf dem while 1 Prinzip beruhen!!!!
    Also mein Hauptziel ist, dass das Python-Programm nicht beendet wird, sondern Endlos die von mir auferlegten Aufgaben ausführt. Solange diese nicht von irgendwelchen Inputs abhängig sind, kann ich die "Zeit zum Schlafen" ja ganz gut an meine Begebenheiten anpassen. Meistens reicht es ja, wenn ich pro Durchgang eine Sekunde schlafe.
    Welche Event basierten Ansätze gibt es denn? Kann man mit python, was für mich eher wie eine Skript-Sprache aussieht, überhaupt Events abbilden? Wenn ja: wie reagiere ich auf:

    • Ein Input hat sich geändert
    • Ein anderes (z.B. php) Skript möchte, dass ich etwas ausführe


    Danke schon Mal!
    Automatisch zusammengefügt:[hr]


    Hab grad selbst einige Beispiele gefunden. U m die while -Schleife werde ich nicht drumrum kommen... trotzdem kann ich ja eine Sekunde warten, während ich Veränderungen als add_event_detect - Thread ausführe?... danke für eure Antworten nochmal. Die haben meine Vermutungen bestätigt.