Beiträge von keepfear

    Ja also ich frag mich hier ja gerade, warum hier keiner das MotionSensor Modul nutzen will. Dabei seid ihr doch immer so pingelig.:*^^

    Ich würde ja fast sagen, das die CPU immer ausgelastet sein wird, weil man ja ständig irgendeinen Status abfragen muss. Dabei gibts gibts doch wait_for_motion() und so. Da könnte man doch das Script pausieren lassen, wenn da nichts passiert.

    Das ist nur ne Idee, die ich nicht getestet habe und ich habe auch keine Ahnung ob das so funktionieren wird!!!!!!

    14. API - Input Devices — gpiozero 2.0.1 Documentation

    Das mit dem RuntimeError wird von Adafruit aber so gehandhabt. Das wäre auch der Code von der Webseite.

    DHT11, DHT22 and AM2302 Sensors
    This guide covers the low cost DHT temperature & humidity sensors. These sensors are very basic and slow, but are great for hobbyists who want to do some basic…
    learn.adafruit.com

    Die DHT sind nicht mehr zeitgemäß. Besser wäre da entweder ein BMP/BME oder AHT. Viele nutzen hier die BMP/BME, weil die wunderbar laufen. Hatte ich auch schon in Benutzung. Wie gut die AHT sind kann ich dir nicht sagen.

    Hi,

    das würde funktionieren.

    In dem Thread hatte jemand ähnliches vor:

    keepfear
    16. Dezember 2023 um 16:01

    Da wird ein Bild bei Bewegung aufgenommen und per Mail verschickt.

    Das wäre zumindest ein kleines Grundgerüst für dein Vorhaben.

    Beim Livebild Stream kann ich dir leider nicht helfen.

    Hi,

    Motion gestartet:2023-12-06 15:08:11,672

    Starte Task:2023-12-06 15:10:00,217

    Nehme Bild auf:2023-12-06 15:10:01,220

    Da gabs ne Fehlermeldung die du wahrscheinlich einfach nicht gesehen hast.

    ich hab das ganze jetzt mit einer PiCamera V2 (BerryBase) nachgestellt und benutze hier das aktuelle Bookworm 64bit mit Desktop (Recommended) vom 05.12.23.

    Als erstes: man nutzt jetzt Picamera2. Die Doku dazu gibts scheinbar nur als PDF.

    https://datasheets.raspberrypi.com/camera/picamera2-manual.pdf

    Picamera hatte sein letztes Release 2017.

    Unter Bookworm kommt Picamera2 standardmäßig mit, zumindest bei der oben genannten Version.

    Getestet hab ich das ohne Pushbullet usw., weil ich die Hardware nicht habe bzw. kein Pushbulllet brauche. Für die Config hab ich Toml genommen, weil das ebenfalls standardmäßig dabei war. Die Pushbullet Lib wird nicht mehr gepflegt. Es gibt aber einige Alternativen.

    Statt das alte Log immer wieder zu überschreiben, wird jede Meldung am Ende der Datei weiter geschrieben.

    Anhang in der Mail:

    Ich hab die Schutzfolie der Kamera nicht entfernt.

    Hier noch das angepasste Script mit Pushbullet usw.:

    Ungetestet.

    Ich hoffe ich habe nichts vergessen. :S

    Loguru brauchst du nicht unbedingt. Yaml eigentlich auch nicht. Das war nur dazu da um deine Sensiblen Daten auszulagern. Damit du dein Script bedenklos posten kannst ohne Passwort und Telefonnummer ggf. preiszugeben. Außerdem erspart dir das auch arbeit, weil du ja deine Daten nicht immer wieder entfernen musst.

    Das Buster ist aber schon sehr alt. Hast du noch ne SD-Karte wo du Bullseye draufhauen kannst?

    Operating system images – Raspberry Pi
    From industries large and small, to the kitchen table tinkerer, to the classroom coder, we make computing accessible and affordable for everybody.
    www.raspberrypi.com

    Welches Script hast da jetzt benutzt?

    und mit einem Zeit Trigger passieret gar nichts

    Doch da passiert schon was, nur siehst du das eben nicht. Deswegen hast du doch das Log.

    Ich bin mir relativ sicher, wenn die Kamera läuft, das Script auch durchlaufen wird.

    Warum der Abbruch mit strg-c im Log nicht mit aufgeführt wird, wenn schedule der Auslöser ist, kann ich dir nicht sagen.

    Das camera_light.off() ist 2x enthalten, weil du nach beenden des Scripts alles abschalten willst. Auch die LED.

    Ansonsten muss ich erstmal meine gefühlt 100000 Bilder löschen, die ich mir selbst beim testen geschickt habe.

    Da gabs nen Timeout weil keine Daten von der Kamera kamen.

    Python
    picamera.exc.PiCameraRuntimeError: Timed out waiting for capture to end
    picamera.exc.PiCameraRuntimeError: No data recevied from sensor. Check all connections, including the SUNNY chip on the camera board

    Kontrolliere doch mal das Kabel von der Kamera zum Pi.

    Füge mal spaßeshalber in der

    Python
    def get_picture():
        logging.info("Nehme Bild auf")
        camera = PiCamera()
        with camera as cam:
            cam.rotation = 0
            cam.start_preview()
            sleep(1)
            cam.capture(Path(PATH_TO_IMAGE).with_suffix(IMAGE_FORMAT),
                        resize=(640, 480))

    beim Speicherort des Bildes:

    Python
    cam.capture(Path(PATH_TO_IMAGE).with_suffix(IMAGE_FORMAT),
                        resize=(640, 480))

    den Pfad ganz normal ein. Also so:

    Python
    cam.capture("/home/pi/foto.jpg", resize=(640, 480))

    Den Tracback bitte in einen Code_Block, wie beim Script. Ich will keine Datei herunterladen.

    luemar

    Kannst du jetzt mal das Script + den Änderungen in der Config aus #48 testen und danach gleich mal den Traceback posten? Ohne das du da was veränderst?

    Sonst kommen wir hier nicht weiter.

    Edit:

    luemar

    Und wenn ich Deinen Code #48 nochmals neu kopiere kommt:

    Python
    Traceback (most recent call last):
    File "/home/pi/onMotion_5.py", line 115, in <module>
    main()
    File "/home/pi/onMotion_5.py", line 96, in main
    lock = threading.Lock()
    NameError: name 'threading' is not defined

    Da stehts doch. Da war kein threading -Import im Script. Ist da jetzt eingefügt.

    Und bitte setz die Fehlermeldungen in ein Codeblock. Das ist sonst zu unübersichtlich.

    luemar

    Genau das meine ich.

    Du änderst was am Script, keiner weiß was und dann postest du die Fehlermeldung von der Änderung die du da getätigt hast. Da weiß doch keiner was in Wirklichkeit passiert.

    Einfach das Script nehmen komplett kopieren und testen. Wenn da ein Traceback kommt, diesen nehmen und posten und das am besten auch im Code-Block wie beim Script.

    Und dann kann man da auch was machen.

    Code
    NameError: name 'path' is not defined

    Da fehlen die "-Zeichen in den [] :

    Code
    PATH_TO_IMAGE = Path(config[path][image])

    das muss so aussehen:

    Code
    PATH_TO_IMAGE = Path(config["path"]["image"])

    Edit:

    Zu spät.

    Eigenartig, es gibt doch keinen dictionary Daten Typ im Code ??

    Naja, doch.

    Da ist Yaml bzw. die Config-Datei.

    Du hast da in der Config quasi einen Schlüssel und den dazugehörigen Wert, also Key/value-Paare.

    Zum Beispiel wäre ["path"] der Key und ["image_format"] der Wert zu "path". Das funktioniert dann eben nicht, wenn da ein Komma zwischen den Klammern steckt.

    Wie kommt denn das Komma dahin? Das musst du ja aktiv eingebaut haben.

    Am besten das Script einfach komplett übernehmen, testen und ggf. den Traceback posten. Sonst weiß nachher keiner mehr welches Script du da benutzt hast und warum da was nicht läuft.

    Du müsstest nochmal die config anpassen. Unter path: und image: sollte das .jpg aus dem Pfad raus und das .jpg extra erstellen und den rest der config kannst du so lassen.

    Sprich so:

    Code
    path:
        image: "/pfad/zum/image/dein_image"
        image_format: ".jpg"

    Und dann das hier.

    Ungetestet.

    Juah, dann nochmal so.

    Also ich finde das ja massiv schräg wo dieses `EmailMessage`-Objekt erstellt wird. Das ist doch total unübersichtlich das über das Programm verteilt zu befüllen und dann wieder zu leeren, statt da einfach bei Bedarf ein frisches neues zu erstellen.

    Wer lesen kann....und so. Dann gilt das doch auch für das Pushbullet-Objekt oder?

    Und wie kann man das mit den 2 Threads machen? Mit einer Queue oder einem Flag?

    Also ich finde das ja massiv schräg wo dieses `EmailMessage`-Objekt erstellt wird.

    Massiv schräg also. ^^

    Einfach nur, weil das Objekt in die Funktion sollte oder auch weil ich mir das durchschleifen in die jeweilige Funktion spare?

    Generelle Frage: Wo erstellt man denn am besten das Objekt oder Objekte?

    Wenn das mal gleichzeitig passiert — viel Spass.

    Besser dann 2 Funktionen, sprich task1() und task2() oder geht das eleganter/besser?