From 7424caeec931a5b0ddadbe7c7c0e64e5e562077e Mon Sep 17 00:00:00 2001 From: Ellert <> Date: Sat, 20 May 2023 08:03:42 +0000 Subject: [PATCH] 75_AutomowerConnectDevice.pm: deleted, change definition to AutomowerConnect before updating, use different application key each definition git-svn-id: https://svn.fhem.de/fhem/trunk@27597 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/75_AutomowerConnectDevice.pm | 1090 ------------------------ 1 file changed, 1090 deletions(-) delete mode 100644 fhem/FHEM/75_AutomowerConnectDevice.pm diff --git a/fhem/FHEM/75_AutomowerConnectDevice.pm b/fhem/FHEM/75_AutomowerConnectDevice.pm deleted file mode 100644 index 4a09757c3..000000000 --- a/fhem/FHEM/75_AutomowerConnectDevice.pm +++ /dev/null @@ -1,1090 +0,0 @@ -############################################################################### -# -# $Id$ -# -# This script is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# any later version. -# -# The GNU General Public License can be found at -# http://www.gnu.org/copyleft/gpl.html. -# A copy is found in the textfile GPL.txt and important notices to the license -# from the author is found in LICENSE.txt distributed with these scripts. -# -# This script is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# -# -################################################################################ - -package FHEM::AutomowerConnectDevice; -my $cvsid = '$Id$'; -use strict; -use warnings; -use POSIX; - -# wird für den Import der FHEM Funktionen aus der fhem.pl benötigt -use GPUtils qw(:all); - -use Time::HiRes qw(gettimeofday); -use Blocking; -use Storable qw(dclone store retrieve); - -# Import der FHEM Funktionen -BEGIN { - GP_Import( - qw( - AttrVal - CommandAttr - CommandDeleteReading - fhemTzOffset - FmtDateTime - getKeyValue - InternalTimer - InternalVal - IsDisabled - Log3 - minNum - maxNum - readingFnAttributes - readingsBeginUpdate - readingsBulkUpdate - readingsBulkUpdateIfChanged - readingsDelete - readingsEndUpdate - ReadingsNum - readingsSingleUpdate - ReadingsVal - RemoveInternalTimer - setKeyValue - defs - attr - modules - deviceEvents - devspec2array - ) - ); -} - -GP_Export( - qw( - Initialize - ) -); - -my $missingModul = ""; - -eval "use JSON;1" or $missingModul .= "JSON "; -require HttpUtils; -require FHEM::Devices::AMConnect::Common; - - -############################################################## - -sub Initialize() { - my ($hash) = @_; - - $hash->{DefFn} = \&FHEM::Devices::AMConnect::Common::Define; - $hash->{UndefFn} = \&FHEM::Devices::AMConnect::Common::Undefine; - $hash->{RenameFn} = \&FHEM::Devices::AMConnect::Common::Rename; - $hash->{GetFn} = \&FHEM::Devices::AMConnect::Common::Get; - $hash->{FW_detailFn}= \&FHEM::Devices::AMConnect::Common::FW_detailFn; - $hash->{SetFn} = \&Set; - $hash->{NotifyFn} = \&Notify; - $hash->{AttrFn} = \&Attr; - $hash->{AttrList} = "disable:1,0 " . - "debug:1,0 " . - "disabledForIntervals " . - "mapImagePath " . - "mapImageWidthHeight " . - "mapImageCoordinatesToRegister:textField-long " . - "mapImageCoordinatesUTM:textField-long " . - "mapImageZoom " . - "mapBackgroundColor " . - "mapDesignAttributes:textField-long " . - "mapZones:textField-long " . - "showMap:1,0 " . - "chargingStationCoordinates " . - "chargingStationImagePosition:left,top,right,bottom,center " . - "scaleToMeterXY " . - "mowerCuttingWidth " . - "mowerSchedule:textField-long " . - "mowingAreaLimits:textField-long " . - "propertyLimits:textField-long " . - "numberOfWayPointsToDisplay " . - "weekdaysToResetWayPoints " . - $readingFnAttributes; - - return undef; -} - -############################################################## -# -# GET MOWER -# -############################################################## - -sub Notify { - - my ($hash,$hosthash) = @_; - my $name = $hash->{NAME}; - my $type = $hash->{TYPE}; - my $iam = "$type $name Notify:"; - my $mowerNumber = $hash->{helper}{mowerNumber}; - my $events = ::deviceEvents($hosthash,1); - ( $hash->{VERSION} ) = $cvsid =~ /\.pm (.*)Z/ if ( !$hash->{VERSION} ); - - if ( IsDisabled($name) ) { - - return undef - - } - - if ( grep /^state:.connected$/, @{$events} ) { - - my $maxMower = 0; - $maxMower = @{$hosthash->{helper}{mowers}} if ( ref ( $hosthash->{helper}{mowers} ) eq 'ARRAY' ); - if ($maxMower <= $mowerNumber || $mowerNumber < 0 ) { - - Log3 $name, 2, "$iam wrong mower number $mowerNumber ($maxMower mower available). Change definition of $name."; - return undef; - - } - - my $mowerhash = $hosthash->{helper}{mowers}[$mowerNumber]; - my $myMower = dclone( $mowerhash ); - if ( defined ($hash->{helper}{mower}{id}) ){ # update dataset - - $hash->{helper}{mowerold}{attributes}{metadata}{statusTimestamp} = $hash->{helper}{mower}{attributes}{metadata}{statusTimestamp}; - $hash->{helper}{mowerold}{attributes}{mower}{activity} = $hash->{helper}{mower}{attributes}{mower}{activity}; - - } else { # first data set - - $hash->{helper}{searchpos} = [ dclone( $myMower->{attributes}{positions}[0] ), dclone( $myMower->{attributes}{positions}[1] ) ]; - $hash->{helper}{mowerold}{attributes}{metadata}{statusTimestamp} = $myMower->{attributes}{metadata}{statusTimestamp}; - $hash->{helper}{mowerold}{attributes}{mower}{activity} = $myMower->{attributes}{mower}{activity}; - - if ( AttrVal( $name, 'mapImageCoordinatesToRegister', '' ) eq '' ) { - ::FHEM::Devices::AMConnect::Common::posMinMax( $hash, $myMower->{attributes}{positions} ); - } - - } - - $hash->{helper}{mower} = $myMower; - # add alignment data set to the end - push( @{ $hash->{helper}{mower}{attributes}{positions} }, @{ dclone( $hash->{helper}{searchpos} ) } ); - $hash->{helper}{newdatasets} = 0; - - $hash->{helper}{storediff} = $hash->{helper}{mower}{attributes}{metadata}{statusTimestamp} - $hash->{helper}{mowerold}{attributes}{metadata}{statusTimestamp}; - if ($hash->{helper}{storediff}) { - - ::FHEM::Devices::AMConnect::Common::AlignArray( $hash ); - ::FHEM::Devices::AMConnect::Common::FW_detailFn_Update ($hash) if (AttrVal($name,'showMap',1)); - - } - - - - readingsBeginUpdate($hash); - - ::FHEM::Devices::AMConnect::Common::fillReadings( $hash ); - - readingsEndUpdate($hash, 1); - - ::FHEM::Devices::AMConnect::Common::calculateStatistics( $hash ); - - readingsSingleUpdate($hash, 'state', 'connected',1); - - } - - return undef; - -} - - -############################################################## -sub Set { - my ($hash,@a) = @_; - my $type = $hash->{TYPE}; - - return "$type $hash->{NAME} Set: needs at least an argument" if ( @a < 2 ); - my ($name,$setName,$setVal,$setVal2,$setVal3) = @a; - my $iam = "$type $name Set:"; - - Log3 $name, 4, "$iam set called with $setName " . ($setVal ? $setVal : "") if ($setName !~ /^\?$/); - - if ( $setName eq 'chargingStationPositionToAttribute' ) { - - my $xm = $hash->{helper}{chargingStation}{longitude} // 10.1165; - my $ym = $hash->{helper}{chargingStation}{latitude} // 51.28; - CommandAttr($hash,"$name chargingStationCoordinates $xm $ym"); - return undef; - - ################ - } elsif ( ReadingsVal( $name, 'state', 'defined' ) !~ /defined|initialized/ && $setName eq 'mowerScheduleToAttribute' ) { - - my $calendarjson = JSON::XS->new->pretty(1)->encode ($hash->{helper}{mower}{attributes}{calendar}{tasks}); - if ( $@ ) { - return "$iam $@"; - } - CommandAttr($hash,"$name mowerSchedule $calendarjson"); - return undef; - - ################ - } elsif ( $setName eq 'defaultDesignAttributesToAttribute' ) { - - my $design = $hash->{helper}{mapdesign}; - CommandAttr( $hash, "$name mapDesignAttributes $design" ); - return undef; - - ################ - } elsif ( $setName eq 'mapZonesTemplateToAttribute' ) { - - my $tpl = $hash->{helper}{mapZonesTpl}; - CommandAttr( $hash, "$name mapZones $tpl" ); - return undef; - - ################ - } elsif ( ReadingsVal( $name, 'state', 'defined' ) !~ /defined|initialized/ && $setName =~ /^(Start|Park|cuttingHeight)$/ ) { - if ( $setVal =~ /^(\d+)$/) { - - ::FHEM::Devices::AMConnect::Common::CMD($hash ,$setName, $setVal); - return undef; - - } - - ################ - } elsif ( ReadingsVal( $name, 'state', 'defined' ) !~ /defined|initialized/ && $setName eq 'headlight' ) { - if ( $setVal =~ /^(ALWAYS_OFF|ALWAYS_ON|EVENING_ONLY|EVENING_AND_NIGHT)$/) { - - ::FHEM::Devices::AMConnect::Common::CMD($hash ,$setName, $setVal); - return undef; - - } - - ################ - } elsif (ReadingsVal( $name, 'state', 'defined' ) !~ /defined|initialized/ && $setName =~ /ParkUntilFurtherNotice|ParkUntilNextSchedule|Pause|ResumeSchedule|sendScheduleFromAttributeToMower/) { - - ::FHEM::Devices::AMConnect::Common::CMD($hash,$setName); - return undef; - - } - my $ret = " ParkUntilFurtherNotice:noArg ParkUntilNextSchedule:noArg Pause:noArg Start:selectnumbers,60,60,600,0,lin Park:selectnumbers,60,60,600,0,lin ResumeSchedule:noArg "; - $ret .= "chargingStationPositionToAttribute:noArg headlight:ALWAYS_OFF,ALWAYS_ON,EVENING_ONLY,EVENING_AND_NIGHT cuttingHeight:1,2,3,4,5,6,7,8,9 mowerScheduleToAttribute:noArg "; - $ret .= "sendScheduleFromAttributeToMower:noArg defaultDesignAttributesToAttribute:noArg mapZonesTemplateToAttribute:noArg "; - return "Unknown argument $setName, choose one of".$ret; - -} - -######################### -sub Attr { - - my ( $cmd, $name, $attrName, $attrVal ) = @_; - my $hash = $defs{$name}; - my $type = $hash->{TYPE}; - my $iam = "$type $name Attr:"; - ########## - if( $attrName eq "disable" ) { - if( $cmd eq "set" and $attrVal eq "1" ) { - - ::setDisableNotifyFn($hash, 1); - readingsSingleUpdate ( $hash, "state", "disabled", 1 ); - Log3 $name, 3, "$iam $cmd $attrName $attrVal"; - - } elsif( $cmd eq "del" or $cmd eq 'set' and !$attrVal ) { - - my $hostname = $hash->{helper}{hostname}; - readMap($hash); - ::notifyRegexpChanged($hash, $hostname.':state:.connected'); - readingsSingleUpdate ( $hash, "state", "initialized", 1 ); - Log3 $name, 3, "$iam $cmd $attrName $attrVal"; - - } - - ########## - } elsif ( $attrName eq 'mapImagePath' ) { - - if( $cmd eq "set") { - if ($attrVal =~ '(webp|png|jpg)$' ) { - $hash->{helper}{MAP_PATH} = $attrVal; - $hash->{helper}{MAP_MIME} = "image/".$1; - - if ($attrVal =~ /(\d+)x(\d+)/) { - CommandAttr($hash,"$name mapImageWidthHeight $1 $2"); - } - - ::FHEM::Devices::AMConnect::Common::readMap($hash); - Log3 $name, 4, "$iam $cmd $attrName $attrVal"; - } else { - return "$iam $attrName wrong image type, use webp, png, jpeg or jpg"; - Log3 $name, 3, "$iam wrong image type, use webp, png, jpeg or jpg"; - } - - } elsif( $cmd eq "del" ) { - - $hash->{helper}{MAP_PATH} = ''; - $hash->{helper}{MAP_CACHE} = ''; - $hash->{helper}{MAP_MIME} = ''; - Log3 $name, 3, "$iam $cmd $attrName"; - - } - - ########## - } elsif( $attrName eq "weekdaysToResetWayPoints" ) { - - if( $cmd eq "set" ) { - - return "$iam $attrName is invalid, enter a combination of weekday numbers, space or - [0123456 -]" unless( $attrVal =~ /0|1|2|3|4|5|6| |-/ ); - Log3 $name, 4, "$iam $cmd $attrName $attrVal"; - - } elsif( $cmd eq "del" ) { - - Log3 $name, 3, "$iam $cmd $attrName and set default to 1"; - - } - ########## - } elsif ( $attrName eq 'numberOfWayPointsToDisplay' ) { - - my $icurr = @{$hash->{helper}{areapos}}; - if( $cmd eq "set" && $attrVal =~ /\d+/ && $attrVal > $hash->{helper}{MOWING}{maxLengthDefault}) { - - # reduce array - $hash->{helper}{MOWING}{maxLength} = $attrVal; - for ( my $i = $icurr; $i > $attrVal; $i-- ) { - pop @{$hash->{helper}{areapos}}; - } - Log3 $name, 4, "$iam $cmd $attrName $attrVal"; - - } elsif( $cmd eq "del" ) { - - # reduce array - my $imax = $hash->{helper}{MOWING}{maxLengthDefault}; - $hash->{helper}{MOWING}{maxLength} = $imax; - for ( my $i = $icurr; $i > $imax; $i-- ) { - pop @{$hash->{helper}{areapos}}; - } - Log3 $name, 3, "$iam $cmd $attrName default $imax"; - - } - ########## - } elsif( $attrName eq "mapImageCoordinatesUTM" ) { - - if( $cmd eq "set" ) { - - if ( AttrVal( $name,'mapImageCoordinatesToRegister', '' ) && $attrVal =~ /(-?\d*\.?\d+)\s(-?\d*\.?\d+)(\R|\s)(-?\d*\.?\d+)\s(-?\d*\.?\d+)/ ) { - - my ( $x1, $y1, $x2, $y2 ) = ( $1, $2, $4, $5 ); - AttrVal( $name,'mapImageCoordinatesToRegister', '' ) =~ /(-?\d*\.?\d+)\s(-?\d*\.?\d+)(\R|\s)(-?\d*\.?\d+)\s(-?\d*\.?\d+)/; - my ( $lo1, $la1, $lo2, $la2 ) = ( $1, $2, $4, $5 ); - my $scx = int( ( $x1 - $x2) / ( $lo1 - $lo2 ) ); - my $scy = int( ( $y1 - $y2 ) / ( $la1 - $la2 ) ); - CommandAttr($hash,"$name scaleToMeterXY $scx $scy"); - - } else { - return "$iam $attrName has a wrong format use linewise pairs or the attribute mapImageCoordinatesToRegister was not set before."; - } - Log3 $name, 3, "$iam $cmd $attrName $attrVal"; - - } elsif( $cmd eq "del" ) { - - Log3 $name, 3, "$iam $cmd $attrName and set default"; - - } - ########## - } elsif( $attrName eq "mapImageCoordinatesToRegister" ) { - - if( $cmd eq "set" ) { - - return "$iam $attrName has a wrong format use linewise pairs " unless( $attrVal =~ /(-?\d*\.?\d+)\s(-?\d*\.?\d+)(\R|\s)(-?\d*\.?\d+)\s(-?\d*\.?\d+)/ ); - Log3 $name, 3, "$iam $cmd $attrName $attrVal"; - - } elsif( $cmd eq "del" ) { - - Log3 $name, 3, "$iam $cmd $attrName and set default"; - - } - ########## - } elsif( $attrName eq "chargingStationCoordinates" ) { - - if( $cmd eq "set" ) { - - return "$iam $attrName has a wrong format use " unless( $attrVal =~ /(-?\d*\.?\d+)\s(-?\d*\.?\d+)/ ); - Log3 $name, 3, "$iam $cmd $attrName $attrVal"; - - } elsif( $cmd eq "del" ) { - - Log3 $name, 3, "$iam $cmd $attrName and set default"; - - } - ########## - } elsif( $attrName eq "mapImageWidthHeight" ) { - - if( $cmd eq "set" ) { - - return "$iam $attrName has a wrong format use " unless( $attrVal =~ /(\d+)\s(\d+)/ ); - Log3 $name, 3, "$iam $cmd $attrName $attrVal"; - - } elsif( $cmd eq "del" ) { - - Log3 $name, 3, "$iam $cmd $attrName and set default"; - - } - ########## - } elsif( $attrName eq "scaleToMeterXY" ) { - - if( $cmd eq "set" ) { - - return "$iam $attrName has a wrong format use " unless($attrVal =~ /(\d+)\s(\d+)/); - Log3 $name, 3, "$iam - $cmd $attrName $attrVal"; - - } elsif( $cmd eq "del" ) { - - Log3 $name, 3, "$iam $cmd $attrName and set to default: $hash->{helper}{scaleToMeterLongitude} $hash->{helper}{scaleToMeterLatitude}"; - - } - ########## - } elsif( $attrName eq "mowerSchedule" ) { - if( $cmd eq "set" ) { - - my $perl = eval { decode_json ($attrVal) }; - - if ($@) { - return "$iam $attrName decode error: $@ \n $perl"; - } - my $json = eval { encode_json ($perl) }; - if ($@) { - return "$iam $attrName encode error: $@ \n $json"; - } - Log3 $name, 4, "$iam $cmd $attrName array"; - - } - ########## - } elsif( $attrName eq "mapZones" ) { - if( $cmd eq "set" ) { - - my $longitude = 10; - my $latitude = 52; - my $perl = eval { decode_json ($attrVal) }; - - if ($@) { - return "$iam $cmd $attrName decode error: $@ \n $attrVal"; - } - - for ( keys %{$perl} ) { - - my $cond = eval "($perl->{$_}{condition})"; - - if ($@) { - return "$iam $cmd $attrName syntax error in condition: $@ \n $perl->{$_}{condition}"; - } - - } - - Log3 $name, 4, "$iam $cmd $attrName"; - $hash->{helper}{mapZones} = $perl; - - } elsif( $cmd eq "del" ) { - - delete $hash->{helper}{mapZones}; - delete $hash->{helper}{currentZone}; - CommandDeleteReading( $hash, "$name mower_currentZone" ); - Log3 $name, 3, "$iam $cmd $attrName"; - - } - } - return undef; -} - -############################################################## - - -1; - -__END__ -=pod - -=item device -=item summary This Module is deprecated. Please don't use it. -=item summary_DE Das Modul ist veraltet. Bitte, nicht mehr benutzen. - -=begin html - - -

