merge des aktuellen devel in testing #34
@@ -63,6 +63,8 @@ use warnings;
 | 
				
			|||||||
use POSIX;
 | 
					use POSIX;
 | 
				
			||||||
use FHEM::Meta;
 | 
					use FHEM::Meta;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#use Data::Dumper;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use HttpUtils;
 | 
					use HttpUtils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
my $missingModul = '';
 | 
					my $missingModul = '';
 | 
				
			||||||
@@ -352,6 +354,7 @@ sub Notify {
 | 
				
			|||||||
                @{$events} or grep /^DEFINED.$name$/,
 | 
					                @{$events} or grep /^DEFINED.$name$/,
 | 
				
			||||||
                @{$events} or grep /^MODIFIED.$name$/,
 | 
					                @{$events} or grep /^MODIFIED.$name$/,
 | 
				
			||||||
                @{$events} or grep /^ATTR.$name.gardenaAccountEmail.+/,
 | 
					                @{$events} or grep /^ATTR.$name.gardenaAccountEmail.+/,
 | 
				
			||||||
 | 
					                @{$events} or grep /^DELETEATTR.$name.disable$/,
 | 
				
			||||||
                @{$events}
 | 
					                @{$events}
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
@@ -369,8 +372,7 @@ sub Notify {
 | 
				
			|||||||
      if (
 | 
					      if (
 | 
				
			||||||
        $devtype eq 'Global'
 | 
					        $devtype eq 'Global'
 | 
				
			||||||
        && (
 | 
					        && (
 | 
				
			||||||
            grep /^DELETEATTR.$name.disable$/,
 | 
					            grep /^ATTR.$name.disable.0$/,
 | 
				
			||||||
            @{$events} or grep /^ATTR.$name.disable.0$/,
 | 
					 | 
				
			||||||
            @{$events} or grep /^DELETEATTR.$name.interval$/,
 | 
					            @{$events} or grep /^DELETEATTR.$name.interval$/,
 | 
				
			||||||
            @{$events} or grep /^ATTR.$name.interval.[0-9]+/,
 | 
					            @{$events} or grep /^ATTR.$name.interval.[0-9]+/,
 | 
				
			||||||
            @{$events}
 | 
					            @{$events}
 | 
				
			||||||
@@ -731,6 +733,18 @@ sub ErrorHandling {
 | 
				
			|||||||
          $output .= "value: $dev_settings->{value} \n";
 | 
					          $output .= "value: $dev_settings->{value} \n";
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					      $output .= '\n=== Abilities \n';
 | 
				
			||||||
 | 
					      $i = 0;
 | 
				
			||||||
 | 
					      for my $dev_settings ( @ { $devJson->{abilities} } ) {
 | 
				
			||||||
 | 
					        $output .= "[".$i++."]id: $dev_settings->{id} \n";
 | 
				
			||||||
 | 
					        $output .= "name: $dev_settings->{name} ";
 | 
				
			||||||
 | 
					        if (ref ($dev_settings->{value}) eq 'ARRAY' 
 | 
				
			||||||
 | 
					          || ref ($dev_settings->{value}) eq 'HASH'){
 | 
				
			||||||
 | 
					          $output .= 'N/A \n';
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          $output .= "value: $dev_settings->{value} \n";
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
      $hash->{helper}{debug_device_output} = $output;
 | 
					      $hash->{helper}{debug_device_output} = $output;
 | 
				
			||||||
      asyncOutput($param->{cl},  $hash->{helper}{debug_device_output});
 | 
					      asyncOutput($param->{cl},  $hash->{helper}{debug_device_output});
 | 
				
			||||||
      return;
 | 
					      return;
 | 
				
			||||||
@@ -1207,7 +1221,6 @@ sub createHttpValueStrings {
 | 
				
			|||||||
            && !defined( $hash->{helper}{locations_id} ) );
 | 
					            && !defined( $hash->{helper}{locations_id} ) );
 | 
				
			||||||
        readingsSingleUpdate( $hash, 'state', 'fetch locationId', 1 )
 | 
					        readingsSingleUpdate( $hash, 'state', 'fetch locationId', 1 )
 | 
				
			||||||
          if ( !defined( $hash->{helper}{locations_id} ) );
 | 
					          if ( !defined( $hash->{helper}{locations_id} ) );
 | 
				
			||||||
        $uri .= '/auth/token' if ( !defined( $hash->{helper}{session_id} ) );
 | 
					 | 
				
			||||||
        $uri .= '/devices'
 | 
					        $uri .= '/devices'
 | 
				
			||||||
          if (!defined($abilities)
 | 
					          if (!defined($abilities)
 | 
				
			||||||
            && defined( $hash->{helper}{locations_id} ) );
 | 
					            && defined( $hash->{helper}{locations_id} ) );
 | 
				
			||||||
@@ -1215,7 +1228,6 @@ sub createHttpValueStrings {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    $uri = '/devices/'.InternalVal($hash->{helper}{debug_device}, 'DEVICEID', 0 ) if ( exists ($hash->{helper}{debug_device}));
 | 
					    $uri = '/devices/'.InternalVal($hash->{helper}{debug_device}, 'DEVICEID', 0 ) if ( exists ($hash->{helper}{debug_device}));
 | 
				
			||||||
    $uri = '/auth/token' if ( !defined( $hash->{helper}{session_id} ) );
 | 
					    $uri = '/auth/token' if ( !defined( $hash->{helper}{session_id} ) );
 | 
				
			||||||
 | 
					 | 
				
			||||||
    if ( defined( $hash->{helper}{locations_id} ) ) {
 | 
					    if ( defined( $hash->{helper}{locations_id} ) ) {
 | 
				
			||||||
        if ( defined($abilities) && $abilities =~ /.*_settings/ ) {
 | 
					        if ( defined($abilities) && $abilities =~ /.*_settings/ ) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1279,6 +1291,19 @@ sub createHttpValueStrings {
 | 
				
			|||||||
              . $abilities
 | 
					              . $abilities
 | 
				
			||||||
              . '/properties/manual_watering_timer';
 | 
					              . '/properties/manual_watering_timer';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        elsif (defined($abilities)
 | 
				
			||||||
 | 
					            && defined($payload)
 | 
				
			||||||
 | 
					            && $abilities eq 'watering_button_config' )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            $method = 'PUT';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $uri .=
 | 
				
			||||||
 | 
					                '/devices/'
 | 
				
			||||||
 | 
					              . $deviceId
 | 
				
			||||||
 | 
					              . '/abilities/watering'
 | 
				
			||||||
 | 
					              . '/properties/button_config_time';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        elsif (defined($abilities)
 | 
					        elsif (defined($abilities)
 | 
				
			||||||
            && defined($payload)
 | 
					            && defined($payload)
 | 
				
			||||||
@@ -1463,7 +1488,7 @@ sub DeletePassword {
 | 
				
			|||||||
  ],
 | 
					  ],
 | 
				
			||||||
  "release_status": "stable",
 | 
					  "release_status": "stable",
 | 
				
			||||||
  "license": "GPL_2",
 | 
					  "license": "GPL_2",
 | 
				
			||||||
  "version": "v2.4.0",
 | 
					  "version": "v2.4.2",
 | 
				
			||||||
  "author": [
 | 
					  "author": [
 | 
				
			||||||
    "Marko Oldenburg <leongaultier@gmail.com>"
 | 
					    "Marko Oldenburg <leongaultier@gmail.com>"
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -209,6 +209,10 @@ sub Define {
 | 
				
			|||||||
    $hash->{helper}{STARTINGPOINTID}            = '';
 | 
					    $hash->{helper}{STARTINGPOINTID}            = '';
 | 
				
			||||||
    $hash->{helper}{schedules_paused_until_id}  = '';
 | 
					    $hash->{helper}{schedules_paused_until_id}  = '';
 | 
				
			||||||
    $hash->{helper}{eco_mode_id}                = '';
 | 
					    $hash->{helper}{eco_mode_id}                = '';
 | 
				
			||||||
 | 
					    $hash->{helper}{button_config_time_id}      = '';
 | 
				
			||||||
 | 
					    $hash->{helper}{winter_mode_id}             = '';
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    $hash->{helper}{_id}             = '';
 | 
				
			||||||
    # IrrigationControl valve control max 6
 | 
					    # IrrigationControl valve control max 6
 | 
				
			||||||
    $hash->{helper}{schedules_paused_until_1_id}  = '';
 | 
					    $hash->{helper}{schedules_paused_until_1_id}  = '';
 | 
				
			||||||
    $hash->{helper}{schedules_paused_until_2_id}  = '';
 | 
					    $hash->{helper}{schedules_paused_until_2_id}  = '';
 | 
				
			||||||
@@ -306,7 +310,7 @@ sub Set {
 | 
				
			|||||||
    if ( lc $cmd eq 'parkuntilfurthernotice' ) {
 | 
					    if ( lc $cmd eq 'parkuntilfurthernotice' ) {
 | 
				
			||||||
        $payload = '"name":"park_until_further_notice"';
 | 
					        $payload = '"name":"park_until_further_notice"';
 | 
				
			||||||
        if ( $mainboard_version > 10.30 ) {
 | 
					        if ( $mainboard_version > 10.30 ) {
 | 
				
			||||||
          $payload = ' "settings":{"name":"schedules_paused_until","value":"2040-12-31T22:00:00.000Z","device":"'.$hash->{DEVICEID}.'"}';
 | 
					          $payload = ' "settings":{"name":"schedules_paused_until","value":"2038-01-18T00:00:00.000Z","device":"'.$hash->{DEVICEID}.'"}';
 | 
				
			||||||
          $abilities = 'mower_settings'  ;
 | 
					          $abilities = 'mower_settings'  ;
 | 
				
			||||||
          $service_id = $hash->{helper}{schedules_paused_until_id};
 | 
					          $service_id = $hash->{helper}{schedules_paused_until_id};
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -361,6 +365,18 @@ sub Set {
 | 
				
			|||||||
          . $aArg->[0] * 60
 | 
					          . $aArg->[0] * 60
 | 
				
			||||||
          . ',"valve_id":1}}';
 | 
					          . ',"valve_id":1}}';
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    elsif ( lc $cmd eq 'manualbuttontime'){
 | 
				
			||||||
 | 
					      $service_id = $hash->{helper}{button_config_time_id};
 | 
				
			||||||
 | 
					      $payload=
 | 
				
			||||||
 | 
					        '"properties":{"name":"button_config_time",'
 | 
				
			||||||
 | 
					        .'"value":'
 | 
				
			||||||
 | 
					        .  $aArg->[0] * 60
 | 
				
			||||||
 | 
					        . ',"timestamp":"2021-05-26T19:06:23.680Z"'
 | 
				
			||||||
 | 
					        . ',"at_bound":null,"unit":"seconds","ability":"'
 | 
				
			||||||
 | 
					        . $service_id
 | 
				
			||||||
 | 
					        .'"}';
 | 
				
			||||||
 | 
					        $abilities = 'watering_button_config';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    elsif ( $cmd =~ m{\AcancelOverride}xms ) {
 | 
					    elsif ( $cmd =~ m{\AcancelOverride}xms ) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        my $valve_id = 1;
 | 
					        my $valve_id = 1;
 | 
				
			||||||
@@ -377,6 +393,18 @@ sub Set {
 | 
				
			|||||||
          . ',"valve_id":'
 | 
					          . ',"valve_id":'
 | 
				
			||||||
          . $valve_id . '}}';
 | 
					          . $valve_id . '}}';
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    elsif ( $cmd =~ /.*Schedule/ ){
 | 
				
			||||||
 | 
					      my $duration = (( defined($aArg->[0]) ? ( ((Time::Piece->new)+(ONE_HOUR *  $aArg->[0]) - (Time::Piece->new)->tzoffset )->datetime ).'.000Z' : '2038-01-18T00:00:00.000Z'));
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					      $abilities = 'wateringcomputer_settings';
 | 
				
			||||||
 | 
					      $service_id = $hash->{helper}->{'schedules_paused_until_id'};
 | 
				
			||||||
 | 
					      $payload = '"settings":{"name":"schedules_paused_until"'
 | 
				
			||||||
 | 
					                  . ', "value":"'
 | 
				
			||||||
 | 
					                  . ($cmd eq 'resumeSchedule' ? '' : $duration )
 | 
				
			||||||
 | 
					                  . '","device":"'
 | 
				
			||||||
 | 
					                  . $hash->{DEVICEID}
 | 
				
			||||||
 | 
					                  . '"}';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    elsif ( lc $cmd eq 'on' || lc $cmd eq 'off' || lc $cmd eq 'on-for-timer' ) {
 | 
					    elsif ( lc $cmd eq 'on' || lc $cmd eq 'off' || lc $cmd eq 'on-for-timer' ) {
 | 
				
			||||||
        my $val = (
 | 
					        my $val = (
 | 
				
			||||||
            defined($aArg) && ref($aArg) eq 'ARRAY'
 | 
					            defined($aArg) && ref($aArg) eq 'ARRAY'
 | 
				
			||||||
@@ -407,7 +435,7 @@ sub Set {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    elsif ( $cmd =~ /.*ScheduleValve/ ){
 | 
					    elsif ( $cmd =~ /.*ScheduleValve/ ){
 | 
				
			||||||
      my $valve_id = $aArg->[0];
 | 
					      my $valve_id = $aArg->[0];
 | 
				
			||||||
      my $duration = (( defined($aArg->[1]) ? ( ((Time::Piece->new)+(ONE_HOUR *  $aArg->[1]) - (Time::Piece->new)->tzoffset )->datetime ).'.000Z' : '2040-12-31T22:00:00.000Z'));
 | 
					      my $duration = (( defined($aArg->[1]) ? ( ((Time::Piece->new)+(ONE_HOUR *  $aArg->[1]) - (Time::Piece->new)->tzoffset )->datetime ).'.000Z' : '2038-01-18T00:00:00.000Z'));
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
      $abilities = 'irrigation_settings';
 | 
					      $abilities = 'irrigation_settings';
 | 
				
			||||||
      $service_id = $hash->{helper}->{'schedules_paused_until_'.$valve_id.'_id'};
 | 
					      $service_id = $hash->{helper}->{'schedules_paused_until_'.$valve_id.'_id'};
 | 
				
			||||||
@@ -441,8 +469,16 @@ sub Set {
 | 
				
			|||||||
            $payload   = '"name":"measure_soil_humidity"';
 | 
					            $payload   = '"name":"measure_soil_humidity"';
 | 
				
			||||||
            $abilities = 'humidity';
 | 
					            $abilities = 'humidity';
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					    }
 | 
				
			||||||
 | 
					    ## winter sleep
 | 
				
			||||||
 | 
					    elsif ( lc $cmd eq 'winter_mode') {
 | 
				
			||||||
 | 
					        $payload = '"settings":{"name":"winter_mode","value":"'
 | 
				
			||||||
 | 
					        . $aArg->[0]
 | 
				
			||||||
 | 
					        .'","device":"'
 | 
				
			||||||
 | 
					        . $hash->{DEVICEID}
 | 
				
			||||||
 | 
					        .'"}';
 | 
				
			||||||
 | 
					        $abilities = 'winter_settings';
 | 
				
			||||||
 | 
					        $service_id = $hash->{helper}->{'winter_mode_id'};
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else {
 | 
					    else {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -452,7 +488,7 @@ sub Set {
 | 
				
			|||||||
'parkUntilFurtherNotice:noArg parkUntilNextTimer:noArg startResumeSchedule:noArg startOverrideTimer:slider,0,1,240 startpoint'
 | 
					'parkUntilFurtherNotice:noArg parkUntilNextTimer:noArg startResumeSchedule:noArg startOverrideTimer:slider,0,1,240 startpoint'
 | 
				
			||||||
          if ( AttrVal( $name, 'model', 'unknown' ) eq 'mower' );
 | 
					          if ( AttrVal( $name, 'model', 'unknown' ) eq 'mower' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $list .= 'manualOverride:slider,1,1,59 cancelOverride:noArg'
 | 
					        $list .= 'manualOverride:slider,1,1,59 cancelOverride:noArg resumeSchedule:noArg stopSchedule manualButtonTime:slider,0,2,100'
 | 
				
			||||||
          if ( AttrVal( $name, 'model', 'unknown' ) eq 'watering_computer' );
 | 
					          if ( AttrVal( $name, 'model', 'unknown' ) eq 'watering_computer' );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $list .=
 | 
					        $list .=
 | 
				
			||||||
@@ -468,7 +504,8 @@ sub Set {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        $list .= 'on:noArg off:noArg on-for-timer:slider,0,1,60'
 | 
					        $list .= 'on:noArg off:noArg on-for-timer:slider,0,1,60'
 | 
				
			||||||
          if ( AttrVal( $name, 'model', 'unknown' ) eq 'power' );
 | 
					          if ( AttrVal( $name, 'model', 'unknown' ) eq 'power' );
 | 
				
			||||||
 | 
					        # all devices has abilitie to fall a sleep
 | 
				
			||||||
 | 
					        $list .= ' winter_mode:awake,hibernate';
 | 
				
			||||||
        return "Unknown argument $cmd, choose one of $list";
 | 
					        return "Unknown argument $cmd, choose one of $list";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -547,6 +584,27 @@ sub WriteReadings {
 | 
				
			|||||||
            for my $propertie (
 | 
					            for my $propertie (
 | 
				
			||||||
                @{ $decode_json->{abilities}[$abilities]{properties} } )
 | 
					                @{ $decode_json->{abilities}[$abilities]{properties} } )
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 | 
					              if (   exists($decode_json->{abilities}[$abilities]{name})
 | 
				
			||||||
 | 
					                  && ( 
 | 
				
			||||||
 | 
					                      $decode_json->{abilities}[$abilities]{name} eq 'watering' )
 | 
				
			||||||
 | 
					                ) {
 | 
				
			||||||
 | 
					                  if ( $propertie->{name} eq 'button_config_time'  ) 
 | 
				
			||||||
 | 
					                  { 
 | 
				
			||||||
 | 
					                    if ( $hash->{helper}{$propertie->{name}.'_id'} ne
 | 
				
			||||||
 | 
					                          $decode_json->{abilities}[$abilities]{id} ) 
 | 
				
			||||||
 | 
					                          {
 | 
				
			||||||
 | 
					                            $hash->{helper}{$propertie->{name}.'_id'} =
 | 
				
			||||||
 | 
					                            $decode_json->{abilities}[$abilities]{id};
 | 
				
			||||||
 | 
					                          }
 | 
				
			||||||
 | 
					                          readingsBulkUpdateIfChanged(
 | 
				
			||||||
 | 
					                              $hash,
 | 
				
			||||||
 | 
					                              'manualButtonTime',
 | 
				
			||||||
 | 
					                              (RigReadingsValue( $hash, $propertie->{value} / 60) )
 | 
				
			||||||
 | 
					                          );
 | 
				
			||||||
 | 
					                          next;
 | 
				
			||||||
 | 
					                  }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                readingsBulkUpdateIfChanged(
 | 
					                readingsBulkUpdateIfChanged(
 | 
				
			||||||
                    $hash,
 | 
					                    $hash,
 | 
				
			||||||
                    $decode_json->{abilities}[$abilities]{name} . '-'
 | 
					                    $decode_json->{abilities}[$abilities]{name} . '-'
 | 
				
			||||||
@@ -641,7 +699,8 @@ sub WriteReadings {
 | 
				
			|||||||
        if (   exists($decode_json->{settings}[$settings]{name})
 | 
					        if (   exists($decode_json->{settings}[$settings]{name})
 | 
				
			||||||
          && ( 
 | 
					          && ( 
 | 
				
			||||||
            $decode_json->{settings}[$settings]{name} =~ /schedules_paused_until_?\d?$/
 | 
					            $decode_json->{settings}[$settings]{name} =~ /schedules_paused_until_?\d?$/
 | 
				
			||||||
            || $decode_json->{settings}[$settings]{name} eq 'eco_mode' )
 | 
					            || $decode_json->{settings}[$settings]{name} eq 'eco_mode' 
 | 
				
			||||||
 | 
					            || $decode_json->{settings}[$settings]{name} eq 'winter_mode' )
 | 
				
			||||||
           )
 | 
					           )
 | 
				
			||||||
        {  
 | 
					        {  
 | 
				
			||||||
            if ( $hash->{helper}{$decode_json->{settings}[$settings]{name}.'_id'} ne
 | 
					            if ( $hash->{helper}{$decode_json->{settings}[$settings]{name}.'_id'} ne
 | 
				
			||||||
@@ -650,6 +709,12 @@ sub WriteReadings {
 | 
				
			|||||||
                $hash->{helper}{$decode_json->{settings}[$settings]{name}.'_id'} =
 | 
					                $hash->{helper}{$decode_json->{settings}[$settings]{name}.'_id'} =
 | 
				
			||||||
                  $decode_json->{settings}[$settings]{id};
 | 
					                  $decode_json->{settings}[$settings]{id};
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            # save winter mode as reading
 | 
				
			||||||
 | 
					            readingsBulkUpdateIfChanged(
 | 
				
			||||||
 | 
					                    $hash,
 | 
				
			||||||
 | 
					                    'winter_mode',
 | 
				
			||||||
 | 
					                    $decode_json->{settings}[$settings]{value}
 | 
				
			||||||
 | 
					                ) if ($decode_json->{settings}[$settings]{name} eq 'winter_mode');
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        if ( ref( $decode_json->{settings}[$settings]{value} ) eq "ARRAY"
 | 
					        if ( ref( $decode_json->{settings}[$settings]{value} ) eq "ARRAY"
 | 
				
			||||||
@@ -1125,6 +1190,10 @@ sub SetPredefinedStartPoints {
 | 
				
			|||||||
    <a name="GardenaSmartDeviceset"></a>
 | 
					    <a name="GardenaSmartDeviceset"></a>
 | 
				
			||||||
    <b>set</b>
 | 
					    <b>set</b>
 | 
				
			||||||
    <ul>
 | 
					    <ul>
 | 
				
			||||||
 | 
					      <li>winter_mode - awake | hibernate</li>
 | 
				
			||||||
 | 
					    </ul>
 | 
				
			||||||
 | 
					    <ul>
 | 
				
			||||||
 | 
					        <h3>mower</h3>
 | 
				
			||||||
        <li>parkUntilFurtherNotice</li>
 | 
					        <li>parkUntilFurtherNotice</li>
 | 
				
			||||||
        <li>parkUntilNextTimer</li>
 | 
					        <li>parkUntilNextTimer</li>
 | 
				
			||||||
        <li>startOverrideTimer - (in minutes, 60 = 1h, 1440 = 24h, 4320 = 72h)</li>
 | 
					        <li>startOverrideTimer - (in minutes, 60 = 1h, 1440 = 24h, 4320 = 72h)</li>
 | 
				
			||||||
@@ -1134,10 +1203,14 @@ sub SetPredefinedStartPoints {
 | 
				
			|||||||
            <li>set NAME startpoint enable 1</li>
 | 
					            <li>set NAME startpoint enable 1</li>
 | 
				
			||||||
            <li>set NAME startpoint disable 3 enable 1</li>
 | 
					            <li>set NAME startpoint disable 3 enable 1</li>
 | 
				
			||||||
        </ul>
 | 
					        </ul>
 | 
				
			||||||
 | 
					        <h3>irrigation control</h3>
 | 
				
			||||||
        <li>resumeScheduleValve - start schedule irrigation on valve n</li>
 | 
					        <li>resumeScheduleValve - start schedule irrigation on valve n</li>
 | 
				
			||||||
        <li>stopScheduleValve - stop schedule irrigation on valve n  (Default: 2040-12-31T22:00:00.000Z) | optional params hours (now + hours)</li>
 | 
					        <li>stopScheduleValve - stop schedule irrigation on valve n  (Default: 2038-01-18T00:00:00.000Z) | optional params hours (now + hours)</li>
 | 
				
			||||||
        <li>closeAllValves - close all valves</li>
 | 
					        <li>closeAllValves - close all valves</li>
 | 
				
			||||||
 | 
					        <h3>water control</h3>
 | 
				
			||||||
 | 
					        <li>manualButtonTime - set manual time for button press (in minutes) 0 disable button</li>
 | 
				
			||||||
 | 
					        <li>stopSchedule - stop schedule for now + n hours (Default: 2038-01-18T00:00:00.000Z)</li>
 | 
				
			||||||
 | 
					        <li>resumeSchedule - resume schedule</li>
 | 
				
			||||||
    </ul>
 | 
					    </ul>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1273,6 +1346,10 @@ sub SetPredefinedStartPoints {
 | 
				
			|||||||
    <a name="GardenaSmartDeviceset"></a>
 | 
					    <a name="GardenaSmartDeviceset"></a>
 | 
				
			||||||
    <b>set</b>
 | 
					    <b>set</b>
 | 
				
			||||||
    <ul>
 | 
					    <ul>
 | 
				
			||||||
 | 
					      <li>winter_mode - aufwäcken (awake)| winterschlaf (hibernate)</li>
 | 
				
			||||||
 | 
					    </ul>
 | 
				
			||||||
 | 
					    <ul>
 | 
				
			||||||
 | 
					        <h3>mäher</h3>
 | 
				
			||||||
        <li>parkUntilFurtherNotice - Parken des Mähers unter Umgehung des Zeitplans</li>
 | 
					        <li>parkUntilFurtherNotice - Parken des Mähers unter Umgehung des Zeitplans</li>
 | 
				
			||||||
        <li>parkUntilNextTimer - Parken bis zum nächsten Zeitplan</li>
 | 
					        <li>parkUntilNextTimer - Parken bis zum nächsten Zeitplan</li>
 | 
				
			||||||
        <li>startOverrideTimer - Manuelles mähen (in Minuten, 60 = 1h, 1440 = 24h, 4320 = 72h)</li>
 | 
					        <li>startOverrideTimer - Manuelles mähen (in Minuten, 60 = 1h, 1440 = 24h, 4320 = 72h)</li>
 | 
				
			||||||
@@ -1282,9 +1359,14 @@ sub SetPredefinedStartPoints {
 | 
				
			|||||||
            <li>set NAME startpoint enable 1</li>
 | 
					            <li>set NAME startpoint enable 1</li>
 | 
				
			||||||
            <li>set NAME startpoint disable 3 enable 1</li>
 | 
					            <li>set NAME startpoint disable 3 enable 1</li>
 | 
				
			||||||
        </ul>
 | 
					        </ul>
 | 
				
			||||||
 | 
					        <h3>irrigation control</h3>
 | 
				
			||||||
        <li>resumeScheduleValve - Startet Bew&aauml;sserung am Ventil n nach Zeitplan</li>
 | 
					        <li>resumeScheduleValve - Startet Bew&aauml;sserung am Ventil n nach Zeitplan</li>
 | 
				
			||||||
        <li>stopScheduleValve - Setzt Bew&aauml;sserung am Ventil n aus (Default: 2040-12-31T22:00:00.000Z) | Optionaler Parameter Stunden (Jetzt + Stunden)</li>
 | 
					        <li>stopScheduleValve - Setzt Bew&aauml;sserung am Ventil n aus (Default: 2038-01-18T00:00:00.000Z) | Optionaler Parameter Stunden (Jetzt + Stunden)</li>
 | 
				
			||||||
        <li>closeAllValves - Stopt Bew&aauml;sserung an allen Ventilen </li> 
 | 
					        <li>closeAllValves - Stopt Bew&aauml;sserung an allen Ventilen </li> 
 | 
				
			||||||
 | 
					        <h3>water control</h3>
 | 
				
			||||||
 | 
					        <li>manualButtonTime - setzt die Dauer für den manuellen Knopf (in Minuten) 0 Schaltet den Knopf aus</li>
 | 
				
			||||||
 | 
					        <li>stopSchedule - Halte Zeitplan an für x Stunden - (Default: 2038-01-18T00:00:00.000Z)</li>
 | 
				
			||||||
 | 
					        <li>resumeSchedule - Weiterführung des Zeitplans</li>
 | 
				
			||||||
    </ul>
 | 
					    </ul>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1307,7 +1389,7 @@ sub SetPredefinedStartPoints {
 | 
				
			|||||||
  ],
 | 
					  ],
 | 
				
			||||||
  "release_status": "stable",
 | 
					  "release_status": "stable",
 | 
				
			||||||
  "license": "GPL_2",
 | 
					  "license": "GPL_2",
 | 
				
			||||||
  "version": "v2.4.0",
 | 
					  "version": "v2.4.2",
 | 
				
			||||||
  "author": [
 | 
					  "author": [
 | 
				
			||||||
    "Marko Oldenburg <leongaultier@gmail.com>"
 | 
					    "Marko Oldenburg <leongaultier@gmail.com>"
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,2 +1,2 @@
 | 
				
			|||||||
UPD 2021-05-22_04:53:56 46135 FHEM/73_GardenaSmartBridge.pm
 | 
					UPD 2021-06-05_18:47:30 46871 FHEM/73_GardenaSmartBridge.pm
 | 
				
			||||||
UPD 2021-05-22_04:54:14 51644 FHEM/74_GardenaSmartDevice.pm
 | 
					UPD 2021-06-05_09:32:03 55505 FHEM/74_GardenaSmartDevice.pm
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user