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

    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
    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    Kommentar


      Cool, damit geht es.

      Ich hoffe das kann man in deinem Script anpassen.

      Dank dir schon für deine Tolle Hilfe.
      ---
      Martin

      Kommentar


        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.
        Umgezogen? Ja! ... Fertig? Nein!
        Baustelle 2.0 !

        Kommentar


          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. :-(
          ---
          Martin

          Kommentar


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

            Eventuell select auch mal komplett auskommentieren.
            Umgezogen? Ja! ... Fertig? Nein!
            Baustelle 2.0 !

            Kommentar


              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
              ---
              Martin

              Kommentar


                Dazu mal den config Teil des Plugins posten, sonst bin ich ahnungslos. Ich kann das aber eh erst später ansehen.
                Umgezogen? Ja! ... Fertig? Nein!
                Baustelle 2.0 !

                Kommentar


                  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
                  ---
                  Martin

                  Kommentar


                    Warum ist Deine Ausgabe zweigeteilt? Die config sieht jedenfalls richtig aus.
                    Umgezogen? Ja! ... Fertig? Nein!
                    Baustelle 2.0 !

                    Kommentar


                      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
                      ---
                      Martin

                      Kommentar


                        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.
                        Umgezogen? Ja! ... Fertig? Nein!
                        Baustelle 2.0 !

                        Kommentar


                          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?
                          ---
                          Martin

                          Kommentar


                            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 .
                            Umgezogen? Ja! ... Fertig? Nein!
                            Baustelle 2.0 !

                            Kommentar


                              Jetzt habe ich aber noch eine Frage bzw. ein Problem. Anscheinend funktioniert mein Cronjob nicht.
                              Diesen gebe ich doch einfach unter
                              Code:
                              crontab -e
                              ein

                              Bei mir lautet er
                              Code:
                              */5 * * * * perl /etc/wiregate/plugin/iec62056-meter.pl
                              Somit sollte alle fünf Minuten das Script ausgeführt werden. In der eib.log tauchen nur die Einträge durch das manuelle ausführen auf.

                              Edit:
                              Du schreibst hier, dass man über das Webmin den Cron anstoßen kann und die Ausgabe dazu erhält. Ich finde dazu leider nichts.
                              In welchem Logfile stehen denn die Meldungen von Cron?

                              Im syslog steht:
                              Code:
                              .... 'socat1' process is not running
                              .... 'socat1' trying to restart
                              .... 'socat1'start: /sbin/start-stop-daemon
                              .... 'socat1' failed to start
                              Und das in Dauerschleife.
                              ---
                              Martin

                              Kommentar


                                Wie wär's denn, die Funktion über den Logikprozessor anzustoßen? Der hat nette Funktionen zur Zeitsteuerung. Klar, das bringt ein bisschen Overhead, aber so dramatisch sollte das nicht sein...
                                Baubeginn: 1676d. Sanierungsbeginn: 6/2010. Einzug: 9/2014. Fertig? Nie ;-)

                                Kommentar

                                Lädt...
                                X