-
Notifications
You must be signed in to change notification settings - Fork 675
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Viel zu großer Sprung V10.03 #643
Comments
Da spricht du ein aktuelles Problem an. Je nach dem Fehlerbild ist eine Rate (pro Zeiteinheit) oder eine absolute Veränderung (einfach Vergleich zum letzten Wert) sinnvoll. Ich habe keine gute Lösung bisher. Ich könnte es parametrisieren, aber der geneigte Gelegenlichkeitsbenutzer wird die Auswirkung der Unterschiede nicht überblicken. |
Ich hätte gerne ein Vergleich zum letzten. das war bei version 9.xx besser. Bzw könnte man nicht die Wahl haben? Weil er macht bei mir immer den gleichen Sprung. Gruß |
Habe genau das selbe Problem - springt plötzlich von 111.93 auf 112.93 obwohl der MaxRateValue Parameter gesetzt ist. Kann es sein dass dieser gar nicht zieht/buggy ist? |
Ich kann das Fehlverhalten auch bestätigen. |
Bitte einmal die config.ini von Dir posten. Bitte daran denken: der Wert der in |
Bei mir sieht diese so aus. Das
|
Hier meine Config.ini Er springt manchmal einfach 1 qm hoch. hab jetzt negative Werte erlaubt, dadurch korrigiert er sich selbst beim nächsten Lauf. `[MakeImage] [Alignment] [Digits] [Analog] [PostProcessing] [MQTT] ;[GPIO] [AutoTimer] [Debug] [System] |
@b3nn0 Nur am Rand: Dein Intervall steht auf "1" sollte aber wie in der Beschreibung des Projektes festgehalten auf jeden Fall > "3" Minuten sein. Ich weis jetzt nicht genau, wie sich das auswirkt..... |
Wie ich die Config gepostet habe war alles OK, vorhin dann nicht mehr. Ich lasse mir jetzt mal von fhem jede Wert Änderung pushen und erhöhe die erlaubte Steigerung. |
Um das ganze noch etwas zusammenzufassen. Es gibt zwei Effekte, die hier eine Rolle spielen:
Momentan gibt es keinen Algorythmus, der allen gerecht wird. Was wären eure Vorschläge, um das Problem allgemein zu lösen? |
Ganz einfach falls es möglich ist. Lasse dem Nutzer einfach die Wahl ob: pro Minute (wie ab v10.x) oder wie vorher Wert zu Wert (bis v9.2) |
Ja - aber inzwischen gibt es schon so viele Parameter, dass du bald ein "Buch" brauchst, um zu verstehen, was die genau tuen. Ich habe bewußt schon den Expertenmodus eingebaut. Ca. 80% meiner Zeit mit Mails (>30 Stück/Tag) verbringe ich damit, zu erklären, was die Parameter genau machen und warum sie bei dem ein oder anderen falsch eingestellt sind. Manche machen sich halt nicht die Mühe das WIKI zu lesen :-( |
Ich glaube bei mir kommt das Problem dadurch dass er manchmal das Bild dreht. Dadurch werden Werte falsch erkannt und die digitalincrease schlägt zu. Weil nach x.9 x.1 kommt. x.9 war eine falscherkennung aber das weiß er ja nicht. Ich weiß nicht mehr welche Version ich vorher drauf hatte, aber da hatte ich das Problem nicht. |
Glaube ich sofort. Mega deine Arbeit aber das hörst du sicher ständig. |
Bei solchen Emails einfach mal die 4 Buchstaben mit smiley Antworten. "RTFM 😉" Aber ja, auf jeden Fall Danke für dein Projekt und deine Zeit die du reinsteckst. |
@Frank-Huber Das mit dem verkippten Bild hängt an den Alignmentmarken. Da musst du vielleicht ein paar besser erkennbare finden oder vielleicht auch mit einem Aufkleber auf dem Glas ein paar einfache selbst kreieren. |
Das waren aber vor dem Update die gleichen. Und da lief es lange Zeit stabil. Dass das Bild nicht optimal ist weiß ich. |
Ich habe jetzt nochmal laufen lassen und dabei geloggt. Config (auszug):
Situation (danach): Log (das relevante ist ziemlich am Ende): https://gist.github.com/b3nn0/6e566743ec1d5548bb984290fa23081e Zusammenfassung:
Analyse: Vorschlag: |
@Frank-Huber ich hab mir jetzt auch neue Marker auf dem Ring gesetzt (ein Punkt aufmalen reicht schon). EDIT: |
@jomjol das ist wirklich ein tolles Projekt und auch ich danke dir sehr für deine Mühe und den Einsatz. Wäre es sinnvoll den Auswertealgorithmus wie folgt zu ändern um die Auswertung um eine automatische Korrektur zu ergänzen?
In beiden Fällen könnte der Algorithmus eine fehlerhafte Ablesung automatisch korrigieren, wobei ich Option2 vorziehen würde. |
Ich denke eine nachträgliche Korrektur über zu hohe oder niedrige Werte ist nicht der einzige Weg um das Problem zu lösen. Mein Ansatz wäre über eine eindeutige Erkennung der Ziffern. Falsch über MQTT übertragende Werte, die nachträglich korrigiert werden, sind für eine Auswertung fast tödlich. Überlegung Eine Ziffer ist nur dann gültig, wenn diese eindeutig erkannt wird. „Eindeutig“ bedeutet die Ziffer liegt innerhalb des inneren Rechteck und füllt dieses aus. Es gibt, innerhalb dieses Rechtecks, oben oder unten keinen Leerraum. Meinen Überlegungen liegt zu Grunde das die vollständigen Ziffern richtig erkannt werden. Und das der Ablese Intervall so eingestellt ist das keine Ziffern übersprungen werden. Somit ist immer die Aktuelle, Vorherige und Zukünftige Ziffer bekannt. Bei Ausfall des „watermeter“ muss der „Previous Value“ manuell gesetzt werden. Aus dieser Überlegung ergibt sich das bei einer Ungütigen Ziffer der letzte aktuelle Wert gilt. Ich hoffe meine Annahmen und Folgerungen ergeben Sinn. |
Hallo ich habe das letzte Rolling vor der 10.04 benutzt und habe auch immer wieder mit Sprüngen zu kämpfen.. Manchmal wird der erste Analoge Zähler falsch erkannt und dann ist natürlich ein zu großer Sprung. Wobei insgesamt auf die kommastellle genau geht nur irgendwie in einer bestimmten Stellung erkennt er gerne mal die 5 als 9. Absurd. Aber schlimmer ist das er einfach den vorderen Zähler eins erhöht ohne ersichtlichen Grund. Hier der Log
Ich habe den neuesten Absolute Rate wert gesetzt dieser hat denke ich verhindert, dass der neue Wert geschrieben wurde (auch wenn dies nirgends im Log steht...) |
@Duese123:
Ich würde aber erstmal das Alignment prüfen ein Wert von NNNN.3459 ist sehr ungewöhnlich und deutet darauf hin, dass das Bild total schief o.ä. war. Vermutlich, weil du keine stabil erkennbaren Referenzstrukturen hast. |
@ThiloAm
|
@jomjol danke für deine Rückmeldung. Das Aligning sollte eigentlich passen jedoch erkennt er manchmal die analogen Werte sichtlich falsch. Ich habe jetzt mal ein sehr altes File für die analogen Zeiger genommen. Das neueste zeigt mir zwischen 5 und 6 falsche Werte (erkennt dann gerne mal.ne 8 etc) |
@jomjol Danke für deine Anmerkungen. Das der ESP32 limitiert ist ist mir bewusst. Dennoch möchte ich meine Überlegung einmal genauer beschreiben. Eventuell ist etwas dabei was genutzt werden kann. Plausiprüfung: Plausiprüfung Wasserzähler:
Mit dieser Logik sollte die Genauigkeit bei nicht eindeutigen erkennen der Ziffern auf 99 Liter eingegrenzt werden. Fehler erkennen: Folgende Informationen müssen gespeichert werden: Anmerkungen sind willkommen! |
@ThiloAm : danke für deine Überlegungen - genauso ist es implementiert + noch ein paar Plausibilitätschecks. Z.B. ob ein Nulldurchgang stattgefunden hat oder nicht. Gesteuert wird das über die Parameter:
Ich schließe den Issue mal, denn für Außenstehende dürfte er aufgrund seiner Länge nicht mehr hilfreich sein. Wir können ihn aber zum Ideenaustausch weiter nutzen. |
Was mir aufgefallen ist, ist das bei mir der Analog 0.x öfters mal erst nach dem Digitalen umspringt. Das heißt 00100.9 wird dann 00101.9 und dann beim nächsten read erst 00101.0 was dann natürlich zu nem Error führt, da der Wert plötzlich wieder kleiner ist. Passt das zu eurem Problem? |
Ich habe mal angefangen, den Korrekturalgorithmus zu beschreiben. Ist noch nicht vollständig und im Code eventuell auch noch verbesserungswürdig. Aber das könnte helfen, das Verhalten besser zu verstehen oder Fehler zu finden: https://github.com/jomjol/AI-on-the-edge-device/wiki/Correction-Algorithm |
@jomjol Ich habe angefangen deine Anmerkungen zum Algorithmus anzuschauen. Unter Terms and definitions schreibst du zum PreValue, dass dieser der Letzte Korrekte Wert ist. Weiter oben schreibst du aber, dass dieser auch falsch sein kann. Das kann aus meiner Sicht nicht sein. Entweder wurde der Wert manuell durch den User gesetzt oder der Algorithmus liefert diesen. Korrekt muss dieser sein. Also User oder Algorithmus muss einen gültigen wert setzten und dies ist auch möglich. Eine Annahme das der PreValue falsch sein kann ist überflüssig(mit Einschreckungen, siehe unten). Mir werden die technischen Eigenschaften des Wasserzählers nicht genügend berücksichtigt. Der Wasserzähler mit der Spezifikation Q3 4 hat eine Dauerdurchflussmenge von 4000 Liter die Stunde. Dies kann in Relation zum Intervall gesetzt werden. Daraus ergibt sich die maximal Durchflussmenge.
Jedes Mal wenn die Plausibilität nicht wahr ist wird für die einzelne Ziffer der Vorherige Wert gesetzt. |
@ThiloAm Ich kann den Widerspruch gerade nicht finden. Was genau meinst du mit "weiter oben". Die technischen Details der Zähler werde ich nicht weiter berücksichtigen. Die Firmware wird für alle möglichen Zähler verwendet (Gas, Strom, beliebige LCD Display). Ich kann für diese kostenlose Software nicht leisten, dass alles mit aufzunehmen, zumal die meisten User damit dann auch nichts anfangen können. Kann verstehen, dass du damit deinen Zähler noch sicherer auslesen - würde empfehlen, dafür eine eigene Version anzulegen und die auf dein System zu optimieren. |
|
Fehler gefunden --> v10.5.0 |
@jomjol Kann es sein, dass der Fehler noch immer auftritt? Ich habe das selbe Verhalten nun auf beiden Systemen wieder. |
Bei mir scheinen die Werte derzeit korrekt zu kommen. Allerdings steht bei "Previous Value" permanent "PreValue too old" |
@friedpa : bei mir ist er nicht aufgetreten, kann aber sein, ist aber noch nicht so viel Wasser durchgelaufen. Kannst du mir mal dein Logfile mit den entsprechenden Runs schicken, dann rechne ich es von Hand nach. Dabei hatte ich auch den letzten Fehler gefunden (verwendung von round(), statt floor()). |
Ich Depp hab das File mit den rauskopierten Zeitpunkten gelöscht, werde also bis zum nächsten Auftreten warten müssen..... |
@jomjol Habe das Problem jetzt mit der neusten Version 10.5.0 das die Werte nicht mehr passen. Als Anlage die Logs der letzten drei Tage. Nachtrag sehe gerade git eine neue Version 10.5.1. Installiere diese erst mal. Nicht off genug gesagt, Tolle Arbeit! |
@ThiloAm : hast du auf v10.5.1 upgedated? Da wurde ein Bug behoben. |
@jomjol Ja ich habe die Version 10.5.1 installiert. Es gibt aber leider keine Besserung. festgestellt habe ich das ich noch ein Problem mit den analogen Zahlen habe. Diese werden nicht immer richtig erkannt. Dadurch kommt es das der ermittelte Wert zu hoch oder zu nidrieg ist. Die analogen Zahlen müssen noch durch dich anglernt werden. der Zeiger ist etwas speziell(siehe Bild). Was benötigts du dafür? |
Also das Problem ist aufgetreten um:
Aus mir erstmal (noch) nicht ersichtlichen Gründen wurde dort der PreValue auf 566.5487 gesetzt. |
Version 10.5.2 installiert. Das Problem bleibt bestehen. |
Ursache kann aus dem Logfile nicht erkannt werden, da es schon im ersten Umlauf zu sehen ist (und dort auch verständlich):
PreValue ist 557.5794 --> warum da schon eine 7 steht muss du im vorherigen Log nachschauen. Der Algo ist hier erklärt: https://github.com/jomjol/AI-on-the-edge-device/wiki/Correction-Algorithm |
@jomjol Immer noch keine Besserung.
An dieser Stelle ist (erstmalig) der value wert deutlich zu hoch. WasserUhr.log |
@ThiloAm : völlig klar, was da passiert. Schau dir bitte mal den letzten gültigen Eindruck ebenfalls an:
Letzer gültiger Wert: 2022-02-25T20:41:48: 457.2164 Und damit der große Sprung. Da die maximale Rate offensichtlich kleiner wie dein MaxRate sein müsste, wird der Wert aktzeptiert. Die Details für den Ablauf findest du hier nochmal: https://github.com/jomjol/AI-on-the-edge-device/wiki/Correction-Algorithm - RTFM :-) So einen Fehler kann immer mal vorkommen. Das bekommst du nur über den MaxRate Value in den Griff. Du könntest in statt auf eine Rate (m³/minute) auf eine absolute Veränderung stellen und dann z.B. 0.5 als Grenzwert einstellen, dann wird so ein Fehler erkannt und der neue Wert kommt erst, wenn die Nachkommastelle wieder stimmt. |
@jomjol Leider verstehe ich es noch nicht genau. Kannst du mir etwas auf die Sprünge helfen. Meine Einstellungen sind Auch hat um 2022-02-25T20:55:48 kein Nulldurchlauf stattgefunden. Ich habe jetzt erstmal auf AbsoluteChange umgestellt. |
RateChange bedeutet, dass du die Rate in m³/Minute angibst. Zwischen dem letzten guten Wert (20:41) und dem Sprung (20:55) sind 14 Minuten vergangen 14minuten * 0,334 m³/minut = 4,7m³ sind maximal zulässig. Der Sprung ist aber nur ca. 1m³ also zulässig. Bezüglich "Nulldurchang": natürlich hat in der Realität kein Nulldurchgang stattgefunden. Aber da die erste Nachkommastelle kleiner ist, wie die beim letzten Mal, glaubt der Algo, dass ein Nulldurchgang stattgefunden hat. |
Nachtrag: Zu deiner Antwort: Deine Antwort erklärt für mich jetzt warum zu große mengen akzepiert werden. Dies passe ich jetzt nochmal an. |
@ThiloAm Du kannst am Wasserzhäler die maximale Durchflussmenge pro Minute ablesen; Q3 4 bedeutet in 1h => 4m3 Wasser, daraus kann man den Minutenwert errechnen. |
@friedpa Danke für den Hinweis. Siehe meine Anmerkungen dazu #643 (comment) |
es wird bei Digital Wechsel oft im 1.XXm³ gesprungen. Bei den alten Verison stand immer in der Config.ini maximum change per read.
Jetzt steht da" per minute". Heißt das ich muss da 30Liter oder so eintragen? Was ich aber sogar hatte. Aber wenn man Nachts kein Wasser entnimmt werden aus 30 Liter ja auch gerne mal 3000Liter. Oder wie ist sonst der Sprung zu erklären.
The text was updated successfully, but these errors were encountered: