2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-01-31 18:59:33 +00:00

10_EnOcean: EnOcean_Define($$) changed

git-svn-id: https://svn.fhem.de/fhem/trunk@9402 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
klaus-schauer 2015-10-08 04:36:41 +00:00
parent 0adc985f25
commit a2fe48c8e7

View File

@ -513,8 +513,12 @@ EnOcean_Define($$)
$def = "00000000"; $def = "00000000";
if(@a > 2 && @a < 5) { if(@a > 2 && @a < 5) {
if ($a[2] eq "getNextID") { if ($a[2] eq "getNextID") {
AssignIoPort($hash); AssignIoPort($hash) if (!exists $hash->{IODev});
$defs{$name}{DEF} = $def; if (exists $hash->{OLDDEF}) {
delete $modules{EnOcean}{defptr}{$hash->{OLDDEF}};
#Log3 $name, 2, "EnOcean $name old DEF $hash->{OLDDEF} deleted";
}
$hash->{DEF} = $def;
$def = EnOcean_CheckSenderID("getNextID", $hash->{IODev}{NAME}, "00000000"); $def = EnOcean_CheckSenderID("getNextID", $hash->{IODev}{NAME}, "00000000");
$hash->{DEF} = $def; $hash->{DEF} = $def;
$modules{EnOcean}{defptr}{$def} = $hash; $modules{EnOcean}{defptr}{$def} = $hash;
@ -522,10 +526,14 @@ EnOcean_Define($$)
$attr{$name}{room} = "EnOcean" if (!exists $attr{$name}{room}); $attr{$name}{room} = "EnOcean" if (!exists $attr{$name}{room});
$attr{$name}{subType} = "raw" if (!exists $attr{$name}{subType}); $attr{$name}{subType} = "raw" if (!exists $attr{$name}{subType});
} elsif ($a[2] =~ m/^[A-Fa-f0-9]{8}$/i) { } elsif ($a[2] =~ m/^[A-Fa-f0-9]{8}$/i) {
AssignIoPort($hash) if (!exists $hash->{IODev});
if (exists $hash->{OLDDEF}) {
delete $modules{EnOcean}{defptr}{$hash->{OLDDEF}};
#Log3 $name, 2, "EnOcean $name old DEF $hash->{OLDDEF} deleted";
}
$def = uc($a[2]); $def = uc($a[2]);
$hash->{DEF} = $def; $hash->{DEF} = $def;
$modules{EnOcean}{defptr}{$def} = $hash; $modules{EnOcean}{defptr}{$def} = $hash;
AssignIoPort($hash);
$attr{$name}{manufID} = "7FF" if (!exists $attr{$name}{manufID}); $attr{$name}{manufID} = "7FF" if (!exists $attr{$name}{manufID});
$attr{$name}{room} = "EnOcean" if (!exists $attr{$name}{room}); $attr{$name}{room} = "EnOcean" if (!exists $attr{$name}{room});
$attr{$name}{subType} = "raw" if (!exists $attr{$name}{subType}); $attr{$name}{subType} = "raw" if (!exists $attr{$name}{subType});
@ -548,17 +556,26 @@ EnOcean_Define($$)
} }
} }
} elsif ($a[2] =~ m/^([A-Za-z0-9]{2})-([A-Za-z0-9]{2})-([A-Za-z0-9]{2})$/i) { } elsif ($a[2] =~ m/^([A-Za-z0-9]{2})-([A-Za-z0-9]{2})-([A-Za-z0-9]{2})$/i) {
AssignIoPort($hash);
$defs{$name}{DEF} = $def;
$def = EnOcean_CheckSenderID("getNextID", $hash->{IODev}{NAME}, "00000000");
$hash->{DEF} = $def;
$modules{EnOcean}{defptr}{$def} = $hash;
my ($rorg, $func, $type) = (uc($1), uc($2), uc($3)); my ($rorg, $func, $type) = (uc($1), uc($2), uc($3));
AssignIoPort($hash) if (!exists $hash->{IODev});
if (exists $hash->{OLDDEF}) {
delete $modules{EnOcean}{defptr}{$hash->{OLDDEF}};
#Log3 $name, 2, "EnOcean $name old DEF $hash->{OLDDEF} deleted";
}
if (!exists $hash->{DEF} || $hash->{DEF} =~ m/^([A-Za-z0-9]{2})-([A-Za-z0-9]{2})-([A-Za-z0-9]{2})$/i) {
$hash->{DEF} = $def;
$def = EnOcean_CheckSenderID("getNextID", $hash->{IODev}{NAME}, "00000000");
$hash->{DEF} = $def;
}
$modules{EnOcean}{defptr}{$def} = $hash;
$rorg = "F6" if ($rorg eq "05"); $rorg = "F6" if ($rorg eq "05");
$rorg = "D5" if ($rorg eq "06"); $rorg = "D5" if ($rorg eq "06");
$rorg = "A5" if ($rorg eq "07"); $rorg = "A5" if ($rorg eq "07");
my $eep = "$rorg.$func.$type"; my $eep = "$rorg.$func.$type";
if (exists $EnO_eepConfig{$eep}) { if (exists $EnO_eepConfig{$eep}) {
if (exists $attr{$name}) {
delete $attr{$name};
}
$attr{$name}{eep} = "$rorg-$func-$type"; $attr{$name}{eep} = "$rorg-$func-$type";
$attr{$name}{manufID} = "7FF"; $attr{$name}{manufID} = "7FF";
$attr{$name}{room} = "EnOcean"; $attr{$name}{room} = "EnOcean";
@ -658,7 +675,7 @@ sub EnOcean_Get($@)
my $manufID = uc(AttrVal($name, "manufID", "")); my $manufID = uc(AttrVal($name, "manufID", ""));
my $model = AttrVal($name, "model", ""); my $model = AttrVal($name, "model", "");
my $packetType = 1; my $packetType = 1;
$packetType = 0x0A if (ReadingsVal($hash->{IODev}, "mode", "00") eq "01"); $packetType = 0x0A if (ReadingsVal($hash->{IODev}{NAME}, "mode", "00") eq "01");
my $rorg; my $rorg;
my $status = "00"; my $status = "00";
my $st = AttrVal($name, "subType", ""); my $st = AttrVal($name, "subType", "");
@ -948,7 +965,7 @@ sub EnOcean_Set($@)
my $manufID = uc(AttrVal($name, "manufID", "")); my $manufID = uc(AttrVal($name, "manufID", ""));
my $model = AttrVal($name, "model", ""); my $model = AttrVal($name, "model", "");
my $packetType = 1; my $packetType = 1;
$packetType = 0x0A if (ReadingsVal($hash->{IODev}, "mode", "00") eq "01"); $packetType = 0x0A if (ReadingsVal($hash->{IODev}{NAME}, "mode", "00") eq "01");
my $rorg; my $rorg;
my $sendCmd = 1; my $sendCmd = 1;
my $status = "00"; my $status = "00";
@ -8668,15 +8685,7 @@ sub EnOcean_Notify(@)
#Log3($name, 5, "EnOcean $name <notify> DELETEATTR $1"); #Log3($name, 5, "EnOcean $name <notify> DELETEATTR $1");
} elsif ($devName eq "global" && $s =~ m/^MODIFIED ([^ ]*)$/) { } elsif ($devName eq "global" && $s =~ m/^MODIFIED ([^ ]*)$/) {
# delete old DEF pointer in %modules #Log3($name, 5, "EnOcean $name <notify> MODIFIED");
my ($key, $val);
my $modulesPointer = \%modules;
while (($key, $val) = each(%{$modulesPointer->{EnOcean}{defptr}})) {
if ($val == $hash && $key ne $hash->{DEF}) {
delete $modules{EnOcean}{defptr}{$key};
#Log3 $name, 2, "EnOcean $name <notify> MODIFIED $1: modules DEF $key deleted";
}
}
} elsif ($devName eq "global" && $s =~ m/^SAVE$/) { } elsif ($devName eq "global" && $s =~ m/^SAVE$/) {
#Log3($name, 5, "EnOcean $name <notify> SAVE"); #Log3($name, 5, "EnOcean $name <notify> SAVE");