fix: fhem abort at define of IODev

git-svn-id: https://svn.fhem.de/fhem/trunk@17274 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
hexenmeister 2018-09-04 20:26:40 +00:00
parent 4011faf0dc
commit c6120fd4da

View File

@ -29,7 +29,7 @@ use warnings;
#my $DEBUG = 1; #my $DEBUG = 1;
my $cvsid = '$Id$'; my $cvsid = '$Id$';
my $VERSION = "version 0.9.3 by hexenmeister\n$cvsid"; my $VERSION = "version 0.9.4 by hexenmeister\n$cvsid";
my %sets = ( my %sets = (
); );
@ -394,6 +394,12 @@ sub removeOldUserAttr($;$$) {
# kann spaeter auch delFromDevAttrList Methode genutzt werden # kann spaeter auch delFromDevAttrList Methode genutzt werden
my @devices = devspec2array($devspec); my @devices = devspec2array($devspec);
foreach my $dev (@devices) { foreach my $dev (@devices) {
# TODO: eingekommentieren, alte entfernen, testen
#delFromDevAttrList($dev,$prefix.CTRL_ATTR_NAME_DEFAULTS);
#delFromDevAttrList($dev,$prefix.CTRL_ATTR_NAME_ALIAS);
#delFromDevAttrList($dev,$prefix.CTRL_ATTR_NAME_PUBLISH);
#delFromDevAttrList($dev,$prefix.CTRL_ATTR_NAME_SUBSCRIBE);
#delFromDevAttrList($dev,$prefix.CTRL_ATTR_NAME_IGNORE);
my $ua = $main::attr{$dev}{userattr}; my $ua = $main::attr{$dev}{userattr};
if (defined $ua) { if (defined $ua) {
my %h = map { ($_ => 1) } split(" ", "$ua"); my %h = map { ($_ => 1) } split(" ", "$ua");
@ -1531,16 +1537,20 @@ sub Attr($$$$) {
# #
$attribute eq "IODev" and do { $attribute eq "IODev" and do {
my $ioDevType = undef; my $ioDevType = undef;
$ioDevType = $defs{$value}{TYPE} if defined $defs{$value}; $ioDevType = $defs{$value}{TYPE} if defined ($value) and defined ($defs{$value});
$hash->{+HELPER}->{+IO_DEV_TYPE} = $ioDevType; $hash->{+HELPER}->{+IO_DEV_TYPE} = $ioDevType;
if ($main::init_done) { if ($main::init_done) {
if ($command eq "set") { if ($command eq "set") {
MQTT::client_stop($hash) if $ioDevType eq 'MQTT'; unless (defined ($hash->{IODev}) and ($hash->{IODev} eq $value) ) {
$main::attr{$name}{IODev} = $value; MQTT::client_stop($hash) if defined($main::attr{$name}{IODev}) and ($main::attr{$name}{IODev} eq 'MQTT');
MQTT::client_start($hash) if $ioDevType eq 'MQTT'; $main::attr{$name}{IODev} = $value;
$hash->{IODev} = $value;
RemoveAllSubscripton($hash);
MQTT::client_start($hash) if defined ($ioDevType) and ($ioDevType eq 'MQTT');
}
} else { } else {
MQTT::client_stop($hash) if $ioDevType eq 'MQTT'; MQTT::client_stop($hash) if defined ($ioDevType) and ($ioDevType eq 'MQTT');
} }
} }
last; last;