Ankündigung

Einklappen
Keine Ankündigung bisher.

Frage zu Diagramm

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

    #16
    Irgend etwas stimmt da noch nicht.

    Die Werte sind definitiv zu hoch. Das könnte Wh sein... den aktuell brauche ich ca. 800W
    Code:
    my $count_15min=(time()-900).":".($Zaehlerstand * 900);
    my $count_1h=(time()-3600).":".($Zaehlerstand * 3600);
    my $count_1d=(time()-86400).":".($Zaehlerstand * 86400);
    Ich habe jedoch gesehen dass ich den falschen DPT hatte es ist 14 und nicht 12 :-(
    Also starte ich den versuch nochmals...

    Beim 15min RRD geht die linie immer wieder auf 0, was nicht sein kann..

    Iwan
    Angehängte Dateien

    Kommentar


      #17
      Woher kommen Deine Werte eigentlich ? Also wer liefert die 5/2/72 ? In welchem Abstand? ...

      So ... stochern im Nebel beendet:

      Ein bisschen muss man sich schon mit der Materie beschäftigen:

      DPT12: Liefert nur Integer/ganze Zahlen -> schlechte Auflösung.

      DPT14: Liefert ordentliche floats/Kommazahlen -> hohe Auflösung

      Bei deinem DPT12 hat sich eben der Zählerstand auf dem Bus innerhalb von 15 Minuten nicht geändert, das liegt an der Auflösung. Mit DPT 14 sollte das klappen.
      Umgezogen? Ja! ... Fertig? Nein!
      Baustelle 2.0 !

      Kommentar


        #18
        Zitat von JuMi2006 Beitrag anzeigen
        Woher kommen Deine Werte eigentlich ? Also wer liefert die 5/2/72 ? In welchem Abstand? ...
        Meine WAGO Berechnet den aus den Zählerimpulsen und sendet den bei Änderung oder alle 5 min als DPT 14 auf den Bus.

        Habs nun angepasst mal schauen was in 2-3 Stunden so dargestellt wird.
        Code:
        #Zählerstand auslese
        my $Zaehlerstand=knx_read($Energie_ga,0,14);
        Iwan

        Kommentar


          #19
          Bis jetzt sind die Diagramme leer, auch der Diagrammgenerator zeigt nichts an...

          Der Wert von 5/2/72 wird in der visu angezeigt, aber mit dem RRD scheint es nicht zu klappen.

          Im Plugin-log ist nichts drin ausser das Erstellen der RRDs.

          Iwan

          EDIT 19:50:
          Nun tut sich was, der 15er hat Werte drin, die sind auch realistisch...

          Kommentar


            #20
            Irgend etwas läuft da trotzdem noch schief (siehe Anhang).

            Abenfalls im Anhang die Aktuelle Leistung wie den Zählerstand in der Visu.

            Hier nochlas das Plugin:
            Code:
            # return 0;
            # COMPILE_PLUGIN
             
            my $rrdFile_15min="/var/www/rrd/Energie_12OG_15min.rrd";
            my $rrdFile_1h="/var/www/rrd/Energie_12OG_1h.rrd";
            my $rrdFile_1d="/var/www/rrd/Energie_12OG_1d.rrd";
            my $rrd_15min="Energie_12OG_15min";
            my $rrd_1h="Energie_12OG_1h";
            my $rrd_1d="Energie_12OG_1d";
             
            my $Energie_ga="5/2/72";
            #my $Gasvolumen_ga="15/2/52";
            $plugin_info{$plugname . '_cycle'} = 300; # Aufrufzyklus - 5 Minuten
             
            if ($msg{'apci'} ne "A_GroupValue_Write") { # zyklisch
                            if ($msg{'dst'} ne $Energie_ga) {
                            $plugin_subscribe{$Energie_ga}{$plugname} = 1;
                            }
                           }
             
              # RRD ggf. anlegen
              if (!-e $rrdFile_15min)
              {
                RRDs::create($rrdFile_15min,
                  '--step' => 900,  # 15 Minuten
                  'DS:value:COUNTER:2700:0:2147483647',
                  # 15 min (für 7,5 d)      1 h (für 35 d)           24 h (für 5 y)            7 d (für 25 y)
                  'RRA:AVERAGE:0.5:1:720', 'RRA:AVERAGE:0.5:4:840', 'RRA:AVERAGE:0.5:96:1826', 'RRA:AVERAGE:0.5:672:1300',
                  'RRA:MIN:0.5:1:720',     'RRA:MIN:0.5:4:840',     'RRA:MIN:0.5:96:1826',     'RRA:MIN:0.5:672:1300',
                  'RRA:MAX:0.5:1:720',     'RRA:MAX:0.5:4:840',     'RRA:MAX:0.5:96:1826',     'RRA:MAX:0.5:672:1300'
                );
                if (RRDs::error) {
                  plugin_log($plugname, "Create COUNTER-RRDs failed for $rrdFile_15min: ".RRDs::error);
                } else {
                  plugin_log($plugname, "Created COUNTER-RRD for $rrdFile_15min");
                }
              }
             # RRD für 1 Stunde
              if (!-e $rrdFile_1h)
              {
                RRDs::create($rrdFile_1h,
                  '--step' => 3600,  # 1 Stunde
                  'DS:value:COUNTER:2700:0:2147483647',
                  # 1 h (für 35 d)           24 h (für 5 y)            7 d (für 25 y)
                  'RRA:AVERAGE:0.5:1:840', 'RRA:AVERAGE:0.5:24:1826', 'RRA:AVERAGE:0.5:168:1300',
                  'RRA:MIN:0.5:1:840',     'RRA:MIN:0.5:24:1826',     'RRA:MIN:0.5:168:1300',
                  'RRA:MAX:0.5:1:840',     'RRA:MAX:0.5:24:1826',     'RRA:MAX:0.5:168:1300'
                );
                if (RRDs::error) {
                  plugin_log($plugname, "Create COUNTER-RRDs failed for $rrdFile_1h: ".RRDs::error);
                } else {
                  plugin_log($plugname, "Created COUNTER-RRD for $rrdFile_1h");
                }
              }
             # RRD für 1 Tag
              if (!-e $rrdFile_1d)
              {
                RRDs::create($rrdFile_1d,
                  '--start' => -86410,
                  '--step' => 86400,  # 1 Tag
                  'DS:value:COUNTER:2700:0:2147483647',
                  # 24 h (für 5 y)            7 d (für 25 y)
                  'RRA:AVERAGE:0.5:1:1826', 'RRA:AVERAGE:0.5:672:1300',
                  'RRA:MIN:0.5:1:1826',     'RRA:MIN:0.5:672:1300',
                  'RRA:MAX:0.5:1:1826',     'RRA:MAX:0.5:672:1300'
                );
                if (RRDs::error) {
                  plugin_log($plugname, "Create COUNTER-RRDs failed for $rrdFile_1d: ".RRDs::error);
                } else {
                  plugin_log($plugname, "Created COUNTER-RRD for $rrdFile_1d");
                }
              }
            #Zählerstand auslesen
                    my $Zaehlerstand=knx_read($Energie_ga,0,14);
            #RRDs schreiben und Zählerstand auf den Bus
                    my $count_15min=(time()-900).":".($Zaehlerstand * 900);
                    my $count_1h=(time()-3600).":".($Zaehlerstand * 3600);
                    my $count_1d=(time()-86400).":".($Zaehlerstand * 86400);
                    RRDs::update("$rrdFile_15min","$count_15min");
                    RRDs::update("$rrdFile_1h","$count_1h");
                    RRDs::update("$rrdFile_1d","$count_1d");
                    #knx_write($Gasvolumen_ga,$Zaehlerstand/100,14);
             
             
            return;
            Iwan
            Angehängte Dateien

            Kommentar


              #21
              Hallo Iwan,

              mach doch mal folgendes:

              Entferne mal folgenden (von mir gemachten) Voodo:
              Code:
              if ($msg{'apci'} ne "A_GroupValue_Write") { # zyklisch
                              if ($msg{'dst'} ne $Energie_ga) {
                              $plugin_subscribe{$Energie_ga}{$plugname} = 1;
                              }
                             }
              der Einfachheit durch durch
              Code:
              $plugin_subscribe{$Energie_ga}{$plugname} = 1;
              Füge mal als Debug Code das hier ein:
              Code:
              #Zählerstand auslesen
                      my $Zaehlerstand=knx_read($Energie_ga,0,14);
                      [COLOR=Red]plugin_log($plugname,"Zählerstand ".$Zaehlerstand);[/COLOR]
              Dann sollte alle 5 Minuten der Zählerstand im wiregated.log erscheinen.

              ggf kannst Du auch mal schauen, ob die RRDs richtig gefüllt werden:
              Code:
                      RRDs::update("$rrdFile_15min","$count_15min");
              [COLOR=Red]       plugin_log($plugname,RRDs::error);[/COLOR]

              Ich hoffe, das hilft beim debuggen

              vG
              Wolfgang

              Kommentar


                #22
                Hoi

                Super, hab das so angepasst.

                Vielen Dank für deine Hilfe!

                Iwan

                Kommentar


                  #23
                  Hallo iwan,

                  grundsätzlich ist es eine gute Idee Plugins in das Template von Fry zu pressen. Damit hast Du das Thema Initalisieren, zyklischer Aufruf, Aufruf per GA sehr gut im Griff:
                  Open Automation / Code / [r1993] /wiregate/plugin/generic/Plugin-Skeleton.pl

                  vG
                  Wolfgang

                  Kommentar


                    #24
                    Habe gesehen wo das Problem liegt, der RRD erwartet ein Integer.
                    Ich mache nun Wh:
                    Code:
                    #Zählerstand auslesen und KWh in Wh umwandeln
                            my $Zaehlerstand=int(knx_read($Energie_ga,0,14)*1000);
                            plugin_log($plugname,"Zählerstand ".$Zaehlerstand);
                    Wh ist eh besser zum ablesen.

                    Grüsse
                    Iwan

                    Kommentar


                      #25
                      Ich würde das lieber hier machen ... ansonsten hast du eine ziemliche Unschärfe in Deinen Daten, vor allem in kurzen Zeiträumen.

                      Code:
                      RRDs::update("$rrdFile_15min",int($count_15min));
                      RRDs::update("$rrdFile_1h",int($count_1h));
                      RRDs::update("$rrdFile_1d",int($count_1d));
                      Umgezogen? Ja! ... Fertig? Nein!
                      Baustelle 2.0 !

                      Kommentar


                        #26
                        Wie beschrieben mache ich Wh draus (*1000), der Zähler hat eh nur eine Auflösung von 10Wh pro Impuls.

                        Iwan

                        Kommentar


                          #27
                          Dann betrachte es als Tip für spätere Nachahmer die nicht mit 1000 multiplizieren .
                          Umgezogen? Ja! ... Fertig? Nein!
                          Baustelle 2.0 !

                          Kommentar


                            #28
                            Zitat von ZeitlerW Beitrag anzeigen
                            # 15 min (für 7,5 d) 1 h (für 35 d) 24 h (für 5 y) 7

                            vG
                            Wolfgang
                            Hallo Wolfgang!

                            Fange auch gerade an, mich mit den COUNTER-rrd zu beschäftigen.
                            Was heißen deine Kommentare 15min f+r 7.5d bzw.1d für 35d?

                            Werden die Werte im rrd dann nach 7.5 bzw. 35d wieder überschrieben? Für weiter in die Vergangenheit liegen dann keine Daten mehr vor?

                            Wie sind die Zahlen 0.5:1:720 etc. zu lesen. 720x15min = 7.5d aber wie kommt man auf 0.5:1:720 bzw. den jeweiligen Ausdruck für die längeren Intervalle?

                            Weiters eine letzte Frage: die counter rrd sind zusätzliche rrd zum rrd mit dem jeweiligen Zählerstand, oder? d.h. ich muss deinen perl-code einfach
                            zusätzlich einfügen und das update_rrd für den Hauptzähler behalten, oder?

                            Danke für eine kurze Info
                            Robert

                            Kommentar


                              #29
                              Hallo Robert,

                              es wird eine RRD mit 15 Minuten - Werten angelegt, diese sind 7,5 Tage auslesbar bevor sie überschrieben werden. Es wird auch eine RRD angelegt in der 35 Tage lang die kummulierten Werte der 15 Minuten Werte von oben in 1 Stunden Werten abgespeichert werden bevor sie überschrieben werden und es wird eine RRD angelegt in der die kummulierten Werte der 1 Stunden Werte in einer Granularität von 1 Tag abgelegt werden. Diese sind dann 5 Jahre erhalten bevor sie überschrieben werden.
                              Das Problem in der CV ist halt, daß Du nur auf die erste RRD in der Datei zugreifen kannst.
                              Ich wollte halt die Daten ein wenig länger verfügbar haben
                              Weiters eine letzte Frage: die counter rrd sind zusätzliche rrd zum rrd mit dem jeweiligen Zählerstand, oder? d.h. ich muss deinen perl-code einfach
                              zusätzlich einfügen und das update_rrd für den Hauptzähler behalten, oder?
                              .. das hab ich jetzt nicht so recht verstanden. Wenn Du eine "normale" RRD schreiben würdest, dann würden die Werte ja immer größer werden, also eine steigende Gerade, da die kwH immer größer werden. Du willst ja jeweils für eine Intervall die kwh anzeigen, also eigentlich Durchschnittsleistung im 15min Intervall. Deshalb counter - RRD. Ich meine im o.g. Tread gelesen zu haben, dass nachdem die RRD angelegt wurde es auch mit update_rrd() geht.

                              vG
                              Wolfgang

                              Kommentar


                                #30
                                Das einfache update_rrd() geht leider nur eingeschränkt. Man müsste dann $value mit step multiplizieren, sonst kommt Mumpitz raus.
                                Umgezogen? Ja! ... Fertig? Nein!
                                Baustelle 2.0 !

                                Kommentar

                                Lädt...
                                X