Du hast aber gesehen, dass bei Neustart (E22) 618.8 steht?
Ankündigung
Einklappen
Keine Ankündigung bisher.
Regenmessung und Archivierung
Einklappen
X
-
Ja, das habe ich. Grundsätzlich müsste ja aber trotzdem die Wochen, Monat und Jahreswerte gezählt werden. Das passiert aber leider nicht.
Welcher Wert müsste denn normalerweise in E22 stehen? Der Tageswert?Zuletzt geändert von Thorsten1970; 12.05.2023, 15:49.
Kommentar
-
Hallo zusammen, ich habe nun auch mal den Baustein bei mir eingebunden und wollte meinen Regenmengenmesser damit auswerten. Aber leider funktioniert auch bei mir das Ganze nicht. Am ersten Regentag war alles korrekt, da hatte ich 126 Impulse und bei Tagesmenge stand der korrekte Wert. Am Tag danach hatte es nicht geregnet, aber am Baustein des aktuellen Tages stand ca. die hälfte des Vortages und das wurde addiert. Am Tag danach das selbe... aber bei uns gab und gibts keinen Regen. Der Impulszähler ist auch unverändert.
Alle Werte sind vom Type DT14 (float) remanent - vorher hatte ich es mit variant versucht aber auch hier ohne Erfolg.
Kann da jemand weiterhelfen? Oder hat jemand den Baustein korrekt am Laufen und kann mal seine Konfig / Settings posten?
Vielen lieben Dank schon mal
M Regenmengenmesser.jpg arkus
Kommentar
-
Hallo zusammen,
nach dem Neuaufsetzen habe ich nun das Problem, dass E3 "Regen sum gestern" hochzählt und nicht jeden Tag bei Null anfängt.
image.png
Was könnte hier die Ursache sein? A2 geht über ein SBC und Ausgangsbox auf E3, so wie es in der Hilfe beschrieben ist...
Edit:
Ich habe nun alle Werte mal auf Null gestellt und werde es nochmal beobachten. Wäre trotzdem schön, falls ihr hier eine Info für mich habt. Dankeschön.Angehängte DateienZuletzt geändert von Thorsten1970; 16.07.2026, 11:34.
Kommentar
-
Ich habe mal auf Grund meiner Probleme Claude zum Code befragt. Hier die Antwort dazu. Ich habe es nicht ganz durchdrungen, da ich kein Programmierer bin und mit den Hinweisen nicht viel anfange...
WagoKlemme : Könntest du dir das bitte mal ansehen. Vielen Dank im Voraus. 🙏
Ich habe den Code analysiert und mehrere Probleme gefunden – der Baustein ist nicht korrekt, zumindest nicht ohne Einschränkungen. Hier die Details: Kritische Fehler
1. Tote/nutzlose Variablen
$Tag=0; $Tag_Zaehler=0; $tag_zaehler_merker=0; $tag_merker=0;- $Tag_Zaehler wird niemals neu gesetzt (bleibt immer 0), aber in der Bedingung
If ($Tag_Zaehler >= $E[10]['value']) {$tag_zaehler_merker = $Tag_Zaehler;}
verglichen. Das bedeutet: $tag_zaehler_merker wird praktisch nur dann != 0, wenn $E[10]['value'] <= 0 ist. Damit ist die Logik für den "Regenzähler Merker" (A3) funktionslos/fehlerhaft. Das war offensichtlich mal als Vergleich mit einem tatsächlichen Zählerwert gedacht, wurde aber nie zugewiesen. - Genau das gleiche Problem mit $tag_merker: $Tag wird ja berechnet, aber der Vergleich $Tag >= $E[5]['value'] ergibt nur dann true, wenn der aktuelle Tageswert größer/gleich dem alten Stundenmerker ist – das ist zwar meistens korrekt (Regen nimmt normalerweise zu), sollte aber sauberer mit >=0 oder eindeutiger Logik geprüft werden. Funktioniert grundsätzlich, ist aber fragil.
Im Hilfetext wird beschrieben, dass E1–E22 wie folgt belegt werden: E1=Zählwert, E2=Summe usw. Tatsächlich verwendet der Code aber E20 (Wert Regenzähler) als Multiplikator:
$Tag = ($E[9]['value'] * $E[20]['value']);
$Tag = (($E[1]['value']-$E[3]['value']) * $E[20]['value']);
Das ist im HELP-Text nicht dokumentiert (Beschreibung für E20 fehlt komplett in der Erklärung "Benötigt wird:"). Das ist ein Dokumentationsfehler, kein Codefehler – aber es erschwert die Nutzung. 3. Mitternachts-Reset (Stunde 0) hängt an $E[11]['refresh']
if ($E[11]['refresh']==1) {
...
if (date("G")==0) { ... }
}
Das bedeutet: Der komplette Mitternachts-Reset-Block (Woche/Monat/Jahr-Archivierung, Tageszähler-Reset) wird nur ausgeführt, wenn E11 (Trigger Stunde) getriggert hat. Das heißt, es muss exakt zur vollen Stunde 00:00 Uhr ausgelöst werden. Falls der Stunden-Trigger (E11) zeitlich leicht abweicht (z. B. durch Systemlast, Verzögerung), verpasst der Baustein den Mitternachtsreset komplett bis zur nächsten Stunde – dann ist aber date("G") schon 1 und der Reset greift nie. Das ist ein Race-Condition-Risiko, das im Changelog ("1.8 Neustrukturierung der Mitternachtsereignisse...") zwar behandelt wurde, aber offenbar nicht vollständig gelöst ist. 4. Trigger-Bedingung am Anfang enthält E12, aber E12 wird im Codeblock selbst nicht wirklich als "Startpunkt" benutzt
if ($E[9]['refresh']==1 || $E[1]['refresh']==1 || $E[12]['refresh']==1) {
E12 = "Trigger Tag 23.59" – wird als Auslöser mit reingenommen, obwohl der eigentliche Verarbeitungscode ($Tag = ...) nur auf Basis von E9/E1 sinnvolle Werte liefert. Wird der Baustein nur durch E12 getriggert (kein neuer Zählerstand), dann läuft:
if ($E[9]['value']>0) { ... } elseif ($E[1]['value']>0) { ... }
mit dem letzten bekannten Wert von E9/E1 nochmal durch – das ist vermutlich beabsichtigt (um sicherzustellen, dass der Tageswert bei 23:59 nochmal geschrieben wird, bevor E9==1 den Tagesabschluss auslöst), aber es führt dazu, dass z. B. logic_setOutput($id,1,$Gesamt_Neu) erneut mit demselben Wert ausgeführt wird – nicht falsch, aber redundant und potenziell taktgebend für nachgelagerte Logiken/Archive (unnötige KO-Sendungen). 5. Kein Schutz gegen negative Werte bei Stunde
logic_setOutput($id,5,round(($E[2]['value']-$E[22]['value']),2));
if (($E[2]['value']-$E[22]['value']>0) || $E[21]['value']==1) {
logic_setOutput($id,6,round(($E[2]['value']-$E[22]['value']),2));
Im Gegensatz zum Tageswert (if ($Tag<0) $Tag=0
gibt es hier keine Absicherung gegen negative Differenzen. Laut Changelog 2.1 sollte genau das behoben sein ("Bug: Archive enthalten Werte mit negativem Vorzeichen"), aber es wurde nur beim Tageswert ($Tag), nicht bei der Stundendifferenz (E2-E22) korrigiert. Das ist ein Bug, der laut Versionshistorie eigentlich behoben sein sollte, aber im Stundenblock nicht umgesetzt wurde. 6. A2 (Regen sum gestern) wird nur bei Zählerüberlauf gesetzt
if ($E[3]['value']<=$E[1]['value']) {logic_setOutput($id,1,$E[1]['value']);}
else{logic_setOutput($id,1,$E[1]['value']);logic_setOutput($id,2,$E[1]['value']);}
Das bedeutet: A2 wird nur beschrieben, wenn E3 > E1 ist (z. B. bei Reset/Überlauf des Eingangszählers). Das ist zwar prinzipiell sinnvoll für den Reset-Fall, aber es gibt keinerlei andere Stelle im Code, an der A2 sonst noch aktualisiert wird (außer implizit über Mitternacht logic_setOutput($id,2,$E[2]['value']); bei date("G")==0, was A2 mit E2 statt mit E1 befüllt – das ist inkonsistent, da A2 laut Definition "Regen sum gestern" sein soll und mit E1-Bezug arbeiten sollte, nicht mit E2). Fazit
Der Code ist nicht fehlerfrei:- Der Regenzähler-Merker-Mechanismus ($Tag_Zaehler) ist faktisch nutzlos/broken.
- Negative Werte werden nur beim Tageswert abgefangen, nicht bei der Stunde (Widerspruch zum Changelog 2.1).
- Der Mitternachtsreset ist an einen exakten Stundentrigger gekoppelt und somit zeitkritisch/fragil.
- Es gibt eine Inkonsistenz bei A2 zwischen E1- und E2-Bezug.
Falls du möchtest, kann ich dir einen korrigierten Codevorschlag erstellen, der diese Punkte behebt.
Zuletzt geändert von Thorsten1970; 16.07.2026, 12:23.
Kommentar
- $Tag_Zaehler wird niemals neu gesetzt (bleibt immer 0), aber in der Bedingung
-
Ich hab jetzt nicht in den Code geschaut aber würde das so verstehen: Bei jedem Trigger Stunde (E11) läuft eine Berechnung durch. Die muss mindestens 1x durchgelaufen sein, damit der Reset um 23:59 funktioniert.Zitat von Thorsten1970 Beitrag anzeigenDas bedeutet: Der komplette Mitternachts-Reset-Block (Woche/Monat/Jahr-Archivierung, Tageszähler-Reset) wird nur ausgeführt, wenn E11 (Trigger Stunde) getriggert hat.
Wenn du also zwischen 23:00 und 24:00 einen Edomi-Reset machst ist das noch nicht durchgelaufen und das Zurücksetzen funktioniert nicht.
Kommentar


Kommentar