mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-09 20:57:11 +00:00
AutomowerConnectFamily: minor fixes, cref update
git-svn-id: https://svn.fhem.de/fhem/trunk@27444 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
6e0e64d455
commit
d5bfca7904
@ -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: AutomowerConnectFamily:minor fixes and changes in cref
|
||||
- bugfix: 72_FRITZBOX: kleinere Korrekturen
|
||||
- bugfix: 72_FRITZBOX: TR-064 Problem (topic=133142.0)
|
||||
- bugfix: 72_FRITZBOX: Fehler in Evaluierung RegEx
|
||||
|
@ -346,8 +346,6 @@ sub getMowerResponse {
|
||||
|
||||
my $storediff = $hash->{helper}{mower}{attributes}{metadata}{statusTimestamp} - $hash->{helper}{mowerold}{attributes}{metadata}{statusTimestamp};
|
||||
if ($storediff) {
|
||||
# collect timestamps for analysis
|
||||
unshift ( @{ $hash->{helper}{timestamps} }, $hash->{helper}{mower}{attributes}{metadata}{statusTimestamp} );
|
||||
|
||||
::FHEM::Devices::AMConnect::Common::AlignArray( $hash );
|
||||
::FHEM::Devices::AMConnect::Common::FW_detailFn_Update ($hash) if (AttrVal($name,'showMap',1));
|
||||
@ -423,6 +421,10 @@ sub getMowerResponse {
|
||||
$hash->{helper}{statistics}{currentWeekTrack} = 0;
|
||||
$hash->{helper}{statistics}{currentWeekArea} = 0;
|
||||
|
||||
#clear position arrays
|
||||
$hash->{helper}{areapos} = [];
|
||||
$hash->{helper}{otherpos} = [];
|
||||
|
||||
}
|
||||
}
|
||||
readingsSingleUpdate($hash, 'state', 'connected', 1 );
|
||||
@ -736,7 +738,7 @@ __END__
|
||||
|
||||
=begin html
|
||||
|
||||
<a id="AutomowerConnect"></a>
|
||||
<a id="AutomowerConnect" ></a>
|
||||
<h3>AutomowerConnect</h3>
|
||||
<ul>
|
||||
<u><b>FHEM-FORUM:</b></u> <a target="_blank" href="https://forum.fhem.de/index.php/topic,131661.0.html"> AutomowerConnect und AutomowerConnectDevice</a><br>
|
||||
@ -888,7 +890,6 @@ __END__
|
||||
<li><a id='AutomowerConnect-attr-interval'>interval</a><br>
|
||||
<code>attr <name> interval <time in seconds></code><br>
|
||||
Time in seconds that is used to get new data from Husqvarna Cloud. Default: 600</li>
|
||||
|
||||
<li><a id='AutomowerConnect-attr-mapImagePath'>mapImagePath</a><br>
|
||||
<code>attr <name> mapImagePath <path to image></code><br>
|
||||
Path of a raster image file for an area the mower path has to be drawn to.<br>
|
||||
@ -910,7 +911,15 @@ __END__
|
||||
|
||||
<li><a id='AutomowerConnect-attr-mapDesignAttributes'>mapDesignAttributes</a><br>
|
||||
<code>attr <name> mapDesignAttributes <complete list of design-attributes></code><br>
|
||||
Load the list of attributes by <code>set <name> defaultDesignAttributesToAttribute</code> to change its values</li>
|
||||
Load the list of attributes by <code>set <name> defaultDesignAttributesToAttribute</code> to change its values. Some default values are
|
||||
<ul>
|
||||
<li>mower path (activity MOWING): red</li>
|
||||
<li>path in CS (activity CHARGING,PARKED_IN_CS): grey</li>
|
||||
<li>path for interval with error (all activities with error): kind of magenta</li>
|
||||
<li>all other activities: green</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
|
||||
<li><a id='AutomowerConnect-attr-mapImageCoordinatesToRegister'>mapImageCoordinatesToRegister</a><br>
|
||||
<code>attr <name> mapImageCoordinatesToRegister <upper left longitude><space><upper left latitude><line feed><lower right longitude><space><lower right latitude></code><br>
|
||||
@ -953,7 +962,9 @@ __END__
|
||||
|
||||
<li><a id='AutomowerConnect-attr-numberOfWayPointsToDisplay'>numberOfWayPointsToDisplay</a><br>
|
||||
<code>attr <name> numberOfWayPointsToDisplay <number of way points></code><br>
|
||||
Set the number of way points stored and displayed, default 500</li>
|
||||
Set the number of way points stored and displayed, default 5000.
|
||||
While in activity MOWING every 30 s a geo data set is generated.
|
||||
While in activity PARKED_IN_CS/CHARGING every 42 min a geo data set is generated.</li>
|
||||
|
||||
<li><a id='AutomowerConnect-attr-scaleToMeterXY'>scaleToMeterXY</a><br>
|
||||
<code>attr <name> scaleToMeterXY <scale factor longitude><seperator><scale factor latitude></code><br>
|
||||
@ -1179,7 +1190,14 @@ __END__
|
||||
|
||||
<li><a id='AutomowerConnect-attr-mapDesignAttributes'>mapDesignAttributes</a><br>
|
||||
<code>attr <name> mapDesignAttributes <complete list of design-attributes></code><br>
|
||||
Lade die Attributliste mit <code>set <name> defaultDesignAttributesToAttribute</code> um die Werte zu ändern.</li>
|
||||
Lade die Attributliste mit <code>set <name> defaultDesignAttributesToAttribute</code> um die Werte zu ändern. Einige Vorgabewerte:
|
||||
<ul>
|
||||
<li>Pfad beim mähen (Aktivität MOWING): rot</li>
|
||||
<li>In der Ladestation (Aktivität CHARGING,PARKED_IN_CS): grau</li>
|
||||
<li>Pfad eines Intervalls mit Fehler (alle Aktivitäten with error): Eine Art Magenta</li>
|
||||
<li>Pfad aller anderen Aktivitäten: grün</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li><a id='AutomowerConnect-attr-mapImageCoordinatesToRegister'>mapImageCoordinatesToRegister</a><br>
|
||||
<code>attr <name> mapImageCoordinatesToRegister <upper left longitude><space><upper left latitude><line feed><lower right longitude><space><lower right latitude></code><br>
|
||||
@ -1225,7 +1243,8 @@ __END__
|
||||
|
||||
<li><a id='AutomowerConnect-attr-numberOfWayPointsToDisplay'>numberOfWayPointsToDisplay</a><br>
|
||||
<code>attr <name> numberOfWayPointsToDisplay <number of way points></code><br>
|
||||
Legt die Anzahl der gespeicherten und und anzuzeigenden Wegpunkte fest, default 500</li>
|
||||
Legt die Anzahl der gespeicherten und und anzuzeigenden Wegpunkte fest, default 5000
|
||||
Während der Aktivität MOWING wird ca. alle 30 s und während PARKED_IN_CS/CHARGING wird alle 42 min ein Geodatensatz erzeugt.</li>
|
||||
|
||||
<li><a id='AutomowerConnect-attr-scaleToMeterXY'>scaleToMeterXY</a><br>
|
||||
<code>attr <name> scaleToMeterXY <scale factor longitude><seperator><scale factor latitude></code><br>
|
||||
|
@ -177,8 +177,6 @@ sub Notify {
|
||||
|
||||
my $storediff = $hash->{helper}{mower}{attributes}{metadata}{statusTimestamp} - $hash->{helper}{mowerold}{attributes}{metadata}{statusTimestamp};
|
||||
if ($storediff) {
|
||||
# collect timestamps for analysis
|
||||
unshift ( @{ $hash->{helper}{timestamps} }, $hash->{helper}{mower}{attributes}{metadata}{statusTimestamp} );
|
||||
|
||||
::FHEM::Devices::AMConnect::Common::AlignArray( $hash );
|
||||
::FHEM::Devices::AMConnect::Common::FW_detailFn_Update ($hash) if (AttrVal($name,'showMap',1));
|
||||
@ -256,6 +254,10 @@ sub Notify {
|
||||
$hash->{helper}{statistics}{currentWeekTrack} = 0;
|
||||
$hash->{helper}{statistics}{currentWeekArea} = 0;
|
||||
|
||||
#clear position arrays
|
||||
$hash->{helper}{areapos} = [];
|
||||
$hash->{helper}{otherpos} = [];
|
||||
|
||||
}
|
||||
}
|
||||
readingsSingleUpdate($hash, 'state', 'connected',1);
|
||||
@ -663,7 +665,14 @@ __END__
|
||||
|
||||
<li><a id='AutomowerConnectDevice-attr-mapDesignAttributes'>mapDesignAttributes</a><br>
|
||||
<code>attr <name> mapDesignAttributes <complete list of design-attributes></code><br>
|
||||
Load the list of attributes by <code>set <name> defaultDesignAttributesToAttribute</code> to change its values</li>
|
||||
Load the list of attributes by <code>set <name> defaultDesignAttributesToAttribute</code> to change its values. Some default values are
|
||||
<ul>
|
||||
<li>mower path (activity MOWING): red</li>
|
||||
<li>path in CS (activity CHARGING,PARKED_IN_CS): grey</li>
|
||||
<li>path for interval with error (all activities with error): kind of magenta</li>
|
||||
<li>all other activities: green</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li><a id='AutomowerConnectDevice-attr-mapImageCoordinatesToRegister'>mapImageCoordinatesToRegister</a><br>
|
||||
<code>attr <name> mapImageCoordinatesToRegister <upper left longitude><space><upper left latitude><line feed><lower right longitude><space><lower right latitude></code><br>
|
||||
@ -706,7 +715,9 @@ __END__
|
||||
|
||||
<li><a id='AutomowerConnectDevice-attr-numberOfWayPointsToDisplay'>numberOfWayPointsToDisplay</a><br>
|
||||
<code>attr <name> numberOfWayPointsToDisplay <number of way points></code><br>
|
||||
Set the number of way points stored and displayed, default 500</li>
|
||||
Set the number of way points stored and displayed, default 5000.
|
||||
While in activity MOWING every 30 s a geo data set is generated.
|
||||
While in activity PARKED_IN_CS/CHARGING every 42 min a geo data set is generated.</li>
|
||||
|
||||
<li><a id='AutomowerConnectDevice-attr-scaleToMeterXY'>scaleToMeterXY</a><br>
|
||||
<code>attr <name> scaleToMeterXY <scale factor longitude><seperator><scale factor latitude></code><br>
|
||||
@ -902,7 +913,14 @@ __END__
|
||||
|
||||
<li><a id='AutomowerConnectDevice-attr-mapDesignAttributes'>mapDesignAttributes</a><br>
|
||||
<code>attr <name> mapDesignAttributes <complete list of design-attributes></code><br>
|
||||
Lade die Attributliste mit <code>set <name> defaultDesignAttributesToAttribute</code> um die Werte zu ändern.</li>
|
||||
Lade die Attributliste mit <code>set <name> defaultDesignAttributesToAttribute</code> um die Werte zu ändern. Einige Vorgabewerte:
|
||||
<ul>
|
||||
<li>Pfad beim mähen (Aktivität MOWING): rot</li>
|
||||
<li>In der Ladestation (Aktivität CHARGING,PARKED_IN_CS): grau</li>
|
||||
<li>Pfad eines Intervalls mit Fehler (alle Aktivitäten with error): Eine Art Magenta</li>
|
||||
<li>Pfad aller anderen Aktivitäten: grün</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li><a id='AutomowerConnectDevice-attr-mapImageCoordinatesToRegister'>mapImageCoordinatesToRegister</a><br>
|
||||
<code>attr <name> mapImageCoordinatesToRegister <upper left longitude><space><upper left latitude><line feed><lower right longitude><space><lower right latitude></code><br>
|
||||
@ -948,7 +966,8 @@ __END__
|
||||
|
||||
<li><a id='AutomowerConnectDevice-attr-numberOfWayPointsToDisplay'>numberOfWayPointsToDisplay</a><br>
|
||||
<code>attr <name> numberOfWayPointsToDisplay <number of way points></code><br>
|
||||
Legt die Anzahl der gespeicherten und anzuzeigenden Wegpunkte fest, default 500</li>
|
||||
Legt die Anzahl der gespeicherten und anzuzeigenden Wegpunkte fest, default 5000.
|
||||
Während der Aktivität MOWING wird ca. alle 30 s und während PARKED_IN_CS/CHARGING wird alle 42 min ein Geodatensatz erzeugt.</li>
|
||||
|
||||
<li><a id='AutomowerConnectDevice-attr-scaleToMeterXY'>scaleToMeterXY</a><br>
|
||||
<code>attr <name> scaleToMeterXY <scale factor longitude><seperator><scale factor latitude></code><br>
|
||||
|
@ -186,42 +186,50 @@ mowingPathLineWidth="1"';
|
||||
UNKNOWN => {
|
||||
arrayName => 'otherpos',
|
||||
maxLength => 50,
|
||||
cnt => 0,
|
||||
callFn => ''
|
||||
},
|
||||
NOT_APPLICABLE => {
|
||||
arrayName => 'otherpos',
|
||||
maxLength => 50,
|
||||
cnt => 0,
|
||||
callFn => ''
|
||||
},
|
||||
MOWING => {
|
||||
arrayName => 'areapos',
|
||||
maxLength => 500,
|
||||
maxLengthDefault => 500,
|
||||
maxLength => 5000,
|
||||
maxLengthDefault => 5000,
|
||||
cnt => 0,
|
||||
callFn => \&FHEM::Devices::AMConnect::Common::AreaStatistics
|
||||
},
|
||||
GOING_HOME => {
|
||||
arrayName => 'otherpos',
|
||||
maxLength => 50,
|
||||
cnt => 0,
|
||||
callFn => ''
|
||||
},
|
||||
CHARGING => {
|
||||
arrayName => 'cspos',
|
||||
maxLength => 100,
|
||||
cnt => 0,
|
||||
callFn => \&FHEM::Devices::AMConnect::Common::ChargingStationPosition
|
||||
},
|
||||
LEAVING => {
|
||||
arrayName => 'otherpos',
|
||||
maxLength => 50,
|
||||
cnt => 0,
|
||||
callFn => ''
|
||||
},
|
||||
PARKED_IN_CS => {
|
||||
arrayName => 'cspos',
|
||||
maxLength => 100,
|
||||
cnt => 0,
|
||||
callFn => \&FHEM::Devices::AMConnect::Common::ChargingStationPosition
|
||||
},
|
||||
STOPPED_IN_GARDEN => {
|
||||
arrayName => 'otherpos',
|
||||
maxLength => 20,
|
||||
maxLength => 50,
|
||||
cnt => 0,
|
||||
callFn => ''
|
||||
},
|
||||
statistics => {
|
||||
@ -671,33 +679,40 @@ sub AlignArray {
|
||||
&& $searchposlon[ 1 ] == $hash->{helper}{mower}{attributes}{positions}[ $i+1 ]{longitude}
|
||||
&& $searchposlat[ 1 ] == $hash->{helper}{mower}{attributes}{positions}[ $i+1 ]{latitude} ) {
|
||||
|
||||
my @ar = @{ $hash->{helper}{mower}{attributes}{positions} }[ 0 .. $i-1 ];
|
||||
$tmp = dclone( \@ar );
|
||||
|
||||
if ( $i && @{ $hash->{helper}{$arrayName} } ) {
|
||||
if ( $i > 0 ) {
|
||||
my @ar = @{ $hash->{helper}{mower}{attributes}{positions} }[ 0 .. $i-1 ];
|
||||
$tmp = dclone( \@ar );
|
||||
|
||||
if ( $i && @{ $hash->{helper}{$arrayName} } ) {
|
||||
|
||||
unshift ( @{ $hash->{helper}{$arrayName} }, @$tmp );
|
||||
unshift ( @{ $hash->{helper}{$arrayName} }, @$tmp );
|
||||
|
||||
} elsif ( $i ) {
|
||||
} elsif ( $i ) {
|
||||
|
||||
$hash->{helper}{$arrayName} = $tmp;
|
||||
$hash->{helper}{$arrayName} = $tmp;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
while ( @{ $hash->{helper}{$arrayName} } > $maxLength ) {
|
||||
while ( @{ $hash->{helper}{$arrayName} } > $maxLength ) {
|
||||
|
||||
pop ( @{ $hash->{helper}{$arrayName}} );
|
||||
pop ( @{ $hash->{helper}{$arrayName}} ); # reduce to max allowed length
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
posMinMax( $hash, $tmp );
|
||||
#callFn if present
|
||||
if ( $hash->{helper}{$activity}{callFn} && @{ $hash->{helper}{$arrayName} } > 1 ) {
|
||||
posMinMax( $hash, $tmp );
|
||||
#callFn if present
|
||||
if ( $hash->{helper}{$activity}{callFn} ) {
|
||||
|
||||
$hash->{helper}{$activity}{cnt} = $i;
|
||||
no strict "refs";
|
||||
&{ $hash->{helper}{$activity}{callFn} }( $hash );
|
||||
use strict "refs";
|
||||
$hash->{helper}{$activity}{cnt} = $i;
|
||||
no strict "refs";
|
||||
&{ $hash->{helper}{$activity}{callFn} }( $hash );
|
||||
use strict "refs";
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
$hash->{helper}{$activity}{cnt} = 0;
|
||||
|
||||
}
|
||||
|
||||
@ -780,6 +795,8 @@ sub isGoodActivity {
|
||||
|
||||
my $ret = $hash->{helper}{$act}{arrayName} && (
|
||||
$act eq $actold
|
||||
|| $act =~ /^(MOWING)$/ && $actold =~ /^(LEAVING|PARKED_IN_CS|CHARGING)$/
|
||||
# || $act =~ /^(GOING_HOME)$/ && $actold =~ /^(MOWING)$/
|
||||
|| $act =~ /^(CHARGING|PARKED_IN_CS)$/ && $actold =~ /^(PARKED_IN_CS|CHARGING)$/
|
||||
|| $act =~ /^(NOT_APPLICABLE)$/ && $actold =~ /^(UNKNOWN|NOT_APPLICABLE|MOWING|GOING_HOME|CHARGING|LEAVING|PARKED_IN_CS|STOPPED_IN_GARDEN)$/);
|
||||
return $ret;
|
||||
@ -811,25 +828,21 @@ sub AreaStatistics {
|
||||
my $i = $hash->{helper}{$activity}{cnt};
|
||||
my $k = 0;
|
||||
my @xyarr = @{$hash->{helper}{areapos}};# areapos
|
||||
my $n = @xyarr;
|
||||
my $n = scalar @xyarr;
|
||||
my ($sclon, $sclat) = AttrVal($name,'scaleToMeterXY', $hash->{helper}{scaleToMeterLongitude} . ' ' .$hash->{helper}{scaleToMeterLatitude}) =~ /(-?\d+)\s+(-?\d+)/;
|
||||
my $lsum = 0;
|
||||
my $asum = 0;
|
||||
my $vm = 0;
|
||||
|
||||
|
||||
for ( $k = 0; $k <= $i-1; $k++) {
|
||||
|
||||
$lsum += ((($xyarr[ $k ]{longitude} - $xyarr[ $k+1 ]{longitude}) * $sclon)**2 + (($xyarr[ $k ]{latitude} - $xyarr[ $k+1 ]{latitude}) * $sclat)**2)**0.5;
|
||||
$lsum += ( ( ( $xyarr[ $k ]{longitude} - $xyarr[ $k+1 ]{longitude} ) * $sclon ) ** 2 + ( ( $xyarr[ $k ]{latitude} - $xyarr[ $k+1 ]{latitude} ) * $sclat ) ** 2 ) ** 0.5 if ( $xyarr[ $k+1 ]{longitude} && $xyarr[ $k+1 ]{latitude} );
|
||||
|
||||
}
|
||||
|
||||
$asum = $lsum * AttrVal($name,'mowerCuttingWidth',0.24);
|
||||
# my $td = $xyarr[ 0 ]{storedTimestamp} - $xyarr[ $k ]{storedTimestamp};
|
||||
# $vm = sprintf( '%.6f', $lsum / $td ) * 1000 if ($td); # m/s
|
||||
# $hash->{helper}{$activity}{speed} = $vm;
|
||||
$hash->{helper}{$activity}{track} = $lsum;
|
||||
$hash->{helper}{$activity}{area} = $asum;
|
||||
# $hash->{helper}{statistics}{currentSpeed} = $vm;
|
||||
$hash->{helper}{statistics}{currentDayTrack} += $lsum;
|
||||
$hash->{helper}{statistics}{currentDayArea} += $asum;
|
||||
|
||||
@ -945,22 +958,22 @@ sub listStatisticsData {
|
||||
$ret .= '<caption><b>Statistics Data</b></caption><tbody>';
|
||||
|
||||
$ret .= '<tr class="col_header"><td> Hash Path </td><td> Value </td><td> Unit </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{mower}{attributes}{statistics}{numberOfChargingCycles}  </td><td> ' . $hash->{helper}{mower}{attributes}{statistics}{numberOfChargingCycles} . ' </td><td> </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{mower}{attributes}{statistics}{numberOfCollisions}  </td><td> ' . $hash->{helper}{mower}{attributes}{statistics}{numberOfCollisions} . ' </td><td> </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{mower}{attributes}{statistics}{totalChargingTime}  </td><td> ' . $hash->{helper}{mower}{attributes}{statistics}{totalChargingTime} . ' </td><td> s </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{mower}{attributes}{statistics}{totalCuttingTime}  </td><td> ' . $hash->{helper}{mower}{attributes}{statistics}{totalCuttingTime} . ' </td><td> s </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{mower}{attributes}{statistics}{totalRunningTime}  </td><td> ' . $hash->{helper}{mower}{attributes}{statistics}{totalRunningTime} . '<sup>1</sup> </td><td> s </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{mower}{attributes}{statistics}{totalSearchingTime}  </td><td> ' . $hash->{helper}{mower}{attributes}{statistics}{totalSearchingTime} . ' </td><td> s </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{mower}{attributes}{statistics}{<b>numberOfChargingCycles</b>}  </td><td> ' . $hash->{helper}{mower}{attributes}{statistics}{numberOfChargingCycles} . ' </td><td> </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{mower}{attributes}{statistics}{<b>numberOfCollisions</b>}  </td><td> ' . $hash->{helper}{mower}{attributes}{statistics}{numberOfCollisions} . ' </td><td> </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{mower}{attributes}{statistics}{<b>totalChargingTime</b>}  </td><td> ' . $hash->{helper}{mower}{attributes}{statistics}{totalChargingTime} . ' </td><td> s </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{mower}{attributes}{statistics}{<b>totalCuttingTime</b>}  </td><td> ' . $hash->{helper}{mower}{attributes}{statistics}{totalCuttingTime} . ' </td><td> s </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{mower}{attributes}{statistics}{<b>totalRunningTime</b>}  </td><td> ' . $hash->{helper}{mower}{attributes}{statistics}{totalRunningTime} . '<sup>1</sup> </td><td> s </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{mower}{attributes}{statistics}{<b>totalSearchingTime</b>}  </td><td> ' . $hash->{helper}{mower}{attributes}{statistics}{totalSearchingTime} . ' </td><td> s </td></tr>';
|
||||
|
||||
# $cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{statistics}{currentSpeed}  </td><td> ' . $hash->{helper}{statistics}{currentSpeed} . ' </td><td> m/s </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{statistics}{currentDayTrack}  </td><td> ' . $hash->{helper}{statistics}{currentDayTrack} . ' </td><td> m </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{statistics}{currentDayArea}  </td><td> ' . $hash->{helper}{statistics}{currentDayArea} . ' </td><td> qm </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{statistics}{lastDayTrack}  </td><td> ' . $hash->{helper}{statistics}{lastDayTrack} . ' </td><td> m </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{statistics}{lastDayArea}  </td><td> ' . $hash->{helper}{statistics}{lastDayArea} . ' </td><td> qm </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{statistics}{currentWeekTrack}  </td><td> ' . $hash->{helper}{statistics}{currentWeekTrack} . ' </td><td> m </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{statistics}{currentWeekArea}  </td><td> ' . $hash->{helper}{statistics}{currentWeekArea} . ' </td><td> qm </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{statistics}{lastWeekTrack}  </td><td> ' . $hash->{helper}{statistics}{lastWeekTrack} . ' </td><td> m </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{statistics}{lastWeekArea}  </td><td> ' . $hash->{helper}{statistics}{lastWeekArea} . ' </td><td> qm </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{statistics}{<b>currentDayTrack</b>}  </td><td> ' . sprintf( "%.0f", $hash->{helper}{statistics}{currentDayTrack} ) . ' </td><td> m </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{statistics}{<b>currentDayArea</b>}  </td><td> ' . sprintf( "%.0f", $hash->{helper}{statistics}{currentDayArea} ) . ' </td><td> qm </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{statistics}{<b>lastDayTrack</b>}  </td><td> ' . sprintf( "%.0f", $hash->{helper}{statistics}{lastDayTrack} ) . ' </td><td> m </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{statistics}{<b>lastDayArea</b>}  </td><td> ' . sprintf( "%.0f", $hash->{helper}{statistics}{lastDayArea} ) . ' </td><td> qm </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{statistics}{<b>currentWeekTrack</b>}  </td><td> ' . sprintf( "%.0f", $hash->{helper}{statistics}{currentWeekTrack} ) . ' </td><td> m </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{statistics}{<b>currentWeekArea</b>}  </td><td> ' . sprintf( "%.0f", $hash->{helper}{statistics}{currentWeekArea} ) . ' </td><td> qm </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{statistics}{<b>lastWeekTrack</b>}  </td><td> ' . sprintf( "%.0f", $hash->{helper}{statistics}{lastWeekTrack} ) . ' </td><td> m </td></tr>';
|
||||
$cnt++;$ret .= '<tr class="column '.( $cnt % 2 ? 'odd' : 'even' ).'"><td> $hash->{helper}{statistics}{<b>lastWeekArea</b>}  </td><td> ' . sprintf( "%.0f", $hash->{helper}{statistics}{lastWeekArea} ) . ' </td><td> qm </td></tr>';
|
||||
|
||||
$ret .= '</tbody></table>';
|
||||
$ret .= '<p><sup>1</sup> totalRunningTime = totalCuttingTime + totalSearchingTime';
|
||||
|
@ -201,7 +201,7 @@ function AutomowerConnectUpdateDetail (dev, type, imgsrc, picx, picy, csx, csy,
|
||||
|
||||
if ( pos.length > 4 ) {
|
||||
// draw mowing path
|
||||
var mowpos = pos.slice(4);
|
||||
var mowpos = pos.slice(2);
|
||||
AutomowerConnectDrawPath ( ctx, div, mowpos, 'mowingPath' );
|
||||
|
||||
// draw start
|
||||
|
Loading…
x
Reference in New Issue
Block a user