AutomowerConnectDevice

-
    - FHEM-FORUM: AutomowerConnect und AutomowerConnectDevice
    -

    - Introduction -

    -
      -
    • This Module is deprecated. Please don't use it.

    • -
    • Use the AutomowerConnect Modul for additional Mowers. You should use an extra application-key and application-secret

    • -
    - Requirements -

    -
      -
    • An active entity (device, host) of the AutomowerConnect module is required.
    • -
    • Readings and state connected are shown after a host's update.
    • -
    -
    - - Define -
      - define <device name> AutomowerConnectDevice <host name> <mower number>
      - Example:
      - define myAdditionalMower AutomowerConnectDevice myMower 1 the host name is myMower and the mower number is 1.
      -

      -
    -
    - - - Set -
      -
    • Park
      - set <name> Park <number of minutes>
      - Parks mower in charging station for <number of minutes>
    • - -
    • ParkUntilFurtherNotice
      - set <name> ParkUntilFurtherNotice
      - Parks mower in charging station until further notice
    • - -
    • ParkUntilNextSchedule
      - set <name> ParkUntilNextSchedule
      - Parks mower in charging station and starts with next planned start
    • - -
    • Pause
      - set <name> Pause
      - Pauses mower immediately at current position
    • - -
    • ResumeSchedule
      - set <name> ResumeSchedule
      - Starts immediately if in planned intervall, otherwise with next scheduled start>
    • - -
    • Start
      - set <name> Start <number of minutes>
      - Starts immediately for <number of minutes>
    • - -
    • chargingStationPositionToAttribute
      - set <name> chargingStationPositionToAttribute
      - Sets the calculated charging station coordinates to the corresponding attributes.
    • - -
    • cuttingHeight
      - set <name> cuttingHeight <1..9>
      - Sets the cutting height. NOTE: Do not use for 550 EPOS and Ceora.
    • - -
    • headlight
      - set <name> headlight <ALWAYS_OFF|ALWAYS_ON|EVENIG_ONLY|EVENING_AND_NIGHT>
      -
    • -
    • mowerScheduleToAttribute
      - set <name> mowerScheduleToAttribute
      - Writes the schedule in to the attribute moverSchedule.
    • - -
    • sendScheduleFromAttributeToMower
      - set <name> sendScheduleFromAttributeToMower
      - Sends the schedule to the mower. NOTE: Do not use for 550 EPOS and Ceora.
    • - -

    • - set <name>
      -
    • - -
    -
    - - - Get -
      -
    • html
      - get <name> html
      - Returns the mower area image as html code. For use in uiTable, TabletUI, Floorplan, readingsGroup, weblink etc.
    • - -
    • InternalData
      - get <name> InternalData
      - Lists some device internal data
    • - -
    • MowerData
      - get <name> MowerData
      - Lists all mower data with its hash path exept positon array. The hash path can be used for generating userReadings. The trigger is connected.
      - Example: created reading serialnumber with hash path $hash->{helper}{mower}{attributes}{system}{serialNumber}

      - attr <name> userReadings serialnumber:connected {$defs{$name}->{helper}{mower}{attributes}{system}{serialNumber}}
    • - -
    • StatisticsData
      - get <name> StatisticsData
      - Lists statistics data with its hash path. The hash path can be used for generating userReadings. The trigger is connected.
    • - -
    • errorCodes
      - get <name> errorCodes
      - Lists API response status codes and mower error codes
    • -

      -
    -
    - - - Attributes -
      - -
    • mapImagePath
      - attr <name> mapImagePath <path to image>
      - Path of a raster image file for an area the mower path has to be drawn to.
      - If the image name implies the image size by containing a part which matches /(\d+)x(\d+)/
      - the corresponding attribute will be set to mapImageWidthHeight = '$1 $2'
      - Image name example: map740x1300.webp
    • - -
    • mapImageWidthHeight
      - attr <name> mapImageWidthHeight <width in pixel><separator><height in pixel>
      - Width and Height in pixel of a raster image file for an area image the mower path has to be drawn to. <separator> is one space character.
    • - -
    • mapImageZoom
      - attr <name> mapImageZoom <height in pixel>
      - Zoom of a raster image for an area the mower path has to be drawn to. Default: 0.5
    • - -
    • mapBackgroundColor
      - attr <name> mapBackgroundColor <color valuer>
      - The value is used as background-color.
    • - -
    • mapDesignAttributes
      - attr <name> mapDesignAttributes <complete list of design-attributes>
      - Load the list of attributes by set <name> defaultDesignAttributesToAttribute to change its values. Some default values are -
        -
      • mower path (activity MOWING): red
      • -
      • path in CS (activity CHARGING,PARKED_IN_CS): grey
      • -
      • path for interval with error (all activities with error): kind of magenta
      • -
      • all other activities: green
      • -
      -
    • - -
    • mapImageCoordinatesToRegister
      - attr <name> mapImageCoordinatesToRegister <upper left longitude><space><upper left latitude><line feed><lower right longitude><space><lower right latitude>
      - Upper left and lower right coordinates to register (or to fit to earth) the image. Format: linewise longitude and latitude values separated by 1 space.
      - The lines are splitted by (/\s|\R$/). Use WGS84 (GPS) coordinates in decimal degree notation.
    • - -
    • mapImageCoordinatesUTM
      - attr <name> mapImageCoordinatesUTM <upper left longitude><space><upper left latitude><line feed><lower right longitude><space><lower right latitude>
      - Upper left and lower right coordinates to register (or to fit to earth) the image. Format: linewise longitude and latitude values separated by 1 space.
      - The lines are splitted by (/\s|\R$/). Use UTM coordinates in meter notation.
      - This attribute has to be set after the attribute mapImageCoordinatesToRegister. The values are used to calculate the scale factors and the attribute scaleToMeterXY is set accordingly.
    • - -
    • showMap
      - attr <name> showMap <>1,0
      - Shows Map on (1 default) or not (0).
    • - -
    • chargingStationCoordinates
      - attr <name> chargingStationCoordinates <longitude><separator><latitude>
      - Longitude and latitude of the charging station. Use WGS84 (GPS) coordinates in decimal degree notation. <separator> is one space character
    • - -
    • chargingStationImagePosition
      - attr <name> chargingStationImagePosition <right, bottom, left, top, center>
      - Position of the charging station image relative to its coordinates.
    • - -
    • mowerCuttingWidth
      - attr <name> mowerCuttingWidth <cutting width>
      - mower cutting width in meter to calculate the mowed area. default: 0.24
    • - -
    • mowerSchedule
      - attr <name> mowerSchedule <schedule array>
      - This attribute provides the possebility to edit the mower schedule in form of an JSON array.
      The actual schedule can be loaded with the command set <name> mowerScheduleToAttribute.
      The command set <name> sendScheduleFromAttributeToMower sends the schedule to the mower. The maximum of array elements is 14 and 2 each day, so every day of a week can have 2 time spans. Each array element consists of 7 unsorted day values (monday to sunday) which can be true or false, a start and duration value in minutes. Start time counts from midnight. NOTE: Do not use for 550 EPOS and Ceora. Delete the attribute after the schedule is successfully uploaded.
    • - -
    • mowingAreaLimits
      - attr <name> mowingAreaLimits <positions list>
      - List of position describing the area to mow. Format: linewise pairs of longitude and latitude values separated by 1 space. The lines are splitted by (/\s|\R$/).
      The position values could be taken from Google Earth KML file, but whithout the altitude values.
    • - -
    • propertyLimits
      - attr <name> propertyLimits <positions list>
      - List of position describing the property limits. Format: linewise pairs of longitude and latitude values separated by 1 space. The lines are splitted by (/\s|\R$/).The position values could be taken from . For converting UTM32 meter to ETRS89 decimal degree you can use the BKG-Geodatenzentrum .
    • - -
    • numberOfWayPointsToDisplay
      - attr <name> numberOfWayPointsToDisplay <number of way points>
      - 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.
    • - -
    • weekdaysToResetWayPoints
      - attr <name> weekdaysToResetWayPoints <any combination of weekday numbers, space or minus [0123456 -]>
      - A combination of weekday numbers when the way point stack will be reset. No reset for space or minus. The way points are shifted through the dedicated stack.Default 1.
    • - -
    • scaleToMeterXY
      - attr <name> scaleToMeterXY <scale factor longitude><seperator><scale factor latitude>
      - The scale factor depends from the Location on earth, so it has to be calculated for short ranges only. <seperator> is one space character.
      - Longitude: (LongitudeMeter_1 - LongitudeMeter_2) / (LongitudeDegree_1 - LongitudeDegree _2)
      - Latitude: (LatitudeMeter_1 - LatitudeMeter_2) / (LatitudeDegree_1 - LatitudeDegree _2)
    • - -
    • mapZones
      - attr <name> mapZones <valid perl condition to separate Zones>
      - Provide the zones with conditions as JSON-String:
      - The waypoints are accessable by the variables $longitude und $latitude.
      - Zones have have to be separated by conditions in alphabetical order of their names.
      - The last zone is determined by the remaining waypoints.
      - Syntactical example:
      - - '{
      -     "<name_1>" : {
      -       "condition" : "<condition to separate name_1 from other zones>",
      -       "cuttingHeight" : "<cutting height for the first zone>"
      -   },
      -     "<name_2>" : {
      -       "condition" : "<condition to separate name_2 from other zones, except name_1>",
      -       "cuttingHeight" : "<cutting height for the second zone>"
      -   },
      -     "<name_3>" : {
      -       "condition" : "<condition to separate name_3 from other zones, except name_1 and name_2>",
      -       "cuttingHeight" : "<cutting height for the third zone>"
      -   },
      -     "<name_n-1>" : {
      -       "condition" : "<condition to separate name_n-1 from other zones ,except the zones already seperated>",
      -       "cuttingHeight" : "<cutting height for the nth-1 zone>"
      -   },
      -     "<name n>" : {
      -       "condition" : "Use 'undef' because the last zone remains.",
      -       "cuttingHeight" : "<cutting height for the nth zone>"
      -   }
      - }'
      -

      - Example with two Zones and virtual lines defined by latitude 52.6484600648553, 52.64839739580418 (horizontal) and longitude 9.54799477359984 (vertikal). all way points above 52.6484600648553 or all way points above 52.64839739580418 and all way points to the right of 9.54799477359984 belong to zone 01_oben. All other way points belong to zone 02_unten.
      - There are different cutting heightts each zone.
      - - '{
      -     "01_oben" : {
      -       "condition" : "$latitude > 52.6484600648553 || $longitude > 9.54799477359984 && $latitude > 52.64839739580418",
      -       "cuttingHeight" : "7"
      -   },
      -     "02_unten" : {
      -       "condition" : "undef",
      -       "cuttingHeight" : "3"
      -   }
      - }'
      -
    • - -
    • disable
    • -
    • disabledForIntervals
    • - - -

    • - attr <name> <>
      -
    • -
    -
    - - - Readings -
      -
    • batteryPercent - battery state of charge in percent
    • -
    • mower_activity - current activity "UNKNOWN" | "NOT_APPLICABLE" | "MOWING" | "GOING_HOME" | "CHARGING" | "LEAVING" | "PARKED_IN_CS" | "STOPPED_IN_GARDEN"
    • -
    • mower_commandStatus - Status of the last sent command cleared each status update
    • -
    • mower_currentZone - Zone name with activity MOWING in the last status time stamp interval and number of way points in parenthesis.
    • -
    • mower_errorCode - last error code
    • -
    • mower_errorCodeTimestamp - last error code time stamp
    • -
    • mower_errorDescription - error description
    • -
    • mower_mode - current working mode "MAIN_AREA" | "SECONDARY_AREA" | "HOME" | "DEMO" | "UNKNOWN"
    • -
    • mower_state - current status "UNKNOWN" | "NOT_APPLICABLE" | "PAUSED" | "IN_OPERATION" | "WAIT_UPDATING" | "WAIT_POWER_UP" | "RESTRICTED" | "OFF" | "STOPPED" | "ERROR" | "FATAL_ERROR" |"ERROR_AT_POWER_UP"
    • -
    • planner_nextStart - next start time
    • -
    • planner_restrictedReason - reason for parking NOT_APPLICABLE, NONE, WEEK_SCHEDULE, PARK_OVERRIDE, SENSOR, DAILY_LIMIT, FOTA, FROST
    • -
    • planner_overrideAction - reason for override a planned action NOT_ACTIVE, FORCE_PARK, FORCE_MOW
    • -
    • state - status of connection FHEM to Husqvarna Cloud API and device state (e.g. defined, connected, error)
    • -
    • status_statusTimestampOld - local time of second last change of the API content
    • -
    • settings_cuttingHeight - actual cutting height from API
    • -
    • settings_headlight - actual headlight mode from API
    • -
    • statistics_newGeoDataSets - number of new data sets between the last two different time stamps
    • -
    • statistics_numberOfCollisions - number of collisions
    • -
    • status_connected - state of connetion between mower and Husqvarna Cloud, (1 => CONNECTED, 0 => OFFLINE)
    • -
    • status_statusTimestamp - local time of last change of the API content
    • -
    • status_statusTimestampDiff - time difference in seconds between the last and second last change of the API content
    • -
    • system_name - name of the mower
    • - -
    -
