Ankündigung

Einklappen
Keine Ankündigung bisher.

Installation der Software von volkszaehler.org möglich?

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

    #46
    Zitat von JuMi2006 Beitrag anzeigen
    @makki, wenn Du mal auf der 403 gucken willst warum cronjob streikt dann mach ruhig
    hmm, sollte eigentlich schon gehen, hab da jetzt auch nicht alles im Kopf aber ich glaube aufrufe in der crontab müssen mit absolutem Pfad sein;
    also /usb/bin/perl - nicht perl
    und einfacher ist chmod a+x /var/tmp/*.pl und dann ohne perl ... solange in der ersten Zeile "shebang" (heisst so)
    #!/usr/bin/perl
    steht.
    und gehören würde sowas eigentlich unter /usr/local/bin/ (das ist aber kein Fehlergrund)

    also chmod a+x und dann mit absolutem Pfad aufrufen; und wenn wir schon beim pedantentum sind: alle 3 Minuten geht auch mit
    */3 * * * * ...

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

    Kommentar


      #47
      Ich kriegs nicht hin makki.
      Ich finde aber auch keinen Fehler. Hab jetzt schon ein runmeter.sh erstellt und das via cron aufgerufen (ja ist von hinten durch die Brust, aber erst mal egal) aber auch da wird der HZ nicht bearbeitet. Hab auch das parsing mal abgespeckt und nur nach einem Wert gesucht.
      Die Befehle in der Konsole laufen und auch der WP Zähler.

      runmeter.sh
      Code:
      #!/bin/bash
      perl /var/tmp/Zaehler_HZ.pl
      perl /var/tmp/Zaehler_WP.pl
      Konsole -> . /var/tmp/runmeter.sh -> läuft
      Konsole -> perl /var/tmp/Zaehler_WP.pl -> läuft
      Konsole -> perl /var/tmp/Zaehler_HZ.pl -> läuft

      cron -> perl /var/tmp/Zaehler_WP.pl -> läuft
      cron -> perl /var/tmp/Zaehler_HZ.pl -> läuft nicht
      cron -> . /var/tmp/runmeter.sh -> nur Zaehler_WP wird ausgeführt

      cron -> /usr/bin/perl /var/tmp/Zaehler_WP.pl -> läuft
      cron -> /usr/bin/perl /var/tmp/Zaehler_HZ.pl -> läuft nicht

      Gruß Mirko
      Umgezogen? Ja! ... Fertig? Nein!
      Baustelle 2.0 !

      Kommentar


        #48
        Jumi, es wäre noch schön, wenn die Baudratenumstellung von irgendwas abhängt. Mein Zähler kann sowas zum Beispiel nicht. Der bleibt bei 300 Bd.
        Derzeit zwischen Kistenauspacken und Garten anlegen.
        Baublog im Profil.

        Kommentar


          #49
          Hat jemand ne Idee wo ich noch nach dem Fehler mit crontab suchen kann ???
          Vielleicht kann ja mal jemand das angehängte Perl script bei sich testen ?
          In der Konsole ist alles super.

          @greentux:
          Dafür ist $speed, aber noch nicht implementiert. Das Einbinden der Variablen ist mir da noch nicht gelungen.

          Zum Testen kannst du einfach:

          die b4800 durch b300 und

          '\x06\x30\x34\x30\x0d\x0a' durch '\x06\x30\x30\x30\x0d\x0a' ersetzen.

          Hast Du mal mit http://www.meter-test-equipment.com/...st1107pack.exe geguckt? Da zeigt er Die Auslesegeschwindigkeit an. Ich denke das 4800 Baud drin sein müssten.

          Um das jetzt weiter auszubauen brauch ich das Script in crontab lauffähig, oder eben gleich den Sprung ins WG-Plugin.

          Hier mal meine beiden Scripte für Zaehler_WP und Zaehler_HZ.

          Gruß Mirko
          Angehängte Dateien
          Umgezogen? Ja! ... Fertig? Nein!
          Baustelle 2.0 !

          Kommentar


            #50
            Ich teste dein Skript heute Abend (ich hoffe ich komme dazu).

            Aber grundsätzlich, würde ich da kein Plugin von machen, weil es bei manchen Usern schon zu Zeitproblem kommen kann, wenn der Zähler kein 4800 oder 9600 Baud unterstützt...

            Kommentar


              #51
              So ich hab den Fehler etwas einkreisen können.
              Wenn ich die Abfrage auf 300 Baud lasse läuft das Script auch mit cronjob, aber das ist eigentlich nicht das Ziel.
              Ich hab jetzt aber auch nicht den leisesten Schimmer warum cronjob das nicht packt aber die Konsole schon und warum es auf einem geht und dem anderen nicht.
              Umgezogen? Ja! ... Fertig? Nein!
              Baustelle 2.0 !

              Kommentar


                #52
                Das kann nur an verschiedenen Environmentvariablen liegen...
                Ich hoffe mal wieder etwas Zeit finden zu können.
                Derzeit zwischen Kistenauspacken und Garten anlegen.
                Baublog im Profil.

                Kommentar


                  #53
                  Zitat von JuMi2006 Beitrag anzeigen
                  Ich hab jetzt aber auch nicht den leisesten Schimmer warum cronjob das nicht packt aber die Konsole schon und warum es auf einem geht und dem anderen nicht.
                  Ich habe heute deine beiden Skripts getestet und beide funktionieren bei mir mit 9600 Baud und auch über den cronjob.
                  Das habe ich zum Testen gemacht:

                  Skripte hier gespeichert:
                  Code:
                  /opt/zaehler_wp.pl
                  /opt/zaehler_hz.pl
                  Skripte angepasst:
                  • Windows Zeilenumbrüche entfernt (Zeilenumbruch mit mcedit in der ersten Zeile entfernt, gespeichert und das Script mit nano aufgerufen und wieder gespeichert)
                  • Device angepasst: /dev/ttyUSB0 bzw. /dev/ttyUSB1
                  • Hochsetzen auf 9600 Baud (ASCII-Hex-Code: 35) geändert

                  crontab -e aufgerufen und folgendes eingetragen:
                  Code:
                  */2 * * * * /opt/zaehler_wp.pl
                  */2 * * * * /opt/zaehler_hz.pl
                  (Alle zwei Minuten werden die Zähler ausgelesen)

                  Edit: Hast du vor die Auswertung später zu erweitern? Bei mir wären z.B. folgende Werte interessant:
                  1.7.0 - Momentane Leistung
                  1.8.0 - Summe der Zählerstände
                  1.8.1 - Tag-Tarif Zählerstand
                  1.8.2 - Nacht-Tarif Zählerstand

                  Kommentar


                    #54
                    Trag einfach die Werte ein und vergib dazu die Gruppenadressen > %channels
                    Das Script ist dynamisch und erkennt ja den Unterschied zw. Counter und Gauge und sollte auch die RRDs entsprechend füllen und erstellen.

                    Ich teste das morgen nochmal bei mir. Momentan bin ich bei 3 Minuten, aber der Zähler mit 300 Baud ist zum Glück recht kurz, dennoch will ich wissen warum das nicht geht.
                    Umgezogen? Ja! ... Fertig? Nein!
                    Baustelle 2.0 !

                    Kommentar


                      #55
                      Zitat von panzaeron Beitrag anzeigen
                      Windows Zeilenumbrüche entfernt (Zeilenumbruch mit mcedit in der ersten Zeile entfernt, gespeichert und das Script mit nano aufgerufen und wieder gespeichert)
                      Danke für den kleinen Trick.

                      Zitat von panzaeron Beitrag anzeigen
                      Hochsetzen auf 9600 Baud (ASCII-Hex-Code: 35) geändert
                      Das wollte ich auch noch als Variable einbauen, scheitere aber immer wieder an der Syntax. Ich bekomme die Geschwindigkeit (30/31/32/33/34/35) einfach nicht eingebaut. Perl meckert dann dass irgendwas keine HEX-Werte sind. Vielleicht muss ich einfach den ganzen String als Variable verwenden, dann braucht man oben nur noch die Baudrate einstellen und aus einem hash werden dann je nach Geschwindigkeitseinstellung die Variaben gesetzt.

                      Zitat von panzaeron Beitrag anzeigen
                      crontab -e aufgerufen und folgendes eingetragen:
                      Code:
                      */2 * * * * /opt/zaehler_wp.pl
                      */2 * * * * /opt/zaehler_hz.pl
                      Hat alles nix geholfen, der Fehler bleibt. Wenn ich den cronjob manuell über das webmin starte dann kommt als Ausgabe lediglich die Zaehlerkennung. Beim normalen Scriptaufruf in der Konsole wird diese jedoch eigentlich nicht ausgegeben.

                      Zitat von panzaeron Beitrag anzeigen
                      Hast du vor die Auswertung später zu erweitern? Bei mir wären z.B. folgende Werte interessant:
                      1.7.0 - Momentane Leistung
                      1.8.0 - Summe der Zählerstände
                      1.8.1 - Tag-Tarif Zählerstand
                      1.8.2 - Nacht-Tarif Zählerstand
                      Wie schon gestern Abend geschrieben, ich war schon auf dem Weg ins Bett, einfach folgendes ändern. Ich hab mal die anderen Werte kommentiert. Jeder Zähler gibt ja was anderes aus.

                      Code:
                      my %channels = (		#Obis-Zahl => Gruppenadresse
                      		"16.7"=>"12/1/2", #akt. Leistung
                      		"32.7"=>"12/1/3", #Spannung L1
                      		"52.7"=>"12/1/4", #Spannung L2
                      		"31.7"=>"12/1/5", #akt. Leistung L1
                      		"51.7"=>"12/1/6", #akt. Leistung L2
                      		"71.7"=>"12/1/7", #akt. Leistung L3
                      		"72.7"=>"12/1/8", #Spannung L3
                      		"1.7.0"=>"12/1/9", #Momentane Leistung
                      		"1.8.0"=>"12/1/10", #Summe der Zählerstände
                      		"1.8.1"=>"12/1/11", #Tag-Tarif Zählerstand
                      		"1.8.2"=>"12/1/12" #Nacht-Tarif Zählerstand
                      		);
                      Die GAs sind natürlich frei wählbar.

                      Meine sind final folgendermaßen aufgebaut:

                      6/1/x = Haushaltsstrom
                      6/2/x = Wärmepumpenzähler

                      6/x/0 = Gesamtzählerstand (Beide Zähler haben nur einen Tarif)
                      6/x/1 = aktuelle Leistung
                      6/x/x0 = aktuelle Leistung pro Phase (L1=10,L2=20,L3=30)
                      6/x/x1 = aktuelle Spannung pro Phase

                      So das mal als kurze Zusammenfassung. Die Geschwindigkeitseinstellung mache ich mal wenn wieder Muse da ist.
                      Hat sonst noch jemand einen Tip warum cronjob nicht will ?
                      Im Perl Script echo durch /bin/echo sowie socat durch /usr/bin/socat ersetzten brachte auch keinen Erfolg.

                      Gruß Mirko
                      Umgezogen? Ja! ... Fertig? Nein!
                      Baustelle 2.0 !

                      Kommentar


                        #56
                        Baudrate hab ich hinbekommen. In der Konfiguration kann jetzt die Baudrate in Klartext (300/600/1200/2400/4800/9600) angegeben werden.

                        Code:
                        #!/usr/bin/perl
                        # Zaehlerabfrage fuer Zaehler nach Protokoll IEC 62056-21 / OBIS
                        # Ein Anfrage-Telegramm ist mit 300 Baud, 7 Bit, 1 Stoppbit
                        # und gerader Paritaet zu senden. Das ist der Initialmodus von Geraeten,
                        # die das Protokoll IEC 62056-21 implementieren.
                        # Ein Wechsel der Geschwindigkeit ist umgesetzt.
                        # Basis des Scripts von volkszaehler.org / Autor: Andreas Schulze & Bugfix: Eric Schanze
                        # DPT9 sub: makki / www.knx-user-forum.de
                        # Baudwechsel: panzaeron / www.knx-user-forum.de
                        # Erweiterung um RRD,KNX-Anbindung und gezielte Wertsuche auf Wiregate: 
                        # JuMi2006 / www.knx-user-forum.de
                        # Version: 0.1.5
                        # Datum: 02.06.2012
                        
                        use warnings;
                        use strict;
                        use RRDs;
                        
                        ### KONFIGURATION ###
                        my $device = "/dev/ttyUSB-1-4.4";	#Port
                        my $rrdpath = "/var/www/rrd";		#Pfad fuer RRDs
                        my $counterid = "HZ";			#Grundname fuer RRDs
                        my $baudrate = "9600";			#Baudrate fuer Zaehlerauslesung
                        my %channels = (			#Obis-Zahl => Gruppenadresse
                        		"16.7"=>"6/1/1",	#akt. Leistung
                        		"32.7"=>"6/1/11",	#Spannung L1
                        		"52.7"=>"6/1/21",	#Spannung L2
                        		"31.7"=>"6/1/10",	#Stromstaerke L1
                        		"51.7"=>"6/1/20",	#Stromstaerke L2
                        		"71.7"=>"6/1/30",	#Stromstarke L3
                        		"72.7"=>"6/1/32",	#Spannung L3
                        		"1.8.1"=>"6/1/0"	#Zaehlerstand gesamt
                        				);
                        my @countermodes = (5,15,60,1440);	#Aufloesungen fuer COUNTER RRDs in Minuten (1440 = Tagesverbrauch)
                        
                        ### ENDE KONFIGURATION ###
                        
                        my %speedrate = (			#Je nach Geschwindigkeit andere Befehel an Zaehler senden
                        		"300"=>"'\x06\x30\x30\x30\x0d\x0a'",
                        		"600"=>"'\x06\x30\x31\x30\x0d\x0a'",
                        		"1200"=>"'\x06\x30\x32\x30\x0d\x0a'",
                        		"2400"=>"'\x06\x30\x33\x30\x0d\x0a'",
                        		"4800"=>"'\x06\x30\x34\x30\x0d\x0a'",
                        		"9600"=>"'\x06\x30\x35\x30\x0d\x0a'"
                        		);
                        		
                        my $ack = $speedrate{$baudrate};
                        #print ($baudrate,"->",$ack);
                        
                        ### DATEN EMPFANGEN ###
                        my @buffer = qx(echo '\x2f\x3f\x21\x0d\x0a' | socat -T 1 - $device,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0; sleep 1; echo $ack | socat -T 1 - $device,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0; socat -T 1 - $device,raw,echo=0,b$baudrate,parenb=1,parodd=0,cs7,cstopb=0);
                        #print @buffer;
                        
                        foreach (@buffer)
                        {
                        	foreach my $obis(%channels)
                        	{
                        	my $obiskey = $obis."\(";
                        	if ($_ =~ /\Q$obiskey\E/)
                        	{
                        	$_  =~ m/[^(]+\(([^*]+)\*([^)]+)/;
                        	my $value = $1;
                        	my $unit = $2;
                        	my $ga = $channels{$obis};
                        	print ($obis,"\n");
                        	print ($value,"\n");
                        	print ($unit,"\n");
                        	print ($ga,"\n");
                        	if ($unit =~ /\Qh\E/)
                        	{
                        	&rrd_counter ($obis,$value)
                        	}
                        	else
                        	{
                        	&rrd_gauge ($obis,$value)
                        	}
                        	&knx_write ($ga,$value);
                        	}
                        	}
                        }
                        
                        ### SUBS ###
                        
                        sub rrd_counter
                        {
                        print ("COUNTER","\n");
                        foreach (@countermodes)
                        {
                        my $obisname = $_[0];
                        my $value = $_[1];
                        $obisname =~ tr/./-/;
                        my $rrdname = $counterid."_".$obisname."_".$_."\.rrd";
                        print ($rrdname,"\n");
                        my $rrdfile = $rrdpath."\/".$rrdname;
                        unless (-e $rrdfile)
                        {
                        RRDs::create ($rrdfile,"DS:value:COUNTER:".(($_*60)+600).":0:10000000000","RRA:AVERAGE:0.5:1:365","RRA:AVERAGE:0.5:7:300","-s ".($_*60));
                        }
                        my $countervalue = int($value*$_*60);
                        RRDs::update("$rrdfile", "N:$countervalue");
                        }
                        }
                        
                        sub rrd_gauge
                        {
                        print ("GAUGE","\n");
                        my $obisname = $_[0];
                        my $value = $_[1];
                        $obisname =~ tr/./-/;
                        my $rrdname = $counterid."_".$obisname."\.rrd";
                        print ($rrdname,"\n");
                        my $rrdfile = $rrdpath."\/".$rrdname;
                        unless (-e $rrdfile)
                        {
                        RRDs::create ($rrdfile,"DS:value:GAUGE:900:0:10000000000","RRA:AVERAGE:0.5:1:2160","RRA:AVERAGE:0.5:5:2016","RRA:AVERAGE:0.5:15:2880","RRA:AVERAGE:0.5:60:8760");
                        }
                        RRDs::update("$rrdfile", "N:$value");
                        }
                        
                        sub knx_write
                        {
                        ### Wert in DPT9 umwandeln und in Konsole ausgeben
                        my @hexdec = encode_dpt9($_[1]);
                        my $hexval = sprintf("%x", $hexdec[0]) . " " . sprintf("%x", $hexdec[1]);
                        print ($hexval,"\n");
                        system("groupwrite ip:localhost $_[0] $hexval");
                        }
                        
                        sub encode_dpt9 
                        {
                        # 2byte signed float
                        my $state = shift;
                        my $data;
                        my $sign = ($state <0 ? 0x8000 : 0);
                        my $exp  = 0;
                        my $mant = 0;
                        $mant = int($state * 100.0);
                        while (abs($mant) > 2047)
                        {
                        $mant /= 2;
                        $exp++;
                        }
                        $data = $sign | ($exp << 11) | ($mant & 0x07ff);
                        return $data >> 8, $data & 0xff;
                        }
                        Den Anhang einfach in *.pl umbenennen.
                        Angehängte Dateien
                        Umgezogen? Ja! ... Fertig? Nein!
                        Baustelle 2.0 !

                        Kommentar


                          #57
                          Hallo,

                          erstmal ein großes Lob und ein Danke an euch!!

                          Ich habe das Script bei mir aufs Wiregate gepackt, angepasst und meine zwei Elster Zähler werden ausgelesen und die Werte auf den Bus geschickt.

                          Ich habe es wie folgt in die crontab eingetragen:
                          */3 * * * * /home/user/zaehler_wp.pl > /dev/null
                          */3 * * * * /home/user/zaehler_ha.pl > /dev/null
                          und es funktioniert. :-)

                          Aber leider verstehe ich das mit den rrds nicht.
                          Es werden mehrere rrds erstellt, wozu?
                          Ich versuche auch die rrds in der CometVisu anzeigen zu lassen, das geht aber leider auch nicht.

                          Hab ich da einen Denkfehler und rrd ist nicht gleich rrd?
                          (sorry fürs blöd fragen, aber ich komme leider nicht aus der Linux Welt)

                          Danke und Grüße
                          Jens

                          Kommentar


                            #58
                            Hallo Jens,

                            Mit Ausnahme von Zählerständen wird für jeden Wert ein separates RRD erstellt, die Einbindung in CV sollte eigentlich problemlos klappen, seh ich mir aber nochmal an. Wo hakt es da genau?

                            Für Zählerstände werde die RRDs mehrfach erstellt. Das hat was mit der einfacheren Auswertung zu tun. 5 Minuten ist eigentlich Unsinn sofern man auch den aktuellen Verbrauch vom Zähler ausgegeben bekommt. Bei meinem WP Zähler ist das einzig sinnvolle in der Ausgabe jedoch der absolute Zählerstand. So hat man mit mit dem 5 Minuten RRD wenigstens eine Art Lastverlauf und Laufzeitanzeige. Die Zählerstände sind beim RRD der COUNTER Mode. Die sind ein wenig besonders. Allgemein interessant ist glaube ich lediglich der Verbrauch pro Tag (1440 Minuten). Den wirst du aber erst am Folgetag sehen können. Der Vollständigkeit halber habe ich eben noch 15 Minuten und 60 Minuten angelegt, vielleicht will ja doch mal jemand wissen was der absolute Verbrauch der letzten Stunde war.

                            Gruß Mirko
                            Umgezogen? Ja! ... Fertig? Nein!
                            Baustelle 2.0 !

                            Kommentar


                              #59
                              Die Diagramme haben in der CV ein Rechteproblem. Angelegt werden sie mit 644, benötigt wird 744.
                              Einfach mal manuell nachbessern, dann wird es angezeigt.

                              Schön dass wenigstens bei euch cronjob seinen Dienst tut

                              Was bringt das >/dev/null ??? Bei mir leider nix.
                              Umgezogen? Ja! ... Fertig? Nein!
                              Baustelle 2.0 !

                              Kommentar


                                #60
                                das mit dem > dev/null hab ich von hier:
                                Cron

                                Das mit den Rechten bei den rrd habe ich verändert, aber in der CometVisu bekomme ich immer noch "loading" angezeigt

                                Kommentar

                                Lädt...
                                X