2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-15 16:19:11 +00:00

10_IT: In AttrList group entfernt, Anpassungen für TSCUL, bei einem modify der DEF wird nun die alte DEF gelöscht

git-svn-id: https://svn.fhem.de/fhem/trunk@28339 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
Ralf9 2024-01-03 15:33:41 +00:00
parent 80cf16ea59
commit 11f7d967c8

View File

@ -1,8 +1,10 @@
######################################################
# InterTechno Switch Manager as FHM-Module
#
# (c) Olaf Droegehorn / DHS-Computertechnik GmbH
# (c) Björn Hempel
# Copyright (C)
# Olaf Droegehorn / DHS-Computertechnik GmbH
# Björn Hempel
# 2023 Ralf9
#
# Published under GNU GPL License
#
@ -45,7 +47,7 @@ my %codes = (
my %codes_he800 = (
"XMIToff" => "off",
"XMITon" => "on", # Set to previous dim value (before switching it off)
"00" => "off",
"00" => "dim00%",
#"01" => "last-dim-on",
"02" => "dim12%",
"03" => "dim25%",
@ -117,13 +119,13 @@ IT_Initialize($)
}
$hash->{Match} = "^i......";
$hash->{SetFn} = "IT_Set";
$hash->{SetFn} = \&IT_Set;
#$hash->{StateFn} = "IT_SetState";
$hash->{DefFn} = "IT_Define";
$hash->{UndefFn} = "IT_Undef";
$hash->{ParseFn} = "IT_Parse";
$hash->{AttrFn} = "IT_Attr";
$hash->{AttrList} = "IODev ITfrequency ITrepetition ITclock switch_rfmode:1,0 do_not_notify:1,0 ignore:0,1 protocol:V1,V3,HE_EU,SBC_FreeTec,HE800 SIGNALduinoProtocolId userV1setCodes unit group dummy:1,0 " .
$hash->{DefFn} = \&IT_Define;
$hash->{UndefFn} = \&IT_Undef;
$hash->{ParseFn} = \&IT_Parse;
$hash->{AttrFn} = \&IT_Attr;
$hash->{AttrList} = "IODev ITfrequency ITrepetition ITclock switch_rfmode:1,0 do_not_notify:1,0 ignore:0,1 protocol:V1,V3,HE_EU,SBC_FreeTec,HE800 SIGNALduinoProtocolId userV1setCodes dummy:1,0 " .
"$readingFnAttributes " .
"model:".join(",", sort keys %models);
@ -158,7 +160,7 @@ IT_Do_On_Till($@)
my $hms_now = sprintf("%02d:%02d:%02d", $lt[2], $lt[1], $lt[0]);
if($hms_now ge $hms_till) {
Log 4, "on-till: won't switch as now ($hms_now) is later than $hms_till";
return "";
return '';
}
my @b = ("on");
@ -257,6 +259,19 @@ IT_Set($@)
my $io = $hash->{IODev};
return 'no IODev available, adapt attribute IODevList' if (!defined($io));
my $ioNotSIGNALduino = ($io->{TYPE} !~ m/^SIGNALduino/);
my $ioTsculfw = 0;
if ($io->{TYPE} eq 'TSCUL') {
if ($io->{helper}{SVTS}) {
$ioTsculfw = 1;
}
else {
Log3 $hash, 2, 'IT set ERROR: TSCUL has not required firmware';
}
}
my $v = $name ." ". join(" ", @a);
## Log that we are going to switch InterTechno
Log3 $hash, 3, "$io->{NAME} IT_set: $v";
@ -336,45 +351,56 @@ IT_Set($@)
Log3 $hash, 5, "$io->{NAME} IT_set: Type=" . $io->{TYPE} . ' Protocol=' . $hash->{READINGS}{protocol}{VAL};
if ($io->{TYPE} ne "SIGNALduino") {
my $oldIOMode;
if ($ioNotSIGNALduino) {
# das IODev ist kein SIGNALduino
return "IODev $io->{NAME} does not support IT" if ($ioTsculfw && defined($io->{CMDS}) && $io->{CMDS} !~ m/i/); # TSCUL muss das i Kommando kennen
## Do we need to change RFMode to SlowRF??
if(defined($attr{$name}) && defined($attr{$name}{"switch_rfmode"})) {
if ($attr{$name}{"switch_rfmode"} eq "1") { # do we need to change RFMode of IODev
my $ret = CallFn($io->{NAME}, "AttrFn", "set", ($io->{NAME}, "rfmode", "SlowRF"));
}
}
if (AttrVal($name, 'switch_rfmode', '0')) {
$oldIOMode = AttrVal($io->{NAME}, 'rfmode', 'SlowRF');
CallFn($io->{NAME}, "AttrFn", "set", ($io->{NAME}, "rfmode", "SlowRF"));
}
## Do we need to change ITClock ?? }
if(defined($attr{$name}) && defined($attr{$name}{"ITclock"})) {
#$message = "isc".$attr{$name}{"ITclock"};
#CallFn($io->{NAME}, "GetFn", $io, (" ", "raw", $message));
$message = $attr{$name}{"ITclock"};
CallFn($io->{NAME}, "SetFn", $io, ($hash->{NAME}, "ITClock", $message));
if (defined($message = AttrVal($name, 'ITclock', undef))) {
CallFn($io->{NAME}, "SetFn", $io, ($io->{NAME}, "ITClock", $message));
Log3 $hash, 3, "IT set ITclock: $message for $io->{NAME}";
}
## Do we need to change ITrepetition ??
if(defined($attr{$name}) && defined($attr{$name}{"ITrepetition"})) {
$message = "isr".$attr{$name}{"ITrepetition"};
CallFn($io->{NAME}, "GetFn", $io, (" ", "raw", $message));
Log3 $hash,4, "IT set ITrepetition: $message for $io->{NAME}";
}
my $itrep;
if($itrep = AttrVal($name, 'ITrepetition', 0)) {
$itrep = 254 if ($itrep > 254);
$message = 'isr'.$itrep;
if ($ioTsculfw) { # tsculfw
CallFn($io->{NAME}, 'SetFn', $io, ($io->{NAME}, 'raw', $message)); # if not set before send the tsculfw default is 3 and reverts to it after send
}
else { # culfw, a-culfw
CallFn($io->{NAME}, 'GetFn', $io, (' ', 'raw', $message));
}
Log3 $hash,4, "IT set ITrepetition: $message for $io->{NAME}";
}
## Do we need to change ITfrequency ??
if(defined($attr{$name}) && defined($attr{$name}{"ITfrequency"})) {
my $f = $attr{$name}{"ITfrequency"}/26*65536;
my $f2 = sprintf("%02x", $f / 65536);
my $f1 = sprintf("%02x", int($f % 65536) / 256);
my $f0 = sprintf("%02x", $f % 256);
my $arg = sprintf("%.3f", (hex($f2)*65536+hex($f1)*256+hex($f0))/65536*26);
Log3 $hash, 3, "Setting ITfrequency (0D,0E,0F) to $f2 $f1 $f0 = $arg MHz";
CallFn($io->{NAME}, "GetFn", $io, (" ", "raw", "if$f2$f1$f0"));
}
## Do we need to change ITfrequency ??
my $f;
if (defined($f = AttrVal($name, 'ITfrequency', undef))) {
$f = $f/26*65536;
my $f2 = sprintf("%02x", $f / 65536);
my $f1 = sprintf("%02x", int($f % 65536) / 256);
my $f0 = sprintf("%02x", $f % 256);
$message = "if$f2$f1$f0";
my $arg = sprintf("%.3f", (hex($f2)*65536+hex($f1)*256+hex($f0))/65536*26);
Log3 $hash, 3, "Setting ITfrequency (0D,0E,0F) to $f2 $f1 $f0 = $arg MHz";
if ($ioTsculfw) { # tsculfw
CallFn($io->{NAME}, 'SetFn', $io, ($io->{NAME}, 'raw', $message));
}
else {
CallFn($io->{NAME}, 'GetFn', $io, (' ', 'raw', $message));
}
}
}
if ($hash->{READINGS}{protocol}{VAL} eq "V3") {
if( AttrVal($name, "model", "") eq "itdimmer" ) {
my @itvalues = split(' ', $v);
@ -432,6 +458,7 @@ IT_Set($@)
my $msg;
my %he800MapingTable = (
0 => 0,
12 => 2,
25 => 3,
37 => 4,
@ -451,8 +478,11 @@ IT_Set($@)
$rollingCode = 0;
}
my $oldMode = 0;
my $sendVal;
if ($cVal eq "on") {
my $sendVal = $hash->{READINGS}{"on_" . $rollingCode}{VAL};
if (exists($hash->{READINGS}{"on_" . $rollingCode})) {
$sendVal = $hash->{READINGS}{"on_" . $rollingCode}{VAL};
}
if (defined $sendVal && $sendVal ne "" && $sendVal ne "0") {
$message = "ish".uc($sendVal);
$oldMode = 1;
@ -462,7 +492,9 @@ IT_Set($@)
$mode = 1;
}
} elsif ($cVal eq "off") {
my $sendVal = $hash->{READINGS}{"off_" . $rollingCode}{VAL};
if (exists($hash->{READINGS}{"off_" . $rollingCode})) {
$sendVal = $hash->{READINGS}{"off_" . $rollingCode}{VAL};
}
if (defined $sendVal && $sendVal ne "" && $sendVal ne "0") {
$message = "ish".uc($sendVal);
$oldMode = 1;
@ -532,8 +564,8 @@ IT_Set($@)
#XOR encryption 2 rounds
for (my $r=0; $r<=1; $r++){ # 2 encryption rounds
$mn[0] = $key[ $mn[0]-$r+1]; # encrypt first nibble
my $i = 0;
for ($i=1; $i<=5 ; $i++){ # encrypt 4 nibbles
#my $i = 0;
for (my $i=1; $i<=5 ; $i++){ # encrypt 4 nibbles
$mn[$i] = $key[($mn[$i] ^ $mn[$i-1])-$r+1]; # crypted with predecessor & key
}
}
@ -557,8 +589,8 @@ IT_Set($@)
$message = "ish".uc($bin);
}
} else {
my $onoffcode;
if (defined($c)) {
my $onoffcode = '';
if (defined($c) && defined($hash->{$c})) {
$onoffcode = $hash->{$c};
} else {
if ($hash->{userV1setCodes}) {
@ -568,48 +600,52 @@ IT_Set($@)
if (length($onoffcode) == 4 && $hash->{READINGS}{protocol}{VAL} ne 'SBC_FreeTec') { # EV1527
$onoffcode = $bintotristate{substr($onoffcode,0,2)} . $bintotristate{substr($onoffcode,2,2)};
}
$message = "is".uc($hash->{XMIT}.$onoffcode);
$message = 'is'.uc($hash->{XMIT}.$onoffcode);
}
if ($io->{TYPE} ne "SIGNALduino") {
# das IODev ist kein SIGNALduino
## Send Message to IODev and wait for correct answer
my $msg = CallFn($io->{NAME}, "GetFn", $io, (" ", "raw", $message));
Log3 $hash,5,"IT_Set: GetFn(raw): message = $message Antwort = $msg";
if ($msg =~ m/raw => $message/) {
Log 4, "ITSet: Answer from $io->{NAME}: $msg";
} else {
Log 2, "IT IODev device didn't answer is command correctly: $msg";
}
## Do we need to change ITrepetition back??
if(defined($attr{$name}) && defined($attr{$name}{"ITrepetition"})) {
$message = "isr".$it_defrepetition;
CallFn($io->{NAME}, "GetFn", $io, (" ", "raw", $message));
Log3 $hash, 3, "IT set ITrepetition back: $message for $io->{NAME}";
}
if ($ioNotSIGNALduino) {
if ($ioTsculfw) { # tsculfw
## Send Message to IODev
CallFn($io->{NAME}, 'SetFn', $io, (' ', 'raw', $message)); # tsculfw VTS0.32+ resets frequency, offset, ITrepetition and ITclock back to firmware default values after send
}
else { # culfw, a-culfw
## Send Message to IODev and wait for correct answer
my $msg = CallFn($io->{NAME}, "GetFn", $io, (" ", "raw", $message));
Log3 $hash,5,"IT_Set: GetFn(raw): message = $message Antwort = $msg";
if ($msg =~ m/raw => $message/) {
Log 4, "ITSet: Answer from $io->{NAME}: $msg";
} else {
Log 2, "IT IODev device didn't answer is command correctly: $msg";
}
## Do we need to change ITfrequency back??
if(defined($attr{$name}) && defined($attr{$name}{"ITfrequency"})) {
Log3 $hash,4 ,"Setting ITfrequency back to 433.92 MHz";
CallFn($io->{NAME}, "GetFn", $io, (" ", "raw", "if0"));
}
## Do we need to change ITClock back??
if(defined($attr{$name}) && defined($attr{$name}{"ITclock"}))
{
Log3 $hash, 3, "Setting ITClock back to 420";
#CallFn($io->{NAME}, "GetFn", $io, (" ", "raw", "sic250"));
CallFn($io->{NAME}, "SetFn", $io, ($hash->{NAME}, "ITClock", "420"));
}
## Do we need to change RFMode back to HomeMatic??
if(defined($attr{$name}) && defined($attr{$name}{"switch_rfmode"})) {
if ($attr{$name}{"switch_rfmode"} eq "1") { # do we need to change RFMode of IODev
my $ret = CallFn($io->{NAME}, "AttrFn", "set", ($io->{NAME}, "rfmode", "HomeMatic"));
}
}
## Do we need to change ITrepetition back??
if (defined(AttrVal($name, 'ITrepetition', undef))) {
$message = 'isr'.$it_defrepetition;
CallFn($io->{NAME}, 'GetFn', $io, (' ', 'raw', $message));
Log3 $hash, 3, "IT set ITrepetition back: $message for $io->{NAME}";
}
## Do we need to change ITfrequency back??
if (defined(AttrVal($name, 'ITrepetition', undef))) {
Log3 $hash,4 ,'Setting ITfrequency back to 433.92 MHz';
CallFn($io->{NAME}, 'GetFn', $io, (' ', 'raw', 'if0'));
}
## Do we need to change ITClock back??
if (defined(AttrVal($name, 'ITclock', undef))) {
Log3 $hash, 3, 'Setting ITClock back to 420';
#CallFn($io->{NAME}, "GetFn", $io, (" ", "raw", "sic250"));
CallFn($io->{NAME}, 'SetFn', $io, ($hash->{NAME}, 'ITClock', '420'));
}
}
## Do we need to change RFMode back to previous mode??
if (AttrVal($name, 'switch_rfmode', '0')) { # do we need to change RFMode of IODev?
CallFn($io->{NAME}, 'AttrFn', 'set', ($hash->{NAME}, 'rfmode', $oldIOMode));
}
} else { # SIGNALduino
my $SignalRepeats = AttrVal($name,'ITrepetition', '6');
@ -711,6 +747,19 @@ IT_Define($$)
my $groupBit;
my $name = $a[0];
if ($hash->{OLDDEF}) {
Log3 $hash,4,"ITdefine: delete OLDDEF $hash->{CODE}{1}";
delete($hash->{CODE}{1});
my @b = split(/[ \t]+/, $hash->{OLDDEF}, 2);
delete($modules{IT}{defptr}{lc($b[0])}{$name});
delete($hash->{READINGS}{protocol});
delete($hash->{READINGS}{mode});
delete($hash->{READINGS}{unit});
delete($hash->{READINGS}{group});
for my $c (keys(%it_c2b)) {
delete($hash->{$c});
}
}
if ($a[3] eq "HE800") {
# OLD, do not use anymore
@ -894,16 +943,49 @@ IT_Parse($$)
$modules{IT}{defptr}{ioname} = $ioname;
if ((substr($msg, 0, 1)) ne 'i') {
Log3 $hash,4,"$ioname IT: message not supported by IT \"$msg\"!";
return undef;
return '';
}
if (length($msg) != 7 && length($msg) != 12 && length($msg) != 17 && length($msg) != 19 && length($msg) != 20) {
Log3 $hash,3,"$ioname IT: message \"$msg\" (" . length($msg) . ") too short!";
return undef;
}
Log3 $hash,4,"$ioname IT: message \"$msg\" (" . length($msg) . ")";
my $bin = undef;
my $isDimMode = 0;
if (length($msg) == 17) { # IT V3
my $ishe = (substr($msg, 1, 1) eq 'h');
if ($ishe) {
if (length($msg) == 9 || length($msg) == 17) { # from sduino
$msg .= '0';
}
Log3 $hash,4,"$ioname IT: HE message \"$msg\" (" . length($msg) . ")";
if (length($msg) == 18 || length($msg) == 20) { # HomeEasy EU
#Log3 $ioname,3,"HEX Part1: " . substr($msg,2,8);
my $bin1=sprintf("%024b",hex(substr($msg,2,8)));
while (length($bin1) < 32) {
# suffix 0
$bin1 = '0'.$bin1;
}
#Log3 $ioname,3,"HEX Part2: " . substr($msg,2+8,7);
my $bin2=sprintf("%024b",hex(substr($msg,2+8,7)));
while (length($bin2) < 28) {
# suffix 0
$bin2 = '0'.$bin2;
}
$bin = $bin1 . $bin2;
}
elsif (length($msg) == 10 || length($msg) == 12) { # HomeEasy HE800
$bin=sprintf("%024b",hex(substr($msg,2,8)));
#my $bin1=sprintf("%024b",hex(substr($msg,2,8)));
#while (length($bin1) < 32) {
# # suffix 0
# $bin1 = '0'.$bin1;
#}
#$bin = $bin1;
}
else {
Log3 $ioname,3,"$ioname IT: HE message \"$msg\" (" . length($msg) . ") wrong length!";
return '';
}
}
else { # IT V1 / V3
Log3 $hash,4,"$ioname IT: message \"$msg\" (" . length($msg) . ")";
#my $isDimMode = 0;
if (length($msg) == 17) { # IT V3
my $bin1=sprintf("%024b",hex(substr($msg,1,length($msg)-1-8)));
while (length($bin1) < 32) {
# suffix 0
@ -916,7 +998,8 @@ IT_Parse($$)
}
$bin = $bin1 . $bin2;
Log3 $hash,4,"$ioname ITv3: bin message \"$bin\" (" . length($bin) . ")";
} elsif (length($msg) == 19 ) { # IT V3 Dimm
}
elsif (length($msg) == 19 ) { # IT V3 Dimm
my $bin1=sprintf("%024b",hex(substr($msg,1,length($msg)-1-8-8)));
while (length($bin1) < 32) {
# suffix 0
@ -934,35 +1017,14 @@ IT_Parse($$)
}
$bin = substr($bin1 . $bin2 . $bin3,24,length($bin1 . $bin2 . $bin3)-1);
Log3 $hash,4,"$ioname ITv3dimm: bin message \"$bin\" (" . length($bin) . ")";
} elsif (length($msg) == 20 && (substr($msg, 1, 1)) eq 'h') { # HomeEasy EU
#Log3 undef,3,"HEX Part1: " . substr($msg,2,8);
my $bin1=sprintf("%024b",hex(substr($msg,2,8)));
while (length($bin1) < 32) {
# suffix 0
$bin1 = '0'.$bin1;
}
#Log3 undef,3,"HEX Part2: " . substr($msg,2+8,7);
my $bin2=sprintf("%024b",hex(substr($msg,2+8,7)));
#$bin2 = substr($bin2,4);
while (length($bin2) < 28) {
# suffix 0
$bin2 = '0'.$bin2;
}
$bin = $bin1 . $bin2;# . $bin3;
} elsif (length($msg) == 12 && (substr($msg, 1, 1)) eq 'h') { # HomeEasy HE800
my $bin1=sprintf("%024b",hex(substr($msg,2,8)));
while (length($bin1) < 32) {
# suffix 0
$bin1 = '0'.$bin1;
}
$bin = $bin1;# . $bin3;
} else { # IT
if (length($msg) > 10) {
Log3 $hash,4,"$ioname IT: Wrong IT message received: $msg";
return undef;
} else {
$bin=sprintf("%024b",hex(substr($msg,1,length($msg)-1)));
}
}
elsif (length($msg) == 7) { # IT
$bin=sprintf("%024b",hex(substr($msg,1,length($msg)-1)));
}
else {
Log3 $ioname,3,"$ioname IT: message \"$msg\" (" . length($msg) . ") wrong length!";
return '';
}
}
if ((length($bin) % 2) != 0) {
@ -971,10 +1033,14 @@ IT_Parse($$)
}
my $binorg = $bin;
my $msgcode="";
if (length($msg) == 12 && (substr($msg, 1, 1)) eq 'h') { # HomeEasy HE800;
$msgcode=substr($bin, 0, 28);
} elsif (length($msg) == 20 && (substr($msg, 1, 1)) eq 'h') { # HomeEasy EU;
$msgcode=substr($bin, 0, 57);
if ($ishe) { # HomeEasy
if (length($msg) >= 18) { # HomeEasy EU
$msgcode=substr($bin, 0, 57);
}
else { # HomeEasy HE800;
#$msgcode=substr($bin, 0, 28);
$msgcode=$bin;
}
} else {
while (length($bin)>=2) {
if (length($msg) == 7) {
@ -992,8 +1058,8 @@ IT_Parse($$)
#Log3 $hash,4,"$ioname IT:unknown tristate in \"$bin\"";
#return "unknown tristate in \"$bin\""
}
} elsif (length($msg) == 20 && (substr($msg, 1, 1)) eq 'h') { # HomeEasy EU
$msgcode=$msgcode.$bintotristateHE{substr($bin,0,2)};
#} elsif (length($msg) == 20 && (substr($msg, 1, 1)) eq 'h') { # HomeEasy EU, but this is never reached, see $ishe above!
# $msgcode=$msgcode.$bintotristateHE{substr($bin,0,2)};
} else {
$msgcode=$msgcode.$bintotristateV3{substr($bin,0,2)};
}
@ -1030,12 +1096,12 @@ IT_Parse($$)
if (length($msg) == 19) {
$dimCode=substr($msgcode,32,4);
}
} elsif (length($msg) == 20 && (substr($msg, 1, 1)) eq 'h') { # HomeEasy EU
} elsif ($ishe && length($msg) >= 18) { # HomeEasy EU
$onoffcode=substr($msgcode,46,2);
$groupBit=substr($msgcode,48,2);
$unitCode=substr($msgcode,50,7);
$housecode=substr($msgcode,0,46).$unitCode;
} elsif (length($msg) == 12 && (substr($msg, 1, 1)) eq 'h') { # HomeEasy HE800
} elsif ($ishe && length($msg) <= 12) { # HomeEasy HE800
#$housecode=substr($msgcode,0,6).substr($msgcode,26,2);
#$onoffcode=0;
@ -1093,7 +1159,7 @@ IT_Parse($$)
} else {
Log3 $hash,4,"$ioname IT: Wrong IT message received: $msgcode";
return undef;
return '';
}
if(!defined($modules{IT}{defptr}{lc("$housecode")})) {
@ -1106,7 +1172,7 @@ IT_Parse($$)
if (!defined($isEV1527)) { # itv1
if ($onoffcode eq "F0") { # on code IT
Log3 $hash,3,"$ioname IT: For autocreate please use the on button.";
return undef;
return '';
}
$tmpOffCode = "F0";
$tmpOnCode = "0F";
@ -1123,7 +1189,7 @@ IT_Parse($$)
$tmpOnCode = '0100';
}
return "UNDEFINED IT_$housecode IT $housecode $tmpOnCode $tmpOffCode" if(!$def);
} elsif (length($msg) == 20) { # HE_EU
} elsif ($ishe && length($msg) >= 18) { # HE_EU
my $isGroupCode = '0';
if (($onoffcode == '01' && $groupBit == '01') || ($onoffcode == '00' && $groupBit == '11')) {
# Group Code found
@ -1132,7 +1198,7 @@ IT_Parse($$)
Log3 $hash,2,"$ioname IT: $housecode not defined (Address: ".substr($msgcode,0,46)." Unit: $unitCode Switch code: $onoffcode GroupCode: $isGroupCode)";
#return "$housecode not defined (Address: ".substr($msgcode,0,26)." Group: $groupBit Unit: $unitCode Switch code: $onoffcode)!";
return "UNDEFINED IT_$housecode IT " . substr($msgcode,0,46) . " $isGroupCode $unitCode" if(!$def);
} elsif (length($msg) == 12 && (substr($msg, 1, 1)) eq 'h') { # HE800
} elsif ($ishe && length($msg) <= 12) { # HE800
Log3 $hash,2,"$ioname IT: $housecode not defined (HE800)";
return "UNDEFINED IT_HE800_$housecode IT " . "HE800 $transmittercode $unitCode" if(!$def);
} else {
@ -1171,6 +1237,7 @@ IT_Parse($$)
if ($def->{$name}->{READINGS}{protocol}{VAL} eq 'HE800') {
my %he800MapingTable = (
0 => 0,
2 => 12,
3 => 25,
4 => 37,
@ -1213,8 +1280,11 @@ IT_Parse($$)
# $newstate="on";
#} els
if ($binVal == 0) {
$newstate="off";
}
$newstate='off';
}
elsif ($binVal == 100) {
$newstate='on';
}
}
} elsif ($def->{$name}->{$it_c2b{"on"}} eq lc($onoffcode)) {
$newstate="on";