diff --git a/fhem/FHEM/00_LIRC.pm b/fhem/FHEM/00_LIRC.pm index e22992e9c..6d7355759 100644 --- a/fhem/FHEM/00_LIRC.pm +++ b/fhem/FHEM/00_LIRC.pm @@ -7,8 +7,6 @@ use Time::HiRes qw(gettimeofday); use Lirc::Client; use IO::Select; -my $def; - ##################################### # Note: we are a data provider _and_ a consumer at the same time sub diff --git a/fhem/FHEM/09_BS.pm b/fhem/FHEM/09_BS.pm index b7b8e60d6..579c55105 100644 --- a/fhem/FHEM/09_BS.pm +++ b/fhem/FHEM/09_BS.pm @@ -12,8 +12,6 @@ use warnings; my $PI= 3.141592653589793238; -my %defptr; - ############################# sub BS_Initialize($) @@ -54,7 +52,7 @@ BS_Define($$) my $dev= "a5cf $sensor"; $hash->{DEF}= $dev; - $defptr{$dev} = $hash; + $modules{BS}{defptr}{$dev} = $hash; AssignIoPort($hash); } @@ -63,7 +61,8 @@ sub BS_Undef($$) { my ($hash, $name) = @_; - delete($defptr{$hash->{DEF}}); + + delete($modules{BS}{defptr}{$hash->{DEF}}); return undef; } @@ -81,7 +80,7 @@ BS_Parse($$) my $sensor= substr($msg, 20, 2); my $dev= "a5cf $sensor"; - my $def= $defptr{$dev}; + my $def= $modules{BS}{defptr}{$dev}; if(!defined($def)) { $sensor =~ s/^0//; Log 3, "BS Unknown device $sensor, please define it"; diff --git a/fhem/FHEM/09_CUL_FHTTK.pm b/fhem/FHEM/09_CUL_FHTTK.pm index 772f7717e..cfab6212a 100644 --- a/fhem/FHEM/09_CUL_FHTTK.pm +++ b/fhem/FHEM/09_CUL_FHTTK.pm @@ -74,7 +74,6 @@ my %fhttfk_codes = ( "92" => "Window:Closed, Low Batt", "12" => "Window:Closed, Low Batt", "0f" => "Test:Success"); -my %defptr; # -wusel, 2009-11-09: Map retransmission codes to major (8x) ones (0x) # As I'm somewhat lazy, I just list all codes from @@ -135,7 +134,7 @@ CUL_FHTTK_Define($$) # $hash->{SENSOR}= "$sensor"; $hash->{CODE} = $sensor; - $defptr{$sensor} = $hash; + $modules{CUL_FHTTK}{defptr}{$sensor} = $hash; # $defs{$hash}{READINGS}{PREV}{STATE}="00"; # $defs{$hash}{READINGS}{PREV}{TIMESTAMP} = localtime(); AssignIoPort($hash); @@ -148,7 +147,7 @@ sub CUL_FHTTK_Undef($$) { my ($hash, $name) = @_; - delete($defptr{$hash->{CODE}}) if($hash && $hash->{CODE}); + delete($modules{CUL_FHTTK}{defptr}{$hash->{CODE}}) if($hash && $hash->{CODE}); return undef; } @@ -160,15 +159,15 @@ CUL_FHTTK_Parse($$) my ($hash, $msg) = @_; my $sensor= lc(substr($msg, 1, 6)); - my $state = lc(substr($msg, 7, 2)); - my $def = $defptr{$sensor}; - my $self = $def->{NAME}; - - if(!defined($defptr{$sensor})) { + my $def = $modules{CUL_FHTTK}{defptr}{$sensor}; + if(!$def) { Log 3, "FHTTK Unknown device $sensor, please define it"; return "UNDEFINED CUL_FHTTK_$sensor CUL_FHTTK $sensor"; } + my $self = $def->{NAME}; + my $state = lc(substr($msg, 7, 2)); + if(!defined($fhttfk_translatedcodes{$state})) { Log 3, sprintf("FHTTK $def Unknown state $state"); $defs{$self}{READINGS}{"Unknown"}{VAL} = $state; diff --git a/fhem/FHEM/09_USF1000.pm b/fhem/FHEM/09_USF1000.pm index 7f5c608d7..21b657519 100644 --- a/fhem/FHEM/09_USF1000.pm +++ b/fhem/FHEM/09_USF1000.pm @@ -12,7 +12,6 @@ use warnings; my $PI= 3.141592653589793238; -my %defptr; my $dev= "a5ce aa"; ############################# @@ -71,7 +70,7 @@ USF1000_Define($$) return $g; } - $defptr{$dev} = $hash; + $modules{USF1000}{defptr}{$dev} = $hash; AssignIoPort($hash); } @@ -80,7 +79,7 @@ sub USF1000_Undef($$) { my ($hash, $name) = @_; - delete($defptr{$dev}); + delete($modules{USF1000}{defptr}{$dev}); return undef; } @@ -90,12 +89,12 @@ USF1000_Parse($$) { my ($hash, $msg) = @_; # hash points to the FHZ, not to the USF1000 - if(!defined($defptr{$dev})) { + if(!defined($modules{USF1000}{defptr}{$dev})) { Log 3, "USF1000 Unknown device, please define it"; return "UNDEFINED USF1000 USF1000 cylv 1 1 0.5"; } - my $def= $defptr{$dev}; + my $def= $modules{USF1000}{defptr}{$dev}; my $name= $def->{NAME}; my $t= TimeNow(); diff --git a/fhem/FHEM/10_FS20.pm b/fhem/FHEM/10_FS20.pm index 17ac851bf..e6b3c2c9a 100755 --- a/fhem/FHEM/10_FS20.pm +++ b/fhem/FHEM/10_FS20.pm @@ -48,10 +48,6 @@ my %readonly = ( use vars qw(%fs20_c2b); # Peter would like to access it from outside -# defptr{XMIT BTN}{DEVNAME} -> Ptr to global defs entry for this device -my %defptr; - -my %follow; my $fs20_simple ="off off-for-timer on on-for-timer on-till reset timer toggle"; my %models = ( fs20hgs => 'sender', @@ -215,14 +211,14 @@ FS20_Set($@) ########################################### # Set the state of a device to off if on-for-timer is called - if($follow{$a[0]}) { + if($modules{FS20}{ldata}{$a[0]}) { CommandDelete(undef, $a[0] . "_timer"); - delete $follow{$a[0]}; + delete $modules{FS20}{ldata}{$a[0]}; } if($a[1] =~ m/for-timer/ && $na == 3 && defined($attr{$a[0]}) && defined($attr{$a[0]}{"follow-on-for-timer"})) { my $to = sprintf("%02d:%02d:%02d", $val/3600, ($val%3600)/60, $val%60); - $follow{$a[0]} = $to; + $modules{FS20}{ldata}{$a[0]} = $to; Log 4, "Follow: +$to setstate $a[0] off"; CommandDefine(undef, $a[0] . "_timer at +$to setstate $a[0] off"); } @@ -231,9 +227,9 @@ FS20_Set($@) # Look for all devices with the same code, and set state, timestamp my $code = "$hash->{XMIT} $hash->{BTN}"; my $tn = TimeNow(); - foreach my $n (keys %{ $defptr{$code} }) { + foreach my $n (keys %{ $modules{FS20}{defptr}{$code} }) { - my $lh = $defptr{$code}{$n}; + my $lh = $modules{FS20}{defptr}{$code}{$n}; $lh->{CHANGED}[0] = $v; $lh->{STATE} = $v; $lh->{READINGS}{state}{TIME} = $tn; @@ -275,7 +271,7 @@ FS20_Define($$) my $name = $a[0]; $hash->{CODE}{$ncode++} = $code; - $defptr{$code}{$name} = $hash; + $modules{FS20}{defptr}{$code}{$name} = $hash; for(my $i = 4; $i < int(@a); $i += 2) { @@ -302,7 +298,7 @@ FS20_Define($$) $code = "$housecode $grpcode"; $hash->{CODE}{$ncode++} = $code; - $defptr{$code}{$name} = $hash; + $modules{FS20}{defptr}{$code}{$name} = $hash; } AssignIoPort($hash); } @@ -312,13 +308,15 @@ sub FS20_Undef($$) { my ($hash, $name) = @_; + foreach my $c (keys %{ $hash->{CODE} } ) { $c = $hash->{CODE}{$c}; # As after a rename the $name my be different from the $defptr{$c}{$n} # we look for the hash. - foreach my $dname (keys %{ $defptr{$c} }) { - delete($defptr{$c}{$dname}) if($defptr{$c}{$dname} == $hash); + foreach my $dname (keys %{ $modules{FS20}{defptr}{$c} }) { + delete($modules{FS20}{defptr}{$c}{$dname}) + if($modules{FS20}{defptr}{$c}{$dname} == $hash); } } return undef; @@ -351,7 +349,7 @@ FS20_Parse($$) $v = "unknown_$cde" if(!defined($v)); $v .= " $dur" if($dur); - my $def = $defptr{"$dev $btn"}; + my $def = $modules{FS20}{defptr}{"$dev $btn"}; if($def) { my @list; foreach my $n (keys %{ $def }) { @@ -364,9 +362,9 @@ FS20_Parse($$) $lh->{READINGS}{state}{VAL} = $v; Log GetLogLevel($n,2), "FS20 $n $v"; - if($follow{$n}) { + if($modules{FS20}{ldata}{$n}) { CommandDelete(undef, $n . "_timer"); - delete $follow{$n}; + delete $modules{FS20}{ldata}{$n}; } if($v =~ m/for-timer/ && defined($attr{$n}) && @@ -374,7 +372,7 @@ FS20_Parse($$) my $to = sprintf("%02d:%02d:%02d", $dur/3600, ($dur%3600)/60, $dur%60); Log 4, "Follow: +$to setstate $n off"; CommandDefine(undef, $n . "_timer at +$to setstate $n off"); - $follow{$n} = $to; + $modules{FS20}{ldata}{$n} = $to; } push(@list, $n); diff --git a/fhem/FHEM/11_FHT.pm b/fhem/FHEM/11_FHT.pm index fd5390d18..c53323fbb 100755 --- a/fhem/FHEM/11_FHT.pm +++ b/fhem/FHEM/11_FHT.pm @@ -111,7 +111,6 @@ my %c2m = (0 => "auto", 1 => "manual", 2 => "holiday", 3 => "holiday_short"); my %m2c; # Reverse c2m my %c2b; # command->button hash (reverse of codes) my %c2bset; # command->button hash (settable values) -my %defptr; my $defmin = 0; # min fhtbuf free bytes before sending commands my $retryafter = 240; # in seconds, only when fhtsoftbuffer is active @@ -305,7 +304,7 @@ FHT_Define($$) $hash->{CODE} = $a[2]; $hash->{CODE} = $a[2]; - $defptr{$a[2]} = $hash; + $modules{FHT}{defptr}{$a[2]} = $hash; $attr{$a[0]}{retrycount} = 3; AssignIoPort($hash); @@ -321,7 +320,7 @@ sub FHT_Undef($$) { my ($hash, $name) = @_; - delete($defptr{$hash->{CODE}}) if($hash && $hash->{CODE}); + delete($modules{FHT}{defptr}{$hash->{CODE}}) if($hash && $hash->{CODE}); return undef; } @@ -337,12 +336,12 @@ FHT_Parse($$) my $val = substr($msg, 26, 2) if(length($msg) > 26); my $confirm = 0; - if(!defined($defptr{$dev})) { + if(!defined($modules{FHT}{defptr}{$dev})) { Log 3, "FHT Unknown device $dev, please define it"; return "UNDEFINED FHT_$dev FHT $dev"; } - my $def = $defptr{$dev}; + my $def = $modules{FHT}{defptr}{$dev}; my $name = $def->{NAME}; # Short message diff --git a/fhem/FHEM/12_HMS.pm b/fhem/FHEM/12_HMS.pm index 982e571cc..1a7923e76 100755 --- a/fhem/FHEM/12_HMS.pm +++ b/fhem/FHEM/12_HMS.pm @@ -16,8 +16,6 @@ my %codes = ( "e" => "HMS100FIT", ); -my %defptr; - ##################################### sub @@ -56,7 +54,7 @@ HMS_Define($$) $hash->{CODE} = $a[2]; - $defptr{$a[2]} = $hash; + $modules{HMS}{defptr}{$a[2]} = $hash; AssignIoPort($hash); return undef; } @@ -66,8 +64,9 @@ sub HMS_Undef($$) { my ($hash, $name) = @_; - delete($defptr{$hash->{CODE}}) - if(defined($hash->{CODE}) && defined($defptr{$hash->{CODE}})); + delete($modules{HMS}{defptr}{$hash->{CODE}}) + if(defined($hash->{CODE}) && + defined($modules{HMS}{defptr}{$hash->{CODE}})); return undef; } @@ -94,19 +93,19 @@ HMS_Parse($$) # As the HMS devices change their id on each battery change, we offer # a wildcard too for each type: 100, my $odev = $dev; - if(!defined($defptr{$dev})) { + if(!defined($modules{HMS}{defptr}{$dev})) { Log 4, "HMS device $dev not defined, using the wildcard device 100$cde"; $dev = "100$cde"; } - if(!defined($defptr{$dev})) { + if(!defined($modules{HMS}{defptr}{$dev})) { Log 3, "Unknown HMS device $dev/$odev, please define it"; $type = "HMS" if(!$type); $type =~ s/-//; # RM100-2, - is special in fhem names return "UNDEFINED ${type}_$odev HMS $odev"; } - my $def = $defptr{$dev}; + my $def = $modules{HMS}{defptr}{$dev}; my (@v, @txt); diff --git a/fhem/FHEM/13_KS300.pm b/fhem/FHEM/13_KS300.pm index 13ef2ba4b..29123057a 100755 --- a/fhem/FHEM/13_KS300.pm +++ b/fhem/FHEM/13_KS300.pm @@ -4,7 +4,6 @@ package main; use strict; use warnings; -my %defptr; ##################################### sub @@ -42,7 +41,7 @@ KS300_Define($$) $hash->{CODE} = $a[2]; $hash->{RAINUNIT} = $rainunit; $hash->{WINDUNIT} = $windunit; - $defptr{$a[2]} = $hash; + $modules{KS300}{defptr}{$a[2]} = $hash; AssignIoPort($hash); return undef; @@ -53,7 +52,7 @@ sub KS300_Undef($$) { my ($hash, $name) = @_; - delete($defptr{$hash->{CODE}}); + delete($modules{KS300}{defptr}{$hash->{CODE}}); return undef; } @@ -81,11 +80,11 @@ KS300_Parse($$) return ""; } - if(int(keys %defptr)) { + if(int(keys %{ $modules{KS300}{defptr} })) { - my @arr = keys(%defptr); # No code is known yet + my @arr = keys(%{ $modules{KS300}{defptr} }); # No code is known yet my $dev = shift(@arr); - my $def = $defptr{$dev}; + my $def = $modules{KS300}{defptr}{$dev}; my $haverain = 0; my $name= $def->{NAME}; diff --git a/fhem/FHEM/14_CUL_WS.pm b/fhem/FHEM/14_CUL_WS.pm index eb4b8583a..f18a13fa5 100755 --- a/fhem/FHEM/14_CUL_WS.pm +++ b/fhem/FHEM/14_CUL_WS.pm @@ -4,8 +4,6 @@ package main; use strict; use warnings; -my %defptr; - # Supports following devices: # KS300TH (this is redirected to the more sophisticated 14_KS300 by 00_CUL) # S300TH @@ -47,7 +45,7 @@ CUL_WS_Define($$) $hash->{corr2} = ((int(@a) > 4) ? $a[4] : 0); $hash->{corr3} = ((int(@a) > 5) ? $a[5] : 0); $hash->{corr4} = ((int(@a) > 6) ? $a[6] : 0); - $defptr{$a[2]} = $hash; + $modules{CUL_WS}{defptr}{$a[2]} = $hash; AssignIoPort($hash); return undef; } @@ -57,7 +55,7 @@ sub CUL_WS_Undef($$) { my ($hash, $name) = @_; - delete($defptr{$hash->{CODE}}) if($hash && $hash->{CODE}); + delete($modules{CUL_WS}{defptr}{$hash->{CODE}}) if($hash && $hash->{CODE}); return undef; } @@ -87,8 +85,8 @@ CUL_WS_Parse($$) # the name in connection with the receiver's name ("CUL868.1", "CUL433.1") # See attr IODev XX - my $def = $defptr{$hash->{NAME} . "." . $cde}; - $def = $defptr{$cde} if(!$def); + my $def = $modules{CUL_WS}{defptr}{$hash->{NAME} . "." . $cde}; + $def = $modules{CUL_WS}{defptr}{$cde} if(!$def); if(!$def) { Log 1, "CUL_WS UNDEFINED $type sensor detected, code $cde"; return "UNDEFINED CUL_WS_$cde CUL_WS $cde"; @@ -256,8 +254,8 @@ CUL_WS_Attr(@) my $hash = $defs{$a[1]}; my $iohash = $defs{$a[3]}; my $cde = $hash->{CODE}; - delete($defptr{$cde}); - $defptr{$iohash->{NAME} . "." . $cde} = $hash; + delete($modules{CUL_WS}{defptr}{$cde}); + $modules{CUL_WS}{defptr}{$iohash->{NAME} . "." . $cde} = $hash; return undef; } diff --git a/fhem/FHEM/15_CUL_EM.pm b/fhem/FHEM/15_CUL_EM.pm index db17983a1..915ae2c6c 100755 --- a/fhem/FHEM/15_CUL_EM.pm +++ b/fhem/FHEM/15_CUL_EM.pm @@ -4,8 +4,6 @@ package main; use strict; use warnings; -my %defptr; - # Adjust TOTAL to you meter: # {$defs{emwz}{READINGS}{basis}{VAL}=/- } @@ -63,7 +61,7 @@ CUL_EM_Define($$) $hash->{CostPerUnit} = (int(@a) > 5 ? $a[5] : 0); $hash->{BasicFeePerMonth} = (int(@a) > 6 ? $a[6] : 0); - $defptr{$a[2]} = $hash; + $modules{CUL_EM}{defptr}{$a[2]} = $hash; AssignIoPort($hash); return undef; } @@ -73,7 +71,7 @@ sub CUL_EM_Undef($$) { my ($hash, $name) = @_; - delete($defptr{$hash->{CODE}}); + delete($modules{CUL_EM}{defptr}{$hash->{CODE}}); return undef; } @@ -106,10 +104,10 @@ CUL_EM_Parse($$) my $val = sprintf("CNT: %d CUM: %d 5MIN: %d TOP: %d", $seqno, $total_cnt, $current_cnt, $peak_cnt); - if($defptr{$cde}) { - my $def = $defptr{$cde}; + if($modules{CUL_EM}{defptr}{$cde}) { + my $def = $modules{CUL_EM}{defptr}{$cde}; - $hash = $defptr{$cde}; + $hash = $def; my $tn = TimeNow(); # current time my $c= 0; # count changes diff --git a/fhem/FHEM/16_CUL_RFR.pm b/fhem/FHEM/16_CUL_RFR.pm index 02c544769..c1d1bfc76 100755 --- a/fhem/FHEM/16_CUL_RFR.pm +++ b/fhem/FHEM/16_CUL_RFR.pm @@ -4,8 +4,6 @@ package main; use strict; use warnings; -my %defptr; - # Adjust TOTAL to you meter: # {$defs{emwz}{READINGS}{basis}{VAL}=/- } @@ -45,7 +43,7 @@ CUL_RFR_Define($$) $a[3] !~ m/[0-9A-F]{2}/i); $hash->{ID} = $a[2]; $hash->{ROUTERID} = $a[3]; - $defptr{"$a[2]$a[3]"} = $hash; + $modules{CUL_RFR}{defptr}{"$a[2]$a[3]"} = $hash; AssignIoPort($hash); return undef; } @@ -67,7 +65,7 @@ sub CUL_RFR_Undef($$) { my ($hash, $name) = @_; - delete($defptr{$hash->{ID} . $hash->{ROUTERID}}); + delete($modules{CUL_RFR}{defptr}{$hash->{ID} . $hash->{ROUTERID}}); return undef; } @@ -83,11 +81,11 @@ CUL_RFR_Parse($$) my ($rid, $id, $smsg) = ($1,$2,$3); my $cde = "${id}${rid}"; - if(!$defptr{$cde}) { + if(!$modules{CUL_RFR}{defptr}{$cde}) { Log 1, "CUL_RFR detected, Id $id, Router $rid, MSG $smsg"; return "UNDEFINED CUL_RFR_$id CUL_RFR $id $rid"; } - my $hash = $defptr{$cde}; + my $hash = $modules{CUL_RFR}{defptr}{$cde}; my $name = $hash->{NAME}; if($smsg =~ m/^T/) { $hash->{NR_TMSG}++ } diff --git a/fhem/FHEM/20_X10.pm b/fhem/FHEM/20_X10.pm index 7ef4903ed..c59eade8c 100755 --- a/fhem/FHEM/20_X10.pm +++ b/fhem/FHEM/20_X10.pm @@ -76,8 +76,6 @@ my %functions_set = ( "on" => 0, "on-till" => 1, ); -# devices{HOUSE}{UNIT} -> Pointer to hash for the device for lookups -my %devices; my %models = ( lm12 => 'dimmer', @@ -254,13 +252,13 @@ X10_Define($$) $hash->{HOUSE} = $housecode; $hash->{UNIT} = $unitcode; - if(defined($devices{$housecode}{$unitcode})) { + if(defined($modules{X10}{defptr}{$housecode}{$unitcode})) { return "Error: duplicate X10 device $housecode $unitcode definition " . $hash->{NAME} . " (previous: " . - $devices{$housecode}{$unitcode}->{NAME} .")"; + $modules{X10}{defptr}{$housecode}{$unitcode}->{NAME} .")"; } - $devices{$housecode}{$unitcode}= $hash; + $modules{X10}{defptr}{$housecode}{$unitcode}= $hash; AssignIoPort($hash); } @@ -271,7 +269,7 @@ X10_Undef($$) { my ($hash, $name) = @_; if( defined($hash->{HOUSE}) && defined($hash->{UNIT}) ) { - delete($devices{$hash->{HOUSE}}{$hash->{UNIT}}); + delete($modules{X10}{defptr}{$hash->{HOUSE}}{$hash->{UNIT}}); } return undef; } @@ -302,8 +300,8 @@ X10_Parse($$) if($all_lights || $all_units) { $function= $functions_rewrite{$function}; # translate, all_lights_on -> on $unitcodes= ""; - foreach my $unitcode (keys %{ $devices{$housecode} } ) { - my $h= $devices{$housecode}{$unitcode}; + foreach my $unitcode (keys %{ $modules{X10}{defptr}{$housecode} } ) { + my $h= $modules{X10}{defptr}{$housecode}{$unitcode}; my $islampmodule= grep { $_ eq $h->{MODEL} } @lampmodules; if($all_units || $islampmodule ) { $unitcodes.= " " if($unitcodes ne ""); @@ -346,7 +344,7 @@ X10_Parse($$) my $unknown_unitcodes= ''; foreach my $unitcode (@unitcodes) { - my $h= $devices{$housecode}{$unitcode}; + my $h= $modules{X10}{defptr}{$housecode}{$unitcode}; if($h) { my $name= $h->{NAME}; $h->{CHANGED}[0] = $value; diff --git a/fhem/FHEM/21_OWTEMP.pm b/fhem/FHEM/21_OWTEMP.pm index 91e24ae36..64981a8bb 100644 --- a/fhem/FHEM/21_OWTEMP.pm +++ b/fhem/FHEM/21_OWTEMP.pm @@ -28,8 +28,6 @@ use warnings; use Time::HiRes qw(gettimeofday); use OW; -my %defptr; - my %gets = ( "address" => "", "alias" => "", @@ -422,7 +420,7 @@ OWTEMP_Define($$) $hash->{OW_PATH} = $hash->{OW_FAMILY}.".".$hash->{OW_ID}; $hash->{PRESENT} = 0; - $defptr{$a[2]} = $hash; + $modules{OWTEMP}{defptr}{$a[2]} = $hash; # assign IO port AssignIoPort($hash); @@ -483,7 +481,7 @@ OWTEMP_Undef($$) { my ($hash, $name) = @_; - delete($defptr{$hash->{NAME}}); + delete($modules{OWTEMP}{defptr}{$hash->{NAME}}); RemoveInternalTimer($hash); return undef; diff --git a/fhem/FHEM/50_WS300.pm b/fhem/FHEM/50_WS300.pm index 7c7caff80..0c479f7d6 100644 --- a/fhem/FHEM/50_WS300.pm +++ b/fhem/FHEM/50_WS300.pm @@ -39,7 +39,6 @@ package main; use strict; use warnings; -my %defptr; my $DeviceName=""; my $inbuf=""; @@ -117,7 +116,7 @@ WS300_Define($$) my $po; if($a[0] eq "WS300Device") { - $defptr{10} = $hash; + $modules{WS300}{defptr}{10} = $hash; return "wrong syntax: define WS300Device WS300 " if(int(@a) < 3); $DeviceName = $a[2]; $hash->{STATE} = "Initializing"; @@ -164,7 +163,7 @@ WS300_Define($$) return "no device: define WS300Device WS300 first" if($DeviceName eq ""); return "Define $a[0]: wrong sensor number." if($a[2] !~ m/^[0-9]$/); $hash->{SENSOR} = $a[2]; - $defptr{$a[2]} = $hash; + $modules{WS300}{defptr}{$a[2]} = $hash; return undef; } @@ -175,7 +174,7 @@ WS300_Undef($$) { my ($hash, $name) = @_; return undef if(!defined($hash->{SENSOR})); - delete($defptr{$hash->{SENSOR}}); + delete($modules{WS300}{defptr}{$hash->{SENSOR}}); return undef; } @@ -253,14 +252,14 @@ WS300_Parse($$) { my $p=($s*6)+$offs; Log $ll,"Sensor $s vorhanden"; - if(!defined($defptr{$s})) + if(!defined($modules{WS300}{defptr}{$s})) { Log 3, "WS300 Unknown device $s, please define it"; return "UNDEFINED WS300_$s WS300 $s"; } else { - $def = $defptr{$s}; + $def = $modules{WS300}{defptr}{$s}; $def->{READINGS}{$txt[0]}{VAL} = 0 if(!$def->{READINGS}); $ref = $def->{READINGS}; @@ -445,14 +444,14 @@ WS300_Parse($$) } } } - if(!defined($defptr{9})) + if(!defined($modules{WS300}{defptr}{9})) { Log 3, "WS300 Unknown device 9, please define it"; return "UNDEFINED WS300_9 WS300 9"; } else { - $def = $defptr{9}; + $def = $modules{WS300}{defptr}{9}; $def->{READINGS}{$txt[0]}{VAL} = 0 if(!$def->{READINGS}); $ref = $def->{READINGS}; diff --git a/fhem/HISTORY b/fhem/HISTORY index 21ac79af7..573175bd1 100644 --- a/fhem/HISTORY +++ b/fhem/HISTORY @@ -459,3 +459,8 @@ - In order to support automatic device creation (coming 98_autocreate.pm), the return value in case of an undefined device should contain parameters for a correct define statement. + +- Fri Jan 1 2010 + - my %defptr is no $modules{modname}{defptr} in order for CommandReload to + work. There is also a second parameter $modules{modname}{ldata} which will + be saved over a Reload, used by the FS20 for the follow feature. diff --git a/fhem/fhem.pl b/fhem/fhem.pl index 6b6b611fa..69f374add 100755 --- a/fhem/fhem.pl +++ b/fhem/fhem.pl @@ -157,7 +157,7 @@ my $nextat; # Time when next timer will be triggered. my $intAtCnt=0; my %duplicate; # Pool of received msg for multi-fhz/cul setups my $duplidx=0; # helper for the above pool -my $cvsid = '$Id: fhem.pl,v 1.94 2009-12-27 18:07:14 rudolfkoenig Exp $'; +my $cvsid = '$Id: fhem.pl,v 1.95 2010-01-01 13:48:33 rudolfkoenig Exp $'; my $namedef = "where is either:\n" . "- a single device name\n" . @@ -1305,9 +1305,16 @@ CommandReload($$) } use strict "refs"; + my ($defptr, $ldata); + if($modules{$m}) { + $defptr = $modules{$m}{defptr}; + $ldata = $modules{$m}{ldata}; + } $modules{$m} = \%hash; $modules{$m}{ORDER} = $order; $modules{$m}{LOADED} = 1; + $modules{$m}{defptr} = $defptr if($defptr); + $modules{$m}{ldata} = $defptr if($ldata); return undef; }