Pythonskript für Temperaturmonitoring Schritt 2

Im letzten Beitrag habe ich die ersten Schritte zur Temperaturüberwachung beschrieben. Dabei hatte ich ein Skript von raspiprojekt.de eingesetzt. Als Freund von Klassen habe ich diesen Code nun gleich entsprechend umgeschrieben, was an den verfügbaren Funktionen erst einmal nichts ändert, sondern nur die Übersichtlichkeit des Codes erhöht.

Daher habe ich den Code in zwei Klassen zerlegt:

  • w1_temp_sensor (stellt einen Temperatursensor dar)
  • sensor_pool (verwaltet den Zugriff auf die Sensoren)

Beide Klassen sind nicht besonders aufregend und werden hier nur kurz dargestellt:

Die Klasse w1_temp_sensor hat nur den Konstruktor __init__() und die Methode read_data(). Während der Konstruktor zwei Variablen definiert, bzw. mit dem übergebenen Namen des Sensors den Pfad zur auszulesenden Datei bildet liefert die Methode read_data() die aktuell am Sensor verfügbaren Daten zurück.

Der erste Reückgabewert ist dabei der Status der Daten (in der Sensordatei als CRC), der zweite Wert der Temperaturwert. War der gelesene Statuswert ungleich YES wird anstelle der Temperatur None zurück gegeben, da der Temperaturwert nicht valide ist.

Die zweite Klasse „verwaltet“ die Sensoren auf eine an dieser Stelle sehr triviale Art und Weise: Sie liest die Verfügbaren Sensoren aus

Im Ergebnis ändert sich das aufrufende Skript dadurch wie folgt:

WICHTIG: Konsequenter Weise lege ich nicht alle Dateien im selben Verzeichnis ab, sondern habe dafür ein „./Library/sensors“ angelegt, um den der PYTHONPATH natürlich erweitert werden muss. Beim Aufruf aus dem cron heraus wird aber die .bashrc aus dem eigenen Profil nicht gelesen, somit ist auch der PYTHONPATH nicht definiert und der Import schlägt fehl. Um dies zu vermeiden muss der PYTHONPATH direkt im cron definiert werden. Es muss also vor dem Croneintrag die Zeile

definiert werden. Diese definiert den PYTHONPATH bei jedem Aufruf und die Klassendateien können gefunden werden.

Ersten Kommentar schreiben

Antworten

Deine E-Mail-Adresse wird nicht veröffentlicht.


*


12 + sechs =