Zusatzplatine beim Booten erkennen

  • Hallo an alle,

    ich setzte ein LiPoShim der Firma Pimoroni ein. Versorge z.Z. einen Raspberry Pi Zero W.

    Wenn man das zugehörige Skript installiert, bekommt man bei niedriger Batteriespannung eine Meldung auf dem SSH Bildschirm,

    aber was viel wichtiger ist bei Nutzung einer SD Karte, der RPi wird ordnungsgemäß runter gefahren, bevor die Batterie oder der Akku in die Knie ist.

    Im Hintergrund läuft ein Demon, in dessen Konfiguration kann man einiges einstellen.

    Wenn man allerdings das Shim nicht benutzt, muss man den Demon deaktivieren/oder entfernen.

    sudo systemctl disable cleanshutd

    Oder in der /boot/config.txt 'disable_cleanshutd=1'

    Beides ist ja nur möglich, wenn man mit dem RPi verbunden ist z.B. SSH.


    Nun meine Frage, gibt es eine Möglichkeit das Shim zuerkennen?

    Wenn ja, den Demon laden, sonst nicht (beim Booten)?

    Das LiPoShim ist über einen 12pol. Stecker (2x6) mit dem RPi verbunden. Über 4 bekommt es sein Akku Low Signal.

    Aber GPIO 17 oder 18 sind noch frei.

    https://shop.pimoroni.com/products/lipo-shim

    Danke paulaner

    Einmal editiert, zuletzt von paulaner (28. Juni 2018 um 19:57)

  • ich sehe theoretisch die Möglichkeit das der PI feststellt ob das Board verbunden ist

    Über 4 bekommt es sein Akku Low Signal.

    ist natürlich verdammt dünne die Info

    ist es ein statisches Signal? high low? dann könnte man mit einem pull up/down am PI was erzwingen und den

    sudo systemctl disable cleanshutd

    ausführen

    ist es ein dynamisches Signal müsste man auch dieses unterscheiden wenn das Board nicht vohanden ist, wie auch immer

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Danke jar für die Info.

    Vielleicht habe ich mich falsch ausgedrückt, das LipoShim als solches funktioniert einwandfrei und an deren Hard- und Software gibts auch nichts zu ändern.

    Zur dünnen 'Info' meinerseits, ich möchte mich hier nicht wiederholen was der Verkäufer/Händler schon veröffentlicht hat und auch viel besser kann,

    darum der Link.

    Das LipoShim ist gut, nur möchte ich es um die Funktion der automatischen Erkennung ergänzen, dazu steht GPIO 17 oder 18 bereit.

    Warum GPIO 17 oder 18, weil der 12pol Stecker so und so auf dem RPi sitzt und die beiden dadurch hervorragend geeignet sind.

    1. Diese automatische Erkennung des Moduls soll den Demon laden oder wenn ich das Modul nicht aufgesteckt habe, nicht laden.

    2. Lösungsweg wäre, immer laden, wenn nicht vorhanden (GPIO Abfrage, Brücke o. Widerstand zwischen Plus /Masse GPIO) Demon deaktivieren,

    sudo systemctl disable cleanshutd

    Ist es jetzt verständlicher? Bin jederzeit bereit, wenn gebraucht, mehr Informationen zu geben.

    danke paulaner

    4 Mal editiert, zuletzt von paulaner (28. Juni 2018 um 19:59)

  • 2. Lösungsweg wäre, immer laden, wenn nicht vorhanden (GPIO Abfrage, Brücke o. Widerstand zwischen Plus /Masse GPIO) Demon deaktivieren,

    sudo systemctl disable cleanshutd

    so meinte ich das, anders sehe ich weniger Sinn!

    Die config.txt kann man zwar ändern aber erst nach dem Boot, vorher weiss man ja noch nicht ob das Gerät steckt und dann ändern und reboot auslösen geht auch, oder den Kernel ändern also im Kernel feststellen ob Gerät steckt und entsprechend den Treiber laden oder nicht.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Hallo raspiprojekt,

    weis ich nicht konkret, sorry, werde ich testen müssen.

    Wollte aber wenn ich es nicht verwende, nichts von der Software drin haben.

    Diese könnte z.B. eine andere PSU und deren Software beinflussen.

    Als andere PSU verwende ich die 'LiFePo4wered'

    Diese wird über einen 8pol Stecker mit dem RPi Board verbunden.

    Link: https://lifepo4wered.com/

    paulaner

  • Hallo,

    etwas Code, funktioniert das so? Bin kein Programmierer.

    Eine Brücke GND -> GPIO 17 hardware seitig.

    danke paulaner

  • Eine Brücke GND -> GPIO 17 hardware seitig.

    mache die Brücke lieber mit einem 1k

    als Input wird es erkannt als low, als output high wird der Port nicht gegrillt!

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • etwas Code, funktioniert das so? Bin kein Programmierer.

    • Zeile 6 würde ich rausnehmen. Warum Warnungen deaktivieren?
    • Zeile 19 geht soc nicht. Wo soll das return "hingehen"? (Tipp: es wird eine Exception geworfen (SyntaxError: 'return' outside function), durch das nackte except: abgefangen und das Programm sofort beendet). Also weg damit.
    • Zeile 28 würde ich zumindest zu except Exception as e: abändern, danach ein print e. Auch wenn in dem Code durch die Kürze relativ wenig Potential für weitere Fehler ist, so bekommst du sie wenigstens mit. (stdout ggf. in eine Datei umleiten...)

    Allgemein sollte dir bewusst sein, das du immer noch mit Python 2 arbeitest, wovon ich abrate, uch wenn es bei so einem kleinen Skript quasi keine Rolle spielt.

  • Danke auch dir Linus,

    wenn ich es richtig verstanden habe so?

    paulaner

  • Hallo zusammen,

    paulaner : Du hast nicht zufällig Zugriff auf die Pins #27 (ID_SD) und #28 (ID_SC)?

    Das wären die IIC-Pins für ein ID-EEPROM ... ich denke, die sind dafür gedacht irgendwelche pHat-Teile zu identifizieren.

    Das wäre vermutlich zwar etwas mehr Aufwand (ein kleines Platinchen mit eine EEPROM), aber dafür dann halt zuverlässig ...

    Also ich würde das mal ausprobieren (allein schon Interessehalber ;) )

    //EDIT: hier -> http://raspberrypi.ws/pin28

    hier -> https://raspberry.tips/raspberripi-in…tzplatinen-hat/

    hier -> https://github.com/monarco/monarc…rry-Pi_Linux.md

    hier -> https://learn.adafruit.com/introducing-th…del-b/gpio-port

    hier -> https://elinux.org/Beagleboard:Ca…EEPROM_Contents

    und hier -> https://www.raspberrypi.org/forums/viewtopic.php?t=83368

    hab' ich auf die Schnelle ein paar Infos gefunden.

    cu,

    -ds-

  • Och Linus bitte tu mir den Gefallen und gib paulaner doch eine aktuelle gpiozero-Version. Du machst das in zwei Minuten, ich brauche mindestens 'ne halbe Stunde für die paar Zeilen Code. :bravo2:

    Gerne doch :)

    Ungetestet, sollte mit (halbwegs aktuellen) Python 2 und 3 funktionieren:

    Ich denke, der Befehl "sudo systemctl stop cleanshutd(.service)" macht mehr Sinn? Denn ich glaube, disable stoppt den Dienst nicht, und beim nächsten mal soll er ja wieder normal anlaufen, um dann ggf gestoppt zu werden. Oder liege ich falsch? :conf:

    Edit: Jap. Aus der Manpage von systemctl (emphasis mine):

  • Moin!

    Dieser Aussage kann ich nur zustimmen.

    Ich denke, der Befehl "sudo systemctl stop cleanshutd(.service)" macht mehr Sinn? Denn ich glaube, disable stoppt den Dienst nicht, und beim nächsten mal soll er ja wieder normal anlaufen, um dann ggf gestoppt zu werden. Oder liege ich falsch? :conf:

    "disable" bei einem Service sorgt nur dafür, das der Service beim nächsten Start nicht gestartet wird.

    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

    • Offizieller Beitrag

    Linus & paulaner Ich habe da mal noch Fragen. Wenn das Teil angeklemmt ist, dann schließt der Stromkreis zum GPIO 17 wie mit einem Schalter/Taster richtig? Weshalb sollte dann der Daemon stoppen? Der sollte doch gerade dann starten oder habe ich hier einen Denkfehler? :conf: Sollte es in Beitrag #15 Zeile 18 nicht besser pin.when_deactivated lauten bzw. in Beitrag # 11:

    Code
            if not GPIO.input(17): # if GPIO 17 == 0
                sudo systemctl disable cleanshutd  
            else:  
                print "GPIO 17 is 0/LOW/False"

    ? Oder eben dementsprechend anders herum, oder und? Wenn steckt, dann Daemon an, wenn nicht, dann Daemon aus. :-/

    Ich bin gerade verwirrt... :dau1:

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!