Fritz, danke für die Links.
EnBW wird schon nächste Woche bei mir die Zähler tauschen.
Grüße,
Lio
EnBW wird schon nächste Woche bei mir die Zähler tauschen.
Grüße,
Lio
# Monitoring a eHz Reader (SML) # v0.1 # License: GPL v2 # basierend auf Untersuchungen hier: [URL="http://www.ip-symcon.de/forum/f23/stromzaehler-geht-rente-11117/"]Mein Stromzähler geht in Rente!! Und nun? - IP-Symcon Community Forum[/URL] use Device::SerialPort; use strict; my @reader; my @GA_MeterReading; my @GA_ActivePower; $reader[0] = Device::SerialPort->new("/dev/ttyUSB-1-4.7"); # USB Device erster Reader/Zähler $reader[1] = Device::SerialPort->new("/dev/ttyUSB-1-4.5"); # USB Device zweiter Reader/Zähler #$reader[2] = Device::SerialPort->new("/dev/ttyUSB-1-4.6"); # USB Device dritter Reader/Zähler $GA_MeterReading[0] = "0/0/1"; # GA für Wert (Zählerstand) erster Zähler $GA_MeterReading[1] = "0/0/2"; # GA für Wert (Zählerstand) zweiter Zähler #$GA_MeterReading[2] = "0/0/3"; # GA für Wert (Zählerstand) dritter Zähler $GA_ActivePower[0] = "0/0/4"; # GA für Wert (Zählerstand) erster Zähler $GA_ActivePower[1] = "0/0/5"; # GA für Wert (Zählerstand) zweiter Zähler #$GA_ActivePower[2] = "0/0/6"; # GA für Wert (Zählerstand) dritter Zähler my $abs_ls = "ff628201621e52ff69"; # Hex-Wert um den Beginn des abolsuten Standes zu kennzeichnen my $abs_rs = "01770700006001ff";# Hex-Wert um das Ende des abolsuten Standes zu kennzeichnen my $cur_ls = "ff628201621b52fc55";# Hex-Wert um den Beginn des derzeitigen Verbrauchs zu kennzeichnen my $cur_rs = "01010163";# Hex-Wert um das Ende des derzeitigen Verbrauchs zu kennzeichnen my $glob_timeout=20; # Timeout, vermutlich zu hoch für WG sub readSML { my $port = $_[0]; my $ls = $_[1]; my $rs = $_[2]; $port->databits(8); $port->baudrate(9600); $port->parity("none"); $port->stopbits(1); $port->purge_all(); $port->rts_active(0); $port->dtr_active(1); $port->read_char_time(0); # don't wait for each character $port->read_const_time(1000); # 1 second per unfulfilled "read" call my $abs=0; my $chars=0; my $buffer=""; my $timeout=$glob_timeout; while ($timeout>0) { my ($count,$saw)=$port->read(1); # will read _up to_ 255 chars if ($count > 0) { $chars+=$count; $buffer.=sprintf("%02x",unpack("C",$saw)); $buffer =~ /$ls(.*?)$rs/; $abs = hex($1)/10000; if ($abs != 0) { return $abs; } } else { $timeout--; } } if ($timeout==0) { die "Waited $glob_timeout seconds and got no SML message\n"; } } $plugin_info{$plugname.'_cycle'} = 60; for my $i (0 .. $#reader) { my $MeterReading = -1; my $ActivePower = -1; $MeterReading = &readSML($reader[$i],$abs_ls,$abs_rs); $ActivePower = &readSML($reader[$i],$cur_ls,$cur_rs); if ($MeterReading != -1) { update_rrd("MeterReading_$i","",$MeterReading); if ($GA_MeterReading[$i]) { knx_write( $GA_MeterReading[0] , $MeterReading, 9 ); } } if ($ActivePower != -1) { update_rrd("ActivePower_$i","",$ActivePower); if ($GA_ActivePower[$i]) { knx_write( $GA_ActivePower[0] , $ActivePower, 9 ); } } } return 0;
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar