Posts by Dennis89

    Hallo,


    weil mit der VF-Station eigentlich so gut wie gar nichts gemacht werden kann (nach meinem Verständnis) gab es von mir mal den langen Thread, in dem ich mit eurer Hilfe meine Nextcloud aus dem Internet erreichbar gemacht habe. Dazu ist ein Virtueller Server nötigt und eine VPN-Verbindung zwischen Pi und V-Server. Ich habe da Wire-Guard genutzt.


    Es gab da bei mir ja anfangs immer wieder Probleme, aber mittlerweile läuft das alles problemlos :thumbup:


    Das müssten die zwei Thread gewesen sein:




    @Watusibar vielleicht kannst du darin Infos finden.


    Grüße

    Dennis

    Ja das passt schon mit den Anforderungen, ändert an meiner Antwort nichts.


    Bin gerade auf dem Sprung, aber ich vermute die Fehlermeldung wird durch den Funktionsaufruf den du an 'handler' bindest ausgelöst. Da soll definiert werden, was passieren soll wenn die Flanke fällt, da soll nicht gleich beim ersten ausführen eine Funktion aufgerufen werden.


    Für weitere Anmerkungen fehlt mir gerade die Zeit.


    Grüße

    Dennis

    Hallo,


    wichtig wäre zuerst mal, dass außerhalb einer Funktion kein ausführbarer Code steht.

    Du brauchst für jede Tätigkeit eine eigene Funktion. Das ist recht einfach aufzuteilen, den Funktionen werden immer nach ihrer Tätigkeit benannt. Wenn deine Funktion heiß "Lese Gewichtssensor aus, schicke die Daten an XY, schalte das Display an und zeige xyz an", dann ist da etwas nicht richtig.


    Dann hast du nämlich die Chance die Betätigung eines Tasters abzufragen und die Funktion, die das Display ansteuert, aufzurufen.

    Ich würde an deiner Stelle erst mal so anfangen, dass der Code so abläuft, wie man es sich auf ein Papier schreiben würde. Es wird gemessen, die Daten werden gesendet und es wird der Zustand des Tasters abgefragt. Dann wird geschaut ob zwischen der letzten Messung und dem aktuellen Zeitpunkt 10 Minuten vergangen sind, wenn nicht wird nur der Taster abgefragt, wenn doch dann wird erst wieder gemessen.

    Dabei kann es zwar vorkommen, dass Tastendrücke nicht gleich erkannt oder verschluckt werden, aber für das Verständnis sollte so ein Code erst ein mal selbst geschrieben werden. Dann kann man den Stück für Stück optimieren und versteht dann auch was da optimiert wird und was plötzlich im Hintergrund abläuft.


    Um dich in die Sprache einzuarbeiten Hilft das offizielle Tutorial:

    https://docs.python.org/3/tutorial/


    Wenn es dir egal ist wie es geht, hauptsache es geht, dann schreibt dir jemand den Code vielleicht um.


    Grüße

    Dennis

    Hallo,


    du erstellst im Ordner deiner Wahl eine Datei, mit dem Namen deiner Wahl und der Endung .py. Dort fügst du den Code ein, dabei musst du aufpassen, dass die Zeilen genau so wie hier eingerückt sind.

    Starten kannst du das Skript dann mit python3 /pfad/zum/skript/skriptname.py


    Grüße

    Dennis

    Die elektronischen Fragen kann ich dir nicht beantworten.

    Aber ja, es wird eine Lüfterdrehzahl gesetzt, dann passiert 30 Sekunden nichts, dann wird erneut die Temperatur ausgelesen und die Lüfterdrehzal gesetzt.

    Von LEDs sehe ich im Code nichts.


    Grüße

    Dennis

    Habe gestern Abend mal den Anfang gemacht, das Python-Skript etwas zu überarbeiten, das ist der ungetestete Zwischenstand:

    TODO:

    - 'gpiozero' verwenden (auch für die CPU-Temperatur)

    - Fehlerbehandlung einbauen

    - Eventuelle noch ein Logging einbauen

    - Macht es Sinn die Lüfterdrehzahl zu bestimmen, in dem man den nächst gelegenen Temperaturwert nimmt?

    - Code kann noch nicht mit Leerzeilen in der Config-File umgehen

    - Sonstige Verbesserungen


    Falls jemand Zeit, Lust oder andere Beweggründe hat wollte ich das hier mal posten, bevor ich es wieder aus dem Editor lösche.


    Grüße

    Dennis

    Hallo,


    ich habe das Problem nur bedingt verstanden.

    Bei mir ist es so in /etc/argononed.conf stehen die Temperaturen mit den entsprechenden Drehzahlen drin. Das sieht zum Beispiel so aus:

    Code
    #
    # Argon One Fan Speed Configuration
    #
    # Min Temp=Fan Speed
    50=20
    60=30
    70=60
    80=90
    85=100


    Dann gibt es unter /lib/systemd/system/ eine Service-Datei:

    Code
    [Unit]
    Description=Argon One Fan and Button Service
    After=multi-user.target
    [Service]
    Type=simple
    Restart=always
    RemainAfterExit=true
    ExecStart=/usr/bin/python3 /usr/bin/argononed.py
    [Install]
    WantedBy=multi-user.target

    Der sollte laufen, check das mal mit systemctl status argononed. Wenn da nirgends 'Running' steht dann versuche mal mit systemctl start argononed und danach nochmal den Status abfragen. Wenn der immer noch nicht läuft, dann bitte die Status-Ausgabe vollständig hier posten. (Im Code-Block).


    Dann gibt es noch eine Python-Datei, die den Lüfter steuert /usr/bin/argononed.py

    Die hätte ich mal besser gar nicht aufgemacht, im Original sieht die so aus:

    Ist das bei dir auch alles so?


    Wenn ja, was hast du dann genau für ein Problem?


    Grüße

    Dennis

    Hallo,


    du öffnest/startest bei jedem Tastendruck die Kamera, beendest sie aber nicht.

    Entweder jedes mal schließen oder nur einmal starten und beim Skript beenden die Kamera schließen.


    Bin gerade nur am Handy, würde aber auf sowas tippen. Steht dazu nichts in der Doku von picamera2?


    Grüße

    Dennis

    Gerade weil du elektronisch noch nicht sicher bist, habe ich dir ein ganz einfaches Skript gegeben, auf dem man sehr gut aufbauen kann.

    Das was du da hast ist nicht der Hit.

    Erst die Schaltung, dann die Kamera und Co.


    Grüße

    Dennis

    Hallo,


    ne der Code funktioniert nicht.

    - 'Import' schreibt man nicht groß

    - die EInrückungen im 'with'-Block stimmen nicht

    - 'testbild' ist nicht definiert

    - 'else' braucht einen Doppelpunkt und die Einrückung stimmt nicht

    - 'print' ist ein Funkionsaufruf, da gehört das Argument in die Klammer und die Einrückung stimmt nicht


    Weitere Anmerkungen:

    Im Shebang gehört kein Leerzeichen zwischen '#' und '!'

    'as' ist zum umbennenen da, du nennst 'GPIO' in 'GPIO' um

    'subprocess' wird importiert aber nicht genutzt.

    Auf Modulebene, der Code ohne Einrückungen, werden nur Konstanten, Klassen, Funktionen und der Einstiegspunkt in das Programm definiert. Üblicherweise wird das Programm aus einer Funktion mit dem Namen 'main' gesteuert.

    '11' kann eine Konstante sein, da der Pin sich während des Programms nicht ändert, alles andere gehört in eine Funktion.

    Zahlen missbraucht man nicht als Wahrheitswerte, dafür hat Python 'True' und 'False'.

    Strings puzzelt man nicht mit '+' zusammen sondern verwendet die 'format'-Methode oder 'f'-Strings. Das sollte bei dir aber kein String sein, sondern ein Pfad. Pfad und Strings sind nicht gleich, daher nutzt man für Pfade das 'pathlib'-Modul.

    'GPIO.cleanup()' wird nie aufgerufen, weil die Dauerschleife nie beendet wird. Hier fehlt dir 'try/except/finally'.

    Wie erwähnt bietet es sich an 'gpiozero' anstatt 'RPi' zu verwenden. Damit schreibt man wesentlich einfacheren Code.


    Erstmal so:

    Pullup ist per default True.

    Die Kamera kommt dann, wenn das funktioniert.


    Grüße

    Dennis


    Edit: Hier wäre ein guter Einstieg in Python: https://docs.python.org/3/tutorial/

    Hallo,


    ersetze mal in Zeile 54-60 von 'mq135' hierdurch:

    Code
        def get_resistance(self):
            """Returns the resistance of the sensor in kOhms // -1 if not value got in pin"""
            adc = ADC(self.pin)
            value = adc.read_u16()
            return -1 if value == 0 else (65535 / value - 1) * self.RLOAD


    Grüße

    Dennis