[vz-users] vzlogger Easymeter Q3C

NetFritz NetFritz at gmx.de
Mon Sep 10 16:59:44 CEST 2012


> Da sonst keiner was schreibt mal ein paar spontane Ideen:
> - die Daten die kommen sind wirklich sml-Daten, also bin?r und nicht
> etwa Ascii-Daten?
> - mal versucht mit vzlogger nur den easymeter abzufragen, f?r den Fall
> dass er buggt, falls er mehrere Z?hler abfragen soll?
> - es gibt doch inzwischen einen c++-Port - vielleicht versuchst Du den
> einmal?
>
> Gruss
>        Rainer
> ------------------------------
>
>
>
Hallo
Ich muss mich erst mal berichtigen.
Wenn ich in der Konsole
stty -F /dev/ttyUSB0 9600
od -x /dev/ttyUSB0 oder cat /dev/ttyUSB0
bekomme ich keine gültige SML Ausgabe.

Frage ich den Zähler mit meinem selbstverfasten Perl-Script ab dann 
werden alle OBIS Werte richtig angezeigt.
Solange das in der Konsole nicht läuft, wird es sicherlich mit dem 
vzlogger auch nicht laufen.

Auf meinen Lappi mit Win7 und hterm kann ich auch die SML-Ausgabe sehen.
Hier mal der Anfang von meinen Perl-Script.
----------------------------------------------------------------------------------------------------------------------------------------------------------
#!/usr/bin/perl
#
# Holt die Daten vom SML-Zaehler Easymeter Q3C
# es wird die obere optische Schnittstelle ausgelesen
# dort liefert der Zaehler alle 2sec. einen Datensatz
# wird von CRON jede Minute aufgerufen
# http://wiki.volkszaehler.org/software/sml
# 03.2012 by NetFritz
#
use Device::SerialPort;
#
my $port = Device::SerialPort->new("/dev/usbserial-AHVPKI8A") || die $!;
$port->databits(8);
$port->baudrate(9600);
$port->parity("none");
$port->stopbits(1);
$port->handshake("none");
$port->write_settings;

$port->purge_all();
$port->read_char_time(0);     # don't wait for each character
$port->read_const_time(1000); # 1 second per unfulfilled "read" call
#
# OBIS-Kennzahl und Anzahl der Zeichen von Anfang OBIS bis Messwert, 
Messwertwertlaenge immer 8 Zeichen
%obis_len = (
'01010801FF' => 42, # Aktueller Zählerstand T1 + Bezug
'02020805FF' => 42, # Aktueller Zählerstand T5 -  Abgabe
'00010700FF' => 24  # Momentane Summe der Leistung +-
);
my $pos = 0;
my $hexval;
my @hexdec;
while ($i < 3) { # wenn 540 chars gelesen werden wird mit last 
abgebrochen, wenn nicht wird Schleife 2 mal widerholt
         my ($count,$saw)=$port->read(540);   # will read 540 chars
         if ($count == 540) {                 # wurden 540 chars gelesen ?
                 my $x=uc(unpack('H*',$saw)); # nach hex wandeln
                 # print  "$count <> $x\n ";  # gibt die empfangenen 
Daten in Hex aus
                 #
                 foreach $key(keys%obis_len){
$pos=index($x,$key);                              # pos von OBIS holen
                       $value = substr($x,$pos+$obis_len{$key},8);       
# Messwert
                       $value{$key} = hexstr_to_signed32int($value)/100; 
# von hex nach 32bit integer
                 }
                       last; # while verlassen
         }
         else {
                $i++;
                redo; # bei Fehler while nochmal
         }
}
#
# Momentane Summe der Leistung +- ausgeben
$value = $value{'00010700FF'} * -1;
print "00010700FF = " . $value . "\n";
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
Warum geht das in der Konsole nicht?
Gruß NetFritz





More information about the volkszaehler-users mailing list