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
    Mal wieder ein Update.

    Ziemlich zusammengewürfelt aber funktioniert.

    Auf das senden auf den Bus hab ich vorerst mal verzichtet, wird wieder eingebaut. Socat hab ich noch nicht implementiert, das warte ich auch erst mal ab wie weit vzlogger auf dem WireGate unterstützt werden soll.

    Zur Konfiguration:

    device = serieller/usb-port
    conf4800 - ggf Pfad anpassen
    endsign = muss eigentlich nicht geändert werden
    rrdpath = Pfad zum RRD-Verzeichnis
    counterid = Gibt den ersten Teil der RRD-Datei-Namen an

    Die RRD werden nach dem Schema counterid_obiscode benannt, für OBIS 1.8.0 -> z.B. Zaehler_1-8-1.rrd .

    obis = auszulesender Obis-Wert und Länge des Datensatzes
    countermode = hier nochmal die Obiscodes eintragen die Zählerstände liefern, es werden Tagesverbräuche erstellt

    Das erste Auslesen sollte in der Konsole mit dem zweiten Script hier erfolgen, da wird dann einmal der Zähler ausgelesen und angezeigt welche Codes er liefert und wieviele Stellen der einzelne Obiscode hat. Das Komma wird mitgezählt.
    Das Script als *.pl ablegen und via crontab aufrufen lassen - Zyklus 5 Minuten.

    Code 1 - Hauptprogramm:
    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 möglich, in diesem Script aber noch nicht umgesetzt.
    
    # !!! Wiederholung nur alle 3 Minuten da der Zaehler nach Ende des Scriptes weiter sendet !!!
    
    # Basis des Scripts von volkszaehler.org / Autor: Andreas Schulze & Bugfix: Eric Schanze
    # DPT9 sub: makki / www.knx-user-forum.de
    # In dieser Version keine Anbindung an den KNX-Bus
    # Erweiterung um RRD,KNX-Anbindung und gezielte Wertsuche auf Wiregate: 
    # JuMi2006 / www.knx-user-forum.de
    # Version: 0.1.3
    # Datum: 23.04.2012
    
    use warnings;
    use strict;
    use Device::SerialPort;
    use RRDs;
    
    ### KONFIGURATION ###
    my $device = "/dev/ttyUSB-1-4.1";	#Port
    my $conf4800 = "/tmp/conf4800";		#temporäre Konfigurationsdatei für Baudwechsel
    my $endsign = "!";			#Letztes Zeichen im Protokoll vom Zaehler
    my $rrdpath = "/var/www/rrd";		#Pfad für RRDs
    my $counterid = "Zaehler_HZ";		#Grundname für RRDs
    my %obis=(	"16.7"=>6,		#Obis-Zahl => Anzahl der Stellen z.B.: 6 = 123.45
    		"32.7"=>3,
    		"52.7"=>3,
    		"31.7"=>6,
    		"51.7"=>6,
    		"71.7"=>6,
    		"72.7"=>3,
    		"1.8.1"=>10);		#!!!COUNTER!!!
    
    my %countermode=("1.8.1"=>24);		#Obiscode für Zaehlerstaende
    					#RRD gibt Verbrauch pro Tag aus (beta)
    
    
    ### ENDE KONFIGURATION ###
    
    ### Seriellen Port initialisieren
    
    ####4800baud
    my $port = new Device::SerialPort($device) || die "can't open $device: $!";
    $port->baudrate(300)      || die 'fail setting baudrate';
    $port->databits(7)        || die 'fail setting databits';
    $port->stopbits(1)        || die 'fail setting stopbits';
    $port->parity("even")     || die 'fail setting parity';
    $port->rts_active(1);
    $port->dtr_active(1);
    $port->read_char_time(500);     # 0.5 seconds for each character
    $port->read_const_time(1000);   # 1 second per unfulfilled "read" call
    $port->write_settings     || die 'fail write settings';
    
    
    $port->save($conf4800) 	|| warn "Can't save $conf4800: $!\n";
    
    ####START 300baud
    $port->baudrate(300)      || die 'fail setting baudrate';
    $port->databits(7)        || die 'fail setting databits';
    $port->stopbits(1)        || die 'fail setting stopbits';
    $port->parity("even")     || die 'fail setting parity';
    $port->dtr_active(1);
    $port->rts_active(1);
    $port->read_char_time(500);     # 0.5 seconds for each character
    $port->read_const_time(1000);   # 1 second per unfulfilled "read" call
    $port->write_settings     || die 'fail write settings';
    
    
    ### Anforderungstelegramm senden
    my $data="2f3f210d0a";				#Anfrage als HEX "/?!<CR><LF>"
    my $request = pack('H*',$data);
    						
    my $num_out = $port->write($request);
    print $request;
    die "write failed\n" unless ($num_out);
    die "write inclomplete\n" unless ($num_out == length($request));
    print "$num_out Bytes written\n";
    
    ### Warte auf Zaehlerkennung
    
    select(undef, undef, undef, 1.5); # 1.5 Sekunden warten
    
    ### Telegramm mit ACK und neuer Geschwindigkeit senden
    my $data2="063030300d0a";				#ACK und neue Geschwindigkeit in HEX "<ACK>040<CR><LF>"
    my $baudwechsel = pack('H*',$data2);	# 000 = 300baud, 040 = 4800baud
    
    my $num_out2 = $port->write($baudwechsel);
    print $baudwechsel;
    die "write failed\n" unless ($num_out2);
    die "write inclomplete\n" unless ($num_out2 == length($baudwechsel));
    print "$num_out2 Bytes written\n";
    
    ### Port mit neuer Geschwindigkeit intialisieren
    
    $port->restart($conf4800)  || warn "Can't restart $conf4800: $!\n"; ;
    
    #$port->baudrate(300); 
    #$port->write_settings;
    
    ### AUSLESEN
    
    my $STALL_DEFAULT=5; # how many seconds to wait for new input
    my $timeout=$STALL_DEFAULT; 
    my $chars=0;
    my $buffer="";
    
    while ($timeout>0) {
            my ($count,$saw)=$port->read(25); 	# Liest 25 Zeichen je Durchlauf aus
            if ($count > 0) {
                    $chars+=$count;
                    $buffer.=$saw;
    		#print ($buffer,"\n");		# Ausgabe der eingelesenen Daten
    
    
    ### FILTER FOR END
    if ($buffer =~ /\Q$endsign\E/)			# \Q \E entwertet alle Sonderzeichen dazwischen
    {	
    $port->close || die "can't close $device: $!";	# Port schlieen
    last;						# Schleife verlassen
    }
    ### ENDE FILTER FOR END
            
    }
            else {
                    $timeout--;
            }
    }
    
    if ($timeout<=0) {
    $port->close || die "can't close $device: $!";        
    print "Waited $STALL_DEFAULT seconds and never saw what I wanted\n";
    		}
    print $buffer;		#Nur zur Kontrolle
    
    ### FILTER FOR DATA
    while (my($key, $value) = each %obis)
    {
    my $obiskey = $key."\(";
    if ($buffer =~ /\Q$obiskey\E/)			# \Q \E entwertet alle Sonderzeichen dazwischen
    {	
    my $pos=index($buffer,$obiskey);		# Anfangsposition des OBIS-Key finden
    #print ("Obiskey: $obiskey","\n");		# Kontrolldruck
    #print ("Position: $pos","\n");			# Kontrolldruck
    #print (length($obiskey),"\n");			# Kontrolldruck
    my $obisvalue=substr($buffer,($pos+length($key)+1),$obis{$key}); 	# Wert extrahieren
    print ($key,": ",$obisvalue,"\n");					# Kontrolldruck
    
    ### RRD-Erstellen
    my $obisname = "$key";
    $obisname =~ tr/./-/;
    my $rrdname = $counterid."_".$obisname."\.rrd";
    print ($rrdname,"\n");
    my $rrdfile = $rrdpath."\/".$rrdname;
    
    
    ### RRD check COUNTER/GAUGE
    if (exists $countermode{$key})
    {
    print ("COUNTER","\n");
    ### COUNTER schreiben
    unless (-e $rrdfile) 
    {
    RRDs::create ($rrdfile,"DS:value:COUNTER:86500:0:10000000000","RRA:AVERAGE:0.5:1:365","RRA:AVERAGE:0.5:7:300","-s 86400");
    }
    ### RRD-Füllen
    RRDs::update("$rrdfile", "N:$obisvalue*=86400");
    }
    else
    {
    print ("GAUGE","\n");
    ###GAUGE schreiben
    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");
    }
    ### RRD-Füllen
    RRDs::update("$rrdfile", "N:$obisvalue");
    }
    }
    }
    ### ENDE FILTER FOR DATA
    
    
    
    ### Log der Zaehlerausgabe
    #my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
    #my $timestamp = printf "%4d-%02d-%02d %02d:%02d:%02d\n",$year+1900,$mon+1,$mday,$hour,$min,$sec;
    
    #open(LOG,'>>',$file) || die "Fehler $!";
    #print LOG ("\n",$year+1900,"-",$mon+1,"-",$mday," ",$hour,":",$min,":",$sec," \; ",$value);
    #close LOG;

    Hier der Auslesecode fürs erste auslesen. Etwas Geduld, kann je nach Zähler bis zu 3 Minuten dauern.
    Am besten als init.pl speichern.

    Code:
    #!/usr/bin/perl
    use warnings;
    use strict;
    use Device::SerialPort;
    
    ### KONFIGURATION ###
    my $device = "/dev/ttyUSB-1-4.1";	#Port
    my $endsign = "!";				#Letztes Zeichen im Protokoll vom Zaehler
    ### ENDE KONFIGURATION ###
    
    ### Seriellen Port initialisieren
    
    ####START 300baud
    my $port = new Device::SerialPort($device) || die "can't open $device: $!";
    $port->baudrate(300)      || die 'fail setting baudrate';
    $port->databits(7)        || die 'fail setting databits';
    $port->stopbits(1)        || die 'fail setting stopbits';
    $port->parity("even")     || die 'fail setting parity';
    $port->dtr_active(1);
    $port->rts_active(1);
    $port->read_char_time(500);     # 0.5 seconds for each character
    $port->read_const_time(1000);   # 1 second per unfulfilled "read" call
    $port->write_settings     || die 'fail write settings';
    
    
    ### Anforderungstelegramm senden
    my $data="2f3f210d0a";				#Anfrage als HEX "/?!<CR><LF>"
    my $request = pack('H*',$data);
    						
    my $num_out = $port->write($request);
    print $request;
    die "write failed\n" unless ($num_out);
    die "write inclomplete\n" unless ($num_out == length($request));
    print "$num_out Bytes written\n";
    
    ### Warte auf Zaehlerkennung
    
    select(undef, undef, undef, 1.5); # 1.5 Sekunden warten
    
    ### Telegramm mit ACK und neuer Geschwindigkeit senden
    my $data2="063030300d0a";				#ACK und neue Geschwindigkeit in HEX "<ACK>040<CR><LF>"
    my $baudwechsel = pack('H*',$data2);	# 000 = 300baud, 040 = 4800baud
    
    my $num_out2 = $port->write($baudwechsel);
    print $baudwechsel;
    die "write failed\n" unless ($num_out2);
    die "write inclomplete\n" unless ($num_out2 == length($baudwechsel));
    print "$num_out2 Bytes written\n";
    
    ### AUSLESEN
    
    my $STALL_DEFAULT=5; # how many seconds to wait for new input
    my $timeout=$STALL_DEFAULT; 
    my $chars=0;
    my $buffer="";
    
    while ($timeout>0) {
            my ($count,$saw)=$port->read(25); 	# Liest 25 Zeichen je Durchlauf aus
            if ($count > 0) {
                    $chars+=$count;
                    $buffer.=$saw;
    		#print ($buffer,"\n");		# Ausgabe der eingelesenen Daten
    
    
    ### FILTER FOR END
    if ($buffer =~ /\Q$endsign\E/)			# \Q \E entwertet alle Sonderzeichen dazwischen
    {	
    $port->close || die "can't close $device: $!";	# Port schlieen
    last;						# Schleife verlassen
    }
    ### ENDE FILTER FOR END
            
    }
            else {
                    $timeout--;
            }
    }
    
    if ($timeout<=0) {
    $port->close || die "can't close $device: $!";        
    print "Waited $STALL_DEFAULT seconds and never saw what I wanted\n";
    		}
    print $buffer;		#Nur zur Kontrolle
    tipped and coded by a linux dau on several devices ;-)

    Einen Kommentar schreiben:


  • greentux
    antwortet
    Dann kauf halt einen fertigen Kopf. Das habe ich auch gemacht. Eben nur nicht für >>50€.
    Ich würde für die Profivariante dann einen neuen Fred aufmachen und den hier für ein einfaches Plugin weiter verwenden...

    Einen Kommentar schreiben:


  • makki
    antwortet
    Ich glaub das Problem sind nicht (nur) die Leseköpfe sondern das ganze halbwegs freakfrei ins Feld zu transportieren
    Wo der Lesekopf herkommt ist mir ja eigentlich sekundär, nicht vielen liegt aber das löten von IR-Dioden, SML und Perl gleichzeitig wies mir scheint
    Eine funktionierende Basis, an der man optimieren kann, das wär erstmal was..

    Makki

    Einen Kommentar schreiben:


  • greentux
    antwortet
    Es gibt doch genügend Leseköpfe. Ferige, Halbfertige, Bausätze. Freie Wahl. Funktionieren tun die wohl alle ähnlich. Von daher sehe ich da das Problem nicht...

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Zitat von makki Beitrag anzeigen
    Device::Serialport ist IMHO was für masochisten
    Makki
    Aber da verstehe ich wenigstens was ich dem Teil sage . Für Socat fehlt mir im Moment echt die Muse - bis ich das verstanden habe sind wieder 3 Wochen rum.

    Ansonsten ist mein WartungsVPN offen ;-) und das Lesescript liegt mit dem Namen 00.pl in /var/tmp
    Über vzlogger wäre ich auch nicht böse wenn es dann nicht ewig dauert den Spaß wieder zu installieren, mal sehen ob ich mir das nochmal ansehe.

    Einen Kommentar schreiben:


  • makki
    antwortet
    @greentux: ich hätte da schon mal angestrebt, eine "runde" Plug&Play Lösung zu haben. Erstens weil es eigentlich fast jeder brauchen kann (ausser ich, meine ollen Zähler ticken nur..), zweitens weil das wohl schnell hübsch unübersichtlich wird, obwohl es (theoretisch..) Standartisiert wäre..
    Zu einer runden Lösung gehört aber für mich auch ein "fertiger" Lesekopf mit Gehäuse usw. Ist kein Super-Schnäppchen, wir wissen alle das nur Bauteile für 3 EUR drin sind, aber..

    Der vzlogger liegt (sehr rudimentär!) übrigens schon im Repository, falls jemand schonmal spielen mag.. Ich will mir das aber wiegesagt mit versch. Zählern eigentlich erstmal selbst ansehen, wie sich das ganze anfühlt, um dann zu beurteilen, welcher Weg da am besten ist..

    @JuMi: Ich kanns nicht oft genug wiederholen: für sowas den socat dazwischen nehmen, fertig..
    Device::Serialport ist IMHO was für masochisten

    Makki

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Wir reden ja hier von 2 (eher 3) unterschiedlichen Protokollen:

    SML -> sendet ohne Anfrage mit meist 9600baud alle 2-5 Sekunden
    IEC 62056-21 -> sendet nach Anfrage mit 300baud

    Bei IEC 62056-21 gibt es noch unterschiedliche Varianten:
    - nach Anforderung wird einfach gesendet, auch wenn kein ACK oder Baudratenumschaltung kommt
    - nach Anforderung wird ACK und Baudratenumschaltung/Ausleseart erwartet i.R. bis 4800baud

    Beide Varianten laufen bei mir gerade, nur die Baudratenumschaltung hängt noch irgendwie, ich bekomme Device::Serial einfach nicht dazu die Geschwindigkeit zu ändern. Die Telegramme stimmen aber, wenn ich also die Bestätigung sende und 300 baud als "neue" Geschwindigkeit definiere dann kommen die Werte, bei 4800 baud kommt dann leider nichts mehr.

    Der Zähler wird richtig intitalisiert, nur mein Port ändert seine Geschwindigkeit nicht. Das merke ich daran dass ich unterschiedliche Geschwindigkeiten vorgeben kann mit denen der Zähler sendet, sobald diese aber nicht 300 baud sind erhalte ich beim auslesen mit 300 Baud natürlich kryptische Zeichen, das heißt also der Zähler macht schonmal das was er soll, nur mein Port noch nicht.

    Also nah dran ;-) wie wird bei Device::Serial eine neue Geschwindigkeit eingestellt ?

    $port->baudrate(4800);
    $port->write_settings || die 'fail write settings';
    nach der Initialisierung gibt mir nur Ausgaben wenn baudrate=300

    Einen Kommentar schreiben:


  • NetFritz
    antwortet
    Hallo
    Mein "Easymeter Q3C" hat 2 Optische Schnittstellen.
    Vorne die runde mit der Sende und Lese LED, die Schnittstelle sendet nur auf Anforderung.
    Oben drauf eine rechteckige http://download.hager.com/Hager.de/f...Z_09DE0009.pdf
    Seite 10, zu diesen Kopf braucht man man bei meinen Zähler noch eine Halterung.
    Diese Schnittstelle sendet alle 2sec. die Daten. Diese Schnittstelle kann kann auch Daten empfangen zum umschalten der Tarifwerke.
    Ich habe die Schnittstelle oben benutzt.
    Gruß NetFritz

    Einen Kommentar schreiben:


  • greentux
    antwortet
    Bei mir gings auch ohne Lötkolben.
    volkszaehler.org - wiki - IR-Schreib-Lesekopf
    Da steht noch ein Satz dabei, den habe gelesen und dann war der Kopf fertig hier. Natürlich ohne CE und Co. Vom Innenleben kann man das vermutlich aber alles vergleichen. Ist ja kein Voodoomagic.

    Ansonsten ist es eine Frage des Ziels. Entweder man macht ein Bastelplugin, wie es das für viele andere Anwendungen im WG auch gibt oder aber man will eher ein ein eHZ Interface bauen, auf das dann auch die WG Software zugreift. Sind vermutlich zwei unterschiedliche Ansätze. Das Protokoll, wenn man es denn so nennen kann, ist wirklich nicht so dolle. Es gibt da auch einen kleinsten gemeinsamen Nenner. Der würde für die allermeisten gehen. Einzelabfrage von Werten beispielsweise ist aber zählergranular.

    Ich bin dafür, erstmal das Bastelplugin hinzubekommen, was jeder an seinen Zähler anpassen kann (sie wie halt bei den anderen Plugins auch). Anschliessend oder parallel kann man natürlich mal vzlogger zum Fliegen bekommen. Wobei ich das derzeit erstmal auf einem Ubuntu mache, um etwas Arbeit zu sparen... Wenns dann ein schönes Ergebnis gibt, kann man das aufs WG aufsetzen.

    Just my 2ct.

    Einen Kommentar schreiben:


  • makki
    antwortet
    Zitat von JuMi2006 Beitrag anzeigen
    ..das Problem was ich sehe ist z.B. auch die Genauigkeit der Daten die jeder unterschiedliche Zähler liefert - trotz gleichen Protokolls.
    Klar, genau deswegen würde ich aber auf libsml/vzlogger setzen, um die blutigen Details verschiedener Geräte (vgl. eibd/owfs) können sich spezialisierte Programme besser kümmern

    Da ist das parsing das Problem, die Schnittstellengeschwindigkeit ist eher sekundär, bzw. lässt sich auf 4800Baud umstellen. Dafür wäre es einfacher die Abfragedaten gleich als HEX zu senden, oder wie wird ACK mit Perl an serial gesendet?
    Genau da liegt der Grund, warum ich das lieber vzlogger&Co überlassen würde, das ist im Perl-Plugin schmerzhaft und/oder zu langsam..Brauchts ja aber auch garnicht.

    Lesekopf ist von volkszähler.org,
    Reicht ja als Info, geht sicherlich aber ist halt Bastelstunde - und ich hätte es am Ende des Tages gerne ohne Lötkolben, wobei der Lötkolben erlaubt - aber nicht zwingend notwendig sein sollte

    Ansonsten halte ich den nötigen Code für relativ simpel
    Ist es, ich habe aber keine Lust die 37 Sonderfälle die nächsten 15J alleine anzupassen
    Nicht immer - aber oft funktioniert OSS insofern das man nur das Problem sauber beschreiben muss und es dann behoben wird..

    vzlogger ist mir zu aufgeblasen ... 12 mio. backports und eine Installationsanleitung bei der ich als nicht-linuxer schon weiche Augen vom scrollen bekomme.
    Auch klar, der ist aber eigentlich sehr schlank; das "aussenrum" ist IMHO übergewichtig, aber das muss man ja nicht verwenden.. (Konkret: die "Middleware" ist mir deutlich zu heavy, es gibt da aber mehrere Optionen: als JSON vom vzlogger auslesen, diesem RRD beibringen, .. mal sehen..)

    Deswegen hab ich heute "ein paar Minuten" mit dem erstellen der notwendigen Dependencies verbracht damit das keine Freakshow mehr ist (ist noch nicht 100% aber das soll ja Sinn der Aktion sein, das sauber zu machen & rauszufinden)
    Die hälfte davon hatte ich eh schon wegen OLA/wiregated2, die anderen von den zurückliegenden SML-Experimenten; deswegen grinse ich auch nur noch, wenn jemand wegen "aktueller Distro/Updates" nölt (wo nichts davon drin ist), weil wir pflegen de-fakto halt da schon länger ein "Special" für GA/HA-Zwecke, seis nun eibd, owfs, ola, libsml oder vzlogger

    Makki

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Mein Ziel ist es schon das Plugin so zu machen dass man nur noch einträgt was man gerne hätte, das Problem was ich sehe ist z.B. auch die Genauigkeit der Daten die jeder unterschiedliche Zähler liefert - trotz gleichen Protokolls.
    Beispiel Verbrauch:
    - Landis+Gyr Auflösung 0,001 kWh
    - EMH Auflösung 0,1 kWh
    Da ist das parsing das Problem, die Schnittstellengeschwindigkeit ist eher sekundär, bzw. lässt sich auf 4800Baud umstellen. Dafür wäre es einfacher die Abfragedaten gleich als HEX zu senden, oder wie wird ACK mit Perl an serial gesendet?

    Bevor ich mich beim neuen Zähler ans parsen mache will ich den Baudwechsel hinbekommen, dann geht das andere auch schneller.

    Lesekopf ist von volkszähler.org, dazu schreib mir mal ne PN.
    Ansonsten halte ich den nötigen Code für relativ simpel - für mich zwar schwer aber ich nutze es auch als Einstieg in Perl. Wenn ich mir mit dem SerialPortMonitor ansehe was das oben verlinkte Tool sendet und empfängt dann ist da wirklich nix dran, ich kann dir da gern mal nen Protokoll senden.

    vzlogger ist mir zu aufgeblasen ... 12 mio. backports und eine Installationsanleitung bei der ich als nicht-linuxer schon weiche Augen vom scrollen bekomme.

    Mal ganz im ernst - jeder der mehr als 2 Wochen Perl programmiert (also das Gegenteil von mir) schmiert den Code glaub ich ganz schnell hin.

    Einen Kommentar schreiben:


  • makki
    antwortet
    Nun gut, Leseköpfchen sind bestellt, die SW zum debuggen rudimentär im Repository (mal wieder 10+ Packerl/Backports - nicht vom "neuen" squeeze aufs "alte" lenny sondern GIT/Head->lenny übrigens )

    Ich schätze das wird werden, bzgl. der SW bin ich mir noch nicht ganz sicher, welchen Weg man da konkret geht aber deswegen will ich es mir ja auch ansehen; vzlogger sieht mir gut aus (trotz der 10 backports..), libsml eh, der Rest davon ist mir gefühlt ein bisschen zuviel PHP-bloatware (man braucht jetzt nicht wirklich einen mysql für Zählerstände IMHO..)

    -> Wenn sich noch andere Zählermodelle (eHZ/EDL21 mit SML) finden, gerne. Es geht erstmal darum zu sehen wo/ob das sauber geht bzw. welche Besonderheiten&Probleme es im Feld gibt.

    @Mirko: ich würde das ganze Thema gerne etwas allgemeinverständlicher & nutzbar machen; Möglichst ohne viel stricken
    Insofern sind die Fragen für die "progressiven": Welcher Lesekopf wurde verwendet? (Eigenbau ist ja 100% ok wenns geht, aber halt nichts fürs Feld..)
    Wo lagen die Besonderheiten beim auslesen oder ging es "einfach so" mit dem gegebenen PHP? (finde ich halt nicht perfekt, dem vzlogger würde ich da mehr zutrauen..)

    Makki

    Einen Kommentar schreiben:


  • greentux
    antwortet
    Bei mir muss der Kopf auf 9 Uhr sitzen und ganz nach oben geschoben werden. Dann kommen zumindest beim Testprogramm Hexdaten an. Das Testprogramm scheint aber nur einmal am Anfang was zu senden. Laut Doku müsste es aber zwischendurch auch nochmal was machen... sehr seltsam. Aber ja, nun müsste es ans decoding gehen

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    So Jungs,

    Der neue Zähler ist da und nach 5 Stunden spricht er auch
    @greentux,@NetFritz:
    Der Lesekopf muss 100% richtig sitzen. Test am besten mit dem Tool:

    MeterTest Ltd. - Stationary Meter Test Equipment - Download

    Während ich den Lesekopf auf meinem EMH Zähler bis zu 30 Grad drehen kann muss er beim Landis+Gyr 100%ig sitzen.

    Der Landis gibt alles aus was das Herz begehrt, lässt aber den Unsinn weg. Es kommen Phasenspannungen,Phasenströme,Gesamtleistung,Verbr auch... .

    Wenn mir jetzt noch jemand verrät wie man mit Device::Serial Hex-Werte sendet kann man das soweit ausbauen dass die Abfrage irgendwo zwischen 5 und 10 Sekunden liegen wird (4800Baud).

    Gruß Mirko

    Einen Kommentar schreiben:


  • luigi4711
    antwortet
    Zwei USB-Seriell Adapter hab ich noch irgendwo rumliegen, das
    sollte also funktionieren. Meldet Euch per PN, falls ich eine Hilfe
    sein kann.

    Einen Kommentar schreiben:

Lädt...
X