mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-15 22:26:04 +00:00
defptr moved to modules for a correct CommandReload
git-svn-id: https://svn.fhem.de/fhem/trunk@531 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
c9ca44e861
commit
f1133d0eb1
@ -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
|
||||
|
@ -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";
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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<device-code>,
|
||||
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);
|
||||
|
||||
|
@ -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};
|
||||
|
||||
|
@ -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 <name> 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;
|
||||
}
|
||||
|
||||
|
@ -4,8 +4,6 @@ package main;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
my %defptr;
|
||||
|
||||
# Adjust TOTAL to you meter:
|
||||
# {$defs{emwz}{READINGS}{basis}{VAL}=<meter>/<corr2>-<total_cnt> }
|
||||
|
||||
@ -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
|
||||
|
@ -4,8 +4,6 @@ package main;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
my %defptr;
|
||||
|
||||
# Adjust TOTAL to you meter:
|
||||
# {$defs{emwz}{READINGS}{basis}{VAL}=<meter>/<corr2>-<total_cnt> }
|
||||
|
||||
@ -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}++ }
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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 <DeviceName>" if(int(@a) < 3);
|
||||
$DeviceName = $a[2];
|
||||
$hash->{STATE} = "Initializing";
|
||||
@ -164,7 +163,7 @@ WS300_Define($$)
|
||||
return "no device: define WS300Device WS300 <DeviceName> 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};
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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 <name> 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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user