add support for Irrigation Control

This commit is contained in:
Marko Oldenburg 2018-07-14 13:51:31 +02:00
parent 71cb6affea
commit d487d65603
2 changed files with 38 additions and 21 deletions

View File

@ -68,7 +68,7 @@ eval "use JSON;1" or $missingModul .= "JSON ";
eval "use IO::Socket::SSL;1" or $missingModul .= "IO::Socket::SSL "; eval "use IO::Socket::SSL;1" or $missingModul .= "IO::Socket::SSL ";
my $version = "1.0.4"; my $version = "1.2.0";
@ -83,8 +83,8 @@ sub GardenaSmartBridge_Undef($$);
sub GardenaSmartBridge_Delete($$); sub GardenaSmartBridge_Delete($$);
sub GardenaSmartBridge_ResponseProcessing($$); sub GardenaSmartBridge_ResponseProcessing($$);
sub GardenaSmartBridge_ErrorHandling($$$); sub GardenaSmartBridge_ErrorHandling($$$);
sub GardenaSmartBridge_encrypt($); #sub GardenaSmartBridge_encrypt($);
sub GardenaSmartBridge_decrypt($); #sub GardenaSmartBridge_decrypt($);
sub GardenaSmartBridge_WriteReadings($$); sub GardenaSmartBridge_WriteReadings($$);
sub GardenaSmartBridge_ParseJSON($$); sub GardenaSmartBridge_ParseJSON($$);
sub GardenaSmartBridge_getDevices($); sub GardenaSmartBridge_getDevices($);
@ -782,17 +782,26 @@ sub GardenaSmartBridge_createHttpValueStrings($@) {
$uri .= '/sessions' if( not defined($hash->{helper}{session_id})); $uri .= '/sessions' if( not defined($hash->{helper}{session_id}));
if( defined($hash->{helper}{locations_id}) ) { if( defined($hash->{helper}{locations_id}) ) {
#$uri .= '/devices/' . $deviceId . '/abilities/' . $abilities . '/command' if( defined($abilities) and defined($payload) );
if ( defined($abilities) and $abilities eq 'mower_settings') { if ( defined($abilities) and $abilities eq 'mower_settings') {
$method = 'PUT'; $method = 'PUT';
my $dhash = $modules{GardenaSmartDevice}{defptr}{$deviceId}; my $dhash = $modules{GardenaSmartDevice}{defptr}{$deviceId};
$uri .= '/devices/' . $deviceId . '/settings/' . $dhash->{helper}{STARTINGPOINTID} if( defined($abilities) and defined($payload) and $abilities eq 'mower_settings'); $uri .= '/devices/' . $deviceId . '/settings/' . $dhash->{helper}{STARTINGPOINTID} if( defined($abilities) and defined($payload) and $abilities eq 'mower_settings');
} elsif( defined($abilities) and defined($payload) and $abilities eq 'watering') {
my $valve_id;
$method = 'PUT';
if( $payload =~ m#watering_timer_(\d)# ) {
$valve_id = $1;
}
$uri .= '/devices/' . $deviceId . '/abilities/' . $abilities . '/properties/watering_timer_' . $valve_id;
} else { } else {
$uri .= '/devices/' . $deviceId . '/abilities/' . $abilities . '/command' if( defined($abilities) and defined($payload) and $abilities ne 'mower_settings'); $uri .= '/devices/' . $deviceId . '/abilities/' . $abilities . '/command' if( defined($abilities) and defined($payload) );
} }
$uri .= '?locationId=' . $hash->{helper}{locations_id}; $uri .= '?locationId=' . $hash->{helper}{locations_id};
} }
return ($payload,$session_id,$header,$uri,$method,$deviceId,$abilities); return ($payload,$session_id,$header,$uri,$method,$deviceId,$abilities);

View File

@ -66,7 +66,7 @@ use Time::Local;
eval "use JSON;1" or $missingModul .= "JSON "; eval "use JSON;1" or $missingModul .= "JSON ";
my $version = "1.0.4"; my $version = "1.2.0";
@ -190,26 +190,26 @@ sub GardenaSmartDevice_Set($@) {
#my ($arg, @params) = @args; #my ($arg, @params) = @args;
my $payload; my $payload;
my $abilities = ''; my $abilities = '';
### mower ### mower
if( lc $cmd eq 'parkuntilfurthernotice' ) { if( lc $cmd eq 'parkuntilfurthernotice' ) {
$payload = '"name":"park_until_further_notice"'; $payload = '"name":"park_until_further_notice"';
} elsif( lc $cmd eq 'parkuntilnexttimer' ) { } elsif( lc $cmd eq 'parkuntilnexttimer' ) {
$payload = '"name":"park_until_next_timer"'; $payload = '"name":"park_until_next_timer"';
} elsif( lc $cmd eq 'startresumeschedule' ) { } elsif( lc $cmd eq 'startresumeschedule' ) {
$payload = '"name":"start_resume_schedule"'; $payload = '"name":"start_resume_schedule"';
} elsif( lc $cmd eq 'startoverridetimer' ) { } elsif( lc $cmd eq 'startoverridetimer' ) {
my $duration = join( " ", @args ); my $duration = join( " ", @args );
$payload = '"name":"start_override_timer","parameters":{"duration":' . $duration . '}'; $payload = '"name":"start_override_timer","parameters":{"duration":' . $duration . '}';
} elsif( lc $cmd eq 'startpoint' ) { } elsif( lc $cmd eq 'startpoint' ) {
my $err; my $err;
@ -220,23 +220,29 @@ sub GardenaSmartDevice_Set($@) {
### watering_computer ### watering_computer
} elsif( lc $cmd eq 'manualoverride' ) { } elsif( lc $cmd eq 'manualoverride' ) {
my $duration = join( " ", @args ); my $duration = join( " ", @args );
$payload = '"name":"manual_override","parameters":{"duration":' . $duration . '}'; $payload = '"name":"manual_override","parameters":{"duration":' . $duration . '}';
} elsif( lc $cmd eq 'canceloverride' ) { } elsif( lc $cmd eq 'canceloverride' ) {
$payload = '"name":"cancel_override"'; $payload = '"name":"cancel_override"';
### Watering ic24 ### Watering ic24
} elsif( lc $cmd eq 'wateringtimertalve1' ) { } elsif( $cmd =~ /manualDurationValve/ ) {
my $duration = join( " ", @args ); my $valve_id;
$payload = '"name":"watering_timer_valve_1","parameters":{"duration":' . $duration . '}'; my $duration = join( " ", @args );
if( $cmd =~ m#(\d)$# ) {
$valve_id = $1;
}
$payload = '"properties":{"name":"watering_timer_' . $valve_id . '","value":{"state":"manual","duration":' . $duration . ',"valve_id":' . $valve_id . '}}';
### Sensors ### Sensors
} elsif( lc $cmd eq 'refresh' ) { } elsif( lc $cmd eq 'refresh' ) {
my $sensname = join( " ", @args ); my $sensname = join( " ", @args );
if( lc $sensname eq 'temperature' ) { if( lc $sensname eq 'temperature' ) {
$payload = '"name":"measure_ambient_temperature"'; $payload = '"name":"measure_ambient_temperature"';
$abilities = 'ambient_temperature'; $abilities = 'ambient_temperature';
@ -255,7 +261,7 @@ sub GardenaSmartDevice_Set($@) {
my $list = ''; my $list = '';
$list .= 'parkUntilFurtherNotice:noArg parkUntilNextTimer:noArg startResumeSchedule:noArg startOverrideTimer:slider,0,60,1440 startpoint' if( AttrVal($name,'model','unknown') eq 'mower' ); $list .= 'parkUntilFurtherNotice:noArg parkUntilNextTimer:noArg startResumeSchedule:noArg startOverrideTimer:slider,0,60,1440 startpoint' if( AttrVal($name,'model','unknown') eq 'mower' );
$list .= 'manualOverride:slider,0,1,59 cancelOverride:noArg' if( AttrVal($name,'model','unknown') eq 'watering_computer' ); $list .= 'manualOverride:slider,0,1,59 cancelOverride:noArg' if( AttrVal($name,'model','unknown') eq 'watering_computer' );
$list .= 'wateringTimerValve1:slider,0,1,59' if( AttrVal($name,'model','unknown') eq 'ic24' ); $list .= 'manualDurationValve1:slider,0,1,59 manualDurationValve2:slider,0,1,59 manualDurationValve3:slider,0,1,59 manualDurationValve4:slider,0,1,59 manualDurationValve5:slider,0,1,59 manualDurationValve6:slider,0,1,59' if( AttrVal($name,'model','unknown') eq 'ic24' );
$list .= 'refresh:temperature,light,humidity' if( AttrVal($name,'model','unknown') eq 'sensor' ); $list .= 'refresh:temperature,light,humidity' if( AttrVal($name,'model','unknown') eq 'sensor' );
return "Unknown argument $cmd, choose one of $list"; return "Unknown argument $cmd, choose one of $list";
@ -388,6 +394,8 @@ sub GardenaSmartDevice_WriteReadings($$) {
readingsBulkUpdate($hash,'state','T: ' . ReadingsVal($name,'ambient_temperature-temperature','readingsValError') . '°C, H: ' . ReadingsVal($name,'humidity-humidity','readingsValError') . '%, L: ' . ReadingsVal($name,'light-light','readingsValError') . 'lux') if( AttrVal($name,'model','unknown') eq 'sensor' ); readingsBulkUpdate($hash,'state','T: ' . ReadingsVal($name,'ambient_temperature-temperature','readingsValError') . '°C, H: ' . ReadingsVal($name,'humidity-humidity','readingsValError') . '%, L: ' . ReadingsVal($name,'light-light','readingsValError') . 'lux') if( AttrVal($name,'model','unknown') eq 'sensor' );
readingsBulkUpdate($hash,'state','scheduled watering next start: ' . (ReadingsVal($name,'scheduling-scheduled_watering_next_start','readingsValError'))) if( AttrVal($name,'model','unknown') eq 'ic24' );
readingsEndUpdate( $hash, 1 ); readingsEndUpdate( $hash, 1 );
Log3 $name, 4, "GardenaSmartDevice ($name) - readings was written}"; Log3 $name, 4, "GardenaSmartDevice ($name) - readings was written}";