diff --git a/FHEM/70_BOTVAC.pm b/FHEM/70_BOTVAC.pm index f48f97b4f..d1739f093 100755 --- a/FHEM/70_BOTVAC.pm +++ b/FHEM/70_BOTVAC.pm @@ -217,47 +217,7 @@ sub Get($@) { } } elsif ( $what =~ /^(statistics)$/ ) { if (defined( $hash->{helper}{MAPS} and @{$hash->{helper}{MAPS}} > 0)) { - my $ret = ""; - my $mapcount = @{$hash->{helper}{MAPS}}; - my $cw = 9; #column width - my $cws = $cw * 11 + 4; #column width sum - $ret .= "".sprintf("%-".($cws)."s","Report: ".ReadingsVal($name,"name","name").", ".InternalVal($name,"VENDOR","VENDOR").", ".ReadingsVal($name,"model","model"))."\n\n"; - - $ret .= "".sprintf("%-".($cw-5)."s","Map").sprintf("%-".($cw+1)."s","Expected").sprintf("%-".($cw-4)."s","Map").sprintf("%-".($cw-4)."s","Map").sprintf("%-".($cw-2)."s","Charge").sprintf("%-".($cw+1)."s","Discharge").sprintf("%-".($cw-2)."s","Area").sprintf("%-".($cw+11)."s","Cleaning").sprintf("%-".($cw-2)."s","Charge").sprintf("%-".$cw."s","Status").sprintf("%-".($cw+2)."s","Date").sprintf("%-".($cw+10)."s","Time")."\n"; - - $ret .= "".sprintf("%-".($cw-5)."s","No.").sprintf("%-".($cw-4)."s","Area").sprintf("%-".($cw-4)."s","Time").sprintf("%-".($cw-4)."s","Area").sprintf("%-".($cw-4)."s","Time").sprintf("%-".($cw-2)."s","Delta").sprintf("%-".(($cw+1))."s","Speed").sprintf("%-".($cw-2)."s","Speed").sprintf("%-".($cw-2)."s","Cat.").sprintf("%-".($cw-3)."s","Mode").sprintf("%-".($cw-2)."s","Freq.").sprintf("%-".($cw-2)."s","During").sprintf("%-".$cw."s","").sprintf("%-".($cw+2)."s","").sprintf("%-".($cw+10)."s","")."\n"; - - $ret .= "".sprintf("%-".($cw-5)."s","").sprintf("%-".($cw-4)."s","qm").sprintf("%-".($cw-4)."s","min").sprintf("%-".($cw-4)."s","qm").sprintf("%-".($cw-4)."s","min").sprintf("%-".($cw-2)."s","%").sprintf("%-".($cw+1)."s","%/min").sprintf("%-".($cw-2)."s","qm/min").sprintf("%-".($cw-2)."s","").sprintf("%-".($cw-3)."s","").sprintf("%-".($cw-2)."s","").sprintf("%-".($cw-2)."s","Run").sprintf("%-".$cw."s","").sprintf("%-".($cw+2)."s","YYYY-MM-DD").sprintf("%-".($cw+10)."s","hh:mm:ss")."\n"; - $ret .= sprintf("-"x($cws))."\n"; - - for (my $i=0;$i<$mapcount;$i++) { - my $map = \$hash->{helper}{MAPS}[$i]; - my $t1 = GetSecondsFromString("$$map->{end_at}"); - my $t2 = GetSecondsFromString("$$map->{start_at}"); - my $dt = $t1-$t2-$$map->{time_in_suspended_cleaning}-$$map->{time_in_error}-$$map->{time_in_pause}; - my $dc = $$map->{run_charge_at_start}-$$map->{run_charge_at_end}; - my $expa = int($$map->{cleaned_area}*100/$dc+.5) if ($dc > 0); - my $expt = int($dt*100/$dc/60+.5) if ($dc > 0); - $ret .= sprintf("%-".($cw-5)."s",$i+1); # Map No. - $ret .= sprintf("%-".($cw-4)."s",($expa>0?$expa:0)); # Expected Area - $ret .= sprintf("%-".($cw-4)."s",($expt>0?$expt:0)); # Expected Time - $ret .= sprintf("%-".($cw-4)."s",int($$map->{cleaned_area}+.5)); # Map Area - $ret .= sprintf("%-".($cw-4)."s",($dt>0)?(int($dt/60+.5)):0); # Map Time - $ret .= sprintf("%-".($cw-2)."s",($dc>0?$dc:0)); # Charge Delta - $ret .= sprintf("%-".($cw+1)."s",($dt>0 and $dc>0)?(int($dc*600/$dt+.5)/10):0); # Discharge Speed - $ret .= sprintf("%-".($cw-2)."s",($expt>0 and $expa>0)?(int($expa*10/$expt+.5))/10:0); # Area Speed - $ret .= sprintf("%-".($cw-2)."s",GetCategoryText($$map->{category})); # Cleaning Category - $ret .= sprintf("%-".($cw-3)."s",GetModeText($$map->{mode})); # Cleaning Mode - $ret .= sprintf("%-".($cw-2)."s",GetModifierText($$map->{modifier})); # Cleaning Frequency - $ret .= sprintf("%-".($cw-2)."s",$$map->{suspended_cleaning_charging_count}."x"); # Charge During Run - $ret .= sprintf("%-".$cw."s",$$map->{status}); # Status - $ret .= sprintf("%-".($cws)."s",GetTimeFromString($$map->{generated_at})); # Date - $ret .= "\n"; - $ret .= "
Map | '; + $ret .= 'Expected | '; + $ret .= 'Map | '; + $ret .= 'Map | '; + $ret .= 'Charge | '; + $ret .= 'Discharge | '; + $ret .= 'Area | '; + $ret .= 'Cleaning | '; + $ret .= 'Charge | '; + $ret .= 'Status | '; + $ret .= 'Date | '; + $ret .= 'Time | '; + $ret .= '|||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
No. | '; + $ret .= 'Area | '; + $ret .= 'Time | '; + $ret .= 'Area | '; + $ret .= 'Time | '; + $ret .= 'Delta | '; + $ret .= 'Speed | '; + $ret .= 'Speed | '; + $ret .= 'Cat. | '; + $ret .= 'Mode | '; + $ret .= 'Freq. | '; + $ret .= 'During | '; + $ret .= ''; + $ret .= ' | ||
'; + $ret .= ' | qm | '; + $ret .= 'min | '; + $ret .= 'qm | '; + $ret .= 'min | '; + $ret .= '% | '; + $ret .= '%/min | '; + $ret .= 'qm/min | '; + $ret .= ''; + $ret .= ' | Run | '; + $ret .= ''; + $ret .= ' | YYYY-MM-DD hh:mm:ss | '; + $ret .= '|||
'.($i+1).' | '; # Map No. + $ret .= ''.($expa>0?$expa:0).' | '; # Expected Area + $ret .= ''.($expt>0?$expt:0).' | '; # Expected Time + $ret .= ''.int($$map->{cleaned_area}+.5).' | '; # Map Area + $ret .= ''.(($dt>0)?(int($dt/60+.5)):0).' | '; # Map Time + $ret .= ''.($dc>0?$dc:0).' | '; # Charge Delta + $ret .= ''.(($dt>0 and $dc>0)?(int($dc*600/$dt+.5)/10):0).' | '; # Discharge Speed + $ret .= ''.(($expt>0 and $expa>0)?(int($expa*10/$expt+.5))/10:0).' | '; # Area Speed + $ret .= ''.GetCategoryText($$map->{category}).' | '; # Cleaning Category + $ret .= ''.GetModeText($$map->{mode}).' | '; # Cleaning Mode + $ret .= ''.GetModifierText($$map->{modifier}).' | '; # Cleaning Frequency + $ret .= ''.$$map->{suspended_cleaning_charging_count}.'x | '; # Charge During Run + $ret .= ''.$$map->{status}.' | '; # Status + $ret .= ''.GetTimeFromString($$map->{generated_at}).' | '; # Date + $ret .= '
Manufacturer Specification:
";
+ $ret .= "Neato Botvac D3 Connected, up to 60 qm
";
+ $ret .= "Neato Botvac D4 Connected, up to 75 qm
";
+ $ret .= "Neato Botvac D5 Connected, up to 90 qm
";
+ $ret .= "Neato Botvac D6/D7 Connected, up to 120 qm
";
+ $ret .= "Vorwerk VR200, battery 84 Wh, eco (90 min, 120 qm, power 50 W), turbo (60 min, 90 qm, power 70 W)
";
+ $ret .= "Vorwerk VR220(VR300), battery 84 Wh, eco (90 min, 120 qm, power 65 W), turbo (60 min, 90 qm, power 85 W)
";
+ $ret .= '';
+
+ return $ret;
+}
+
#######################################
# Websocket Functions
#######################################