so, habe die Klasse jetzt weiter überarbeitet und jetzt bin ich schon einmal soweit :
Code: Alles auswählen
class BrickletTemperature:
_QUOTIENT = 100.0
def __init__(self, uid, connection, logging_daemon, queue, value=0.0, trigger_difference=0.1):
self._bricklet = Temperature(uid, connection)
self._value = value
self.trigger_difference = trigger_difference
self._uid = uid
self._logging_daemon = logging_daemon
self._queue = queue
self._logging_daemon.debug('Tinkerforge ... Temperatur-Bricklet "%s" initialisiert' % uid)
def set_callback(self, timeframe=5000):
self._bricklet.set_temperature_callback_period(timeframe)
self._bricklet.register_callback(self._bricklet.CALLBACK_TEMPERATURE, self._changed)
self._logging_daemon.debug('Tinkerforge ... Temperatur-Bricklet "%s" Callback gesetzt' % self._uid)
def read(self):
self._value = self._bricklet.get_temperature() / self._QUOTIENT
return self._value
def _changed(self, tmp_value):
tmp_value = (tmp_value / self._QUOTIENT)
if abs(self._value - tmp_value) >= self.trigger_difference:
self._value = tmp_value
self._logging_daemon.debug('Tinkerforge ... Temperaturänderung bei "%s" -> %f' % (self._uid, self._value))
tmp_json = json.dumps(
["send_data", self._uid, "sensor", "temperature", self._value])
for consumer in self._queue:
consumer(tmp_json)
self._logging_daemon.debug('websockets .... Temperaturänderung bei "%s" -> Warteschlange ' % self._uid)
temperature = property(read)
Zeilen sollten in Python nicht länger als 80 Zeichen sein, dann solltest du die Zeile umbrechen oder dich fragen, ob wirklich so viel in eine Zeile gehört.
Arbeite mit pycharm und keine Zeile ist länger als 80 Zeichen, 2 Zeilen sind nah dran - aber nur nah dran.
Ansonsten unterbreche ich.
Auch solltest du keine Kommentare hinter Code schreiben, so wie in den Zeilen 4 bis 9. Das ist sehr unübersichtlich. Schreibe Kommentare am besten vor die betreffende Zeile.
Kommentare sind weg
Für "logging" solltest du dir noch einen besseren Namen überlegen, den Namen gibt es schon als Modul in der Standardbibliothek. Die selben Namen sollten besser nicht verwendet werden, das führt nur zur Verwirrung. "logger" wäre zum Beispiel eine Alternative.
geändert
"__changed" solltest du noch anpassen, die doppelten führenden Unterstriche gehören hier nicht. Die sind dazu gedacht, um Namenskonflikte bei der Vererbung zu vermeiden. Es findet aber gar keine Vererbung statt.
Hatte ich wieder gemacht um den "private" Status deutlich zu machen - habe ich geändert.
Die 100.0 aus read und aus Zeile 22 solltest du noch zu eine Konstante zusammenfassen.
Erledigt.
Aus der read-Funktion könntest du auch ein Property machen, dann hat man von außen einen schöneren Zugriff.
Ich hoffe ich habe das so richtig gemacht.
So, und jetzt das was ich nicht hinbekomme, vielleicht habt ihr da noch ein Fetzen Code für mich?
Ich persönlich würde den Logger nicht übergeben sondern einen im Modul für das Modul erstellen und den benutzen.
Ich verstehe nicht wie das gemeint ist.
Wenn Du keine Liste willst, dann übergibt BrickletTemperature einfach nur eine Callback-Funktion, anstatt der Liste
Das bekomme ich nicht auf die Reihe, vorallem weil damit wohl auch noch Änderungen am Server-Skript einhergehen.
Ist aber nicht so schlimm, geht auch erst einmal so.
Ansonsten vielen Dank.
Ohne euch wäre ich nie bis hierher gekommen.
Danke