Ankündigung

Einklappen
Keine Ankündigung bisher.

Regenmessung und Archivierung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Du hast aber gesehen, dass bei Neustart (E22) 618.8 steht?

    Kommentar


      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,
        bei E22 sollte die Regen Gesamtsumme stehen.
        Ich konnte bei deiner Logik auf den ersten Blick keinen Fehler erkennen, ich habs bei mir so laufen und es funktioniert.
        Sind deine IKOs remanent?
        Ich würde alles mal löschen (inkl. IKOs)​ und die Logik neu aufsetzen.

        Gruß

        Kommentar


          Ja, alle iKOs sind remanent. Vielleicht sollte ich tatsächlich die Logik nochmal neu aufsetzen...

          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,
              probier mal den Baustein mit dem E9 statt E1. Allerdings musst du hierzu deinen Zählwert täglich um 00:00 zurücksetzen. Der Regenzähler ist bei mir DPT13

              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 Dateien
                Zuletzt 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.
                  2. Bezug auf E20 (Wert Regenzähler) fehlt in der Struktur des HELP-Texts


                  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


                    Hallo,
                    ich nutze den Baustein auch.
                    Ich denke du brauchst noch eine Logik, der deinen Wert vom Regenmesser an E9 täglich um 00.00 zurücksetzt.

                    VG

                    Kommentar


                      Die automatische Rücksetzung habe ich und funktioniert normalerweise.

                      Kommentar


                        Zitat von Thorsten1970 Beitrag anzeigen
                        Das bedeutet: Der komplette Mitternachts-Reset-Block (Woche/Monat/Jahr-Archivierung, Tageszähler-Reset) wird nur ausgeführt, wenn E11 (Trigger Stunde) getriggert hat.
                        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.

                        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

                        Lädt...
                        X