Beiträge von Regdone

    Danke Hofei, ich habe es gerade getestet, funktioniert nun wie es soll.

    Für was man

    Code
    if __name__ == "__main__":
        main()

    so alles benutzen kann ;) Darauf wäre ich nie gekommen. Ich dachte immer, das nimmt man nur, um zu unterscheiden, ob ein Script direkt aufgerufen wird oder importiert wurde. Wieder was gelernt.

    Mit der blinkenden LED, das war erstmal zum Testen, wahrscheinlich wird der Raspi mir dann noch ne Mail senden.

    hyle, wenn ich den Pullup auf False setze, dann ist der Zustand negiert. Mein Komparator hat nen Open-Kollektor-Ausgang und ich hab dort -zumindest im Versuchsaufbau - eine LED mit Widerstand gegen 3V3, um zu sehen, was da passiert, da ich ja auch mit der Hysterese usw. experimentieren muß, unabhängig vom Raspi. Aber das ist Hardware und ne andere Baustelle.

    Ich habe einen Komparator, mit dem ich eine Batterie-Spannung überwache. Bei unterschreiten einer Mindestspannung, gibt der am Ausgang ein H-Signal (3V3) aus, welches ständig anliegt, bis die überwachte Spannung wieder die Mindestspannung erreicht.

    Mit dem Komparatorausgang geh ich direkt auf einen GPIO des Raspi und löse auf diesem einen Befehl aus. Zum Simulieren hier der Einfachkeit halber eine LED, die blinkt und beim Erreichen der Mindestspannung wieder ausgeht. Das Ganze habe ich mit GPIOzero in Python realisiert. Das funktioniert einwandfrei.

    Das Problem ist aber, daß das Script beim Start immer erstmal auf eine Signaländerung am GPIO wartet. In dem Falle also trotz vom Komparator anliegendem H erstmal ein L braucht, um dann beim nächsten H korrekt zu funktionieren.

    Das Problem hierbei ist also, wenn der Raspi aus irgendeinem Grunde down ist und hochfährt, nach dem automatischem Starten des Scriptes eine Unterschreitung der zu überwachenden Spannung nicht erkennt. Ich möchte also, daß das Script beim Start desselben schon erkennt, ob der GPIO auf H oder L liegt. Also bei zu niedriger Spannung soll die LEDnach dem Hochfahren sofort blinken, bei korrekter Spannung ausbleiben. In der Doku zu GPIOzero bin ich diesbzgl. nicht schlau geworden.


    Mein Script ist folgendermaßen:

    Eben deshalb meine Frage:

    Warum keinen Akku ?

    Weil es halt so konzipiert ist. Ohne Ladeschaltung. Und beim anderen Gerät, dem Arduino-Projekt, was im Winter außer Betrieb ist, wäre der Akku im Frühjahr sicher entladen und das ganze RTC-Zeugs damit ohne Funktion. Dort würde der Akku IMHO wenig Sinn machen.

    OK, Ladewiderstand und eine Diode zum Laden wären zumindest beim Raspi fix raufgebaut, aber das hat ja mit der eigentlichen Idee, um die es hier geht, nichts zu tun und auch der Akku hält nicht ewig, wie man an Notebooks mit RTC-Akku sieht.

    Hallo Franky,

    nein, ich hab diese hier beschriebene Platine nicht. Ich habe eine eigene Platine mit galvanisch getrennten (Optokoppler) und Schmitt-Trigger entprellten Schalteingängen für eine Überwachungslösung. Darauf habe ich auch eine RTC mit DS3231 verbaut, falls mal das Netzwerk bzw. Internet ausfällt. Das alles sitzt in passenden Hutschienengehäusen in Elektroverteilung bzw. Unterverteiler. Zum Wechsel der RTC-Batterie muß man das immer erst ausbauen und zerlegen, deshalb wäre eine Anzeige bzw. Auswertung etwas sehr sinnvolles und auf der Suche nach einer Lösung, die bereits wer anderes evtl. gefunden hat, bin ich auf diesen alten Thread hier gestoßen und habe versucht, herauszufinden, wie das mit nur einem BE gelöst wurde. Dafür einen ADC zu verwenden, hab ich von Anfang an verworfen. Aufwand, Platine, Stromverbrauch...

    Die Idee mit dem SMD-Komparator auf ner Mini-Platine ist aber nicht von der Hand zu weisen. Ich werde das mal versuchsweise mit bedrahteten Bauelementen aufbauen und dann ggf. eine kleine SMD-Platine machen. Der Vorteil darin liegt wirklich in der Einstellbarkeit und der geringen Belastung der Batterie. Aber um die erste Variante zu verwerfen, mußte ja ersteinmal geklärt werden, wie dies gelöst wurde :thumbup:

    Hab gerade mal etwas gesucht, in Spezifikation R (bzw. -20) kaum noch zu bekommen. Ist fast alles nur "T" und der spricht schon bei 2,98 - 3.15 V an, also unbrauchbar für den Zweck.

    4µA stetig würden die Batterie (ich hab in meinen Schaltungen aus Platzgründen nur die 1220 verbaut) in 1 Jahr leergezogen haben, das ist eh nicht vertetbar.

    Damit ist das wohl erstmal gestorben. Andere Mütter haben auch schöne Töchter, muß ich wohl mal anderweitig suchen, muß ja nicht pinkompatibel sein und auch kein SMD. Vielleicht nehm ich doch einen Komparator, um die Batterie nicht weiter zu belasten. Wollte mir halt den Aufwand einer Zusatzplatine sparen.

    Der Pi (bzw. anderes Projekt mit RTC ist Arduino-basiert) hängt 24/7 am Netz (Arduino mit stromloser Winterpause). Ich hätte es halt reizvoll gefunden, mittels einer LED und einer Mail informiert zu werden, ob die RTC-Batterie ersetzt werden sollte. Ein Muß ist das nicht.

    Ein weiterer Ansatz wäre ja, die Abfrage nur aller paar Stunden zu machen und nur zur Abfrage den RST-Controller mit der Batterie zu verbinden. Dann wäre der Meßstrom komplett zu vernachlässigen, aber das treibt den Aufwand wieder in die Höhe und weg von der "1-Bauteil-Lösung". DAS war ja das reizvolle an der Geschichte hier.

    Ich habs glaub ich herausgefunden. Es ist kein TL431. Schade, den hätte ich nämlich da gehabt. ;(

    Es ist wahrscheinlich ein STM1815/1816/1817/1818 in Spezifikation R (baugleich DS 1815...1818-20). Eigentlich ein Reset-Controller für Mikroprozessoren. Spezifikation R (bzw. -20) löst lt. Datenblatt bei 2,47 bis 2,64 V aus. 1816 bis 1818 unterscheiden sich nur im Ausgang, ob er /RST oder RST ausgibt und Push-Pull bzw. Open-Drain mit Pull-Up. Das ist die Lösung ;)

    Hallo Franky,

    danke für die Ausführungen. Ja, ein Komparator wäre eine Lösung. Es gänge auch mit 2 Transistoren, Widerständen, Diode usw. Aber ich dachte eher an eine ganz simple Lösung, wie auf der Platine von "Neueinsteiger". Deshalb fand ich ja DIESE Lösung so interessant. Man erkennt auf den Bildern bzw. dem unvollständigen Layer ein SMD-Dreibein (vermutlich ein TL431/432), der für die Unterspannungserkennung zuständig ist. Er liegt mit einem Pin am Pluspol der Batterie, der andere ist wohl über die Lötbrücke an GPIO4, der Dritte an GND. Weitere Leiterzüge sind leider nicht erkennbar.

    Mehr ist ja auf der Platine nicht drauf, der DS3231, ein EEPROM, jeweils mit minimalster Außenbeschaltung und dazu der besagte IC oder was auch immer. Mich würde eben genau DIESE Schaltungsidee interessieren, dies eben mit diesem minimalistischen Aufwand zu lösen. Ich würde tippen, daß es ein 431/432 ist, Uref ist an der Batterie, A an GND und K am GPIO4, weitere Bauelemente wie Pull-Up oder Pull-Down finde ich nicht.

    Sorry, daß ich das uralte Thema nochmal hochhole, aber die Boardsuche hat mich hierauf gestoßen:

    ich suche eine Möglichkeit, den Ladezustand der Knopfzelle in Verbindung mit dem DS3231 im Pi auswerten zu können, also z.B. an einem GPIO zur Verfügung zu stellen. Also genau das, was hier erwähnt ist. Leider findet sich nirgends irgendeine Beschreibung, wie das denn realisiert wurde und das Platinenlayout zeigt auch nicht alle Layer, um das nachvollziehen zu können.

    "Neueinsteiger" hat ja schon länger nix mehr geschrieben, vielleicht liest er aber mit oder ein anderer, der von ihm evtl. eine Platine bekommen hat, kann das Geheimnis lüften. Dann müßte ich das Fahrrad nicht zum 2. male erfinden ;)

    Üblicherweise durch selbst kompilieren.

    Definitiv nicht!

    3 der Raspis haben das VZ-Image von Volkszaehler.org mit nachinstalliertem MC, ansonsten alles wie es von VZ.org kam. gpiozero ist nachinstalliert, das gehörte glaub ich nicht von Hause aus zur Distri, glaub ich. Natürlich immer upgedated.

    Einer hat ein "normales" bullseye lite mit installiertem PiHole und läuft als Adblocker und DHCP-Server. Dort ist ebenfalls der MC dazugekommen und noch für ein Display Circuitpython von Adafruit installiert. OK, das Adafruit-Zeug ist nicht immer schön, das hab ich inzwischen auch gelernt.

    Also wenn, dann kommt das von Adafruit und bei den anderen aus dem vz.org-image oder von gpiozero. Ich hab da definitiv nichts kompiliert und nicht am Python herumgespielt. Es ist ja auch kein Python, was dort liegt, das ist wie gesagt nur der dist-packages-Ordner in dem ansonsten leeren Verzeichnis.

    Als erstes einmal solltest Du das mit ``python3`` ist jetzt Python 3.10 rückgängig machen. Software von der Linux-Distribution die sich darauf verlässt, dass ``python3`` auch das Python 3 von der Distribution ist, wird sonst womöglich auf die Nase fallen.

    Erledigt!

    Dann sollte man bei mehreren Python-Installationen ausserhalb von venvs immer explizit das passende ``pip``/``pip3`` aufrufen in dem man das nicht als Programm aufruft, sondern über den Python-Interpreter (``python3.passende_nummer -m pip …``) um sicher zu sein für *welche* Python-Installation man da Packages installiert. Dein ``pip3`` ist anscheinend nicht für das Python mit dem Du dann das Programm startest welches dieses Modul verwendet.

    Ah, OK, danke, ich hab bei der Installation des Package nun explizit python3.10 aufgerufen und siehe da, klappt ;)

    Das Script läuft zwar immer noch nicht durch, aber das ist ne andere Baustelle, zumindest ist das Ursprungsproblem nun gelöst. Danke!

    Warumhast Du ein ``/usr/local/lib/python3.9/`` wenn 3.9 schon die Version ist, die mit der Linux-Distribution ausgeliefert wird?

    Das ist von Hause aus so, da hab ich nichts gemacht. Das ist auch bei meinen anderen Raspis mit bullseye so, hab gerade nachgesehen. Da ist auch nur der Ordner dist-packages drinnen. Ich geh davon aus, das muß so sein. Entweder direkt von der Distri oder nach sudo apt upgrade angelegt.

    Hallo,

    ich habe ein Python-Script zum Auslesen eines PV-Wechsaelrichters, welches Python 3.10 benötigt. Ich habe einen Raspi 3 mit bullseye, da ist Python 3.9 standardmäßig installiert. Also habe ich dazu noch 3.10 installiert, habe das 3.10 als Standard für den Aufruf von python3 gesetzt. Funktioniert auch soweit.

    Das Python-Script will nun libscrc importieren, was mit einer Fehlermeldung endet, libscrc wäre nicht vorhanden.

    ModuleNotFoundError: No module named 'libscrc'

    Es befindet sich aber in der Python-3.9-Installation im Ordner /usr/local/lib/python3.9/dist-packages

    OK, das ist ja die Version 3.9, also sucht 3.10 offenbar nicht dort, sondern nur im eigenen Ordner. Ich versuche nun libscrc nachzuinstallieren mit sudo pip3 install libscrc, das wird aber quitiert mit der Meldung, libscrc sei ja schon vorhanden und wird nicht installiert:

    Code
    Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
    Requirement already satisfied: libscrc in /usr/local/lib/python3.9/dist-packages (1.8.1)
    Requirement already satisfied: wheel in /usr/lib/python3/dist-packages (from libscrc) (0.34.2)

    Wie kann ich libscrc so installieren, damit Python 3.10 es auch findet und verwendet?

    Hier die Seite mit dem Script zum Auslesen des WR und der Beschreibung dazu: https://github.com/servo77/BosswerkInverter

    Mit Python 3.9 läuft das leider nicht, Python 3.9 kennt offenbar den Befehl "match" noch nicht (ab Zeile 133 des Originalscriptes), weshalb ich 3.10 nutzen muß.

    Vielleicht kann mir jemand helfen.

    Danke

    Ich habe erstmal das Script mit E-Mailversand zusammengebaut, funktioniert im Test auf dem Tisch bisher einwandfrei.

    Der große Praxistest kommt erst später, da noch eine Zusatzplatine für den Raspi im Hutschienengehäuse im Entstehen ist, wo auch noch die Optokoppler und Anpassungen für die Zählerauswertungen, Stromversorgung etc. mit rauf kommen.

    Habt erstmal vielen Dank für die Hilfe, es scheint im Moment 1a zu funktionieren.

    Ja, jetzt hab ich es verstanden, sorry. Obwohl die LED bei ausgelöstem Schalter dauernd leuchtet (was mich irritiert hatte), wird die Meldung nur einmal abgesetzt "FI ausgelöst" und bei Trennen des Schalters kommt auch nur einmal "FI wieder normal". Das wäre ja genau das, was ich will.

    Ich hatte die Meldung gar nicht so für voll genommen, sondern nur auf die LED geachtet!

    Funktioniert leider nicht. LED geht mit 2 Sekunden Verzögerung an und leuchtet solange, wie Schalter betätigt. So ist es ja im Script auch festgelegt

    button.when_held = test_an

    button.when_released = test_aus

    Ich brauch ja bei Betätigung einen Impuls, egal, wie lange der gedrückt ist. Eine Rückmeldung, wenn er nicht mehr betätigt ist, brauch ich ja gar nicht.

    Hallo _blackjack_

    vielen Dank für die Hilfe. Ich versuch mal, etwas Licht ins Dunkel zu bringen.

    Die Codierung mit iso-8859-15 habe ich gewählt, um in der Mail auch Umlaute verwenden zu können. Ohne der Coding-Zeile oder wenn dort UTF-8 steht, bekomm ich bei Umlauten ("Hier steht ein Text mit ü und ß") sofort Fehlermeldung.

    Code
    File "/home/pi/mail3.py", line 22
        BODY = "Hier steht ein Text mit � und �."
                                              ^
    SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xfc in position 24: invalid start byte

    Der Import von sleep war wohl ein Überbleibsel von Versuchen.

    Den Mailversand hatte ich mir aus dem Internet geholt und war froh, daß das funktioniert hat. Daß der irgendwie ne Standleitung aufbaut, hatte ich aus der Fehlermeldung vermutet, aber noch gar nicht weiter geforscht.

    Ich habe jetzt Dein Script angepaßt und teste es gerade. Es funktioniert bisher einwandfrei, nur leider mit dem gleichen Grundproblem, Mailversand (und die Test-LED) wird ebenfalls bei der positiven Flanke ausgelöst. Ich habe testweise einen hardwaremäßigen Entpreller mit einem Flip-Flop zwischen Schalter und GPIO gesetzt, das ändert nichts. Er löst immer 2x aus, einmal beim Schalten auf Masse und dann nochmal beim Ausschalten, also gegen Pullup.

    Das Problem besteht leider immer noch.

    Hallo,

    ich bin fast am Verzweifeln mit einem kleinen und wie ich denke einfachem Script.

    Ich habe einen Schalter, den ich überwachen möchte. In einer Schaltstellung soll EINMALIG eine E-Mail versendet werden. Konkret handelt es sich um einen Teil einer Hausautomation bzw. Überwachung. Der FI-Schutzschalter einer Pumpe bekommt einen Hilfskontakt und bei ausgelöstem FI soll ein angeschlossener Raspi eine Mail versenden mit dem Inhalt "FI-Schutzschalter Pumpe ausgelöst". Damit kann man dann hingehen und diesen wieder einschalten. So weit so gut.

    Ich habe ein kleines Python-Script geschrieben, wo ich einen Mail-Client aufsetze (funktioniert einwandfrei) und den Hilfskontakt als Schalter gegen Masse an einen GPIO anschließe. Da der Schalter kein Taster ist, sondern ständig Signal gibt bei ausgelöstem Zustand, habe ich die negative Schaltflanke als Kriterium, genommen, um nicht mit Mails bombardiert zu werden. Ich möchte genau EINE Mail haben. Dazu den Internen Pull-Up gesetzt. Zum Testen der Funktion habe ich temporär noch eine LED an einen weiteren GPIO gehangen, um überprüfen zu können, ob es funktioniert.

    Soweit die Theorie. Es funktioniert im Prinzip auch fast, aber leider nur fast.

    Die Funktion wird wunschgemäß ausgelöst bei schalten auf Masse, also negative Flanke. Komischerweise löst die Funktion ebenfalls bei positiver Flanke aus, also beim Wiedereinschalten des FI, wenn der Hilfskontakt von L auf H geht, also von Masse getrennt über den Pull-Up an 3V3. Das soll eigentlich nicht sein. Wenn der Schalter über längere Zeit ausgelöst ist, also der GPIO auf Masse liegt, hängt sich das Script auf, die LED leuchtet dauernd und es kommt im Terminal eine SMTP-Fehlermeldung. Mail ist keine versendet worden und das Script bleibt hängen, weshalb die LED auch nicht mehr ausgeht. Es wird ja abgearbeitet in der Reihenfolge LED an, Mail senden, kurze Pause, LED aus und wenn er bei Mailsenden hängt, gehts natürlich nicht weiter. Nur warum hängt er? es gab gar kein Ereignis, was zur Auslösung führen könnte. Der GPIO liegt dauerhaft auf Masse und irgendwann plötzlich LED an, Mail hängt??? Und warum löst er bei beiden Flanken aus?

    Irgendwie finde ich meinen Fehler nicht, kann mir jemand auf die Sprünge helfen? Was mach ich verkehrt?

    PS: mit den letzten Zeilen und der Schleife möchte ich einfach die GPIO-Zustände löschen, wenn das Script händisch mit STRG+C abgebrochen wird. Das ist sicher nicht sehr elegant, eine bessere Lösung fiel mir leider nicht ein.

    Hier mein Script (Maildaten unkenntlich gemacht):

    Hier die SMTP-Fehlermeldung (Maildaten unkenntlich gemacht), wenn sich das Script aufhängt (nur dann, sonst funktioniert das einwandfrei!):

    Vielen Dank schon mal!

    So, ich habe mal etwas herumgetestet. Ich habe ein Ergebnis, wenn auch immer noch nicht logisch.

    Alle 3 meiner 4-GB-Karten sind defekt. Eine Karte läßt sich nur noch lesen. Egal, was ich mache, löschen, formatieren, partitionieren, Image raufspielen, alles wird ohne jede Fehlermeldung durchgeführt und abgeschlossen mit OK, am Ende hat sich aber nichts geändert. Egal welches Programm, ob Linux oder Windows, ob Diskpart oder andere Partitionierungstools, die Karte bleibt schreibgeschützt. Die anderen beiden Karten gehen zunächst einwandfrei, Installation problemlos, update und upgrade ohne Probleme, bei upgrade bricht er aber irgendwo mittendrin mit Error ab, beide Karten booten den Raspi nach den Fehlermeldungen bei upgrade nicht mehr. Hier also wohl bei beiden Bad Sectors.

    Unlogisch trotzdem die Fehlermeldung, er fände die Quellen nicht und daß er selbe Meldung bei allen 3 Karten bringt, auch bei der nicht beschreibbaren. Wobei es hier sein kann, daß sie auch Bad Sectors hatte und nun nach meinen Versuchen ganz aufgegeben hat. Immerhin bootet diese problemlos und funktioniert einwandfrei, solange ich nichts schreiben will.

    Also wohl 3 Karten für den Müll und von der unlogischen Fehlermeldung ins Bockshorn jagen lassen.