Ankündigung

Einklappen
Keine Ankündigung bisher.

Zählerabfrage als Wiregate Plugin

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #16
    Fritz, danke für die Links.

    EnBW wird schon nächste Woche bei mir die Zähler tauschen.

    Grüße,
    Lio

    Kommentar


      #17
      Hallo zusammen,

      weis jemand ob das Plugin von crt funktioniert??

      Wenn ja, wann wird das veröffentlicht??

      Gruß

      Kommentar


        #18
        Es funktioniert und ich werde es die nächsten Tage bei SF hochladen, sorry dass es solange dauert...

        Kommentar


          #19
          Hi crt,

          das ist ja super, freu mich schon drauf.

          Kommentar


            #20
            @ctr: Wem das mit SF/svn bauchweh macht (das ist wiklich nicht jedermans Sache zum Einstieg!)
            -> da reicht ein Hinweis, dann schieb ich das dahin (es sollte nur eindeutig geklärt sein, wer es zu welchem Zeitpunkt dann final pflegt..)

            Makki
            EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
            -> Bitte KEINE PNs!

            Kommentar


              #21
              Ich habe schon einen Account, habe in der CV auch schon ein paar Commits gemacht, geht also.
              Ich will mir nur nochmal die Debug-Ausgaben angucken bevor ich das auf die Menschheit loslasse und dafür hatte ich bisher keine Zeit ;-)

              Kommentar


                #22
                ganz ehrlich, ich hätte sogar noch eine Woche länger zeit, wenn das script dann gut kommentiert ist.

                Da ich ausserhalb von Perl das ganze schon besser vertehe, erhoffe ich mir durch das Script tiefer in PERL einsteigen zu können und somit die Türen in andere Themen öffne.

                Boa, wahsinns Erwartungshaltung-aber ich glaub das wird schon recht.

                Grüße,
                Lio

                Kommentar


                  #23
                  Hi CTR,

                  wollte kurz mal nachhacken wie weit Du mit dem Debug Ausgaben gekommen bist.

                  Weist DU schon ungefähr, wenn Du dein Plugin auf die Menschheit loslassen wirst?

                  Gruß

                  Kommentar


                    #24
                    Zitat von ctr Beitrag anzeigen
                    Es funktioniert und ich werde es die nächsten Tage bei SF hochladen, sorry dass es solange dauert...

                    Hallo CTR,

                    habe nun die Köpfe hier liegen.
                    Könntest Du das Plugin bereitstellen? gern auch wenn es noch nicht ganz fertig ist. Könnte dann dabei gern behilflich sein.

                    Dank eund Grüße,
                    Lio

                    Kommentar


                      #25
                      Ja sorry total vergessen. Mein erstes WG-Plugin "from scratch", quick and dirty...

                      Code:
                      # Monitoring a eHz Reader (SML)
                      # v0.1
                      # License: GPL v2
                      # basierend auf Untersuchungen hier: [URL="http://www.ip-symcon.de/forum/f23/stromzaehler-geht-rente-11117/"]Mein Stromzähler geht in Rente!! Und nun? - IP-Symcon Community Forum[/URL]
                      
                      use Device::SerialPort;
                      use strict;
                      
                      my @reader;
                      my @GA_MeterReading;
                      my @GA_ActivePower;
                      $reader[0] = Device::SerialPort->new("/dev/ttyUSB-1-4.7"); # USB Device erster Reader/Zähler
                      $reader[1] = Device::SerialPort->new("/dev/ttyUSB-1-4.5"); # USB Device zweiter Reader/Zähler
                      #$reader[2] = Device::SerialPort->new("/dev/ttyUSB-1-4.6"); # USB Device dritter Reader/Zähler
                      $GA_MeterReading[0] = "0/0/1"; # GA für Wert (Zählerstand) erster Zähler
                      $GA_MeterReading[1] = "0/0/2"; # GA für Wert (Zählerstand) zweiter Zähler
                      #$GA_MeterReading[2] = "0/0/3"; # GA für Wert (Zählerstand) dritter Zähler
                      $GA_ActivePower[0] = "0/0/4"; # GA für Wert (Zählerstand) erster Zähler
                      $GA_ActivePower[1] = "0/0/5"; # GA für Wert (Zählerstand) zweiter Zähler
                      #$GA_ActivePower[2] = "0/0/6"; # GA für Wert (Zählerstand) dritter Zähler
                      
                      my $abs_ls = "ff628201621e52ff69"; # Hex-Wert um den Beginn des abolsuten Standes zu kennzeichnen
                      my $abs_rs = "01770700006001ff";# Hex-Wert um das Ende des abolsuten Standes zu kennzeichnen
                      my $cur_ls = "ff628201621b52fc55";# Hex-Wert um den Beginn des derzeitigen Verbrauchs zu kennzeichnen
                      my $cur_rs = "01010163";# Hex-Wert um das Ende des derzeitigen Verbrauchs zu kennzeichnen
                      my $glob_timeout=20; # Timeout, vermutlich zu hoch für WG
                      
                      sub readSML
                      {
                          my $port = $_[0];
                          my $ls = $_[1];
                          my $rs = $_[2];
                          $port->databits(8);
                          $port->baudrate(9600);
                          $port->parity("none");
                          $port->stopbits(1);
                          $port->purge_all();
                          $port->rts_active(0);
                          $port->dtr_active(1);
                          $port->read_char_time(0);     # don't wait for each character
                          $port->read_const_time(1000); # 1 second per unfulfilled "read" call
                          my $abs=0;
                          my $chars=0;
                          my $buffer="";
                          my $timeout=$glob_timeout;
                      
                      
                          while ($timeout>0) {
                              my ($count,$saw)=$port->read(1); # will read _up to_ 255 chars
                              if ($count > 0) {
                                      $chars+=$count;
                                      $buffer.=sprintf("%02x",unpack("C",$saw));
                                      $buffer =~ /$ls(.*?)$rs/;
                                      $abs = hex($1)/10000;
                                      if ($abs != 0) {
                                              return $abs;
                                      }
                              }
                              else {
                                      $timeout--;
                              }
                           }
                      
                           if ($timeout==0) {
                              die "Waited $glob_timeout seconds and got no SML message\n";
                           }
                      }
                      
                      $plugin_info{$plugname.'_cycle'} = 60;
                      
                      for my $i (0 .. $#reader) {
                      
                         my $MeterReading = -1;
                         my $ActivePower = -1;
                         $MeterReading = &readSML($reader[$i],$abs_ls,$abs_rs);
                         $ActivePower  = &readSML($reader[$i],$cur_ls,$cur_rs);
                      
                         if ($MeterReading != -1) {
                            update_rrd("MeterReading_$i","",$MeterReading);
                            if ($GA_MeterReading[$i]) {
                               knx_write( $GA_MeterReading[0] , $MeterReading, 9 );
                               }
                         }
                      
                         if ($ActivePower != -1) {
                            update_rrd("ActivePower_$i","",$ActivePower);
                            if ($GA_ActivePower[$i]) {
                               knx_write( $GA_ActivePower[0] , $ActivePower, 9 );
                               }
                         }
                      }
                      
                      return 0;
                      Es wird ein RRD mit den Werten erzeugt und (wenn definiert) der Momentanverbrauch und absolute Zählerstand auf den Bus gesendet.

                      Unschön: das Script macht nur ein "Listen" auf dem serial, d.h. der eHZ-SML-Zähler muß von sich aus periodisch Daten senden. Das machen sie normalweise auch, aber nur wenn tatsächlich Last anliegt. Deswegen habe ich meinen dritten Zähler (Einspeisezähler-PV) derzeit noch nicht dran, der läuft ständig (mind. nachts) in ein Timeout...

                      Kommentar


                        #26
                        sieht doch gut aus?
                        konnte auch vieles interpretiren.

                        Könntest dazu noch kurz sagen, woher Du die Werte nimmst, also welche Referenz?
                        my $abs_ls = "ff628201621e52ff69"; # Hex-Wert um den Beginn des abolsuten Standes zu kennzeichnen
                        my $abs_rs = "01770700006001ff";# Hex-Wert um das Ende des abolsuten Standes zu kennzeichnen

                        vermute, dass an dieser Stelle auch z.B. die Spannung ausgelesen werden können.

                        Müsste das dann auch für den Zweirichtungszähler umbauen.

                        Danke und Grüße,
                        Lio

                        Kommentar


                          #27
                          Die habe ich aus dem IP-SymCon Forum, link zum Thread siehe Kommentarzeile im Plugin

                          Kommentar


                            #28
                            ja da hab' ich schon geguckt und nun nochmal, aber kein Hinweis gefunden.

                            vermute dass damit das Ergebnis der Obis Zahl (also der Wert) ausgeklammert wird?!

                            Aber ob das so ist, bzw wie man auf die Hex kommt ist mir nicht klar.

                            Grüße,
                            Lio

                            Kommentar


                              #29
                              Hab das Plugin gestern mal eingebunden.
                              Das erste mal, dass ich sowas gemacht habe.
                              Ich habe es mit meinen Parametern abgeändert, also erstmal
                              auf einen Zähler reduziert und den USB-Wandlername eingegeben, der mir unter Socketverbindung angezeigt wurde.

                              Es kam der DEBUG-Fehler in der Zeile:

                              $port->databits(8);

                              'Die habe ich dann mal rausgelöscht um zu sehen wie's weiter geht und die nächste Zeile

                              $port->baudrate(9600);

                              wurde dann als Fehler angegeben.

                              Muss also irgendwie mit der Schnittstelle zusmmenhängen?!?!
                              Muss ich da eine Socketverbindung anlegen?
                              Wenn ich die Hilfe richtig verstanden habe, dient die Socketverbindung dazu, die Schnittstelle auf verschiedene Weisen (TCP, UDP,...) weiterzuleiten....

                              Kann mir da jemand auf die Sprünge helfen?

                              Danke und Grüeß,
                              Lio

                              Kommentar


                                #30
                                Was für einen serial-to-rs232 adapter benutzt Du? Evtl gibts Probleme mit dem setzen der Übertragungsrate, meine da mal etwas gehört zu haben...

                                Um zu sehen ob überhaupt etwas ankommt könntest Du ja mal mit einem "cat" auf das USB-Device horchen (Achtung Bninäroutput, den Terminal zerlegt es eventuell) oder auch mit minicom (ohne Modeminit-Strings!)

                                Kommentar

                                Lädt...
                                X