Hmm, danke, ich verlier auch mal gern den Überblick.. Tut sich (bei lio) trotzdem nichts, also garnichts, ist halt schwer zu sagen wenn man nicht davorsitzt 
Makki

Makki
root@wiregate403:/var/tmp# bash testsock Initialisierung senden: ": "0" or "1" requiredcat[12278] E error in option "cstopb=0 Übertragungsrate auf 4800 Baud hochsetzen ": "0" or "1" requiredcat[12280] E error in option "cstopb=0 Daten ausgeben: root@wiregate403:/var/tmp# bash testsock Initialisierung senden: ": "0" or "1" requiredcat[12304] E error in option "cstopb=0 Übertragungsrate auf 4800 Baud hochsetzen ": "0" or "1" requiredcat[12306] E error in option "cstopb=0 Daten ausgeben:
root@wiregate403:/var/tmp# echo $'\x2f\x3f\x21\x0d\x0a' | socat -T 1 - /dev/Zaehler_HZ,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0 /LGZ4ZMF100AC.M23 root@wiregate403:/var/tmp# echo $'\x06\x30\x34\x30\x0d\x0a' | socat -T 1 - /dev/Zaehler_HZ,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0 root@wiregate403:/var/tmp# socat -T 1 - /dev/Zaehler_HZ,raw,echo=0,b4800,parenb=1,parodd=0,cs7,cstopb=0 F.F(00) C.1.0(12064955) 0.0( 2200391 ) C.1.1( ) 1.8.1(000385.090*kWh) 1.8.2(000000.000*kWh) 1.8.3(000000.000*kWh) 1.8.4(000000.000*kWh) 1.8.0(000385.090*kWh) 2.8.0(000000.000*kWh) 15.8.0(000385.090*kWh) 32.7(236*V) 52.7(237*V) 72.7(237*V) 31.7(000.31*A) 51.7(000.59*A) 71.7(000.06*A) 16.7(000.07*kW) C.5.0(0400) C.7.0(0002) 0.2.0(M23) ! root@wiregate403:/var/tmp#
./testsock
#!/bin/perl my $device = "/dev/ttyUSB0"; my @values = qx(echo \$'\x2f\x3f\x21\x0d\x0a' | socat -T 1 - $device,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0; sleep 1; echo \$'\x06\x30\x35\x30\x0d\x0a' | socat -T 1 - $device,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0; socat -T 1 - $device,raw,echo=0,b9600,parenb=1,parodd=0,cs7,cstopb=0); my $anzahl=@values; # Daten ausgeben print "Ausgabe der Zeilen vom Zähler:\n"; foreach (@values){ print "$_"; } print "Anzahl Zeilen: $anzahl\n";
#!/usr/bin/perl use warnings; use strict; system ("echo '\x2f\x3f\x21\x0d\x0a' | socat -T 1 - /dev/Zaehler_HZ,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0"); sleep (1); system ("echo '\x06\x30\x34\x30\x0d\x0a' | socat -T 1 - /dev/Zaehler_HZ,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0"); my $data = qx (socat -T 1 - /dev/Zaehler_HZ,raw,echo=0,b4800,parenb=1,parodd=0,cs7,cstopb=0); print $data; open(LOG,'>',"/var/tmp/HZ.log") || die "Fehler $!"; print LOG ($data); close LOG;
#!/usr/bin/perl $plugin_info{$plugname.'_cycle'} = 120; system ("echo '\x2f\x3f\x21\x0d\x0a' | socat -T 1 - /dev/Zaehler_HZ,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0"); sleep (1.5); system ("echo '\x06\x30\x34\x30\x0d\x0a' | socat -T 1 - /dev/Zaehler_HZ,raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0"); my $data = qx (socat -T 1 - /dev/Zaehler_HZ,raw,echo=0,b4800,parenb=1,parodd=0,cs7,cstopb=0); print $data; open(LOG,'>',"/var/tmp/HZ.log") || die "Fehler $!"; print LOG ($data); close LOG; return $data;
#!/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 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 # Version: 0.1.4 # Datum: 30.05.2012 use warnings; use strict; use RRDs; ### KONFIGURATION ### my $device = "/dev/Zaehler_HZ"; #Port my $rrdpath = "/var/www/rrd"; #Pfad für RRDs my $counterid = "HZ"; #Grundname für RRDs my $speed = "4"; #noch nicht implementiert my %channels = ( #Obis-Zahl => Gruppenadresse "16.7"=>"12/1/2", "32.7"=>"12/1/3", "52.7"=>"12/1/4", "31.7"=>"12/1/5", "51.7"=>"12/1/6", "71.7"=>"12/1/7", "72.7"=>"12/1/8", "1.8.1"=>"12/1/9" ); my @countermodes = (5,15,60,1440); #RRD-Intervall für COUNTER ### ENDE KONFIGURATION ### system ("echo '\x2f\x3f\x21\x0d\x0a' | socat -T 1 - ".$device.",raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0"); ### Warte auf Zaehlerkennung select(undef, undef, undef, 1.5); # 1.5 Sekunden warten ### Telegramm mit ACK und neuer Geschwindigkeit senden system ("echo '\x06\x30\x34\x30\x0d\x0a' | socat -T 1 - ".$device.",raw,echo=0,b300,parenb=1,parodd=0,cs7,cstopb=0"); my @buffer = qx (socat -T 1 - $device,raw,echo=0,b4800,parenb=1,parodd=0,cs7,cstopb=0); #print @buffer; foreach (@buffer) { foreach my $obis(%channels) { my $obiskey = $obis."\("; if ($_ =~ /\Q$obiskey\E/) { $_ =~ m/[^(]+\(([^*]+)\*([^)]+)/; my $value = $1; my $unit = $2; my $ga = $channels{$obis}; print ($obis,"\n"); print ($value,"\n"); print ($unit,"\n"); print ($ga,"\n"); if ($unit =~ /\Qh\E/) { &rrd_counter ($obis,$value) } else { &rrd_gauge ($obis,$value) } &knx_write ($ga,$value); #&LOGS ($obis,$1,$2); } } } ### SUBS sub rrd_counter { print ("COUNTER","\n"); foreach (@countermodes) { my $obisname = $_[0]; my $value = $_[1]; $obisname =~ tr/./-/; my $rrdname = $counterid."_".$obisname."_".$_."\.rrd"; 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); RRDs::update("$rrdfile", "N:$countervalue"); } } sub rrd_gauge { print ("GAUGE","\n"); my $obisname = $_[0]; my $value = $_[1]; $obisname =~ tr/./-/; my $rrdname = $counterid."_".$obisname."\.rrd"; 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 { ### Wert in DPT9 umwandeln und in Konsole ausgeben my @hexdec = encode_dpt9($_[1]); my $hexval = sprintf("%x", $hexdec[0]) . " " . sprintf("%x", $hexdec[1]); #print ($hexval,"\n"); system("groupwrite ip:localhost $_[0] $hexval"); } 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; } #open(LOG,'>',"/var/tmp/HZ.log") || die "Fehler $!"; #print LOG (@buffer); #close LOG;
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