From 0e912200b2b52a79501c6c9cb1e2ca213fe0345b Mon Sep 17 00:00:00 2001 From: ststrobel <> Date: Fri, 15 May 2015 09:36:45 +0000 Subject: [PATCH] 98_Modbus.pm: fix bug that crashed when redefining the device git-svn-id: https://svn.fhem.de/fhem/trunk@8582 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/98_Modbus.pm | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/fhem/FHEM/98_Modbus.pm b/fhem/FHEM/98_Modbus.pm index b4f9506f2..2be7a21e6 100755 --- a/fhem/FHEM/98_Modbus.pm +++ b/fhem/FHEM/98_Modbus.pm @@ -764,7 +764,16 @@ ModbusLD_SetIODev($) { my ($hash) = @_; my $name = $hash->{NAME}; - my $ioDev = AttrVal($name, "IODev", ""); + my $ioName = AttrVal($name, "IODev", ""); + my $ioDev; + if ($ioName) { + if ($defs{$ioName}) { # gibt es den Geräte hash zum IODev Attribut? + $ioDev = $defs{$ioName}; + Log3 $name, 5, "$name: SetIODev is using $ioName given in attribute"; + } else { + Log3 $name, 3, "$name: SetIODev can't use $ioName - device does not exist"; + } + } if (!$ioDev) { for my $p (sort { $defs{$b}{NR} <=> $defs{$a}{NR} } keys %defs) { if ( $defs{$p}{TYPE} eq "Modbus") { @@ -772,16 +781,14 @@ ModbusLD_SetIODev($) last; } } - if ($ioDev) { - $attr{$name}{IODev} = $ioDev->{NAME}; # set IODev attribute - Log3 $name, 5, "$name: SetIODev $ioDev->{NAME}"; - } else { - Log3 $name, 3, "$name: SetIODev found no physical modbus device"; - } - } else { - Log3 $name, 5, "$name: SetIODev is using $ioDev->{NAME} given in attribute"; } - $hash->{IODev} = $ioDev; + if ($ioDev) { + $attr{$name}{IODev} = $ioDev->{NAME}; # set IODev attribute + $hash->{IODev} = $ioDev; # set internal to io device hash + Log3 $name, 5, "$name: SetIODev $ioDev->{NAME}"; + } else { + Log3 $name, 3, "$name: SetIODev found no physical modbus device"; + } return $ioDev; } @@ -814,7 +821,7 @@ ModbusLD_Define($$) $hash->{getList} = ""; $hash->{setList} = ""; - if ($dest) { + if ($dest) { # Modbus TCP mit IP Adresse angegeben. $hash->{IODev} = $hash; # Modul ist selbst IODev $hash->{defptr}{$id} = $hash; # ID verweist zurück auf eigenes Modul $hash->{DeviceName} = $dest; # needed by DevIo to get Device, Port, Speed etc.