Entwicklungshilfe / Tipps / Verbesserungsvorschläge

  • Hallo liebe Community,

    ich habe für unseren Verein nach einer Möglichkeit gesucht den Strom nur Vereinsmitgliedern zugänglich zu machen. Mir kam spontan der Raspberry als mögliches "Herz" in Sinn. Persönlich habe ich den Raspberry bisher nur als Medienserver eingesetzt.

    Nach etwas googlen habe ich angefangen mir über die Pflichten des Systems Gedanken zu machen und verschiedene "Module" Display, Relais und ein RFID-Leser (125kHz) heraussuchen.

    Pflichten:

    • vier unabhängige Steckdosen
    • automatische Abschaltung nach x Minuten
    • Aktivierung einer der Steckdosen per RFID-Karte
    • Anzeige der aktiven Steckdose inkl. Abschaltzeit
    • Erfassung der Zugriffe

    Anschließen habe ich ein Script zusammen gebastett.

    Hier würde ich um eure Hilfe bitte. Ich habt bestimmt mehr Erfahrung als ich und könnt mir Verbesserungsvorschläge geben. Zumindest hoffe ich das. Mein Script hat in den ersten Tests funktioniert. Solltest Ihr wider erwartet keine Verbesserungen für mich haben, kann ja vielleicht jemand anders das Script für seine Bedürfnisse anpassen. Und auch nutzen.

    Ich DANKE euch für eure Unterstützung.

    Guten Rutsch

  • Entwicklungshilfe / Tipps / Verbesserungsvorschläge? Schau mal ob du hier fündig wirst!

  • Hallo,

    ziemlich viel Code... Ein paar grundlegende Sachen:

    • Kein Python 2.7 verwenden, sondern Python 3.x. Grund: Python 2.7 ist 2020 EOL
    • Eingerückt wird bei Python mit vier Leerzeichen. Nicht mit Tabs, nicht mit 5 Leerzeichen oder was auch immer
    • PEP8 bei der Namensgebung (z.B. Variablennamen) beachten und _aussagekräftige_ Namen nutzen. So was wie "arrayname" als Name für eine Liste (ein Array ist übrigens was anderes in Python...) ist relativ sinnfrei.
    • Python kennt Bool'sche Werte - die solltest du verwenden und nicht Strings wie "false".
    • Strings baut man mit der `format` Methode zusammen, nicht mit `+`.
    • Warum belegst du die Listen so komisch vor, also mir " " (also einem Leerzeichen). Wenn da kein Wert drin stehen soll, dann nimmt man üblicherweise `None`.
    • Nie nackte `try... except` verwenden, weil damit alles abgefangen wird, auch Programmierfehler. Fehler sollen gezielt abgefangen werden.
    • Dateien besser mit dem `with` Statement öffnen. Dann hast du die Garantie, dass sie auch geschlossen werden.
    • Statt Logging selber zu implementieren solltest du das logging-Modul nutzen. a) kann das mehr und b) ist das sicherlich auch robuster und besser getestet als dein Code.
    • Ab Zeile 166 ist das ganz übler Spaghetti-Code (neigt man als Anfänger zu - kein Vorwurf), der schlecht lesbar und quasi nicht wartbar. Unterteile deinen Code in sinnvolle, kleine Häppchen und packe jede Funktionalität in eine eigene Funktion.
    Quote

    Mein Script hat in den ersten Tests funktioniert.

    Es hat aber definitiv Fehler. An ein paar Stellen referenzierst du z.B. die `end_read` Funktion, führst sie aber nicht aus.

    NACHTRAG: wie ist eigentlich dein Plan, wenn der Raspi mal crasht und nicht neu startet? Hat dann niemand mehr Strom?

    Gruß, noisefloor

  • Hallo noisefloor,

    danke für deine Tipps. Einiges habe ich schon versucht umzusetzen.

    Allerdings weiß ich nicht ob ich auf Python 3 so einfach wechseln kann. Ich nutzte ja auch Scripts von dem Modulherstellern, da muss ich wohl nochmal etwas lesen, lesen und probieren.

    Kannst du mir das mit dem "with" beim Datei öffnen nochmal erklären oder mir einen Link geben? Das benötige ich dann ja "nur" doch beim CSV-Import. Die Log-Dateien erstelle ich jetzt mit dem Logging-Modul.

    Zu deinem Nachtrag. Mal schauen wie weit man den Raspberry für solche Fälle optimieren kann. Ansonsten gibt es dann keinen Strom mehr. So würde man zumindest von Fehlern erfahren.

    Gruß

  • Hallo,

    zu P3: das einzige externe Modul, dass es nur für P2 geben könnte, ist den LCD-Driver. Wo immer der auch her kommt. Alle anderen Module gibt es für P3. Wenn es fü das LCD kein P3 Modul gibt und kein in Aussicht ist, ist halt die Frage, wie viel das Modul überhaupt taugt...

    Zum `with` Statement: Falls du das offizielle Python-Tutorial auf docs.python.org noch nicht durchgearbeitet hast, wäre jetzt eine gute Gelegenheit, das nachzuholen. Das `wtih` Statement ist im Kapitel 7 erklärt.

    Gruß, noisefloor

Participate now!

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