Ankündigung
Einklappen
Keine Ankündigung bisher.
Zählerabfrage als Wiregate Plugin
Einklappen
Dieses Thema ist geschlossen.
X
X
-
Lange her, aber ich hatte mal den Effekt, dass aus irgendwelchen Gründen mehrere Instanzen parallel liefen und daher nur noch Schrott gelesen haben.
-
Moin,
Ich habe nach langem Probieren das Skript sml_meter.pl zwar auch grundsätzlich am laufen, d.h. Gruppenadressen werden beschrieben, RRD Daten befüllt.
Jedoch geht mir nach ein paar Stunden die CPU Last des RasPi durch die Decke und er ist dadurch quasi nicht mehr ansprechbar und Kackt irgendwann ab,
so das nur noch ein reboot hilft....für ein paar Stunden...
Daher meine Frage:
Hat hier jemand mit einem ISKRA MT681 oder einem vergleichbaren SML Zähler ein script am laufen das zuverlässig funktioniert?
meine konfig: Zähler ISKRA MT681 sml-meter.pl Skript per cron aufruf (minütlich) auf RasPi 2B mit cometVisu und linknx
beste Grüße
Michael
Einen Kommentar schreiben:
-
Hi,
habe das Script iec62056.pl ohne probleme zum laufen gebracht. Im Zusammenspiel mit einem Elster AS 1440 und dem USB Kopf von Udo von Volkszähler.org hinbekommen.
VG
JürgenZuletzt geändert von heckmannju; 24.02.2016, 23:19.
Einen Kommentar schreiben:
-
Hallo Mirko,
die Werte wurden nicht auf die GA geschrieben.
Allerdings habe ichs jetzt hinbekommen keine Ahnung wie aber es läuft :-)
Danke totzdem.
Code:#!/usr/bin/perl -w # 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 (DPT14 beta fixed: Frank0207) # Version: 0.1.7 # Datum: 14.02.2013 use warnings; use strict; use RRDs; use feature "switch"; use EIBConnection; ### KONFIGURATION ### my $eib_url = "local:/tmp/eib"; #for local eibd "local:/tmp/eib" for eibd in LAN: "ip:192.168.2.220:6720" my $device = "/dev/ttyUSB0"; #Port ttyUSB0 my $rrdpath = "/var/www/rrd"; #Pfad fuer RRDs my $counterid = "yS_eHZ"; #Grundname fuer RRDs my $baudrate = "300"; #Baudrate fuer Zaehlerauslesung my @channels; #Obis-Zahl => Gruppenadresse push @channels, {name => "1.8.0", ga =>"12/6/0", dpt => 14 }; #Zählerstand gesamt push @channels, {name => "2.8.0", ga =>"12/6/1", dpt => 14 }; #Zählerstand gesamt my @countermodes = (5,15,60,1440); #Aufloesungen fuer COUNTER RRDs in Minuten (1440 = Tagesverbrauch) my $debug = 1; ### ENDE KONFIGURATION ### #Je nach Geschwindigkeit andere Befehle an Zaehler senden my %speedrate = ( "300"=>"'\x06\x30\x30\x30\x0d'", "600"=>"'\x06\x30\x31\x30\x0d\x0a'", "1200"=>"'\x06\x30\x32\x30\x0d\x0a'", "2400"=>"'\x06\x30\x33\x30\x0d\x0a'", "4800"=>"'\x06\x30\x34\x30\x0d\x0a'", "9600"=>"'\x06\x30\x35\x30\x0d\x0a'" ); my %speedrate_auto = ( "0"=>"'\x06\x30\x30\x30\x0d\x0a'", "1"=>"'\x06\x30\x31\x30\x0d\x0a'", "2"=>"'\x06\x30\x32\x30\x0d\x0a'", "3"=>"'\x06\x30\x33\x30\x0d\x0a'", "4"=>"'\x06\x30\x34\x30\x0d\x0a'", "5"=>"'\x06\x30\x35\x30\x0d\x0a'" ); my %baud = ( "0"=>"300", "1"=>"600", "2"=>"1200", "3"=>"2400", "4"=>"4800", "5"=>"9600" ); ### DATEN EMPFANGEN ### ### Anfrage Senden ### my $id = qx(echo '\x2f\x3f\x21\x0d' | socat -T 2 - $device,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0); #my $speedcode = substr($id,4,1); my $speedcode; my $ack = $speedrate{$baudrate}; ### Zaehlerkennung auswerten - Geschwindigkeit ermitteln ### if ($baudrate eq "auto") { $ack = $speedrate_auto{$speedcode}; $baudrate = $baud{$speedcode}; } else { $ack = $speedrate{$baudrate}; } if ($debug==1){print ($id,"\n")}; if ($debug==1){print ($baudrate,"\n")}; select(undef, undef, undef, 1); ### Abfrage starten ### my @buffer = qx(echo $ack | socat -t 2 - $device,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0; socat -T 2 - $device,raw,echo=0,b$baudrate,parenb=1,parodd=0,cs7,cstopb=0); if ($debug==1){print (@buffer,"\n")}; ### AUSWERTUNG ### foreach (@buffer) { foreach my $obis (@channels) { my $obiskey = $obis->{name}."*00("; if ($_ =~ /\Q$obiskey\E/) { $_ =~ m/[^(]+\(([^]+)\*([^)]+)/; my $value = $1; my $ga = $obis->{ga}; if ($debug==1){print ($obis->{name},"\n")}; if ($debug==1){print ($value,"\n")}; if ($debug==1){print ($ga,"\n")}; # rrd_counter ($obis->{name},$value) &knx_write ($ga,$value,$obis->{dpt}); } } } ### SUBS ### sub rrd_counter { if ($debug==1){print ("COUNTER","\n")}; foreach (@countermodes) { my $obisname = $_[0]; my $value = $_[1]; $obisname =~ tr/./-/; my $rrdname = $counterid."_".$obisname."_".$_."\.rrd"; if ($debug==1){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); if ($debug==1) {print ($_,"\n")}; if ($debug==1) {print ($countervalue,"\n")}; RRDs::update("$rrdfile", "N:$countervalue"); } } sub rrd_gauge { if ($debug==1){print ("GAUGE","\n")}; my $obisname = $_[0]; my $value = $_[1]; $obisname =~ tr/./-/; my $rrdname = $counterid."_".$obisname."\.rrd"; if ($debug==1){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 { my ($dst,$value,$dpt,$response,$dbgmsg) = @_; my $bytes; my $apci = ($response) ? 0x40 : 0x80; # 0x40=response, 0x80=write # DPT 1 (1 bit) = EIS 1/7 (move=DPT 1.8, step=DPT 1.7) # DPT 2 (1 bit controlled) = EIS 8 # DPT 3 (3 bit controlled) = EIS 2 # DPT 4 (Character) = EIS 13 # DPT 5 (8 bit unsigned value) = EIS 6 (DPT 5.1) oder EIS 14.001 (DPT 5.10) # DPT 6 (8 bit signed value) = EIS 14.000 # DPT 7 (2 byte unsigned value) = EIS 10.000 # DPT 8 (2 byte signed value) = EIS 10.001 # DPT 9 (2 byte float value) = EIS 5 # DPT 10 (Time) = EIS 3 # DPT 11 (Date) = EIS 4 # DPT 12 (4 byte unsigned value) = EIS 11.000 # DPT 13 (4 byte signed value) = EIS 11.001 # DPT 14 (4 byte float value) = EIS 9 # DPT 15 (Entrance access) = EIS 12 # DPT 16 (Character string) = EIS 15 # $dpt = $eibgaconf{$dst}{'DPTSubId'} unless $dpt; # read dpt from eibgaconf if existing given ($dpt) { when (/^12/) { $bytes = pack ("CCL>", 0, $apci, $value); } #EIS11.000/DPT12 (4 byte unsigned) when (/^13/) { $bytes = pack ("CCl>", 0, $apci, $value); } when (/^14/) { $bytes = pack ("CCf>", 0, $apci, $value); } when (/^16/) { $bytes = pack ("CCa14", 0, $apci, $value); } when (/^17/) { $bytes = pack ("CCC", 0, $apci, $value & 0x3F); } when (/^20/) { $bytes = pack ("CCC", 0, $apci, $value); } when (/^\d\d/) { return; } # other DPT XX 15 are unhandled when (/^[1,2,3]/) { $bytes = pack ("CC", 0, $apci | ($value & 0x3f)); } #send 6bit small when (/^4/) { $bytes = pack ("CCc", 0, $apci, ord($value)); } when ([5,5.001]) { $bytes = pack ("CCC", 0, $apci, encode_dpt5($value)); } #EIS 6/DPT5.001 1byte when ([5.004,5.005,5.010]) { $bytes = pack ("CCC", 0, $apci, $value); } when (/^5/) { $bytes = pack ("CCC", 0, $apci, $value); } when (/^6/) { $bytes = pack ("CCc", 0, $apci, $value); } when (/^7/) { $bytes = pack ("CCS>", 0, $apci, $value); } when (/^8/) { $bytes = pack ("CCs>", 0, $apci, $value); } when (/^9/) { $bytes = pack ("CCCC", 0, $apci, encode_dpt9($value)); } #EIS5/DPT9 2byte float default { LOGGER('WARN',"None or unsupported DPT: $dpt sent to $dst value $value"); return; } } my $leibcon = EIBConnection->EIBSocketURL($eib_url) or return("Error opening con: $!"); if ($leibcon->EIBOpenT_Group(str2addr($dst),1) == -1) { return("Error opening group: $!"); } my $res=$leibcon->EIBSendAPDU($bytes); $leibcon->EIBClose(); return $res; # str2addr: Convert an EIB address string in the form "1/2/3" or "1.2.3" to an integer sub str2addr { my $str = $_[0]; if ($str =~ /(\d+)\/(\d+)\/(\d+)/) { # logical address return ($1 << 11) | ($2 << 8) | $3; } elsif ($str =~ /(\d+)\.(\d+)\.(\d+)/) { # physical address return ($1 << 12) | ($2 << 8) | $3; } else { #bad return; } } } 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; }
Einen Kommentar schreiben:
-
Was ist das Problem? Einfach eine zweite Zeile "push @channels..." mit 2.8.0 anlegen.
Einen Kommentar schreiben:
-
Hallo Zusammen ich bekomme das Script einfach nicht vollständig zum laufen.
Hardware: Wiregate + Auslesekopf von Ude ( Volkszähler ) wird einwandfrei erkannt an /dev/ttyUSB0
Zähler: Pafal 20EC3gr ( müsste der gleiche sein wie Martinb07 gerade zum laufen gebracht hat )
Wenn ich die init.pl von Mirko ausführe bekomme ich folgende Ausgabe.
Wie man sieht ist mein Unterschied zu Martinb07 das ich 2 Zählerstände bekomme bzw. aufgrund der
PV Anlage auch brauche. 1.8.0 und 2.8.0
init.pl.JPG
Wenn ich jetzt das angepasste Script von Martinb07 aus post 499 ausführe
bekomme ich folgende Ausgabe.
Das Script müsste angepasst werden auf den 2ten Zählerstand 2.8.0 und
die Reg.Exprs.. müsste vermutlich auch angepasst werden.
Nach einigen Stunden try an error hab ichs leider nicht hinbekommen
das beide Zählersände jeweils auf eine GA geschrieben wird.
Vielen Dank für eure Hilfe.
Grüsse Benni
Code:root@wiregate1292:/tmp# perl meter1.pl Useless use of bitwise and (&) in void context at meter1.pl line 104. /PAF5EC3gr00006 300 0.0.0(71423880) 0.0.1(PAF) F.F(00) 0.2.0(1.27) 1.8.0*00(007544.16) 2.8.0*00(017160.35) C.2.1(000000000000)( ) 0.2.2(:::::G11)! | 1.8.0 7544.16 12/6/0 COUNTER yS_eHZ_1-8-0_5.rrd 5 2263248 yS_eHZ_1-8-0_15.rrd 15 6789744 yS_eHZ_1-8-0_60.rrd 60 27158976 yS_eHZ_1-8-0_1440.rrd 1440 651815424
Und hier der Script zu der Ausgabe:
Code:#!/usr/bin/perl -w # 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 (DPT14 beta fixed: Frank0207) # Version: 0.1.7 # Datum: 14.02.2013 use warnings; use strict; use RRDs; use feature "switch"; use EIBConnection; ### KONFIGURATION ### my $eib_url = "local:/tmp/eib"; #for local eibd "local:/tmp/eib" for eibd in LAN: "ip:192.168.2.220:6720" my $device = "/dev/ttyUSB0"; #Port ttyUSB0 my $rrdpath = "/var/www/rrd"; #Pfad fuer RRDs my $counterid = "yS_eHZ"; #Grundname fuer RRDs my $baudrate = "300"; #Baudrate fuer Zaehlerauslesung my @channels; #Obis-Zahl => Gruppenadresse push @channels, {name => "1.8.0", ga =>"12/6/0", dpt => 14 }; #Zählerstand gesamt my @countermodes = (5,15,60,1440); #Aufloesungen fuer COUNTER RRDs in Minuten (1440 = Tagesverbrauch) my $debug = 1; ### ENDE KONFIGURATION ### #Je nach Geschwindigkeit andere Befehle an Zaehler senden my %speedrate = ( "300"=>"'\x06\x30\x30\x30\x0d'", "600"=>"'\x06\x30\x31\x30\x0d\x0a'", "1200"=>"'\x06\x30\x32\x30\x0d\x0a'", "2400"=>"'\x06\x30\x33\x30\x0d\x0a'", "4800"=>"'\x06\x30\x34\x30\x0d\x0a'", "9600"=>"'\x06\x30\x35\x30\x0d\x0a'" ); my %speedrate_auto = ( "0"=>"'\x06\x30\x30\x30\x0d\x0a'", "1"=>"'\x06\x30\x31\x30\x0d\x0a'", "2"=>"'\x06\x30\x32\x30\x0d\x0a'", "3"=>"'\x06\x30\x33\x30\x0d\x0a'", "4"=>"'\x06\x30\x34\x30\x0d\x0a'", "5"=>"'\x06\x30\x35\x30\x0d\x0a'" ); my %baud = ( "0"=>"300", "1"=>"600", "2"=>"1200", "3"=>"2400", "4"=>"4800", "5"=>"9600" ); ### DATEN EMPFANGEN ### ### Anfrage Senden ### my $id = qx(echo '\x2f\x3f\x21\x0d' | socat -T 2 - $device,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0); #my $speedcode = substr($id,4,1); my $speedcode; my $ack = $speedrate{$baudrate}; ### Zaehlerkennung auswerten - Geschwindigkeit ermitteln ### if ($baudrate eq "auto") { $ack = $speedrate_auto{$speedcode}; $baudrate = $baud{$speedcode}; } else { $ack = $speedrate{$baudrate}; } if ($debug==1){print ($id,"\n")}; if ($debug==1){print ($baudrate,"\n")}; select(undef, undef, undef, 1); ### Abfrage starten ### my @buffer = qx(echo $ack | socat -t 2 - $device,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0; socat -T 2 - $device,raw,echo=0,b$baudrate,parenb=1,parodd=0,cs7,cstopb=0); if ($debug==1){print (@buffer,"\n")}; ### AUSWERTUNG ### foreach (@buffer) { foreach my $obis (@channels) { my $obiskey = $obis->{name}."*00("; if ($_ =~ /\Q$obiskey\E/) { $_ =~ m/[^(]+\(([^)]+)/; my $value = sprintf("%.2f",$1); # $value += 0; my $ga = $obis->{ga}; if ($debug==1){print ($obis->{name},"\n")}; if ($debug==1){print ($value,"\n")}; if ($debug==1){print ($ga,"\n")}; rrd_counter ($obis->{name},$value) &knx_write ($ga,$value,$obis->{dpt}); } } } ### SUBS ### sub rrd_counter { if ($debug==1){print ("COUNTER","\n")}; foreach (@countermodes) { my $obisname = $_[0]; my $value = $_[1]; $obisname =~ tr/./-/; my $rrdname = $counterid."_".$obisname."_".$_."\.rrd"; if ($debug==1){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); if ($debug==1) {print ($_,"\n")}; if ($debug==1) {print ($countervalue,"\n")}; RRDs::update("$rrdfile", "N:$countervalue"); } } sub rrd_gauge { if ($debug==1){print ("GAUGE","\n")}; my $obisname = $_[0]; my $value = $_[1]; $obisname =~ tr/./-/; my $rrdname = $counterid."_".$obisname."\.rrd"; if ($debug==1){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 { my ($dst,$value,$dpt,$response,$dbgmsg) = @_; my $bytes; my $apci = ($response) ? 0x40 : 0x80; # 0x40=response, 0x80=write # DPT 1 (1 bit) = EIS 1/7 (move=DPT 1.8, step=DPT 1.7) # DPT 2 (1 bit controlled) = EIS 8 # DPT 3 (3 bit controlled) = EIS 2 # DPT 4 (Character) = EIS 13 # DPT 5 (8 bit unsigned value) = EIS 6 (DPT 5.1) oder EIS 14.001 (DPT 5.10) # DPT 6 (8 bit signed value) = EIS 14.000 # DPT 7 (2 byte unsigned value) = EIS 10.000 # DPT 8 (2 byte signed value) = EIS 10.001 # DPT 9 (2 byte float value) = EIS 5 # DPT 10 (Time) = EIS 3 # DPT 11 (Date) = EIS 4 # DPT 12 (4 byte unsigned value) = EIS 11.000 # DPT 13 (4 byte signed value) = EIS 11.001 # DPT 14 (4 byte float value) = EIS 9 # DPT 15 (Entrance access) = EIS 12 # DPT 16 (Character string) = EIS 15 # $dpt = $eibgaconf{$dst}{'DPTSubId'} unless $dpt; # read dpt from eibgaconf if existing given ($dpt) { when (/^12/) { $bytes = pack ("CCL>", 0, $apci, $value); } #EIS11.000/DPT12 (4 byte unsigned) when (/^13/) { $bytes = pack ("CCl>", 0, $apci, $value); } when (/^14/) { $bytes = pack ("CCf>", 0, $apci, $value); } when (/^16/) { $bytes = pack ("CCa14", 0, $apci, $value); } when (/^17/) { $bytes = pack ("CCC", 0, $apci, $value & 0x3F); } when (/^20/) { $bytes = pack ("CCC", 0, $apci, $value); } when (/^\d\d/) { return; } # other DPT XX 15 are unhandled when (/^[1,2,3]/) { $bytes = pack ("CC", 0, $apci | ($value & 0x3f)); } #send 6bit small when (/^4/) { $bytes = pack ("CCc", 0, $apci, ord($value)); } when ([5,5.001]) { $bytes = pack ("CCC", 0, $apci, encode_dpt5($value)); } #EIS 6/DPT5.001 1byte when ([5.004,5.005,5.010]) { $bytes = pack ("CCC", 0, $apci, $value); } when (/^5/) { $bytes = pack ("CCC", 0, $apci, $value); } when (/^6/) { $bytes = pack ("CCc", 0, $apci, $value); } when (/^7/) { $bytes = pack ("CCS>", 0, $apci, $value); } when (/^8/) { $bytes = pack ("CCs>", 0, $apci, $value); } when (/^9/) { $bytes = pack ("CCCC", 0, $apci, encode_dpt9($value)); } #EIS5/DPT9 2byte float default { LOGGER('WARN',"None or unsupported DPT: $dpt sent to $dst value $value"); return; } } my $leibcon = EIBConnection->EIBSocketURL($eib_url) or return("Error opening con: $!"); if ($leibcon->EIBOpenT_Group(str2addr($dst),1) == -1) { return("Error opening group: $!"); } my $res=$leibcon->EIBSendAPDU($bytes); $leibcon->EIBClose(); return $res; # str2addr: Convert an EIB address string in the form "1/2/3" or "1.2.3" to an integer sub str2addr { my $str = $_[0]; if ($str =~ /(\d+)\/(\d+)\/(\d+)/) { # logical address return ($1 << 11) | ($2 << 8) | $3; } elsif ($str =~ /(\d+)\.(\d+)\.(\d+)/) { # physical address return ($1 << 12) | ($2 << 8) | $3; } else { #bad return; } } } 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; }
Angehängte Dateien
Einen Kommentar schreiben:
-
Zitat von martinb07 Beitrag anzeigenAuch das 60er rrd gibt nur die Differenzen aus:
Sieh es Dir einfach mal an wenn Du das rrd als Gauge definierst -> das wird ziemlich sinnfrei.
Hinter dem was Du vor hast steckt eine sqlite-Datenbank die sich mit sh.py sehr gut abfragen lässt. Mit rrd`s wird das blutiger. Kosten, Vortagesverbräuche usw. kommen alle aus Logiken und werden Anhand des Zählerstandes berechnet, das fällt nicht einfach so raus. Um sowas in der CometVisu darzustellen benötigst Du ein separates Plugin was aus dem Zählerstand die WErte berechnet und auf den Bus sendet bzw. geht das glaub ich auch aus plugin_info -> goto CometVisu-Forum.
Gruß Mirko
Einen Kommentar schreiben:
-
Sowas schwebt mir auch vor:
Auch das 60er rrd gibt nur die Differenzen aus:
Angehängte Dateien
- Likes 1
Einen Kommentar schreiben:
-
Das RRD liefert Differenzen und keine Stände.
Sieh Dir mal das _60er an. Damit sollte der Verbrauch pro Stunde geliefert werden.
Andersrum gefragt, was willst Du erreichen ?
- Likes 1
Einen Kommentar schreiben:
-
Ja ist das ist das 5 Minuten RRD, genauso wie der Auszug der einzelnen Werte.
Anbei mein derzeitiges Script.
Debugausgaben in Zeile 129f zeigen noch die richtig berechneten Werte. Im RRD tauchen aber ganz andere auf.Angehängte Dateien
Einen Kommentar schreiben:
-
Welches rrd siehst Du Dir an, es sollten 3 oder 4 (@countermodes) erzeugt werden! Ansonsten mal Deine Variante vom Plugin posten.
Das scheint das 5-Minuten rrd zu sein.
Einen Kommentar schreiben:
-
Mit Try and Error habe ich es jetzt geschafft, dass der aktuelle Zäherstand auf die GA gesendet wird. Im eib.log kommt der Wert richtig an.
Im rrd steht aber ein ganz Anderer. Da kommen Werte von 0,0095 bis 0,01319 an.
Edit:
Aus dem "rrdtool fetch ...."
Code:1421962800: 9,5333769851e-03 1421963100: 4,6662301489e-04 1421963400: 0,0000000000e+00 1421963700: 9,5294818345e-03 1421964000: 4,7051816548e-04 1421964300: 6,3528384854e-03 1421964600: 3,1382818128e-04
Angehängte Dateien
Einen Kommentar schreiben:
-
cron erreichst Du im webmin wenn Du als root angemeldet bist.
Sieh Dir dort die Ausgabe mal an, im Zweifel das WireGate einfach mal neu starten, nicht dass dort noch irgendwelche Prozessleichen lungern, für mich sieht die Fehlermeldung aber nicht nach einem Zusammenhang zum Script aus.
Einen Kommentar schreiben:
-
Wie wär's denn, die Funktion über den Logikprozessor anzustoßen? Der hat nette Funktionen zur Zeitsteuerung. Klar, das bringt ein bisschen Overhead, aber so dramatisch sollte das nicht sein...
Einen Kommentar schreiben:
-
Jetzt habe ich aber noch eine Frage bzw. ein Problem. Anscheinend funktioniert mein Cronjob nicht.
Diesen gebe ich doch einfach unter
Code:crontab -e
Bei mir lautet er
Code:*/5 * * * * perl /etc/wiregate/plugin/iec62056-meter.pl
Edit:
Du schreibst hier, dass man über das Webmin den Cron anstoßen kann und die Ausgabe dazu erhält. Ich finde dazu leider nichts.
In welchem Logfile stehen denn die Meldungen von Cron?
Im syslog steht:
Code:.... 'socat1' process is not running .... 'socat1' trying to restart .... 'socat1'start: /sbin/start-stop-daemon .... 'socat1' failed to start
Einen Kommentar schreiben:
Einen Kommentar schreiben: