2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-04 05:16:45 +00:00

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
This commit is contained in:
ststrobel 2015-05-15 09:36:45 +00:00
parent b447754b6b
commit 0e912200b2

View File

@ -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.