- -=end html - - - -=begin html_DE - - -

AutomowerConnectDevice

-
    - FHEM-FORUM: AutomowerConnect und AutomowerConnectDevice
    - -

    - Einleitung -

    -
      -
    • Das Modul ist veraltet. Bitte, nicht mehr benutzen.
    • -
    • Für weitere Mähroboter das Modul AutomowerConnect benutzen. Je Mähroboter sollte ein extra Application Key mit Application Secret verwendet werden.

    • -
    - Anforderungen -

    -
      -
    • Es wird eine aktive Instanz (Device, FHEM-Gerät) des Moduls AutomowerConnect vorausgesetzt..
    • -
    • Readings und der Status connected wird erst angezeigt, wenn in dem Hostgerät ein Update erfolgt ist..
    • -
    -
    - - Define -
      - define <device name> AutomowerConnectDevice <host name> <mower number>
      - Beispiel:
      - define myAdditionalMower AutomowerConnectDevice myMower 1 myMower ist der Hostname und 1 ist die Nummer des anzuzeigenden Mähers.
      -

      -
    -
    - - - Set -
      -
    • Park
      - set <name> Park <number of minutes>
      - Parkt den Mäher in der Ladestation (LS) für <number of minutes>
    • - -
    • ParkUntilFurtherNotice
      - set <name> ParkUntilFurtherNotice
      - Parkt den Mäher bis auf Weiteres in der LS
    • - -
    • ParkUntilNextSchedule
      - set <name> ParkUntilNextSchedule
      - Parkt den Mäher bis auf Weiteres in der LS und startet zum nächsten geplanten Zeitpunkt
    • - -
    • Pause
      - set <name> Pause
      - Pausiert den Mäher sofort am aktuellen Standort
    • - -
    • ResumeSchedule
      - set <name> ResumeSchedule
      - Startet im geplanten Interval den Mäher sofort, sonst zum nächsten geplanten Zeitpunkt
    • - -
    • Start
      - set <name> Start <number of minutes>
      - Startet sofort für <number of minutes>
    • - -
    • chargingStationPositionToAttribute
      - set <name> chargingStationPositionToAttribute
      - Setzt die berechneten Koordinaten der LS in das entsprechende Attribut.
    • - -
    • cuttingHeight
      - set <name> cuttingHeight <1..9>
      - Setzt die Schnitthöhe. HINWEIS: Nicht für 550 EPOS und Ceora geeignet.
    • - -
    • headlight
      - set <name> headlight <ALWAYS_OFF|ALWAYS_ON|EVENIG_ONLY|EVENING_AND_NIGHT>
      - Setzt den Scheinwerfermode
    • - -
    • mowerScheduleToAttribute
      - set <name> mowerScheduleToAttribute
      - Schreibt den Mähplan ins Attribut moverSchedule.
    • - -
    • sendScheduleFromAttributeToMower
      - set <name> sendScheduleFromAttributeToMower
      - Sendet den Mähplan zum Mäher. HINWEIS: Nicht für 550 EPOS und Ceora geeignet.
    • - -

    • - set <name>
      -
    • - - - Get -
        -
      • html
        - get <name> html
        - Gibt das Bild des Mäherbereiches html kodiert zurück, zur Verwendung in uiTable, TabletUI, Floorplan, readingsGroup, weblink usw.
      • - -
      • errorCodes
        - get <name> errorCodes
        - Listet die Statuscode der API-Anfrage und die Fehlercodes des Mähroboters auf.
      • - -
      • InternalData
        - get <name> InternalData
        - Listet einige Daten des FHEM-Gerätes auf.
      • - -
      • MowerData
        - get <name> MowerData
        - Listet alle Daten des Mähers einschließlich Hashpfad auf ausgenommen das Positonsarray. Der Hashpfad kann zur Erzeugung von userReadings genutzt werden, getriggert wird durch connected.
        - Beispiel: erzeugen des Reading serialnumber mit dem Hashpfad $hash->{helper}{mower}{attributes}{system}{serialNumber}

        - attr <name> userReadings serialnumber:connected {$defs{$name}->{helper}{mower}{attributes}{system}{serialNumber}}
      • - -
      • StatisticsData
        - get <name> StatisticsData
        - Listet statistische Daten mit ihrem Hashpfad auf. Der Hashpfad kann zur Erzeugung von userReadings genutzt werden, getriggert wird durch connected
      • -

        -
      -
      - -
    -
    - - Attribute -
      - -
    • mapImagePath
      - attr <name> mapImagePath <path to image>
      - Pfad zur Bilddatei. Auf das Bild werden Pfad, Anfangs- u. Endpunkte gezeichnet.
      - Wenn der Bildname die Bildgröße impliziert indem er zu dem regulären Ausdruck /(\d+)x(\d+)/ passt,
      - wird das zugehörige Attribut gesetzt mapImageWidthHeight = '$1 $2'
      - Beispiel Bildname: map740x1300.webp
    • - -
    • mapImageWidthHeight
      - attr <name> mapImageWidthHeight <width in pixel><separator><height in pixel>
      - Bildbreite in Pixel des Bildes auf das Pfad, Anfangs- u. Endpunkte gezeichnet werden. <separator> ist 1 Leerzeichen.
    • - -
    • mapImageZoom
      - attr <name> mapImageHeight <height in pixel>
      - Zoomfaktor zur Salierung des Bildes auf das Pfad, Anfangs- u. Endpunkte gezeichnet werden. Standard: 0.5
    • - -
    • mapBackgroundColor
      - attr <name> mapBackgroundColor <color value>
      - Der Wert wird als Hintergrungfarbe benutzt.
    • - -
    • mapDesignAttributes
      - attr <name> mapDesignAttributes <complete list of design-attributes>
      - Lade die Attributliste mit set <name> defaultDesignAttributesToAttribute um die Werte zu ändern. Einige Vorgabewerte: -
        -
      • Pfad beim mähen (Aktivität MOWING): rot
      • -
      • In der Ladestation (Aktivität CHARGING,PARKED_IN_CS): grau
      • -
      • Pfad eines Intervalls mit Fehler (alle Aktivitäten with error): Eine Art Magenta
      • -
      • Pfad aller anderen Aktivitäten: grün
      • -
      -
    • - -
    • mapImageCoordinatesToRegister
      - attr <name> mapImageCoordinatesToRegister <upper left longitude><space><upper left latitude><line feed><lower right longitude><space><lower right latitude>
      - Obere linke und untere rechte Ecke der Fläche auf der Erde, die durch das Bild dargestellt wird um das Bild auf der Fläche zu registrieren (oder einzupassen).
      - Format: Zeilenweise Paare von Longitude- u. Latitudewerten getrennt durch 1 Leerzeichen. Die Zeilen werden aufgeteilt durch (/\s|\R$/).
      - Angabe der WGS84 (GPS) Koordinaten als Deimalgrad.
    • - -
    • mapImageCoordinatesUTM
      - attr <name> mapImageCoordinatesUTM <upper left longitude><space><upper left latitude><line feed><lower right longitude><space><lower right latitude>
      - Obere linke und untere rechte Ecke der Fläche auf der Erde, die durch das Bild dargestellt wird um das Bild auf der Fläche zu registrieren (oder einzupassen).
      - Format: Zeilenweise Paare von Longitude- u. Latitudewerten getrennt durch 1 Leerzeichen. Die Zeilen werden aufgeteilt durch (/\s|\R$/).
      - Die Angabe der UTM Koordinaten muss als Dezimalzahl in Meter erfolgen.
      - Das Attribut muss nach dem Attribut mapImageCoordinatesToRegister gesetzt werden.
      - Dieses Attribut berechnet die Skalierungsfaktoren. Das Attribut scaleToMeterXY wird entsprechend gesetzt.
    • - -
    • showMap
      - attr <name> showMap <>1,0
      - Zeigt die Karte an (1 default) oder nicht (0).
    • - -
    • chargingStationCoordinates
      - attr <name> chargingStationCoordinates <longitude><separator><latitude>
      - Longitude und Latitude der Ladestation als WGS84 (GPS) Koordinaten als Deimalgrad. <separator> ist 1 Leerzeichen
    • - -
    • chargingStationImagePosition
      - attr <name> chargingStationImagePosition <right, bottom, left, top, center>
      - Position der Ladestation relativ zu ihren Koordinaten.
    • - -
    • mowerCuttingWidth
      - attr <name> mowerCuttingWidth <cutting width>
      - Schnittbreite in Meter zur Berechnung der gemähten Fläche. default: 0.24
    • - -
    • mowerSchedule
      - attr <name> mowerSchedule <schedule array>
      - Dieses Attribut bietet die Möglichkeit den Mähplan zu ändern, er liegt als JSON Array vor.
      Der aktuelleMähplan kann mit dem Befehl set <name> mowerScheduleToAttrbute ins Attribut geschrieben werden.
      Der Befehl set <name> sendScheduleFromAttributeToMower sendet den Mähplan an den Mäher. Das Maximum der Arrayelemente beträgt 14, 2 für jeden Tag, so daß jeden Tag zwei Intervalle geplant werden können. Jedes Arrayelement besteht aus 7 unsortierten Tageswerten (monday bis sunday) die auf true oder false gesetzt werden können, einen start Wert und einen duration Wert in Minuten. Die Startzeit start wird von Mitternacht an gezählt. HINWEIS: Nicht für 550 EPOS und Ceora geeignet.
    • - -
    • mowingAreaLimits
      - attr <name> mowingAreaLimits <positions list>
      - Liste von Positionen, die den Mähbereich beschreiben. Format: Zeilenweise Paare von Longitude- u. Latitudewerten getrennt durch 1 Leerzeichen. Die Zeilen werden aufgeteilt durch (/\s|,|\R$/).
      Die Liste der Positionen kann aus einer mit Google Earth erzeugten KML-Datei entnommen werden, ohne Höhenangaben zu übernehmen
    • - -
    • propertyLimits
      - attr <name> propertyLimits <positions list>
      - Liste von Positionen, um die Grundstücksgrenze zu beschreiben. Format: Zeilenweise Paare von Longitude- u. Latitudewerten getrennt durch 1 Leerzeichen. Eine Zeile wird aufgeteilt durch (/\s|,|\R$/).
      Die genaue Position der Grenzpunkte kann man über die Geoportale der Länder finden. Eine Umrechnung der UTM32 Daten in Meter nach ETRS89 in Dezimalgrad kann über das BKG-Geodatenzentrum erfolgen.
    • - -
    • numberOfWayPointsToDisplay
      - attr <name> numberOfWayPointsToDisplay <number of way points>
      - 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.
    • - -
    • weekdaysToResetWayPoints
      - attr <name> weekdaysToResetWayPoints <any combination of weekday numbers, space or minus [0123456 -]>
      - Eine Kombination von Wochentagnummern an denen der Wegpunktspeicher gelöscht wird. Keine Löschung bei Leer- oder Minuszeichen, die Wegpunkte werden durch den zugeteilten Wegpunktspeicher geschoben. Standard 1.
    • - -
    • scaleToMeterXY
      - attr <name> scaleToMeterXY <scale factor longitude><seperator><scale factor latitude>
      - Der Skalierfaktor hängt vom Standort ab und muss daher für kurze Strecken berechnet werden. <seperator> ist 1 Leerzeichen.
      - Longitude: (LongitudeMeter_1 - LongitudeMeter_2) / (LongitudeDegree_1 - LongitudeDegree _2)
      - Latitude: (LatitudeMeter_1 - LatitudeMeter_2) / (LatitudeDegree_1 - LatitudeDegree _2)
    • - -
    • mapZones
      - attr <name> mapZones <JSON string with zone names in alpabetical order and valid perl condition to seperate the zones>
      - Die Wegpunkte stehen über die Perlvariablen $longitude und $latitude zur Verfügung.
      - Die Zonennamen und Bedingungen müssen als JSON-String angegeben werden.
      - Die Zonennamen müssen in alphabetischer Reihenfolge durch Bedingungen abgegrenzt werden.
      - Die letzte Zone ergibt sich aus den übrig gebliebenen Wegpunkten.
      - Syntaxbeispiel:
      - - '{
      -     "<name_1>" : {
      -       "condition" : "<condition to separate name_1 from other zones>",
      -       "cuttingHeight" : "<cutting height for the first zone>"
      -   },
      -     "<name_2>" : {
      -       "condition" : "<condition to separate name_2 from other zones, except name_1>",
      -       "cuttingHeight" : "<cutting height for the second zone>"
      -   },
      -     "<name_3>" : {
      -       "condition" : "<condition to separate name_3 from other zones, except name_1 and name_2>",
      -       "cuttingHeight" : "<cutting height for the third zone>"
      -   },
      -     "<name_n-1>" : {
      -       "condition" : "<condition to separate name_n-1 from other zones ,except the zones already seperated>",
      -       "cuttingHeight" : "<cutting height for the nth-1 zone>"
      -   },
      -     "<name n>" : {
      -       "condition" : "Use 'undef' because the last zone remains.",
      -       "cuttingHeight" : "<cutting height for the nth zone>"
      -   }
      - }'
      -

      - Beispiel mit zwei Zonen und gedachten Linien bestimmt durch die Punkte Latitude 52.6484600648553, 52.64839739580418 (horizontal) und 9.54799477359984 (vertikal). Alle Wegpunkte deren Latitude über einer horizontalen Linie mit der Latitude 52.6484600648553 liegen oder alle Wegpunkte deren Latitude über einer horizontalen Linie mit der Latitude 52.64839739580418 liegen und deren Longitude rechts von einer vertikale Linie mit der Longitude 9.54799477359984 liegen, gehören zur Zone 01_oben. Alle anderen Wegpunkte gehören zur Zone 02_unten.
      - In den Zonen sind unterschiedliche Schnitthöhen eingestellt.
      - - '{
      -     "01_oben" : {
      -       "condition" : "$latitude > 52.6484600648553 || $longitude > 9.54799477359984 && $latitude > 52.64839739580418",
      -       "cuttingHeight" : "7"
      -   },
      -     "02_unten" : {
      -       "condition" : "undef",
      -       "cuttingHeight" : "3"
      -   }
      - }'
      -
    • - -
    • disable
    • -
    • disabledForIntervals
    • - - -

    • - attr <name> <>
      -
    • - -
    -
    - - - Readings -
      -
    • batteryPercent - Batterieladung in Prozent
    • -
    • mower_activity - aktuelle Aktivität "UNKNOWN" | "NOT_APPLICABLE" | "MOWING" | "GOING_HOME" | "CHARGING" | "LEAVING" | "PARKED_IN_CS" | "STOPPED_IN_GARDEN"
    • -
    • mower_commandStatus - Status des letzten uebermittelten Kommandos wird duch Statusupdate zurückgesetzt.
    • -
    • mower_currentZone - Name der Zone im aktuell abgefragten Intervall der Statuszeitstempel, in der der Mäher gemäht hat und Anzahl der Wegpunkte in der Zone in Klammern.
    • -
    • mower_errorCode - last error code
    • -
    • mower_errorCodeTimestamp - last error code time stamp
    • -
    • mower_errorDescription - error description
    • -
    • mower_mode - aktueller Arbeitsmodus "MAIN_AREA" | "SECONDARY_AREA" | "HOME" | "DEMO" | "UNKNOWN"
    • -
    • mower_state - aktueller Status "UNKNOWN" | "NOT_APPLICABLE" | "PAUSED" | "IN_OPERATION" | "WAIT_UPDATING" | "WAIT_POWER_UP" | "RESTRICTED" | "OFF" | "STOPPED" | "ERROR" | "FATAL_ERROR" |"ERROR_AT_POWER_UP"
    • -
    • planner_nextStart - nächste Startzeit
    • -
    • planner_restrictedReason - Grund für Parken NOT_APPLICABLE, NONE, WEEK_SCHEDULE, PARK_OVERRIDE, SENSOR, DAILY_LIMIT, FOTA, FROST
    • -
    • planner_overrideAction - Grund für vorrangige Aktion NOT_ACTIVE, FORCE_PARK, FORCE_MOW
    • -
    • state - Status der Verbindung des FHEM-Gerätes zur Husqvarna Cloud API (defined, connected, error).
    • -
    • settings_cuttingHeight - aktuelle Schnitthöhe aus der API
    • -
    • settings_headlight - aktueller Scheinwerfermode aus der API
    • -
    • statistics_newGeoDataSets - Anzahl der neuen Datensätze zwischen den letzten zwei unterschiedlichen Zeitstempeln
    • -
    • statistics_numberOfCollisions - Anzahl der Kollisionen
    • -
    • status_connected - Status der Verbindung zwischen dem Automower und der Husqvarna Cloud, (1 => CONNECTED, 0 => OFFLINE)
    • -
    • status_statusTimestamp - Lokalzeit der letzten Änderung der Daten in der API
    • -
    • status_statusTimestampDiff - Zeitdifferenz zwichen den beiden letzten Änderungen im Inhalt der Daten aus der API
    • -
    • system_name - Name des Automowers
    • -
    -
- -=end html_DE