2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-01-31 18:59:33 +00:00

47_OBIS: added summary for new commandref

git-svn-id: https://svn.fhem.de/fhem/trunk@11988 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
icinger 2016-08-19 17:46:37 +00:00
parent e50b91b6b2
commit 9695a81b61

View File

@ -76,7 +76,7 @@ sub OBIS_Initialize($)
$hash->{ReadyFn} = "OBIS_Ready";
$hash->{DefFn} = "OBIS_Define";
$hash->{ParseFn} = "OBIS_Parse";
# $hash->{SetFn} = "OBIS_Set";
$hash->{SetFn} = "OBIS_Set";
$hash->{UndefFn} = "OBIS_Undef";
$hash->{AttrFn} = "OBIS_Attr";
@ -125,7 +125,7 @@ sub OBIS_Define($$)
if($baudrate =~ m/(\d+)(,([78])(,([NEO])(,([012]))?)?)?/) {
$baudrate = $1 if(defined($1));
}
my %bd=("300"=>"0","600"=>"1","1200"=>"2","2400"=>"3","4800"=>"4","9600"=>"5");
my %bd=("300"=>"0","600"=>"1","1200"=>"2","2400"=>"3","4800"=>"4","9600"=>"5","18200"=>"6","36400"=>"7","57600"=>"8","115200"=>"9");
$hash->{helper}{SPEED}=$bd{$baudrate};
}
else {$baudrate=9600; $hash->{helper}{SPEED}="5";}
@ -156,6 +156,33 @@ sub OBIS_Define($$)
return DevIo_OpenDev($hash, 0, "OBIS_Init");
}
sub OBIS_Set($@)
{
my ( $hash, @a ) = @_;
my $name = shift @a;
my $opt = shift @a;
my $value = join("", @a);
my $teststr="";
my %bd=("300"=>"0","600"=>"1","1200"=>"2","2400"=>"3","4800"=>"4","9600"=>"5","18200"=>"6","36400"=>"7","57600"=>"8","115200"=>"9");
if ($opt eq "setSpeed") {
if ($bd{$value} ne $hash->{helper}{SPEED}) {
$hash->{helper}{BUFFER}="";
$hash->{helper}{SPEED}=$bd{$value};
print "old Helper: $hash->{helper}{DEVICES}[2] \r\n";
$hash->{helper}{DEVICES}[2]=$hash->{helper}{DEVICES}[2] eq "" ? "" : chr(6)."0".$hash->{helper}{SPEED}."0".chr(13).chr(10);
print "new Helper: $hash->{helper}{DEVICES}[2] \r\n";
$hash->{helper}{SpeedChange}=$value;
DevIo_SimpleWrite($hash,$hash->{helper}{DEVICES}[0],undef) ;
print "Wrote $hash->{helper}{DEVICES}[0]\r\n";
}
}
return;
}
# Update-Routine
sub GetUpdate($)
{
@ -168,6 +195,7 @@ sub GetUpdate($)
if ($hash->{helper}{DEVICES}[1] eq "") {return undef;}
if( $init_done ) {
DevIo_SimpleWrite($hash,$hash->{helper}{DEVICES}[0],undef) ;
Log3 $hash,4,"Wrote $hash->{helper}{DEVICES}[0]";
}
my $t=OBIS_adjustAlign($hash,AttrVal($name,"alignTime",undef),$hash->{helper}{DEVICES}[1]);
Log3 ($hash,5,"OBIS ($name) - Internal timer set to ".FmtDateTime($t)) if ($hash->{helper}{DEVICES}[1]>0);
@ -176,6 +204,7 @@ sub GetUpdate($)
sub OBIS_Init($)
{
Log 3,"Init done";
return undef;
}
#####################################
@ -195,7 +224,52 @@ sub OBIS_Read($)
my $name = $hash->{NAME};
my $buf = DevIo_SimpleRead($hash);
OBIS_Parse($hash,$buf) if ($hash->{helper}{EoM}!=1);
my $b=$buf;
$b =~ s/(.)/sprintf("%X",ord($1))/eg;
if ($hash->{helper}{SpeedChange} eq "")
{
OBIS_Parse($hash,$buf) if ($hash->{helper}{EoM}!=1);
Log3 $hash,4, "parsing....\r\n";
} else
{
if ($hash->{helper}{SpeedChange2} eq "")
{
Log3 $hash,4,"Part 1";
# $hash->{helper}{SPEED}=$bd{$value};
DevIo_SimpleWrite($hash,$hash->{helper}{DEVICES}[2],undef) ;
Log3 $hash,4,"Writing ".$hash->{helper}{DEVICES}[2];
$hash->{helper}{SpeedChange2}="1";
} elsif ($hash->{helper}{SpeedChange2} eq "1")
{
if ($buf ne hex(15)) {
Log3 $hash,4,"Part 2";
my $sp=$hash->{helper}{SPEED};
my $d=$hash->{DeviceName};
my $repl=$sp;
Log3 $hash,4,"Old Dev: $d";
$d=~/(.*@)(\d*)(.*)/;
my $d2=$1.$hash->{helper}{SpeedChange}.$3;
# $d=~s/(.*@)(\d*)(.*)/$repl$2/ee;
Log3 $hash,4, "Replaced dev: $d2";
RemoveInternalTimer($hash);
DevIo_CloseDev($hash) if $hash->{DeviceName} ne "none";
$hash->{DeviceName} = $d2;
$hash->{helper}{EoM}=-1;
Log3 $hash,5,"OBIS ($name) - Opening device...";
my $t=OBIS_adjustAlign($hash,AttrVal($name,"alignTime",undef),$hash->{helper}{DEVICES}[1]);
Log3 ($hash,5,"OBIS ($name) - Internal timer set to ".FmtDateTime($t)) if ($hash->{helper}{DEVICES}[1]>0);
InternalTimer($t, "GetUpdate", $hash, 0) if ($hash->{helper}{DEVICES}[1]>0);
DevIo_OpenDev($hash, 1, "OBIS_Init");
} else
{
Log3 $hash,4,"Recieved NAK from Meter";
}
$hash->{helper}{SpeedChange2}="";
$hash->{helper}{SpeedChange}="";
Log3 $hash,4, "Cleared helper\r\n";
}
}
}
return(undef);
}
@ -681,6 +755,8 @@ sub OBIS_decodeTL($){
=pod
=item device
=item summary Collects data from Smartmeters that report in OBIS-Standard
=item summary_DE Wertet Smartmeter aus, welche ihre Daten im OBIS-Standard senden
=begin html
<a name="OBIS"></a>