diff --git a/fhem/FHEM/10_CUL_HM.pm b/fhem/FHEM/10_CUL_HM.pm index 0436cfc70..734fbeaf4 100755 --- a/fhem/FHEM/10_CUL_HM.pm +++ b/fhem/FHEM/10_CUL_HM.pm @@ -2775,6 +2775,11 @@ sub CUL_HM_Set($@) { $addr = hex($addr); } + my $prep = ""; + if ($a[2] =~ m/^(prep|exec)$/ && $md eq "HM-CC-RT-DN"){ + $prep = $a[2]; + splice @a,2,1;#remove prep + } return "To few arguments" if(@a < 4); return "To many arguments, max 24 pairs" if(@a > (($md eq "HM-CC-RT-DN")?28:50)); return "Bad format, use HH:MM TEMP ..." if(@a % 2); @@ -2806,7 +2811,7 @@ sub CUL_HM_Set($@) { $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, $prgChn,0,0,$list, $data); + CUL_HM_pushConfig($hash, $id, $dst, $prgChn,0,0,$list, $data,$prep); } elsif($cmd eq "sysTime") { ################################################## $state = ""; @@ -3262,10 +3267,10 @@ sub CUL_HM_pushConfig($$$$$$$$@) {#generate messages to config data to register #--- copy data from readings to shadow my $chnhash = $modules{CUL_HM}{defptr}{$dst.$chn}; $chnhash = $hash if (!$chnhash); + my $rRd = ReadingsVal($chnhash->{NAME},$regLN,"");#General if (!$chnhash->{helper}{shadowReg} || !$chnhash->{helper}{shadowReg}{$regLN}){ - $chnhash->{helper}{shadowReg}{$regLN} = - ReadingsVal($chnhash->{NAME},$regLN,""); + $chnhash->{helper}{shadowReg}{$regLN} = $rRd; } #--- update with ne value my $regs = $chnhash->{helper}{shadowReg}{$regLN}; @@ -3276,8 +3281,18 @@ sub CUL_HM_pushConfig($$$$$$$$@) {#generate messages to config data to register $regs .= " ".$addr.":".$data; } } - $chnhash->{helper}{shadowReg}{$regLN} = $regs; - return if ($prep);#prepare shadowReg only. More data to come. + $chnhash->{helper}{shadowReg}{$regLN} = $regs; # update shadow + my $change; + if ($prep eq "exec"){#update complete registerset + foreach (sort split " ",$chnhash->{helper}{shadowReg}{$regLN}){ + $change .= $_." " if ($rRd !~ m /$_/); + } + $change =~ s/(\ |:)//g; + } + else{ + $change = $content;# just change actual date + } + return if ($prep eq "prep");#prepare shadowReg only. More data to come. #Application takes care about execution CUL_HM_updtRegDisp($hash,$list,$peerAddr.$peerChn); CUL_HM_PushCmdStack($hash, "++".$flag.'01'.$src.$dst.$chn.'05'. @@ -3285,7 +3300,7 @@ sub CUL_HM_pushConfig($$$$$$$$@) {#generate messages to config data to register for(my $l = 0; $l < $tl; $l+=28) { my $ml = $tl-$l < 28 ? $tl-$l : 28; CUL_HM_PushCmdStack($hash, "++A001".$src.$dst.$chn."08". - substr($content,$l,$ml)); + substr($change,$l,$ml)); } CUL_HM_PushCmdStack($hash,"++A001".$src.$dst.$chn."06"); CUL_HM_queueAutoRead($hash->{NAME}) @@ -5235,19 +5250,29 @@ sub CUL_HM_putHash($) {# provide data for HMinfo
set th tempListSat 06:00 19 23:00 22.5 24:00 19
set th tempListSat 06:00 19 23:00 22.5 24:00 19
+ set th tempListSat prep 06:00 19 23:00 22.5 24:00 19
+ set th tempListSun prep 06:00 19 23:00 22.5 24:00 19
+ set th tempListMon prep 06:00 19 23:00 22.5 24:00 19
+ set th tempListTue exec 06:00 19 23:00 22.5 24:00 19
+