Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenspeicherung von Verbrauchsdaten

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

    KNX/EIB Datenspeicherung von Verbrauchsdaten

    Hallo Leute,
    ich bin gerade dabei meine Komponeten für die Verbrauchsdatenerfassung zu aktivieren:
    2xArcus-Eds IMPZ
    2xArcus-Eds WMZ
    1xHager TE (Strom)

    Jetzt stellt sich die generalle Frage, wie kann man die Verbrauchsdaten am besten Speicher. HS3, NAS Box ist vorhanden.

    Ziel ist:
    Prio A: Nach einem Jahr genausagen zu können wie viel Wasser / Strom verbraucht wurde. Sicherung auf ein zweites Device (ideal vielleicht mit Excel export).
    Prio B: aktuellen Verlauf (wochenwerte, monatswerte,..), Grafiken

    Würde mich interessieren wie Ihr das gelöst habt! Da das Thema "Smart Metering" immer aktueller wird, könnte es vielleicht mehr Leute um Forum interessieren!
    HS3, Russound, iPhone

    #2
    also ich habs ganz einfach über ein perl script realisiert, dass den aktuellen Zählerwert der verschiedenen Binäreingänge täglich ausliest und in eine mysql schreibt. (Für Langzeitaufzeichnung)

    zusätzlich läuft ein cacti monitoring system, dass alle 5 Minuten die Zählerwerte abfragt, und in eine RRD schreibt. (macht cacti out of the box)

    hab damit auch Wasserverbrauch, Gasverbrauch, Windgeschwindigkeit und Temperaturen erfasst.

    die Graphen schauen dann wie angefügt aus, lassen sich individuell anpassen.
    Angehängte Dateien

    Kommentar


      #3
      @alle
      interessiert das thema niemanden sonst?
      HS3, Russound, iPhone

      Kommentar


        #4
        Solar und Heizungsdaten schreibe ich minütlich in den FS-Speicher, der hält ca. 2 Monate und macht ein schönes Diagramm....

        Wasserstand in der Zisterne wird täglich um 3.00 Uhr in FS-Speicher geschrieben und auch per Diagramm ausgewertet.

        Langzeit ist bei mir eigentlich nciht notwendig.
        never fummel a running system...

        Kommentar


          #5
          wegen konkreter Frage hier eine etwas detailliertere Übersicht über die Langzeitaufzeichnung mit cacti:

          mit cacti lässt sich jede beliebige Größe in regelmäßigen Abständen erfassen, aufzeichnen und grafisch auswerten - vorausgesetzt man schreibt ein entsprechendes script, wodurch cacti überhaupt zu der messenden Größe kommt:

          im konkreten Fall hier das script mit dem ich per eibd tool "groupreadresponse" eine bestimmte Gruppenadresse abfrage, deren Response parse und als dezimalzahl ausgebe. Für jeden Datentyp muss man unterschiedliche scripts schreiben, hier unten für uint (ganzzahlig ohne vorzeichen, z.B. der Response von einem Zähler eines Binäreingangs)

          knx32bituint.sh
          Code:
          groupreadresponse ip:localhost $1 |perl -ne 'if($_ =~ /Response from/) {@fields=split(/\s/,$_); print hex($fields[3].$fields[4].$fields[5].$fields[6]);}'

          und hier für 16 Bit float; z.B. der Response auf eine Abfrage der Temperatur
          knx16bitfloat.pl
          Code:
          #!/usr/bin/perl -w
          
          use POSIX 'ldexp';
          use strict;
          
          my $response = `groupreadresponse ip:localhost $ARGV[0]`;
          my @lines = split(/\n/,$response);
          foreach my $line (@lines) {
                  if($line =~ /Response from/) {
                          my @fields=split(/\s/,$line);
                          print(unpack_f_ieee754($fields[3].$fields[4]));
                  }
          }
          
          sub unpack_f_ieee754 {
          
                  my $hex = $_[0];
                  my $temp = unpack("B32", pack("N", hex $hex));
          
                  my $bin = substr($temp, -16);
          
                  my $sign = substr($bin,0,1);
                  my $exp = substr($bin,1,4);
                  my $mant = substr($bin,5,11);
          
                  my @chars = split //, $mant;
          
                  my $mantrev = "";
                  foreach (@chars) {
                          if ($_ eq "0") {
                                  $mantrev .= "1";
                          } elsif ($_ eq "1") {
                                  $mantrev .= "0";
                          }
                  }
          
                  my $signdec = bin2dec($sign);
                  my $expdec = bin2dec($exp);
          
                  my $mantdec = "";
          
                  if ($signdec eq 0) {
                          $mantdec = bin2dec($mant);
                  } elsif ($signdec != 0) {
                          $mantdec = bin2dec($mantrev);
                  $mantdec = $mantdec-1;
                  }
          
          
                  my $value1 = $mantdec;
                  my $value2 = 2**$expdec;
                  my $value3 = $value1 * $value2;
                  my $value4 = $value3*(0.01);
          
          
                  return $value4;
          }
          
          sub bin2dec {
                  return unpack("N", pack("B32", substr("0" x 32 . shift, -32)));
          }
          das eine script ist ein shell-script das perl aufruft, das andere direkt ein perl script, ist etwas unschön, hatte aber noch keine Zeit das zu bereinigen.

          Diese scripts einfach copy & paste in einen Editor deiner Wahl, rauf dort wo cacti läuft und ausführbar machen. Dann kurz testen, das einzige Argument das notwendig ist, ist die Gruppenadresse.

          output sollte dann so aussehen:

          Code:
          root@alix:/usr/share/cacti/site/scripts# /usr/share/cacti/site/scripts/knx32bituint.sh 0/6/5
          9033root@alix:/usr/share/cacti/site/scripts#
          In meinem Fall steht der Zähler des Binäreingangs mit der Gruppenadresse 0/6/5 auf 9033.

          wenn das funktioniert ist das schon die halbe Miete.


          der Rest ist nur mehr cacti-spezifisch:
          1. Data Input Methods
            als erstes "Data Input Methods" anlegen. Damit wird cacti gesagt, wie es überhaupt zu bestimmten Daten kommt - nämlich über die scripts die wir eben angelegt haben.

            Im PIC unten sieht man welche Input Methods bei mir vorhanden sind. konkret geht es um die Input Methods mit "KNX".



            Einfach die 2 Input Methods wie im folgenden screenshot einrichten:


          2. Data Sources
            Der 2. Schritt ist die Data-Source. Cacti verwendet die zuvor definierte Data Input Method und schreibt die Ergebnisse in eine RRD (Round Robin Database), aus der im 3. Schritt die Graphen definiert werden.

            Hier sieht man meine Data-Sources.



            Hier exemplarisch die DataSource für den Gasverbrauch. Wichtig ist logischerweise das richtige script (float oder int), die richtige Gruppenadresse und der richte Datasource-Type. Der Datasource Type gibt Aufschluss darüber, ob der Wert ein Zähler ist, oder ein fixer wert, wie z.B. Temperatur.

            Wenn Counter eingestellt ist, speichert cacti im RRD immer nur den Wert/Sekunde ab. Sprich wenn alle 5 Minuten abgefragt wird, wird die Differenz des letzten und des aktuellen Wertes durch 300 dividiert (300 Sekunden = 5 Minuten) und das Ergebnis in die RRD geschrieben. Damit wäre die Einheit der im RRD gespeicherten Daten nun Impulse/Sekunde.

            Im Gegensatz dazu speichert der Typ "GAUGE" direkt den Wert an sich ab, was bei Werten wie Temperatur sinnvoll ist.



            Ist das komplett werden von cacti bereits alle 5 Minuten die Gruppenadressen abgefragt und die Werte in den entsprechenden RRD's gespeichert.

          3. Graphs
            Damit wir nun von den RRD's zu schönen Graphen kommen, müssen wir cacti noch sagen, wie die Werte dargestellt werden sollen:

            Hier wieder die Übersicht über meine Graphen:



            und hier wieder exemplarisch mein Strom-Graph:


            Schaut etwas kompliziert aus, ist es aber nicht wirklich.

            Die einzelnen Zeilen sind Elemente die im Graph angezeigt werden sollen (ob Text, Linie oder Fläche spielt dabei keine Rolle).

            Die 1. Zeile sagt z.B. dass ich den aktuelle Wert von Tagstrom mit dem Type "LINE1" Graphen will, in der Farbe rot.
            Die 2. Zeile sagt genau das gleiche nur mit Fläche und einer Transparenz von 40%. Schaut einfach besser aus, wenn oben eine Linie als Abschluss ist.

            3,4 und 5 sind die Beschreibungstexte die den aktuellen, Mittelwert und Maximalwert von Tagstrom darstellen (die Texte am unteren Ende des Graphs).

            Die Zeilen wiederholen sich dann für die jeweiligen anderen Werte.

            Aussehen tut das dann folgendermaßen:








          Lg, Flo
          Angehängte Dateien

          Kommentar


            #6
            Hallo Flo,

            danke für Deine TOLLE Anleitung.

            Ich habe es jetzt nach einem Monat geschafft Cacti auf meiner neuen Synology zum Laufen zu bringen!
            Jetzt möchte ich als erstes "Projekt" meine "aktuellen/gesamten Stromverbrauch" monitoren und aufzeichnen.

            Als Strommessgerät verwende ich einen Hager TE360, mit zwei GA's einmal Augenblickliche Leistung (W) - Wert 4Bytes und einmal "Gesamtzähler Wirkenergie" - Wert 4Bytes

            Wenn ich jetzt laut Deiner Anleitung die beiden Scripts in das Cacti Verzeichnis kopieren und zum Testen starte, bekomme ich folgende Meldung:
            SYNOLOGY2> /volume1/web/cacti/scripts/knx32bituint.sh 7/3/51
            /volume1/web/cacti/scripts/knx32bituint.sh: line 1: groupreadresponse: not found
            wobei 7/3/51 die Adresse der GA ist.
            Der Hager steht nicht auf zyklisch senden, sondern auf "Objektabfrage", das sollte ja passen.

            Vielleicht blöde Frage, aber wie stellt Cacti die Verbindung zu GA her?
            HS3, Russound, iPhone

            Kommentar


              #7
              Servus,

              groupreadresponse ist teil des eibd paketes afaik. Ist eibd auf deiner SYNOLOGY installiert ? Wenn ja, dann ist groupreadresponse ws. nicht in einem standard-directory installiert.

              Dann musst du das im script entsprechend anpassen:

              Code:
              [pfad zu groupreadresponse]/groupreadresponse ip:localhost $1 |perl -ne 'if($_ =~ /Response from/) {@fields=split(/\s/,$_); print hex($fields[3].$fields[4].$fields[5].$fields[6]);}'
              zu deiner letzten Frage: die Verbindung erfolgt eben über eibd. eibd ist ein deamon der sich auf einen knx gateway hängt (usb, rs232 oder ethernet). Dann kann man eben von deiner SYNOLOGY auf den KNX Bus zugreifen.


              lg,

              flo

              Kommentar


                #8
                Habe ich mir fast gedacht, nein EIBD habe ich nicht installiert bzw. noch keine Erfahrung --> nächste Herausforderung,
                weis zufällig jemand ob es für die neuen Synology Boxen (211+) auch schon ein fertiges Packet gibt?
                HS3, Russound, iPhone

                Kommentar


                  #9
                  @ fmeister

                  habe eibd als Packet gefunden. Installation über IPKG hat auch super geklappt.

                  jetzt bekomme ich beim Aufruf von "groupreadresponse" bzw. " /volume1/web/cacti/scripts/knx32bituint.sh " keine Fehlermeldung mehr, jedoch auch keine Rückantwort, wobei mir nicht klar ist wie die Abfrage zum IP Gateway kommt. Wo bzw. bei welchem File hat die die EIBD Verbindngseinstellungen eingetragen?
                  Die Syntax von groupreadresponse lautet ja:
                  usage: groupreadresponse url eibaddr:
                  HS3, Russound, iPhone

                  Kommentar


                    #10
                    bei dir muss eibd laufen. die eibd userspace programme wie:

                    groupreadresponse
                    groupwrite

                    usw.

                    verwenden eibd zum Zugriff auf den KNX Bus.

                    Damit eibd überhaupt auf den bus zugreifen kann, muss man eibd als parameter die zu verwendende Schnittstelle mitgeben (usb -> welches device, ethernet -> welche ip)

                    die Parameter von eibd sind von device zu device und verwendeter Zugriffsart unterschiedlich. Die Boardsuche hilft sicher weiter.

                    Die Syntax ist leider ein bisschen unverständlich:

                    usage: groupreadresponse url eibaddr:

                    die url bezeichnet die URL des eibd daemons (muss nicht zwangsläufig auf dem gleichen Rechner laufen) - im normalfall "ip:localhost"

                    eibaddr ist logischerweise die KNX Grupptenadresse im Format X/Y/Z

                    lg,

                    Flo

                    Kommentar


                      #11
                      @fmeister

                      so Grundinstallation fertig:
                      eibd und cacti läuft!
                      bekomme auch beim händischen Start Deines knx32bituint.sh Scriptes den aktellen Wert des Stromzählers zurück.
                      Nur bei der Auswertung in cacti bekomme ich keine Warte bzw. keinen Grafen.
                      Habe laut Anleitung von Dir die Überwachung eingerichtet (siehe Screenshot)
                      Habe keine Ahnung mehr, wo ich noch schauen könnte!
                      Gibt es eine Möglichkeit in Cacti die Datenerfassung zu testen bzw. Zwischenschritte zu visualisieren, damit man kontrollieren kann bzw. überprüfen kann, wo der Fehler liegen könnte?
                      Angehängte Dateien
                      HS3, Russound, iPhone

                      Kommentar


                        #12
                        hi,

                        ja natürlich. Am besten du schraubst in den cacti-optionen den log-level hoch. Anschliessend kannst du im logfile nachsehen was genau passiert.

                        Dort müsstest du dann sehen, dass z.B. knx32bituint.sh aufgerufen wird, und welchen Wert zurückkommt.

                        du kannst mir auch dein log schicken und ich sehs mir an.

                        lg, flo

                        Kommentar


                          #13
                          Guten Morgen,

                          danke für diesen informative Thread, besonders an fmeister.
                          Ich habe ein sehr sehr ähliches setup die letzten Tage realisiert, ebenfalls
                          mit einem PI. Im wesentlichen komme ich damit gut klar, nur bei Scripts für den Poller welche mehr als einen Output-Wert zurückgeben hapert es noch. Scheinbar kommen die in cacti an, aber im Graph plotten funktioniert nicht. Werde mir das noch genauer ansehen.

                          Ich habe aber eine konkrete Frage:
                          Wie macht ihr das mit den RRD-files (genauer: "Data Source Path" in cacti) ? Was mich interessiert: habt ihr für jeden Messwert (z.B. Gasverbrauch, WP-Strom, Wasserverbrauch, Temp Keller, ...) ein EIGENES RRD file ? Oder fasst ihr da zusammen ? Wenn ja wie und was muss ich beachten ?
                          Mir geht es hauptsächlich um eine "wohldosierte" Minimierung der Schreibzugriffe auf die SD-Karte. Ich habe derzeit cacti und den ganzen Unterbau auf der SD-Karte.

                          Danke für eure Hilfe.
                          Grüße, Stefan

                          Kommentar

                          Lädt...
                          X