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

  • lio123
    antwortet
    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

    Einen Kommentar schreiben:


  • ctr
    antwortet
    Die habe ich aus dem IP-SymCon Forum, link zum Thread siehe Kommentarzeile im Plugin

    Einen Kommentar schreiben:


  • lio123
    antwortet
    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

    Einen Kommentar schreiben:


  • ctr
    antwortet
    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...

    Einen Kommentar schreiben:


  • lio123
    antwortet
    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

    Einen Kommentar schreiben:


  • frischling
    antwortet
    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ß

    Einen Kommentar schreiben:


  • lio123
    antwortet
    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

    Einen Kommentar schreiben:


  • ctr
    antwortet
    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 ;-)

    Einen Kommentar schreiben:


  • makki
    antwortet
    @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

    Einen Kommentar schreiben:


  • frischling
    antwortet
    Hi crt,

    das ist ja super, freu mich schon drauf.

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • frischling
    antwortet
    Hallo zusammen,

    weis jemand ob das Plugin von crt funktioniert??

    Wenn ja, wann wird das veröffentlicht??

    Gruß

    Einen Kommentar schreiben:


  • lio123
    antwortet
    Fritz, danke für die Links.

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

    Grüße,
    Lio

    Einen Kommentar schreiben:


  • NetFritz
    antwortet
    Hallo
    @greentux
    Tja, Bausatz kaufen geht leider nicht
    Schau mal hier.
    volkszaehler.org - wiki - Controller


    Gruß NetFritz

    Einen Kommentar schreiben:


  • lio123
    antwortet
    Hallo,

    hab mir gerade ein paar teile bestellt und versuche damit die Schnittstelle anzuzapfen.

    EnBW kommt aber nicht in die Gänge um mir den ehz in EDL21 zu wechseln.
    Kann doch nicht sein.

    @ctr, bist Du mit dem PERL-Script schon weiter gekommen?


    Grüße,
    Lio

    Einen Kommentar schreiben:

Lädt...
X