74_THINKINGCLEANER.pm: add some more set commands

git-svn-id: https://svn.fhem.de/fhem/trunk@12318 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
jpawlowski 2016-10-10 23:46:44 +00:00
parent 0575cfe2ba
commit 011286fba5

View File

@ -57,7 +57,7 @@ sub THINKINGCLEANER_Initialize($) {
$hash->{parseParams} = 1; $hash->{parseParams} = 1;
$hash->{AttrList} = $hash->{AttrList} =
"disable:0,1 timeout:1,2,3,4,5 pollInterval:30,45,60,75,90 pollMultiplierWebhook pollMultiplierCleaning model webhookHttpHostname webhookPort webhookFWinstance:$webhookFWinstance " "disable:0,1 timeout:1,2,3,4,5 pollInterval:30,45,60,75,90 pollMultiplierWebhook pollMultiplierCleaning model webhookHttpHostname webhookPort webhookFWinstance:$webhookFWinstance restart:noArg"
. $readingFnAttributes; . $readingFnAttributes;
return; return;
@ -68,7 +68,9 @@ sub THINKINGCLEANER_GetStatus($;$) {
my ( $hash, $delay ) = @_; my ( $hash, $delay ) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
$hash->{INTERVAL_MULTIPLIER} = ( $hash->{INTERVAL_MULTIPLIER} = (
ReadingsVal( $name, "state", "off" ) ne "off" ReadingsVal( $name, "state", "off" ) ne "off"
&& ReadingsVal( $name, "state", "absent" ) ne "absent"
&& ReadingsVal( $name, "state", "standby" ) ne "standby"
? AttrVal( $name, "pollMultiplierCleaning", "0.5" ) ? AttrVal( $name, "pollMultiplierCleaning", "0.5" )
: ( : (
$hash->{WEBHOOK_REGISTER} eq "success" $hash->{WEBHOOK_REGISTER} eq "success"
@ -117,7 +119,7 @@ sub THINKINGCLEANER_Set($$$) {
my $usage = my $usage =
"Unknown argument " "Unknown argument "
. @$a[1] . @$a[1]
. ", choose one of statusRequest:noArg toggle:noArg on:noArg on-spot:noArg on-max:noArg off:noArg power:off,on dock:noArg undock:noArg vacuumDrive:off,on locate:noArg on-delayed:noArg cleaningDelay damageProtection:off,on remoteControl:forward,backward,left,left-spin,right,right-spin,stop,drive scheduleAdd"; . ", choose one of statusRequest:noArg toggle:noArg on:noArg on-spot:noArg on-max:noArg off:noArg power:off,on dock:noArg undock:noArg locate:noArg on-delayed:noArg cleaningDelay remoteControl:forward,backward,left,left-spin,right,right-spin,stop,drive scheduleAdd name damageProtection:off,on reboot:noArg autoUpdate:on,off vacuumDrive:off,on restartAC:on,off alwaysMAX:on,off autoDock:on,off keepAwakeOnDock:on,off songSubmit songReset:noArg dockAt stopAt";
my $cmd = ''; my $cmd = '';
my $result; my $result;
@ -390,6 +392,211 @@ sub THINKINGCLEANER_Set($$$) {
} }
} }
# dockAt
elsif ( lc( @$a[1] ) eq "dockat" ) {
if ( $state ne "absent" ) {
Log3 $name, 3, "THINKINGCLEANER set $name " . @$a[1] . " " . @$a[2];
return "Missing value: percent"
if ( !defined( @$a[2] ) );
return
"Invalid value for minutes: needs to be between 10 and 50 percent"
if ( @$a[2] !~ /^\d+/ || @$a[2] < 10 || @$a[2] > 50 );
$cmd = "DockAt" . @$a[2];
$result =
THINKINGCLEANER_SendCommand( $hash, "command.json", $cmd,
"dockAt" );
}
else {
return "Device needs to be reachable to be controlled.";
}
}
# stopAt
elsif ( lc( @$a[1] ) eq "stopat" ) {
if ( $state ne "absent" ) {
Log3 $name, 3, "THINKINGCLEANER set $name " . @$a[1] . " " . @$a[2];
return "Missing value: percent"
if ( !defined( @$a[2] ) );
return
"Invalid value for minutes: needs to be between 6 and 50 percent"
if ( @$a[2] !~ /^\d+/ || @$a[2] < 6 || @$a[2] > 50 );
$cmd = "StopAt" . @$a[2];
$result =
THINKINGCLEANER_SendCommand( $hash, "command.json", $cmd,
"stopAt" );
}
else {
return "Device needs to be reachable to be controlled.";
}
}
# autoUpdate
elsif ( lc( @$a[1] ) eq "autoupdate" ) {
if ( $state ne "absent" ) {
Log3 $name, 3, "THINKINGCLEANER set $name " . @$a[1] . " " . @$a[2];
return "Missing value"
if ( !defined( @$a[2] ) );
$cmd = "UpdateOFF";
$cmd = "UpdateON" if ( @$a[2] eq "on" );
$result =
THINKINGCLEANER_SendCommand( $hash, "command.json", $cmd,
"autoUpdate" );
}
else {
return "Device needs to be reachable to set " . @$a[1];
}
}
# songSubmit
elsif ( lc( @$a[1] ) eq "songsubmit" ) {
if ( $state ne "absent" ) {
Log3 $name, 3, "THINKINGCLEANER set $name " . @$a[1] . " " . @$a[2];
return "Missing value"
if ( !defined( @$a[2] ) );
$cmd = @$a[2];
$result =
THINKINGCLEANER_SendCommand( $hash, "newsong.json", $cmd );
}
else {
return "Device needs to be reachable to set " . @$a[1];
}
}
# songReset
elsif ( lc( @$a[1] ) eq "songreset" ) {
if ( $state ne "absent" ) {
Log3 $name, 3, "THINKINGCLEANER set $name " . @$a[1];
$cmd = "resetSongCommand";
$result =
THINKINGCLEANER_SendCommand( $hash, "command.json", $cmd );
}
else {
return "Device needs to be reachable to set " . @$a[1];
}
}
# restartAC
elsif ( lc( @$a[1] ) eq "restartac" ) {
if ( $state ne "absent" ) {
Log3 $name, 3, "THINKINGCLEANER set $name " . @$a[1] . " " . @$a[2];
return "Missing value"
if ( !defined( @$a[2] ) );
$cmd = "MAXOFF";
$cmd = "MAXON" if ( @$a[2] eq "on" );
$result =
THINKINGCLEANER_SendCommand( $hash, "command.json", $cmd,
"restartAC" );
}
else {
return "Device needs to be reachable to set " . @$a[1];
}
}
# alwaysMAX
elsif ( lc( @$a[1] ) eq "alwaysmax" ) {
if ( $state ne "absent" ) {
Log3 $name, 3, "THINKINGCLEANER set $name " . @$a[1] . " " . @$a[2];
return "Missing value"
if ( !defined( @$a[2] ) );
$cmd = "MAXOFF";
$cmd = "MAXON" if ( @$a[2] eq "on" );
$result =
THINKINGCLEANER_SendCommand( $hash, "command.json", $cmd,
"alwaysMAX" );
}
else {
return "Device needs to be reachable to set " . @$a[1];
}
}
# autoDock
elsif ( lc( @$a[1] ) eq "autodock" ) {
if ( $state ne "absent" ) {
Log3 $name, 3, "THINKINGCLEANER set $name " . @$a[1] . " " . @$a[2];
return "Missing value"
if ( !defined( @$a[2] ) );
$cmd = "AutoDockOFF";
$cmd = "AutoDockON" if ( @$a[2] eq "on" );
$result =
THINKINGCLEANER_SendCommand( $hash, "command.json", $cmd,
"autoDock" );
}
else {
return "Device needs to be reachable to set " . @$a[1];
}
}
# keepAwakeOnDock
elsif ( lc( @$a[1] ) eq "keepawakeondock" ) {
if ( $state ne "absent" ) {
Log3 $name, 3, "THINKINGCLEANER set $name " . @$a[1] . " " . @$a[2];
return "Missing value"
if ( !defined( @$a[2] ) );
$cmd = "keepAwakeOnDockOFF";
$cmd = "keepAwakeOnDockON" if ( @$a[2] eq "on" );
$result =
THINKINGCLEANER_SendCommand( $hash, "command.json", $cmd,
"keepAwakeOnDock" );
}
else {
return "Device needs to be reachable to set " . @$a[1];
}
}
# name
elsif ( lc( @$a[1] ) eq "name" ) {
if ( $state ne "absent" ) {
Log3 $name, 3, "THINKINGCLEANER set $name " . @$a[1] . " " . @$a[2];
return "Missing value: name"
if ( !defined( @$a[2] ) );
return "Wrong format for name"
if ( @$a[2] !~ /^\w+$/ );
$cmd = "rename_device&name=" . @$a[2];
$result =
THINKINGCLEANER_SendCommand( $hash, "command.json", $cmd,
"name" );
}
else {
return "Device needs to be reachable to set " . @$a[1];
}
}
# reboot
elsif ( lc( @$a[1] ) eq "reboot" ) {
if ( $state ne "absent" ) {
Log3 $name, 3, "THINKINGCLEANER set $name " . @$a[1];
$cmd = "crash";
$result =
THINKINGCLEANER_SendCommand( $hash, "command.json", $cmd );
}
else {
return "Device needs to be reachable to be rebooted.";
}
}
# locate # locate
elsif ( lc( @$a[1] ) eq "locate" ) { elsif ( lc( @$a[1] ) eq "locate" ) {
if ( $state ne "absent" ) { if ( $state ne "absent" ) {
@ -411,8 +618,7 @@ sub THINKINGCLEANER_Set($$$) {
Log3 $name, 3, "THINKINGCLEANER set $name " . @$a[1]; Log3 $name, 3, "THINKINGCLEANER set $name " . @$a[1];
$cmd = "dock"; $cmd = "dock";
$result = $result = THINKINGCLEANER_SendCommand( $hash, "command.json", $cmd )
THINKINGCLEANER_SendCommand( $hash, "command.json", $cmd, "dock" )
if ( $deviceStatus !~ /^(base.*|plug.*)$/ ); if ( $deviceStatus !~ /^(base.*|plug.*)$/ );
} }
else { else {
@ -426,9 +632,7 @@ sub THINKINGCLEANER_Set($$$) {
Log3 $name, 3, "THINKINGCLEANER set $name " . @$a[1]; Log3 $name, 3, "THINKINGCLEANER set $name " . @$a[1];
$cmd = "leavehomebase"; $cmd = "leavehomebase";
$result = $result = THINKINGCLEANER_SendCommand( $hash, "command.json", $cmd )
THINKINGCLEANER_SendCommand( $hash, "command.json", $cmd,
"undock" )
if ( $deviceStatus =~ /^(base.*)$/ ); if ( $deviceStatus =~ /^(base.*)$/ );
} }
else { else {
@ -451,7 +655,7 @@ sub THINKINGCLEANER_Set($$$) {
"damageProtection" ); "damageProtection" );
} }
else { else {
return "Device needs to be reachable to set damageProtection."; return "Device needs to be reachable to set " . @$a[1];
} }
} }
@ -643,7 +847,7 @@ sub THINKINGCLEANER_Define($$$) {
$modules{THINKINGCLEANER}{defptr}{$name} = \$hash; $modules{THINKINGCLEANER}{defptr}{$name} = \$hash;
# set default settings on first define # set default settings on first define
if ($init_done) { if ( $init_done && !defined( $hash->{OLDDEF} ) ) {
$attr{$name}{cmdIcon} = $attr{$name}{cmdIcon} =
'on-max:text_max on-spot:refresh on-delayed:time_timer dock:measure_battery_50 locate:rc_SEARCH'; 'on-max:text_max on-spot:refresh on-delayed:time_timer dock:measure_battery_50 locate:rc_SEARCH';
$attr{$name}{devStateIcon} = $attr{$name}{devStateIcon} =
@ -820,7 +1024,8 @@ sub THINKINGCLEANER_SendCommand($$;$$) {
my $response; my $response;
my $return; my $return;
$http_method = "POST" if ( $service eq "register_webhook.json" ); $http_method = "POST"
if ( $service eq "register_webhook.json" || $service eq "newsong.json" );
if ( !defined($cmd) || $cmd eq "" ) { if ( !defined($cmd) || $cmd eq "" ) {
Log3 $name, 4, "THINKINGCLEANER $name: REQ $service"; Log3 $name, 4, "THINKINGCLEANER $name: REQ $service";
@ -1184,11 +1389,23 @@ sub THINKINGCLEANER_ReceiveCommand($$$) {
readingsBulkUpdate( $hash, "cleaningTimeLast", readingsBulkUpdate( $hash, "cleaningTimeLast",
ReadingsVal( $name, "cleaningTime", "0" ) ); ReadingsVal( $name, "cleaningTime", "0" ) );
} }
elsif ( $r2 eq "vacuum_drive" ) { elsif ($r2 eq "auto_update"
$readingName = "vacuumDrive"; || $r2 eq "vacuum_drive"
|| $r2 eq "restart_AC"
|| $r2 eq "always_MAX"
|| $r2 eq "auto_dock"
|| $r2 eq "keepAwakeOnDock"
|| $r2 eq "webview_advanced" )
{
$readingName = $r2;
$v = "off"; $v = "off";
$v = "on" if ( $return->{$r}{$r2} eq "1" ); $v = "on" if ( $return->{$r}{$r2} eq "1" );
} }
elsif ( $r2 eq "bin_status" ) {
$readingName = $r2;
$v = "ok";
$v = "full" if ( $return->{$r}{$r2} eq "1" );
}
elsif ( $r2 eq "tc-roomba-conn" ) { elsif ( $r2 eq "tc-roomba-conn" ) {
$readingName = "roombaConnection"; $readingName = "roombaConnection";
$power = "off"; $power = "off";