Ich habe gestern nach der Anleitung, Firmware und BOB-Software des FiPys updaten Firmware und BOB-Software aktualisiert. Leider lies sich Pymkr nicht so einfach updaten, so dass ich alles neu installiert habe.
Mit dem Firmware-Updater lies sich die Firmware 1.20.1.r1 problemlos einspielen.
Leider lief Atom mit dem neuen Pymkr beim Update der BOB-Software nicht so problemlos. ich musste mehrfach neu starten, was mir früher nur selten passierte.
Die BOB-Software startete dann zwar, aber die Konfiguration über den Accesspoint lief recht hakelig und brauchte mehrere Anläufe.
Inzwischen kenne ich die Konfigurations-Dateien, und für mich wäre es einfacher, nur die Dateien zu editieren. Wir sollten das in die Doku für Fortgeschrittene aufnehmen.
Nach dem die Konfiguration erfolgreich war, läuft die BOB-Software seit heute 8 Uhr mit einer Messung alle 5 sec. Jetzt gab es die 10500 ste Messung ohne Absturz. Das war früher selten.
Doch bei den Messungen habe Verbesserungsvorschläge. Zufrieden bin ich mit den Messungen des BME280:
Der BME280 hat über 30000 Messungen ohne Ausreisser geliefert.
Die Darstellung der Messwerte mit 3 Nachkommastellen ist sinnlos oder auch falsch. Ein BME280 kann nie mit einer Auflösung oder gar Genauigkeit von 1/1000 °C messen. Ausserdem werden Übersichtlichkeit und Übertragungskapazität ( LoRa ) verschwendet.
Doch die 5 Ausreisser stören optisch sehr. Die sollte man erkennen und überspringen. Es ist eindeutig, dass sich das Gewicht nicht derart verändern kann. Man erkennt auch die Temperaturdrift der billigen China-Wägezelle.
Unzufrieden bin ich mit den Messergebnissen der DS18B20:
Die vielen Ausreisser sind nicht zu akzeptieren. Der BME280 kann das viel besser! Da gab es auch schon viele Diskussionen. Ob man die Ausreisser an Messwertsprüngen oder mit dem CRC-Check erkennt, ob man den falschen Wert auslässt oder durch den letzen guten ersetzt, ist eigentlich egal. Aber man muss dringend etwas tun, bis man die Ursache gefunden hat. Vermutlich ein Timing-Fehler im Onewire-Treiber.
Der 5. DS18B20 liefert beim Messen nur “none”, obwohl er bei der Konfiguration gut funktionierte. Ich werde nach dem Fehler suchen.
Ich habe gestern die BOB-Software überarbeitet. Beim BME280 habe ich die Ausgabe auf 1 Nachkommastelle begrenzt und beim HX711 erkenne ich Messwertsprünge ( z.Z > 15 kg ) und sende den letzten Wert. Damit sind die Ausreisser weg, wie man an den Messungen von 0 Uhr bis jetzt erkennt:
Sehr auffällig ist das Temperaturverhalten der China-Wägezelle. Das ist bei der Bosch H40A sehr viel besser.
Die DS18B20 habe ich noch nicht angefasst.
Achso, mir fällt dazu gerade ein, dass wir an dieser Stelle doch auch die MicroPython-Treiber für den HX711 entsprechend verbessert hatten – gegenüber den Varianten, wie sie im Netz oder anderswo zu finden sind.
Die in den Treibern verwendete Ansteuerung der Logging-Bibliothek müsste man ggf. entfernen, wenn man sie nicht als Abhängigkeit im Programm haben will.
Usage
Nach dem üblichen Setup per set_scale() und set_offset() steuert man den Auslesevorgang dann dann über die get_reading() Methode an. Das gibt ein Werteobjekt zurück, in dem das Attribut "kg" das Gewicht in Kilogramm enthält. Die get_data()-Methode liefert alle Werte zurück, auch "offset", "scale" und v.a. "raw", was man für die Justierung der Waage benötigt.
Nochmal kurz zusammengefasst:
# Setup.
hx711 = HX711Heisenberg(pin_dout, pin_pdsck, gain)
hx711.set_scale(...)
hx711.set_offset(...)
# Acquire reading.
reading = hx711.get_reading()
# Get value in Kilogram.
value_kg = reading.kg
# Get all data, including raw values.
all_data = reading.get_data()
Ich bin nun die DS18B20 angegangen und habe den GarbageCollector ab 8:30 vor dem Messen abgeschaltet mit gc.disable() und danach wieder an mit gc.collect()
Leider erkennt man ab 8:30 bis 14:50 keine Verbesserung.
In der Zeit von 10:15 bis 11: 20 war der Akku leer, daher keine Messungen.
Ab 14.50 dann meine Ausreisser-Erkennung: wenn die Temperaturveränderung innerhalb 5 Sekunden grösser als 2 °C ist, wird der letzte Wert genommen.
Beispiel:
20:15:15 25.5°C
20:15:20 25.5°C
20:15:25 85.0°C # falscher Wert
20:15:30 25.5°C
20:15:35 25.5°C
Es ist sicher nicht falsch, wenn ich den Wert 85.0°C von 20:15:25 durch den Wert 25.5°C von 20:15:20 ersetze. Die Temperatur kann in so kurzer Zeit nicht solche Sprünge machen.
Ich habe im Netz 2 Varianten von onewire.py gefunden. Die werde ich als nächstes testen.
Obwohl sie in einer Schachtel zusammen liegen, zeigen sie Unterschiede von bis zu 0.3°C an, der BME280 zeigt 1°C mehr an.
Doch was ist die echte absolute Temperatur? In einem Bienenstock interessiert mehr die relative Temperatur zwischen den Messtellen. Deshalb kann ich die DS18B20 auf einen bestimmten Mittelwert korrigieren. Im Test nehme ich die Temperatur des BME280 und erhalte ab 8 Uhr folgenden Temperaturverlauf.
Leider gab es heute einen Ausreisser in t_i_1, der nicht erwischt wurde. Ansonsten bin ich zufrieden mit der Darstellung der Temperatur auf meinem Schreibtisch.
Da wir nicht wissen was der richtige Wert ist, würde ich da erst mal nichts korrigieren oder umrechnen!! Wenn wir doch einmal absoute Temperaturen von verschiedenen Völkern / Imkern vergleichen wäre es doof, wenn die DS18B20 unterschiedlich nachjustiert werden.
Die Sensoren messen alle im Rahmen ihrer Toleranz genau. Dummerweise gibt bei mir ein Sensor 1°C mehr aus als ein anderer, obwohl alle gleich warm sind. So kann man dann in der Beute keine Temperaturdifferenzen kleiner als 1°C auswerten.
Wenn man sie abgleichen wurde, könnte man besser kleine Temperaturdifferenzen ( z.B. zwischen Mitte und Seite der Wintertraube ) beachten.
Noch besser wäre es, man könnte mit einem geeichten Thermometer abgleichen.