Torüberwachung mit einem Raspberry Pi und Magnetsensor

  • Hi zusammen,

    ich habe ein kleines Problem, ich bin seit einiger Zeit über einem Projekt in meinem Betrieb eine Überwachung zu bauen, ob das Tor geöffnet ist oder nicht. Zusätzlich soll ein Log erstellt werden (das Funktioniert) und eine email versendet werden, sobald das Tor 25 Minuten geöffnet ist. Die email funktioniert aber leider nicht und ich stehe nun auf dem Schlauch. Wäre cool wenn mir jemand helfen könnte

    Vielen dank schonmal im Voraus.

  • Torüberwachung mit einem Raspberry Pi und Magnetsensor? Schau mal ob du hier fündig wirst!

  • Jonathan_5805 Das ist nicht korrekt eingerückt, das kommt so nicht am Compiler vorbei.

    Man verschachtelt keine Funktionsdefinitionen wenn man nicht tatsächlich ein Closure haben möchte. Das macht den Code unübersichtlicher und die Funktionen die in anderen Funktionen stecken, kann man nicht separat testen. Die innerste Funktion — read_sensor() — wird auch gar nicht verwendet‽ Und die tut auch gar nicht was der Funktionsname suggeriert. Und auch execute_after_1_minutes() stimmt nicht. Der Leser interessiert sich vielleicht auch weniger dafür nach wie vielen Minuten die Funktion etwas ausführt (die Funktion selbst wird sofort ausgeführt!), sondern was die Funktion macht.

    Um tatsächlich etwas nach einer bestimmten Zeit auszuführen gibt es threading.Timer.

    Beim öffnen von Textdateien sollte man immer explizit die Kodierung angeben.

    fobj_out ist kein guter Name für ein log_file.

    Für das logging steht da im grunde zweimal der gleiche Code. Das sollte in eine Funktion. Wobei man auch überlegen sollte einfach das `logging`-Modul zu verwenden.

    Die 20 Minuten stehen zwei mal im Quelltext, einmal als Text und einmal in Sekunden. Das ist fehleranfällig beim schreiben und ändern, weil man immer daran denken muss beide Stellen zu ändern, und sich bei der Umrechnung auch nicht vertun darf. Für so etwas definiert man einmal eine Konstante, die sich dann leicht ändern lässt, und leitet die Werte im Programm dann von dieser Konstante ab.

    Zwischenstand (ungetestet):

    Das Programm hat jetzt das Problem, dass für jedes öffnen nach 20 Minuten eine E-Mail versendet wird. Man muss sich also überlegen unter welchen Bedingungen ein eventuell schon laufender Timer wieder beendet werden muss. 🤔 (Es sind zwei Stellen im Programmablauf an denen man das machen muss.)

    „All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman

  • __blackjack__ moin nochmal,

    Ich habe mir das script mal angeschaut und durchlaufen lassen nur leider Funktioniert genau garnix, weder die ausgabe in der commandline (ist in deinem code ja nicht mit inbegriffen) noch die eingabe ins LOG noch die emails.

    Danke trotzdem für die hilfe

  • simonz leider ist das nur ziemlich akkurat xD Der code von Blackjack läuft dem anschein nach durch, schickt mir aber keinerlei Emails oder schreibt ins LOG (Fehlermeldungen gibts auch keine). Scheint für mich als unwissenden so als würde er den code teilweise garnicht nutzen.


    Das ist mein (jetzt etwas überarbeiteter) code Hier funktioniert zumindest mal die eingabe ins LOg und ein Live Status vom Sensor in der Commandline

  • Jonathan_5805 Was meinst Du mit „die ausgabe in der commandline (ist in deinem code ja nicht mit inbegriffen)“? Das Programm sollte genau das gleiche machen wie der ursprüngliche Code. Das sind letztlich nur Umformungen gewesen, keine andere Programmlogik oder so.

    Deine überarbeitete Version macht falsche Sachen. Weder muss man die Logdatei lesend öffnen, noch ist es korrekt die dann nur in einem der beiden Fälle wieder zu schliessen. Diese Änderungen haben den Code verschlechtert. Warum hast Du das so gemacht? Was war der Gedanke dahinter?

    Und warum ist "tor" in der Ausgabe jetzt klein geschrieben und die Zeilenenden so komisch als weiteres Zeichenkettenliteral abgetrennt?

    Es wurde auch so gut wie gar nicht auf die ganzen Kritikpunkte eingegangen.

    „All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman

  • __blackjack__ ich habe gerade auch gesehen dass der Code eigentlich alle Funktionen hat die ich benötige das war mein Fehler. Leider funktioniert er trotzdem nicht , er gibt mir weder im LOG noch in der Commandline/Terminal eine Ausgabe bei änderung des Sensors. Emails werden auch keine verschickt und es gibt keine Fehlermeldung. Scheint für mich wie gesagt so als würde der Code ignoriert werden.

    Zugegeben ich hab bisher kaum etwas gemacht mit python und auch wenig ahnung wie man merkt ich versuch das Programm einfach irgendwie zum laufen zu bringen.

  • Moin,

    der Code von __blackjack__ ist nach meiner Auffassung richtig.

    Nun zu sagen, dass Email nicht funktioniert, finde ich ein wenig vermessen. Das ging ja vorher schon nicht.

    Sicher , dass der Email Server Emails ohne vorherige Authentifizierung annnimmt?

    Ich sehe nämlich nirgendwo ein Login.

    Etwas ungeschickt finde ich das Schreiben ins Logfile. Prinzipiell würde ich das Modul logging benutzen.

    Ist zugegebenermassen Geschmacksfrage. Allerdings würde ich aber im gegebenen Fall das Log mit absoluter Pfadangabe schreiben.

    Auch um sicherzustellen, dass das Log auch da landet , wo ich es haben möchte. Default gehören Logs nach /var/log.

    Grüße

  • Die Frage liesse sich supereinfach klären wenn das eine eigenständige Funktion wäre, die nicht innerhalb einer anderen Funktion definiert ist, denn dann könnte man das Modul einfach importieren und die Funktion mal testweise aufrufen. Also Jonathan_5805 könnte das machen, uns fehlt ja der entsprechende Rechner hinter der privaten IP-Adresse. 🤓

    „All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!