2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-07 16:59:18 +00:00

First Fixes..Added defptr via $modules

git-svn-id: https://svn.fhem.de/fhem/trunk@528 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parix 2009-12-30 19:47:17 +00:00
parent 2fe5c2f979
commit b513e8669d

View File

@ -12,7 +12,7 @@
# Example # Example
# define WBS001 WBS Temperature 1032D8ED01080011 # define WBS001 WBS Temperature 1032D8ED01080011
# $defs$defs{WBS001}{TYPE} = WBS # $defs$defs{WBS001}{TYPE} = WBS
# $defs$defs{WBS001}{CODE} = 12345 # $defs$defs{WBS001}{CODE} = 1032D8ED01080011
# $defs{WBS001}{READINGS}{Temperature}{VAL} = 0 # $defs{WBS001}{READINGS}{Temperature}{VAL} = 0
# $defs{WBS001}{READINGS}{Temperature}{TIME} = TimeNow() # $defs{WBS001}{READINGS}{Temperature}{TIME} = TimeNow()
# Only One READING for each WBS # Only One READING for each WBS
@ -38,6 +38,7 @@ use Data::Dumper;
use vars qw(%defs); use vars qw(%defs);
use vars qw(%attr); use vars qw(%attr);
use vars qw(%data); use vars qw(%data);
use vars qw(%modules);
# Reverse-Lokup-Pointer # Reverse-Lokup-Pointer
my %defptr; my %defptr;
################################################################################ ################################################################################
@ -49,6 +50,13 @@ sub WBS_Initialize($)
$hash->{UndefFn} = "WBS_Undef"; $hash->{UndefFn} = "WBS_Undef";
$hash->{ParseFn} = "WBS_Parse"; $hash->{ParseFn} = "WBS_Parse";
$hash->{AttrList} = "IODEV do_not_notify:0,1 loglevel:0,5 disable:0,1"; $hash->{AttrList} = "IODEV do_not_notify:0,1 loglevel:0,5 disable:0,1";
$hash->{defptr} = {};
#Rebuild DefPtr
my $mod = "WBS";
foreach my $d (sort keys %defs) {
next if($defs{$d}{TYPE} ne $mod);
$hash->{defptr}{$defs{$d}{CODE}} = $defs{$d}{NAME};
}
} }
################################################################################ ################################################################################
sub WBS_Define($) sub WBS_Define($)
@ -59,9 +67,10 @@ sub WBS_Define($)
Log 0, "WBS|DEFPTR: " . Dumper(%defptr); Log 0, "WBS|DEFPTR: " . Dumper(%defptr);
my @a = split(/ /, $defs); my @a = split(/ /, $defs);
return "WBS|Define|ERROR: Unknown argument count " . int(@a) . " , usage define <NAME> WBS TYPE CODE" if(int(@a) != 4); return "WBS|Define|ERROR: Unknown argument count " . int(@a) . " , usage define <NAME> WBS TYPE CODE" if(int(@a) != 4);
my $mod = $a[1];
my $Type = $a[2]; my $Type = $a[2];
my $Code = $a[3]; my $Code = $a[3];
if(defined($defptr{$Code})) { if(defined($modules{$mod}{defptr}{$Code})) {
return "WBS|Define|ERROR: Code is used"; return "WBS|Define|ERROR: Code is used";
} }
if(length($Code) > 16) { if(length($Code) > 16) {
@ -80,8 +89,12 @@ sub WBS_Define($)
sub WBS_Undef($$) sub WBS_Undef($$)
{ {
my ($hash, $name) = @_; my ($hash, $name) = @_;
delete($defptr{$hash->{CODE}}) Log 0, "WBS|Undef: " . Dumper(@_);
if(defined($hash->{CODE}) && defined($defptr{$hash->{CODE}})); my $mod = $defs{$name}{TYPE};
my $Code = $defs{$name}{CODE};
if(defined($modules{$mod}{defptr}{$Code})) {
delete $modules{$mod}{defptr}{$Code}
}
return undef; return undef;
} }
################################################################################ ################################################################################
@ -97,12 +110,12 @@ sub WBS_Parse($$)
return "WBS|Parse|ERROR: Max. Length VALUE > 8"; return "WBS|Parse|ERROR: Max. Length VALUE > 8";
} }
# Find Device-Name # Find Device-Name
if(!defined($defptr{$code})) { my $mod = "WBS";
if(!defined($modules{$mod}{defptr}{$code})){
return "WBS|Parse|ERROR: Unkown Device for $code"; return "WBS|Parse|ERROR: Unkown Device for $code";
} }
Log 0, "WBS|Parse: " . Dumper(%defptr); my $wbs_name = $modules{$mod}{defptr}{$code};
my $wbs = $defptr{$code}; my $wbs = $defs{$wbs_name};
my $wbs_name = $wbs->{NAME};
#LogLevel #LogLevel
my $ll = 0; my $ll = 0;
if(defined($attr{$wbs_name}{loglevel})) {$ll = $attr{$wbs_name}{loglevel};} if(defined($attr{$wbs_name}{loglevel})) {$ll = $attr{$wbs_name}{loglevel};}
@ -117,6 +130,7 @@ sub WBS_Parse($$)
$wbs->{STATE} = "$fc: $value"; $wbs->{STATE} = "$fc: $value";
# Changed # Changed
$wbs->{CHANGED}[0] = "$reading:$value"; $wbs->{CHANGED}[0] = "$reading:$value";
return $wbs_name;
} }
################################################################################ ################################################################################
1; 1;