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

    #31
    Hmm, danke, ich verlier auch mal gern den Überblick.. Tut sich (bei lio) trotzdem nichts, also garnichts, ist halt schwer zu sagen wenn man nicht davorsitzt

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

    Kommentar


      #32
      Zitat von makki Beitrag anzeigen
      Hmm, danke, ich verlier auch mal gern den Überblick.. Tut sich (bei lio) trotzdem nichts, also garnichts, ist halt schwer zu sagen wenn man nicht davorsitzt

      Makki
      Gar nichts, auch nicht bei 300 Baud, das deutet eher auf einen verrutschten oder fehlerhaft ausgerichteten IR-Schreib-Lesekopf hin...

      Kommentar


        #33
        Vermutlich sowas.. (getestet habe ich aber heute nachmittag, nicht jetzt!); naja, da muss man halt davorsitzen, sonst hat das keinen Taug..

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

        Kommentar


          #34
          Ich will nochmal nachfragen:

          @panzaeron:

          Bekomme ich die socat-Abfrage irgendwie ins Wiregate-Plugin und die Ausgabe in eine Variable. syswrite/system ???

          Dein Script läuft bei mir irgendwie nicht, die Einzelbefehle in der Konsole machen aber genau das was zu erwarten ist (Baudratenumschaltung). Beim script bekomme ich den Fehler:

          Code:
          root@wiregate403:/var/tmp# bash testsock
          
          Initialisierung senden:
          ": "0" or "1" requiredcat[12278] E error in option "cstopb=0
          
          Übertragungsrate auf 4800 Baud hochsetzen
          ": "0" or "1" requiredcat[12280] E error in option "cstopb=0
          
          Daten ausgeben:
          root@wiregate403:/var/tmp# bash testsock
          
          Initialisierung senden:
          ": "0" or "1" requiredcat[12304] E error in option "cstopb=0
          
          Übertragungsrate auf 4800 Baud hochsetzen
          ": "0" or "1" requiredcat[12306] E error in option "cstopb=0
          
          Daten ausgeben:
          Einzelbefehle in der Konsole eben:

          Code:
          root@wiregate403:/var/tmp# echo $'\x2f\x3f\x21\x0d\x0a' | socat -T 1 - /dev/Zaehler_HZ,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0
          /LGZ4ZMF100AC.M23
          root@wiregate403:/var/tmp# echo $'\x06\x30\x34\x30\x0d\x0a' | socat -T 1 - /dev/Zaehler_HZ,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0
          root@wiregate403:/var/tmp# socat -T 1 - /dev/Zaehler_HZ,raw,echo=0,b4800,parenb=1,parodd=0,cs7,cstopb=0              F.F(00)
          C.1.0(12064955)
          0.0( 2200391        )
          C.1.1(        )
          1.8.1(000385.090*kWh)
          1.8.2(000000.000*kWh)
          1.8.3(000000.000*kWh)
          1.8.4(000000.000*kWh)
          1.8.0(000385.090*kWh)
          2.8.0(000000.000*kWh)
          15.8.0(000385.090*kWh)
          32.7(236*V)
          52.7(237*V)
          72.7(237*V)
          31.7(000.31*A)
          51.7(000.59*A)
          71.7(000.06*A)
          16.7(000.07*kW)
          C.5.0(0400)
          C.7.0(0002)
          0.2.0(M23)
          !
          root@wiregate403:/var/tmp#
          Den Inhalt nun in einer Variablen im WG-Plugin und ich wäre glücklich . Wobei es da eher um Kosmetik zu meinem vorherigen Script geht.

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

          Kommentar


            #35
            Zitat von JuMi2006 Beitrag anzeigen
            Bekomme ich die socat-Abfrage irgendwie ins Wiregate-Plugin und die Ausgabe in eine Variable. syswrite/system ???

            Dein Script läuft bei mir irgendwie nicht, die Einzelbefehle in der Konsole machen aber genau das was zu erwarten ist (Baudratenumschaltung). Beim script bekomme ich den Fehler:

            [CODE]root@wiregate403:/var/tmp# bash testsock
            Hmm, den Fehler kenne ich nicht und ist auch etwas merkwürdig, weil ein Skript ja nichts anderes ist als eine Folge von Shell-Befehlen.
            Kommt die Fehlermeldung auch, wenn du das Skript direkt d.h. ohne neue Shell ausführst (das Skript muss dafür ausführbare Rechte haben z.B. mit chmod 777 ./testsock)?
            Code:
            ./testsock
            Die Ausgabe des Skripts kannst du z.B. in Perl mit qx auswerten (Besser wäre die Befehle "direkt" d.h. nacheinander in Perl ausführen zu lassen) .
            Auf dieser selfhtml.org Seite sind die verschiedenen Shell Aufrufe (qx, exec,m system, usw.) gut erläutert.

            Kommentar


              #36
              Rechte waren schon richtig gesetzt und auch ohne neue Shell das gleiche Problem.

              Naja ich probier mal weiter.
              Umgezogen? Ja! ... Fertig? Nein!
              Baustelle 2.0 !

              Kommentar


                #37
                Zitat von JuMi2006 Beitrag anzeigen
                Rechte waren schon richtig gesetzt und auch ohne neue Shell das gleiche Problem.

                Naja ich probier mal weiter.
                Hmm schwierig, was ist denn die Ausgabe von diesem Perl-Skript:
                Code:
                #!/bin/perl
                my $device = "/dev/ttyUSB0";
                my @values = 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 \$'\x06\x30\x35\x30\x0d\x0a' | socat -T 1 - $device,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0; socat -T 1 - $device,raw,echo=0,b9600,parenb=1,parodd=0,cs7,cstopb=0);
                my $anzahl=@values;
                
                # Daten ausgeben
                print "Ausgabe der Zeilen vom Zähler:\n";
                foreach (@values){
                print "$_";
                }
                print "Anzahl Zeilen: $anzahl\n";
                Angehängte Dateien

                Kommentar


                  #38
                  qx und system waren die richtigen Stichworte:

                  testsock.pl liefert jetzt die Daten mit Baudratenumstellung

                  Code:
                  #!/usr/bin/perl
                  use warnings;
                  use strict;
                  
                  system ("echo '\x2f\x3f\x21\x0d\x0a' | socat -T 1 - /dev/Zaehler_HZ,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0");
                  
                  sleep (1);
                  system ("echo '\x06\x30\x34\x30\x0d\x0a' | socat -T 1 - /dev/Zaehler_HZ,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0");
                  
                  my $data = qx (socat -T 1 - /dev/Zaehler_HZ,raw,echo=0,b4800,parenb=1,parodd=0,cs7,cstopb=0);
                  
                  print $data;
                  
                  open(LOG,'>',"/var/tmp/HZ.log") || die "Fehler $!";
                  print LOG ($data);
                  close LOG;
                  Also dachte ich mir müsste das ganze als WireGate-Plugin doch auch funktionieren, macht es aber nicht:

                  Code:
                  #!/usr/bin/perl
                  
                  $plugin_info{$plugname.'_cycle'} = 120;
                  
                  system ("echo '\x2f\x3f\x21\x0d\x0a' | socat -T 1 - /dev/Zaehler_HZ,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0");
                  sleep (1.5);
                  system ("echo '\x06\x30\x34\x30\x0d\x0a' | socat -T 1 - /dev/Zaehler_HZ,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0");
                  
                  my $data = qx (socat -T 1 - /dev/Zaehler_HZ,raw,echo=0,b4800,parenb=1,parodd=0,cs7,cstopb=0);
                  
                  print $data;
                  
                  open(LOG,'>',"/var/tmp/HZ.log") || die "Fehler $!";
                  print LOG ($data);
                  close LOG;
                  
                  return $data;
                  Was ist beim WireGate-Plugin anders als beim normalen Perl-Script ???
                  Umgezogen? Ja! ... Fertig? Nein!
                  Baustelle 2.0 !

                  Kommentar


                    #39
                    Zitat von makki Beitrag anzeigen
                    Tut sich (bei lio) trotzdem nichts, also garnichts, ist halt schwer zu sagen wenn man nicht davorsitzt

                    Makki

                    Hab' da jetzt schon lange nicht mehr mitgelesen...
                    makki, Du hast schon mitbekommen, dass der Zählerkopf wegen den Versuchen mit der KWL runter ist?
                    Ich glaube seit Montag.
                    Hattest Du meine Socketeinstellungen überprüft?

                    Bei meinem Aufbau konnte ich über Hexterm(??) die Daten auslesen-also scheint die Übertragung zu funktionieren.
                    Angehängte Dateien

                    Kommentar


                      #40
                      Zitat von JuMi2006 Beitrag anzeigen
                      Was ist beim WireGate-Plugin anders als beim normalen Perl-Script ???
                      Gute Frage, eventuell ist es ein Timing-Problem? Hast du mal versucht die Initialisierung wie in meinem Beispiel zu machen, d.h. alles in einem qx-Aufruf?

                      Kommentar


                        #41
                        Ich bin schon einen großen Schritt weiter, hab aber noch das ein oder andere kleine Problem.

                        Mein Script ist jetzt sehr komfortabel geworden, d.h. die Baudratenumstellung geht automatisch, die Werte werden auf den Bus geschrieben, die RRDs erzeugt und gefüllt.

                        Als Konfiguration sind lediglich die auszuwertenden Obis Zahlen, Gruppenadressen, der Pfad zu den RRDs und ein entsprechender Hauptname zu vergeben.

                        Für meine Wärmepumpe läuft das als cronjob, beim Haushaltzähler streikt aber cronjob. Beides aus dem gleichen Urscript und cronjob via webmin eingerichtet. Austauschen der Leseköpfe hat auch Nix gebracht. Als Perl Aufruf in der Konsole laufen beide richtig gut! Laufzeit < 10 Sekunden bei einem sehr langen Zählerprotokoll.

                        Beim Haushaltszähler reicht die einfache Initialisierung nicht aus. Der will unbedingt die Bestätigung mit Baudratenangabe. Der Wärmepumpenzähler quatscht auch so los nachdem er einmal gefragt wurde.

                        Das Script reiche ich gleich nach.
                        Umgezogen? Ja! ... Fertig? Nein!
                        Baustelle 2.0 !

                        Kommentar


                          #42
                          @JuMI2006
                          Das hört sich doch gut an, was für Zähler hast du denn?

                          Kommentar


                            #43
                            Ich habe einen EMH ITZ (Wärmepumpe) und einen Landys+Gyr E350 (Haushalt)

                            Hier das aktuelle Script. Da cronjob streikt kann ich leider noch keinen Langzeittest machen. Wieder so ein Rätsel

                            Das ist noch recht unkommentiert, aber Du verstehst das sicherlich. Die vielen print darin sind noch vom programmieren und der Kontrolle in der Konsole.

                            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.4
                            # Datum: 30.05.2012
                            
                            use warnings;
                            use strict;
                            use RRDs;
                            
                            ### KONFIGURATION ###
                            my $device = "/dev/Zaehler_HZ";		#Port
                            my $rrdpath = "/var/www/rrd";		#Pfad für RRDs
                            my $counterid = "HZ";			#Grundname für RRDs
                            my $speed = "4";			#noch nicht implementiert
                            my %channels = (			#Obis-Zahl => Gruppenadresse
                            		"16.7"=>"12/1/2",		
                            		"32.7"=>"12/1/3",
                            		"52.7"=>"12/1/4",
                            		"31.7"=>"12/1/5",
                            		"51.7"=>"12/1/6",
                            		"71.7"=>"12/1/7",
                            		"72.7"=>"12/1/8",
                            		"1.8.1"=>"12/1/9"
                            				);	
                            my @countermodes = (5,15,60,1440);	#RRD-Intervall für COUNTER
                            ### ENDE KONFIGURATION ###
                            
                            system ("echo '\x2f\x3f\x21\x0d\x0a' | socat -T 1 - ".$device.",raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0");
                            
                            ### Warte auf Zaehlerkennung
                            select(undef, undef, undef, 1.5); # 1.5 Sekunden warten
                            
                            ### Telegramm mit ACK und neuer Geschwindigkeit senden
                            system ("echo '\x06\x30\x34\x30\x0d\x0a' | socat -T 1 - ".$device.",raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0");
                            
                            my @buffer = qx (socat -T 1 - $device,raw,echo=0,b4800,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);
                            	
                            	#&LOGS ($obis,$1,$2);
                            	}
                            	}
                            }
                            
                            
                            ### 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;
                            }
                            
                            #open(LOG,'>',"/var/tmp/HZ.log") || die "Fehler $!";
                            #print LOG (@buffer);
                            #close LOG;
                            Umgezogen? Ja! ... Fertig? Nein!
                            Baustelle 2.0 !

                            Kommentar


                              #44
                              Cool, ich denke wenns erstmal standalone rund läuft und man damit leben kann ists gut; wenn alle widrigkeiten ausgeräumt sind kann man sich ja nochmal an Plugin oder vzlogger machen..

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

                              Kommentar


                                #45
                                @makki, wenn Du mal auf der 403 gucken willst warum cronjob streikt dann mach ruhig

                                Ich muss das mal ein paar Tage am laufen haben um zu testen. vzlogger hat heute von mir ein "REMOVE" bekommen Ich hatte den im Verdacht dazwischen zu funken.

                                Die Scripte liegen /var/tmp/Zaehler_WP.pl und var/tmp/Zaehler_HZ.pl
                                In der Konsole läufts aber cronjob nicht. Auch nicht webmin->cronjob->jetzt ausführen.

                                Gruß

                                P.S.:
                                Ich find den Code schon viel schöner als die ersten
                                Umgezogen? Ja! ... Fertig? Nein!
                                Baustelle 2.0 !

                                Kommentar

                                Lädt...
                                X