[vz-users] vzlogger Easymeter Q3C
NetFritz
NetFritz at gmx.de
Tue Sep 11 15:15:56 CEST 2012
Hallo
Habe mal den Auslesekopf an meinen alten Linux
<http://knx-user-forum.de/lexikon/tag/Linux/>-Rechner mit Debian
<http://knx-user-forum.de/lexikon/tag/Debian/>/squeeze/sid angestöpselt.
Und siehe da, ein
stty -F /dev/sttyUSB0 9600
od -x /dev/sttyUSB0
in der Konsole bringt schlüssige SML Daten.
Eine Abfrage von stty -F /dev/sttyUSB0 bring:
Code:
speed 9600 baud; line = 0;
eof = ^A; min = 1; time = 0;
-brkint -icrnl -imaxbel
-opost -onlcr
-icanon -echo -echoe
Eine Abfrage von stty -F /dev/sttyUSB0 am Alix-Board mit Debian Lenny bring:
Code:
speed 9600 baud; line = 0;
min = 1; time = 0;
-brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -iexten -echo
Welcher Eintrag ist denn wohl denn dafür verantwortlich das ich die
SML-Daten mit dem Debian-Lenny in der Konsole nicht abfragen kann?
Gruß NetFritz
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://volkszaehler.org/pipermail/volkszaehler-users/attachments/20120911/a11f904e/attachment.html>
More information about the volkszaehler-users
mailing list