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

  • JuMi2006
    antwortet
    Ich stehe mit dem SVN seit deren letzter Änderung auf Kriegsfuß . Am besten Du veröffentlichst es einfach hier, über die Suche lässt sich das im Zweifel schnell finden.
    Wer weiß wie sich der nächste Zähler aus der Manufaktur verhält .

    Einen Kommentar schreiben:


  • martinb07
    antwortet
    Ok, dann passt das soweit. Dann können die anderen Leseköpfe bestellt werden. ;-)

    Willst du die Änderungen als zweite Version, bzw. für den Pafal Zähler, ins SVN laden?

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Super, ich wollte gerade mal kurz antworten und das mit der Regex erwähnen, musste da auch erstmal nachsehen, das ist eben der Mist dass sich da keiner an die Norm hält.

    Das gleiche Problem ist dann eigentlich auch bei der Einheit, einfach die Bedingung rausnehmen und den Zählerstand als Counter setzen lassen.

    Gauge wäre für Spannung oder Stromwerte, diese gehen ja "hoch" und "runter". Würdest Du das für den Zählerstand nehmen hättest Du lediglich eine diagonale Linie, Dich interessieren aber sicherlich eher die Verbräuche pro Stunde oder Tag. Das rechnet Dir dann alles das rrdtool aus.

    Einen Kommentar schreiben:


  • martinb07
    antwortet
    Das sieht nur auf den Screenshot so aus. Die Zeile nach 300 ist da irgendwie reingerutscht. Das ist normal nicht da.

    Sieht die Ausgabe bei dir ähnlich aus?

    Edit:
    Yeepee .... es funktioniert nach 2 Stunden Fehlersuche gestern Abend/Nacht habe ich es doch noch zum laufen bekommen. Schuld daran war die Reg.Expression. Meine Zeile mit der Obis Nummer und dem Zählerstand ist anders aufgebaut. Außerdem liefert mir mein Zähler keine Einheit, nur den blanken Wert.
    Anbei mein fertiges Script.

    Eine Frage habe ich noch. Da ich keine $unit habe, fällt bei mir diese Abfrage weg:
    Code:
    if ($unit =~ /\Qh\E/)
    { 
       &rrd_counter ($obis->{name},$value)
    }
       else
    {
       &rrd_gauge ($obis->{name},$value)
    }
    Was ist der unterschied zwischen den beiden rrd_counter und rrd_gauge. Ich habe bei mir nur das rrd_counter drin gelassen
    Angehängte Dateien

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Warum ist Deine Ausgabe zweigeteilt? Die config sieht jedenfalls richtig aus.

    Einen Kommentar schreiben:


  • martinb07
    antwortet
    Du, kein Ding.

    Mein Konfiguration:
    Code:
    ### KONFIGURATION ###
    my $eib_url = "local:/tmp/eib";     #for local eibd "local:/tmp/eib" for eibd in LAN: "ip:192.168.2.220:6720"
    my $device = "/dev/ttyUSB0";        #Port ttyUSB0
    my $rrdpath = "/home/kWh/rrd";      #Pfad fuer RRDs
    my $counterid = "yS_eHZ";               #Grundname fuer RRDs
    my $baudrate = "300";              #Baudrate fuer Zaehlerauslesung
    my @channels;                       #Obis-Zahl => Gruppenadresse
    push @channels, {name => "1.8.0", ga =>"6/7/9", dpt => 14 };    #Zählerstand gesamt
    
    my @countermodes = (5,15,60,1440);    #Aufloesungen fuer COUNTER RRDs in Minuten (1440 = Tagesverbrauch)
    my $debug = 1;
    Die GA ist im WG auch angelegt, hab ich auch nochmal kontrolliert.

    Anbei mein Script.
    Angehängte Dateien

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Dazu mal den config Teil des Plugins posten, sonst bin ich ahnungslos. Ich kann das aber eh erst später ansehen.

    Einen Kommentar schreiben:


  • martinb07
    antwortet
    Baudrate ist fest auf 300 eingestellt.
    Hinter das select komme ich. Es erscheinen die ganzen Daten des Zählers, wie Obis Nummer und aktueller Zählerstand.

    Der Buchstabe in der letzten Zeile (hier D) ändert sich bei jeder abfrage.

    Es sollte doch als nächstes die versendeten Daten mit GA erscheinen, und da liegt irgendwo der Hund begraben.
    Bis zur Zeile ###Auswertung### komme ich.

    Edit:
    Das Script läuft nicht in diese if-Schleife:
    Code:
    if ($_ =~ /\Q$obiskey\E/)
    Habe davor zwei Debug-Ausgaben platziert und eine danach. Die danach wird nicht ausgegeben.
    Angehängte Dateien

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Probiere mal die baudrate fest auf 300 zu konfigurieren und nicht auf auto.

    Eventuell select auch mal komplett auskommentieren.

    Einen Kommentar schreiben:


  • martinb07
    antwortet
    Diese Werte verzögern die Abfrage? 1 = 1s?
    Kann ich durch die Verzögerung beim init.pl auf die Stelle im iec..-Script schließen?

    Danke für die Tipps

    Edit:
    So, nach
    Code:
    my $id = qx(echo '\x2f\x3f\x21\x0d\x0a' | socat -T [COLOR=RoyalBlue][B]2[/B][/COLOR] - $device,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0);
    sehe eich zumindest die ID.
    Nach der Angabe der Baudrate ist allerdings wieder schluss, egal was ich bei
    Code:
    select(undef, undef, undef, [COLOR=RoyalBlue][B]x[/B][/COLOR]);
    als x eingebe. Selbst nach 15 gehts nicht weiter.

    Auch Änderungen von x und y bei
    Code:
    my @buffer = qx(echo $ack | socat -T [COLOR=RoyalBlue][B]x[/B][/COLOR] - $device,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0; socat -T [B][COLOR=RoyalBlue]y[/COLOR][/B] - $device,raw,echo=0,b$baudrate,parenb=1,parodd=0,cs7,cstopb=0);
    bringt keine Abhilfe.

    Edit 2:
    Was muss eigentlich bei "$ack" rauskommen?

    Edit 3:
    Komsich, jetzt gehts, zumindest stimmt die Ausgabe.

    Edit 4:
    Es wird aber noch immer nichts auf die GA gesendet. :-(

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Du kannst mal mit folgenden Zeilen/Werten spielen:

    Code:
    my $id = qx(echo '\x2f\x3f\x21\x0d\x0a' | socat -T [COLOR="Red"][B]1[/B][/COLOR] - $device,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0);
    if ($debug==1){print ("Received:","\n")};
    Code:
    select(undef, undef, undef, [COLOR="Red"][B]1[/B][/COLOR]);
    Beim scoat weiß ich nicht ob er 1.5 akzeptiert, select macht das jedenfalls. Vielleicht findest Du so raus an welcher Stelle das script auf die Nase fällt.

    Einen Kommentar schreiben:


  • martinb07
    antwortet
    Cool, damit geht es.

    Ich hoffe das kann man in deinem Script anpassen.

    Dank dir schon für deine Tolle Hilfe.

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Probiere mal das init.pl aus diesem Beitrag aus, ich vermute ein simples timing-Problem zwischen Senden, Empfangen und ACK.

    https://knx-user-forum.de/225383-post148.html

    Einen Kommentar schreiben:


  • martinb07
    antwortet
    Mit den "richtigen Daten" habe ich gemeint, dass der Zähler seine Kennung und den Zählerstand zurückgesendet hat.

    Ich habe mit Prompt jetzt mal zwei Fenster aufgemacht:
    Fenster 1:
    # echo $'\x2f\x3f\x21\x0d' > /dev/ttyUSB0
    #

    Fenster 2:
    # cat /dev/ttyUSB0
    /PAF5EC3gr00006

    So sollte es ja auch kommen. Zumindest habe ich das in nem Beitrag auf gmane.org gelesen.

    Edit:
    Fenster 1:
    Code:
    root@wiregate1246:~# echo $'\x2f\x3f\x21\x0d' > /dev/ttyUSB0
    // wait for 2 seconds
    root@wiregate1246:~# echo $'\x06\x30\x30\x30\x0d' > /dev/ttyUSB0
    Fenster 2:
    Code:
    root@wiregate1246:~# cat /dev/ttyUSB0
    /PAF5EC3gr00006
    0.0.0(71722515)
    0.0.1(PAF)
    F.F(00)
    0.2.0(1.27)
    1.8.0*00(000375.54)
    C.2.1(000000000000)(                                                )
    0.2.2(:::::G11)!
    E

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Aber auch keine Antwort ... funktioniert denn die Abfrage über cat /dev/.... im jetzigen Moment ?
    Was meinst Du mit "richtigen Daten" im Post #470 ? Was kommt da zurück?

    Einen Kommentar schreiben:

Lädt...
X