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#
. Wobei es da eher um Kosmetik zu meinem vorherigen Script geht../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;

Ich hatte den im Verdacht dazwischen zu funken.
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