Beiträge von luemar

    Ich habe Monate mit dem selben Problem gekämpft und schlussendlich mittels
    eines Oszillographen festgestellt, dass die PIR Fehlauslösungen genau dieselben
    Rechtecksignale erzeugen wie die die "richtigen" Auslösungen und vom RPi bzw.
    an den GPIO's nicht unterschieden werden können, nicht mit Widerständen,
    Kondensatoren etc. oder den Parametern.

    D.h. elektromagnetische Wellen aus der Umgebung müssen in den PIR Bauteilen
    ein "reguläres" Rechtecksignal auslösen.

    Eine Abschirmung des PIR mit Haushalt Alufolie hat die Fehlauslösungen reduziert
    aber nicht eliminiert.
    Erst eine PIR Abschirmung mit 0.2mm Cu-Folie hat - wenigstens bei mit - alle Fehl-
    auslösungen elimiert.

    muss meinen ersten Beitrag korrigieren:
    1. Habe mit einem Oszi festegestellt, dass alls Fehlsignale Rechtecksignale
    sind und nicht von regulären Auslösungssignalen unterschieden werden können.
    D.h. die el. mag. Wellen lösen in den Komponenten des PIR direkrt ein
    "reguläres" Signal aus.

    2. Eine Abschrimung des PIR mit 0.2mm Cu-Folie konnte alle el. mag.
    Einflüsse Abblocken - keine Fehlauslösungen mehr.
    Offenbar ist die Leitfähigkeit von Haushalt Alufolie nicht gut genug.

    ....habe nun mein Projekt (Überwachungskamera) nach vielen "Anpassungen" zum Laufen gebracht

    - musste parallel noch mit Störsignalen bzw. falschen PIR Auslösungen kämpfen - mit dem folgenden,

    sicher verbesserungswürdigen Script, aber "never change a winning team":

    Bedanke mich nochmals füer alle Hilfestellungen, Marcus. :danke_ATDE:

    das Problem mit dem OS bzw. Installieren on loguru und pyyaml ist gelöst (s. o.), das

    mit dem Script noch nicht. Benutze Script wie in #63 mit Deiner Änderung/Versuch in#64.

    Beim Ausführen von Script #63 (ohne Änderung #64) erfolgt:

    1. bei Zeit getriggerter Auslösung Ein - und Ausschaltung das Relais bzw. die Funktionen

    camera_light.on() und camera_light.(off) und dann Abbruch automatisch.

    Log Eintrag:

    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

    2. bei man. PIR Auslösung die Funktion status_led.on(), sonst nichts, Abbruch mit strg-c.

    Log Eintrag:

    Motion gestartet:2023-12-07 13:47:14,257

    Abbruch durch strg-c.:2023-12-07 13:48:05,428

    D.h. es macht keinen Unterschied ob im Code #63 steht

    cam.capture(Path(PATH_TO_IMAGE).with_suffix(IMAGE_FORMAT),

    #resize=(640, 480)) , oder

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

    ... der Kamera Port an meinem RPi war defekt. Ich kretisiere ungerne, aber

    die Konstruktion für Kameraanschlüsse an den RPi ist nicht das Gelbe vom Ei.

    Auf einen anderen RPi mit funktionierender Kamera und RPI gewechselt und

    jetzt kann ich loguru und pyyaml nicht mehr installieren.

    Habe upgedatet ubnd upgegradet, nützt nichts. Habe debian buster als OS und

    da kommt etwas über "packages have unmet dependencies:....."

    Wollte alles abbrechen, habe es aber mit Austausch der mSD noch geschafft:

    Beim Eintrag gemäss #

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

    1. bei manueller PIR Auslösun g nichts, Log Eintrag:

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

    2. bei Zeit getriggerter Auslösung schaltet das Relais ein und aus bzw. erfolgt
    camer_light.on() und Camera_light.(off)

    Log Eintrag:

    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

    ...dann bei manueller Auslösung zieht das Relais an, bzw. erfolgt
    camera_light.on(), anschliessend passiert nichts mehr und nach mehreren Sekunden kommt

    und in Motion_zu_Mail_SMS.log steht:

    Motion gestartet:2023-12-05 20:50:10,830

    Starte Task:2023-12-05 20:50:46,258

    Nehme Bild auf:2023-12-05 20:50:47,267

    Abbruch durch strg-c.:2023-12-05 20:51:59,717

    moment mal: Da gibt's ein Missverständniss: Ich habe in meinem zugegebenermassen komplizierten

    Beitrag #55 nicht mit "brute force" sondern Genauigkeit die einzelnen Tracebacks exakt den etwas

    unterschiedlichen Code Versionen zugeordnet. Es dürfte allgemein bekannt sein, dass debugging sehr

    Zeit aufwendig sein kann. Ich will mir eben nicht alles "vorkauen" lassen, den import von threading habe

    ich auch schon selbst eingefügt und die Korrektur von Simonz in #59 ist ebenfalls schon vorher erfolgt.

    Wie dem auch sei: Nach erneuter Überprüfung des Codes in #48 von keepfear mit meinem Script - Zeile um

    Zeile - kommt nach manuellem PIR Auslösen wider die bekannte Fehlermeldung im Anhang (Traceback_1).

    Um jegliches Missverständniss auszuschliessen nochmals mein Script in meine RPi. Dabei fällt mir auf, dass

    camera_light.off() 2 Mal, in Zeile 81 und 110 vorkommt.

    keepfear: Das überzählige " hatte ich schon gesehen und entfernt.

    simonz : Nach entfernen, bzw. ohne die Klammern in Zeile 31,
    (IMAGE_FORMAT =.....) kommt wieder:

    Traceback (most recent call last):

    File "/home/pi/onMotion_4.py", line 28, in <module>

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

    NameError: name 'path' is not defined

    ....das Komma war nur ein Versuch den Fehler selbst zu beheben.

    Nebenfrage: Müsste zwischen key und value in einem dict nicht ein : stehen ?

    Ohne Komma, wie in Deinem #51 geschrieben, kommt:

    /home/pi/onMotion_4.py:30: SyntaxWarning: list indices must be integers or slice s, not str; perhaps you missed a comma?

    IMAGE_FORMAT= config(["path"]["image_format"])

    Traceback (most recent call last):

    File "/home/pi/onMotion_4.py", line 30, in <module>

    IMAGE_FORMAT= config(["path"]["image_format"])

    TypeError: list indices must be integers or slices, not str

    Wenn ich in Deinem Code #48 Zeilen 29,30 auskommentiere, wie in Deinem Code 46, kommt keine
    Fehlermeldung mehr. Aber bei

    1. Zeit getriggerter Auslösung führt def task(lock, camera_light, pushbullet): nur camara_light.on() und ---.off()
    aus, aber nicht get_picture(), send_email() und send_sms().

    Das ist ja gerade das Problem, das mich schon lange plagt.

    1. Bei manueller Auslösung des PIR kommt nach 'Starte task':

    Exception in thread Thread-1:

    Traceback (most recent call last):

    File "/usr/lib/python3.9/threading.py", line 954, in _bootstrap_inner

    self.run()

    File "/usr/lib/python3.9/threading.py", line 892, in run

    self._target(*self._args, **self._kwargs)

    File "/usr/lib/python3/dist-packages/gpiozero/mixins.py", line 601, in fill

    self.parent._fire_events(self.parent.pin_factory.ticks(), self.parent.is_active)

    File "/usr/lib/python3/dist-packages/gpiozero/mixins.py", line 401, in _fire_events

    self._fire_activated()

    File "/usr/lib/python3/dist-packages/gpiozero/mixins.py", line 364, in _fire_activated

    self.when_activated()

    File "/home/pi/onMotion_4.py", line 83, in task

    get_picture()

    File "/home/pi/onMotion_4.py", line 39, in get_picture

    cam.capture(Path(PATH_TO_IMAGE).with_suffix(IMAGE_FORMAT),\

    NameError: name 'PATH_TO_IMAGE' is not defined

    Und wennich die Zeilen 29,30 wieder aktiviere wie in #48 kommt:

    Traceback (most recent call last):

    File "/home/pi/onMotion_4.py", line 29, in <module>

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

    NameError: name 'path' is not defined

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

    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

    Und wenn ich dannoch threading importiere kommt ähnlich wie in #47:

    Exception in thread Thread-1:

    Traceback (most recent call last):

    File "/usr/local/lib/python3.9/dist-packages/picamera/mmalobj.py", line 348, in open_stream

    stream.write

    AttributeError: 'PosixPath' object has no attribute 'write'

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):

    File "/usr/lib/python3.9/threading.py", line 954, in _bootstrap_inner

    self.run()

    File "/usr/lib/python3.9/threading.py", line 892, in run

    self._target(*self._args, **self._kwargs)

    File "/usr/lib/python3/dist-packages/gpiozero/mixins.py", line 601, in fill

    self.parent._fire_events(self.parent.pin_factory.ticks(), self.parent.is_active)

    File "/usr/lib/python3/dist-packages/gpiozero/mixins.py", line 401, in _fire_events

    self._fire_activated()

    File "/usr/lib/python3/dist-packages/gpiozero/mixins.py", line 364, in _fire_activated

    self.when_activated()

    File "/home/pi/onMotion_5.py", line 81, in task

    get_picture()

    File "/home/pi/onMotion_5.py", line 41, in get_picture

    cam.capture(Path(PATH_TO_IMAGE).with_suffix(IMAGE_FORMAT),

    File "/usr/local/lib/python3.9/dist-packages/picamera/camera.py", line 1418, in capture

    encoder.start(output)

    File "/usr/local/lib/python3.9/dist-packages/picamera/encoders.py", line 1126, in start

    super(PiCookedOneImageEncoder, self).start(output)

    File "/usr/local/lib/python3.9/dist-packages/picamera/encoders.py", line 375, in start

    self._open_output(output)

    File "/usr/local/lib/python3.9/dist-packages/picamera/encoders.py", line 331, in _open_outp

    self.outputs[key] = mo.open_stream(output)

    File "/usr/local/lib/python3.9/dist-packages/picamera/mmalobj.py", line 354, in open_stream

    stream = BufferIO(stream)

    File "/usr/local/lib/python3.9/dist-packages/picamera/streams.py", line 64, in __init__

    self._buf = memoryview(obj)

    TypeError: memoryview: a bytes-like object is required, not 'PosixPath'

    ..langsam sehe ich vor lauter Bäumen den Wald nicht mehr....

    wiedrum ganz vielen Dank !!! Jetzt nur noch ein kleiner Fehler:

    Traceback (most recent call last):

    File "/home/pi/onMotion_4.py", line 30, in <module>

    IMAGE_FORMAT= config(["path"], ["image_format"])

    TypeError: 'dict' object is not callable

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

    also ich musste die Scripts in #46 zuerst erst etwas genauer ansehen: Das ist offensichtlich die

    Auslagerung der Variablen in eine .yml Datei. sind. Habe alles genauestens (hoffentlich) kopiert.

    1. Bei manueller PIR Auslösung passiert gar nichts bis auf den folgenden Traceback :

    Exception in thread Thread-1:

    Traceback (most recent call last):

    File "/usr/local/lib/python3.9/dist-packages/picamera/mmalobj.py", line 348, in open_stream

    stream.write

    AttributeError: 'PosixPath' object has no attribute 'write'

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):

    File "/usr/lib/python3.9/threading.py", line 954, in _bootstrap_inner

    self.run()

    File "/usr/lib/python3.9/threading.py", line 892, in run

    self._target(*self._args, **self._kwargs)

    File "/usr/lib/python3/dist-packages/gpiozero/mixins.py", line 601, in fill

    self.parent._fire_events(self.parent.pin_factory.ticks(), self.parent.is_active)

    File "/usr/lib/python3/dist-packages/gpiozero/mixins.py", line 401, in _fire_events

    self._fire_activated()

    File "/usr/lib/python3/dist-packages/gpiozero/mixins.py", line 364, in _fire_activated

    self.when_activated()

    File "/home/pi/onMotion_4.py", line 75, in task

    get_picture()

    File "/home/pi/onMotion_4.py", line 37, in get_picture

    cam.capture(Path(config["path"]["image"]),resize=(640, 480))

    File "/usr/local/lib/python3.9/dist-packages/picamera/camera.py", line 1418, in capture

    encoder.start(output)

    File "/usr/local/lib/python3.9/dist-packages/picamera/encoders.py", line 1126, in start

    super(PiCookedOneImageEncoder, self).start(output)

    File "/usr/local/lib/python3.9/dist-packages/picamera/encoders.py", line 375, in start

    self._open_output(output)

    File "/usr/local/lib/python3.9/dist-packages/picamera/encoders.py", line 331, in _open_output

    self.outputs[key] = mo.open_stream(output)

    File "/usr/local/lib/python3.9/dist-packages/picamera/mmalobj.py", line 354, in open_stream

    stream = BufferIO(stream)

    File "/usr/local/lib/python3.9/dist-packages/picamera/streams.py", line 64, in __init__

    self._buf = memoryview(obj)

    TypeError: memoryview: a bytes-like object is required, not 'PosixPath'

    Traceback (most recent call last):

    File "/usr/local/lib/python3.9/dist-packages/picamera/mmalobj.py", line 348, in open_stream

    stream.write

    AttributeError: 'PosixPath' object has no attribute 'write'

    In der log Datei steht (Zeiten stimmen nicht mehr):

    Motion gestartet:2023-12-04 16:57:16,530

    2 Starte Task:2023-12-04 16:57:37,422

    3 Nehme Bild auf:2023-12-04 16:57:38,426

    2. Bei Zeit getriggerter Auslösung funktioniert das Relais, es kommt aber kein email+Foto

    und kein SMS, plus wieder obiger Traceback.

    In der log Datei steht dasselbe (Zeiten stimmen nicht mehr):

    Motion gestartet:2023-12-04 16:57:16,530

    2 Starte Task:2023-12-04 16:57:37,422

    3 Nehme Bild auf:2023-12-04 16:57:38,426

    Obwohl der Traceback rel. umfangreich ist, scheint mit der Attribute Error lösbar, ich

    kenne mich da aber zu wenig aus.

    also das Script in #33 laäuft definitiv nicht. Habe extra noch die Zeilen

    Nummern eingefügt - zwecks Vergleichbarkait - nun sind sie leider dioppelt

    aufgeführt.
    Benutzen nun mein "unaufgeräumtes", stilistisch verbesserungswürdige Script,

    das aber funktioniert....

    Vielen Dank nochmals für Eure lehrreichen Beiträge, Marcus.

    Damit es kein Code Durcheinander gibt, hier meinen aktuellen Code, der nun mit Deinem Code

    in # 28 übereinstimmt mit folgenden kleinen Abweichungen in meinem Code, die aber irrelevant sind:


    - Zeile 68 entfernt, da doppelt

    - def debug(): hinzugefügt, zur physischen Kontrolle des PIR

    - Zeilen 23, 98,99 auskommentiert, da LED noch nicht angeschlossen

    - in Zeile 101 als MotionSensor Parameter pull_up=False hinzugefügt

    - Zeile 103 entfernt, da schon in Zeile 43 definiert.

    Habe auch in Zeil 61 msg.add_attachment... gegen mime.add_attachment.. von Deiner Version in
    #24 ausgetauscht und es vorher mit MSG.add_attachment... probiert.

    Alles ohne erfolg, die task Funktionen die ja alle print statements enthalten werden nicht ausgeführt

    und ich kann den Code nur durch Abbruch der SSH session beenden.

    Alle meine Codes speichere ich mit Notepad++, nehme dort Änderungen vor und übertrage die
    Korrekturen per Hand onder copy/paste auf den RPi. Da sollte (fast ?) nichts schiefgehen.