Beiträge von keepfear

    Ich hab mich mit dem Thema noch etwas auseinander gesetzt und hab das mangels Hardware ohne Kamera und ohne Pushbullet nachgestellt. Auch, hab ich jetzt nicht am Pi geschrieben und habe den Pir per "mock" eingebaut.

    Zuerst war das Problem das der Header zur Mail mehrfach angelegt wurde und dadurch folgende Meldung kam:

    Python
    ValueError: There may be at most 1 Subject headers in a message

    Dann hab ich den Header in der main() 1x erstellt und diesen immer wieder, bei einer neuen Mail, aufgerufen, was dann lief. Allerdings war das Bild nach mehrfachen senden auch mehrfach im Anhang. Also 1. mal Mail senden - 1 Bild im Anhang, 2. mal senden - 2x das selbe Bilde im Anhang, 3. mal senden - 3x das selbe Bild im Anhang usw..

    In der Doku steht das man den Inhalt des Headers löschen kann. Da hätte ich mal eher reinschauen sollen. :stumm:

    python.org - email.message.EmailMessage.clear

    Wie dem auch sei, danach liefs so wie mans braucht.

    Das senden der Mail hab ich in einer Schleife einegbaut und auch was da den Aufruf zum senden der Mail war. Also ob der Pir oder schedule.

    Die Aufrufe musste ich Zeitlich pausieren da sonst wieder obige Fehlermeldung kam. Keine Ahnung warum und ich hatte jetzt auch keine Lust mehr danach zu suchen. Vllt kann mir das jemand beantworten, der tiefer in der Materie steckt.

    Hier das Testscript + Yaml.config:

    Code
    pip install loguru
    pip install pyyaml

    Beispiel Ausgabe:

    luemar

    Wäre schön, wenn du das folgende Script nochmal testen könntest. Das liegt nicht an schedule oder der paus(). Das liegt eher daran wie das mit der Mail bzw. Camera aufgebaut ist.

    Wenn dein jetziges Script schon als Service läuft, stop den Service bevor du das folgende Script testest. Wenn du mit strg-C das Script nicht anhalten kannst warte noch ein wenig, denn, wenn das Script gerade ein Bild aufnimmt oder die Mail sendet kann es noch kurz dauern bis das Script beendet wird oder du spamst die Konsole mit strg-C voll.

    Config:

    Den Pfad zur Config-Datei musst du im Script angeben. Einfach eine Text-Datei erstellen den Inhalt rein kopieren und in config.yml umbennen.

    Script:

    Teste das ganze am besten mit Thonny und nicht in der Console und übernimm das ganze Script und nicht nur Teile.

    In Zeile 27 muss der Pfad zur config Datei angepasst werden.

    Ungetestet. Ich hoffe ich hab nichts vergessen.

    Der Code den du in #27 gezeigt hast, ist nicht der aus #24.

    Der Code aus #27 hätte Fehler werfen müssen.

    Genauso auch der aus #24.

    Wie machst du das, wenn du den Code aus dem Forum testest? Ich glaube nämlich langsam das da was schief läuft, wenn du Code aus dem Forum kopierst.

    Wenn du sehen willst ob die Funktionen ausgeführt werden, kannst du auch in jeder Funktion ein Print ausgeben lassen und musst keine extra Funktion dafür schreiben oder du benutzt zum Beispiel logguru.

    Kannst du das mal durch nen debugger laufen lassen und schauen wo das Program hängt?

    Thonny hätte zum Beispiel einen debugger bei.

    Edit:

    Da war eine Einrückung falsch und in der send_email war ebenfalls was nicht richtig definiert.

    Auserdem hat da ein Import gefehlt, welches vorher drin war.

    Ungestestet.

    Das mit dem "pause()" verstehe ich nicht, da ja schon ein "while" am Ende steht und das Script am laufen halten sollte. Zumal das pause() nie ausgeführt werden sollte, wenn das nach der Schleife kommt.

    Dann steht da:

    Habe PATH_TO_PICTURE geändert zu "/home/pi/foto.pngj

    Das sollte .png heißen.

    Zum Anhängen des PNG:

    Hast du dir die Doku für Python 3.9 angeschaut?

    Das Beispiel oben war für 3.12..

    Die Camera bleibt wohl geschlossen, wenn man diese schließt.

    Versuch das hier mal.

    Ob das "Netzwerk nicht erreichbar" für den Neustart oder ob der Neustart für das "Netzwerk nicht verfügbar" verantwortlich ist.

    Mounten meint das einhängen eines Laufwerks/Partition und unmount das aushängen dessen.

    im Post 25 hast du nur einen Teil der Fehlermeldung gepostet. Was steht vor dem:?

    Code
    Nov 23 08:44:27 solaranzeige python3[8267]: Traceback (most recent call last):
    Nov 23 08:44:27 solaranzeige python3[8267]:   File "/home/pi/th/WP-Licht.py", line 66, in <module>
    Nov 23 08:44:27 solaranzeige python3[8267]:     send_command(Dimm, IP, PORT)     # Dimm auf minimum
    Nov 23 08:44:27 solaranzeige python3[8267]:   File "/home/pi/th/WP-Licht.py", line 48, in send_command
    Nov 23 08:44:27 solaranzeige python3[8267]:     sock.sendto(cmd, addr)
    Nov 23 08:44:27 solaranzeige python3[8267]: OSError: [Errno 101] Network is unreachable

    Bekommt das Script den Request von

    Code
    http://192.168.0.140/status

    ?

    Du kannst dir auch den Text nochmal ausgeben lassen mittels:

    Code
    print(r.text)

    Weil im Traceback steht ja erstmal nur das das

    Code
    sock.sendto(cmd, addr)

    nicht erreichbar ist. Oder gibt es das "Netzwerk nicht Verfügbar" auch mit request?

    Wohin sendet das Script? Haste das Gerät, welches die commands bekommt schon mal geprüft?

    Wäre jetzt einfach mal ins blaue geschossen.

    Ansonsten kannst du mit der Timer Unit ebenfalls mal prüfen ob das "Network is unreachable" immer noch kommt.

    Dann aber die Schleife aus dem Scipt entfernen.

    Unter dem Fenster wo man Beiträge schreibt gibt es ein Button für Datei Anhänge. Wenn du da drauf klickst kommt ein weiterer Button mit Hochladen und da kannst du dann die Bilder auswählen.

    gwaag

    Nach den ganzen Scripts die du nun schon geschrieben hast, solltest du dir einen gewissen Programmaufbau aneignen.
    Vorallem dann, wenn andere auch drüber schauen sollen. Das macht nämlich wenig Spaß.

    Variablen wie W1, TW1 Zone2 sagen nichts. Besser wäre lampe_zone_2 oder ähnliches. Dann kannste dir die Kommentare sparen und alle anderen wissen was damit gemeint ist.

    Die Funktion in der Schleife macht keinen Sinn und gehört außerhalbe der Schliefe und der Rest in eine main-Funktion.

    Das so = 18 <= kw <= 39 benutzt du garnicht und noch ein bisschen mehr.

    An dem Code an sich hab ich nicht wirklich was geändert. Ungetestet und so.

    :2cents:

    Python 3.12

    Python
    # Open the files in binary mode.  You can also omit the subtype
    # if you want MIMEImage to guess it.
    for file in pngfiles:
        with open(file, 'rb') as fp:
            img_data = fp.read()
        msg.add_attachment(img_data, maintype='image',
                                     subtype='png')
    email: Examples
    Here are a few examples of how to use the email package to read, write, and send simple email messages, as well as more complex MIME messages. First, let’s see…
    docs.python.org

    Ich hab das mal aufgeräumt. Ungetestet.

    Da muss irgendwo eine Fehlermeldung kommen. Vllt postest du den Logeintrag mal und außerdem fehlt da

    Python
    def task():
        relais.on()
        sleep(1)
        get_picture
        relais.off()
        send_email()
        send_sms()

    ne Klammer bei get_picture.

    Ansonsten

    Code
    systemctl status name_deines_services.service

    und/oder

    Code
    journalctl -u name_deines_service.service

    Ohne Fehlermeldung wirds schwierig.

    Das müsstest du aber langsam wissen. :D

    Sag mal kapiert du die einfachsten Sachen nicht !

    Vllt schreibst du deine Texte einfach mal nicht so Ellen lang und hochtrabend. So spricht doch niemand miteinander.

    Ich les deine Texte auch nicht mehr, auch wenn ich da einiges mitnehmen könnte.

    Von dem was du geschrieben hast, habe ich verstanden: 3,3 Volt, 5,0 V, 12 V, Host, sonst nichts!

    Ist halt ne steile Lernkurve die man da unter Umständen mitmachen muss. Heißt auch Google anschmeißen und lesen.

    I²C Platinen haben mindestens 4 Anschlüsse. 2 für die Stromversorgung und 2 für das hin und herschicken von Daten. Wie schon erwähnt kann man solche Platinen parallel schalten und die selben Datenpins nutzen.

    Onewire Sensoren haben nur 3 Anschlüsse, 2 für die Stromversorgung und 1 für die Daten. Beides ist nicht kompatibel miteinander. Hier kannst du auch mehrere nutzen aber jede Datenleitung braucht seinen eigenen Pin.

    Was du noch wissen solltest ist, das die DHT nicht mehr zeitgemäß und auch fehleranfällig sind.

    Besser du nutzt gleich den BMP/BME oder nen AHT. Dazu hatte ich auch mal einen Artikel gelesen, den ich leider nicht mehr finde.

    Wenn du den DHT trotzdem nutzen wills, solltest du zwischen der Datenleitung und VCC-Leitung einen 4,7K bzw. 10K Ohm Widerstand einbauen. Sonst kann es passieren das der DHT keine Daten bringt.

    Wenn aus dem DHT schon Kabel kommen also keine Pins hat, braucht man angeblich keinen Widerstand.

    :2cents: