Beiträge von DennisC

    Für einen selbst entwickelten Bordcomputer auf Basis eine RaspberryPi 4, habe ich mehrere kleine Programme geschrieben die Messdaten erfassen und sie in eine Influx Datenbank schreiben die ebenfalls auf dem Pi installiert ist. Weitere Messwerte werden über Mikrocontroller erfasst und mittels Wlan in die Datenbank geschrieben. Die Visualisierung erfolgt dann über Grafana, das ebenfalls auf dem Pi ausgeführt wird.

    Soweit läuft alles zu meiner Zufriedenheit. Jetzt habe ich nur das Problem, dass mein Raspberry an seine Grenzen kommt wenn alle Programm aktiv sind.

    Der CPU Load wandert weit über 4 und die Visualisierung beginnt zu "Ruckeln".

    Um ein besseres Gefühl davon zu bekommen was die CPU so beansprucht habe ich zunächst mal nur einzelne Anwendungen gestartet und die Auslastung mit htop angeschaut.

    Dabei ist mir aufgefallen, dass jedes der grösseren Programme schon einen der vier Kerne zu 100% beansprucht.

    Hier eins der besagten Programme als Beispiel:

    Das Programm wertet alle zwei Sekunden die Signale eines GPS-Empfängers über die Serielle Schnittstelle aus und speichert sie in eine .txt und in die InfluxDB.

    Bedarf das wirklich so viel Kapazitäten ? Selbst wenn ich das Intervall auf 4s oder größer setze ändert das nicht viel.

    Kann es sein das bereits meine "Warteschleife" viel Rechenleistung benötigt ?

    Welche Möglichkeiten habe ich um das Programm Ressourcen schonender aufzubauen ?

    Wenn es eine Rolle spielt, ich habe auf dem Pi Raspbian Light installiert und starte die Programme nach dem Booten über jeweils einen Service.

    Was hast Du wo und womit (was ist in Deiner Wahrnehmung ein Scope?) und vor allem wann gemessen?

    Ein Scope ist in meiner Wahrnehmung ein Oscilloscope.

    Ich habe die 5V (Pin2 gegen Pin6 GPIO) gemessen.

    Ab dem Zeitpunkt des einstecken des Netzteiles bis zum kompletten hochfahren.

    Weiterhin habe ich noch ein OLED angeschlossen und ein Beispielprogramm in durch eine systemd Service Unit in den Autostart genommen. Das startet ohne Probleme gleich zu Anfang.


    Bitte sieh in die Logs zum Startzeitpunkt, ob ungewöhnliche Einträge vorhanden sind. Poste bitte die Ausgabe von vcgencmd get_throttled.

    vcgencmd get_throttled gibt throttled=0x0 aus.

    Die /var/log/messages/boot.log zeigt keine Fehler, in der /var/log/messages taucht folgender Err auf:

    Code
    raspberrypi lightdm[719]: Error getting user list from org.freedesktop.Accounts: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.Accounts was not provided by any .service files

    Durch verschiedenes ansprechen der RGBLeds in meinem Programmcode weiß ich nun das sich das Programm immer an dem Punkt aufhängt an dem es die ermittelten Daten in die InfluxDB schreiben soll:

    Code
    client.write_points(InfluxData)

    Client ist ein InfluxDBClient:

    Code
    client = InfluxDBClient(host='192.168.10.1', port=8086, username='', password='')

    Influx wird wenn ich es richtig sehe auch über den Service influxd gestartet. Habe zumindest diese Datei gefunden:

    Code
    /etc/systemd/system/influxd.service

    Da drauf hin habe ich einmal versuch den Autostart-Service des Programmes erst nach dem starten von Influx zu starten.

    Hat das Problem jedoch auch nicht behoben.

    Was verwendest Du eigentlich für ein Netzteil und um welchen RPi handelt es sich hier?

    Mir ist klar das die Frage sich zusammenhangslos anhört, aber rot braucht nun mal weniger "Saft" als grün und ein RPi im Bootprozess mehr als im Normalzustand.

    Das hat mehr als genug Leistung. Die Spannung bricht definitiv nicht ein.

    Ein Mantra: Benutze IMMER absolute Pfade, auch um python3 aufzurufen. Was sagt denn der status Deiner Unit?

    /prog/GPS_main_V1.py sollte der absolute Pfad sein.

    Woran siehst Du das?

    An den RGB_Leds die ich aus dem Programm heraus ansteuere.

    Normalerweise ist eine rot bis ich einen GPS FIX habe (ca3s) dann schaltet sie auf grün.

    Ca 2s später geht das Speichern der Log los und die andere LED wird blau.

    Reboote ich meinen Pi nun ist die LED rot wird kurz grün und geht dann wieder auf rot usw.

    Erst nach einer Weile bleibt sie Grün und das Loggen beginnt. Sieht für mich aus als würde das Programm ein paar mal neu starten.

    ...Was sagt denn der status Deiner Unit?...

    Wieso steht da die Ausgabe meines Programms mit drin ?

    Habe nun noch etwas herumprobiert und es so zum laufen bekommen:

    Jedoch scheint erst erst einige male abzustürzen bevor es wirklich stabil läuft.

    Ich schätze mal das, wie schon vermutet, noch ein Dienst fehlt, das Programm jedoch durch restart=on-failure solange neu startet bis es läuft

    ...

    3. Benutze IMMER absolute Pfade, überall.

    3a. Dein Skript befindet sich tatsächlich in /prog, den Du auch selbst angelegt hast?

    ...

    Ja den habe ich selber angelegt. Schätze mal das ist nicht die übliche Weise/Ort Programme abzulegen !?

    Ich habe mir nun einen Service angelegt:

    Code
    sudo nano /etc/systemd/system/my-service.service
    Code
    [Unit]
    Description=My Service
    #After=network.target
    After=network-online.target
    
    [Service]
    ExecStart=python3 /prog/GPS_main_V1.py &
    
    [Install]
    WantedBy=default.target

    Brauche ich das "&" Zeichen noch hinter dem Programmaufruf ?

    Anschließend habe ich den Service noch aktiviert:

    Code
    sudo systemctl enable my-service.service

    Starte ich ihn nun den Service startet auch mein Programm,

    Code
    sudo systemctl start my-service.service

    Jedoch immer noch nicht nach einem Neustart.

    Habe es mit network.target und mit network-online.target probiert.


    Guten Tag,

    ich beschäftige mich erst seit ein paar Wochen ausgiebig mit dem Raspberry und Python und bitte um Nachsicht.

    Ich habe ein Programm geschrieben mit dem ich Daten aus einem GPSmodul immer abwechselnd in eine LogDatei und in eine Influx-Datenbank schreibe.

    Ausserdem gebe ich erfassten Daten zum Debuggen über SSH aus und habe zwei NeoPixel LEDs angeschlossen um den Zustand anzuzeigen.

    Bei dem GPSmodul handelt es sich um ein Adafruit Ultimate GPS, für meine Zwecke habe ich das Beispielprogramm "gps_simpletest.py" angepasst.

    Da die Neopixel-Library PWM nutz braucht das Programm root berechtigung.

    Nun zu meinem Problem, starte ich das Programm über SSH läuft es ohne Probleme und macht was es soll.

    Ich bekomme es aber einfach nicht dazu es automatisch nach dem Booten zu starten.

    Ich habe in /etc/rc.local folgendes eingetragen:

    Code
    sudo python3 /prog/GPS_main_V1.py &
    
    exit 0

    Erst ging ich davon aus, dass die Neopixel bzw die PWM das Problem ist, aber selbst wenn ich alle Neopixel Teile auskommentiere startet es nicht.

    Ich vermute das ich in meinem Programm etwas benutze das beim Aufruf noch nicht gestartet ist aber mir fehlt jeglicher Anhaltspunkt.

    Könnt ihr mir auf die Sprünge helfen ?