diff --git a/fhem/CHANGED b/fhem/CHANGED index de080c37b..65358532b 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,6 @@ # Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Do not insert empty lines here, update check depends on it. + - bugfix: 88_Timer: fix sort function - feature: 70_SolarEdgeAPI: start using "overview" API, new attributes - new: 88_Timer: new modul - bugfix: 95_Dashboard: fix eliminating links to detail view diff --git a/fhem/FHEM/88_Timer.pm b/fhem/FHEM/88_Timer.pm index f742285eb..1f0e79108 100644 --- a/fhem/FHEM/88_Timer.pm +++ b/fhem/FHEM/88_Timer.pm @@ -149,34 +149,51 @@ sub Timer_Set($$$@) { my @timers_unsortet; my $userattr_new = ""; my @userattr_values; + my @attr_values_names; my $timer_nr_new; RemoveInternalTimer($hash, "Timer_Check"); - foreach my $readingsName (keys %{$hash->{READINGS}}) { + foreach my $readingsName (sort keys %{$hash->{READINGS}}) { if ($readingsName =~ /^Timer_(\d+)$/) { my $value = ReadingsVal($name, $readingsName, 0); $value =~ /^.*\d{2},(.*),(on|off|Def)/; push(@timers_unsortet,$1.",".ReadingsVal($name, $readingsName, 0).",$readingsName"); # unsort Reading Wert in Array - readingsDelete($hash, $readingsName); # Timer loeschen } } my @timers_sort = sort @timers_unsortet; # Timer in neues Array sortieren + my $array_diff = 0; + + for (my $i=0; $i "."Timer_$timer_nr_new"."_set:textField-long"; + push(@attr_values_names, "Timer_$timer_nr_new"."_set:textField-long"); } $timers_sort[$i] = substr( substr($timers_sort[$i],index($timers_sort[$i],",")+1) ,0,-9); readingsSingleUpdate($hash, "Timer_".$timer_nr_new , $timers_sort[$i], 1); } + for (my $i=0; $i $attr_values_names[$i]"; + addToDevAttrList($name,$attr_values_names[$i]); # added to userattr (new numbre) + } + addStructChange("modify", $name, "attr $name userattr"); # note with question mark if (scalar(@userattr_values) > 0) { # write userattr_values @@ -184,7 +201,7 @@ sub Timer_Set($$$@) { my $timer_nr = substr($userattr_values[$i],0,8)."_set"; my $value_attr = substr($userattr_values[$i],index($userattr_values[$i],",")+1); CommandAttr($hash,"$name $timer_nr $value_attr"); - } + } } Timer_Check($hash); } @@ -420,7 +437,7 @@ sub Timer_Notify($$) { my $events = deviceEvents($dev_hash, 1); if($devName eq "global" && grep(m/^INITIALIZED|REREADCFG$/, @{$events}) && $typ eq "Timer") { - Log3 $name, 4, "$name: Notify is running and starting $name"; + Log3 $name, 5, "$name: Notify is running and starting $name"; Timer_Check($hash); } @@ -490,7 +507,7 @@ sub Timer_FW_Detail($$$$) { '; } - Log3 $name, 4, "$name: attr2html is running"; + Log3 $name, 5, "$name: attr2html is running"; foreach my $d (sort keys %{$hash->{READINGS}}) { if ($d =~ /^Timer_\d+$/) { @@ -550,8 +567,8 @@ sub Timer_FW_Detail($$$$) { # Log3 $name, 3, "$name: Zeile $zeile, id $id, select"; $html.= "