tempList changes von Oskar.

git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@1011 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig 2011-09-21 07:01:40 +00:00
parent 9b01559536
commit b9c7021027

View File

@ -322,6 +322,80 @@ CUL_HM_Parse($$)
}
}
# 0403 167DE9 01 05 05 16 0000 windowopen-temp channel 03, device 167DE9 on
# slot 01.
if($cmd eq "A410" && $p =~ m/^0403(......)(..)(..)(..)(..)(....)/) {
my ( $tdev, $tchan, $plist, $o1, $v1, $rest) =
(($1), hex($2), hex($3), ($4), hex($5), ($6));
my $msg;
if($plist == 5) {
if($o1 eq "05") {
$msg = sprintf("windowopen-temp-%d: %.1f (sensor:%s)",
$tchan, $v1/2, $tdev);
}
}
push @event, $msg if $msg;
}
# idea: remember all possible 24 value-pairs per day and reconstruct list
# everytime new values are set or received.
if($cmd eq "A410" &&
$p =~ m/^0402000000000(.)(..)(..)(..)(..)(..)(..)(..)(..)/) {
# param list 5 or 6, 4 value pairs.
my ($plist, $o1, $v1, $o2, $v2, $o3, $v3, $o4, $v4) =
(hex($1),hex($2),hex($3),hex($4),hex($5),hex($6),hex($7),hex($8),hex($9));
my ($dayoff, $maxdays, $basevalue);
my @days = ("Sat", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri");
if($plist == 5 || $plist == 6) {
if($plist == 5) {
$dayoff = 0; $maxdays = 5; $basevalue = hex("0B");
} else {
$dayoff = 5; $maxdays = 2; $basevalue = hex("01");
}
my $idx = ($o1-$basevalue);
my $dayidx = int($idx/48);
if($idx % 4 == 0 && $dayidx < $maxdays) {
$idx -= 48*$dayidx;
$idx /= 2;
my $day = $days[$dayidx+$dayoff];
$shash->{TEMPLIST}{$day}{$idx}{HOUR} = int($v1/6);
$shash->{TEMPLIST}{$day}{$idx}{MINUTE} = ($v1 - int($v1/6)*6)*10;
$shash->{TEMPLIST}{$day}{$idx}{TEMP} = $v2/2;
$shash->{TEMPLIST}{$day}{$idx+1}{HOUR} = int($v3/6);
$shash->{TEMPLIST}{$day}{$idx+1}{MINUTE} = ($v3 - int($v3/6)*6)*10;
$shash->{TEMPLIST}{$day}{$idx+1}{TEMP} = $v4/2;
}
}
foreach my $wd (@days) {
my $twentyfour = 0;
my $msg = sprintf("tempList%s:", $wd);
foreach(my $idx=0; $idx<24; $idx+=1) {
if(defined ($shash->{TEMPLIST}{$wd}{$idx}{TEMP}) &&
$shash->{TEMPLIST}{$wd}{$idx}{TEMP} ne "") {
if($twentyfour == 0) {
$msg .= sprintf(" %02d:%02d %.1f",
$shash->{TEMPLIST}{$wd}{$idx}{HOUR},
$shash->{TEMPLIST}{$wd}{$idx}{MINUTE},
$shash->{TEMPLIST}{$wd}{$idx}{TEMP});
} else {
$shash->{TEMPLIST}{$wd}{$idx}{HOUR} = "";
$shash->{TEMPLIST}{$wd}{$idx}{MINUTE} = "";
$shash->{TEMPLIST}{$wd}{$idx}{TEMP} = "";
}
}
if(defined ($shash->{TEMPLIST}{$wd}{$idx}{HOUR}) &&
0+$shash->{TEMPLIST}{$wd}{$idx}{HOUR} == 24) {
$twentyfour = 1; # next value uninteresting, only first counts.
}
}
push @event, $msg if($msg);
}
}
if($cmd eq "A001" && $p =~ m/^01080900(..)(..)/) {
my ( $of, $vep) =
(hex($1), hex($2));
@ -416,7 +490,8 @@ CUL_HM_Parse($$)
my $msg = "unknown";
$msg = "deviceMsg" if($msgType =~ m/0./);
$msg = "powerOn" if($msgType =~ m/06/ && $chn eq "00");
push @event, "$msg:$val";
my $add = ($dst eq $id) ? "" : " (to $dname)";
push @event, "$msg:$val$add";
push @event, "state:$val";
}
@ -776,7 +851,8 @@ CUL_HM_Set($@)
my %day2off = ( "Sat"=>"5 0B", "Sun"=>"5 3B", "Mon"=>"5 6B",
"Tue"=>"5 9B", "Wed"=>"5 CB", "Thu"=>"6 01",
"Fri"=>"6 31");
my ($list,$addr) = split(" ", $day2off{$1});
my $wd = $1;
my ($list,$addr) = split(" ", $day2off{$wd});
$addr = hex($addr);
@ -786,6 +862,7 @@ CUL_HM_Set($@)
return "Last time spec must be 24:00" if($a[@a-2] ne "24:00");
my $data = "";
my $msg = "";
for(my $idx = 2; $idx < @a; $idx += 2) {
return "$a[$idx] is not in HH:MM format"
if($a[$idx] !~ m/^([0-2]\d):([0-5]\d)/);
@ -794,8 +871,17 @@ CUL_HM_Set($@)
return $temp if(length($temp) > 2);
$data .= sprintf("%02X%02X%02X%s", $addr, $h*6+($m/10), $addr+1, $temp);
$addr += 2;
$hash->{TEMPLIST}{$wd}{($idx-2)/2}{HOUR} = $h;
$hash->{TEMPLIST}{$wd}{($idx-2)/2}{MINUTE} = $m;
$hash->{TEMPLIST}{$wd}{($idx-2)/2}{TEMP} = $a[$idx+1];
$msg .= sprintf(" %02d:%02d %.1f", $h, $m, $a[$idx+1]);
}
CUL_HM_pushConfig($hash, $id, $dst, 2, $list, $data);
my $vn = "tempList$wd";
$hash->{READINGS}{$vn}{TIME} = TimeNow();
$hash->{READINGS}{$vn}{VAL} = $msg;
return;
} elsif($cmd eq "matic") { #####################################
@ -1312,5 +1398,4 @@ CUL_HM_maticFn($$$$$)
return $sndcmd;
}
1;