From 13a14a1e9be4e47edb5c911d9a8300b25779818f Mon Sep 17 00:00:00 2001 From: phenning Date: Sun, 11 Apr 2021 17:11:59 +0000 Subject: [PATCH] =?UTF-8?q?36=5FShelly.pm:=20Neue=20Version=20mit=20option?= =?UTF-8?q?aoem=20Parameter=20f=C3=BCr=20Rolll=C3=A4den?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.fhem.de/fhem/trunk@24221 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/36_Shelly.pm | 47 +++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/fhem/FHEM/36_Shelly.pm b/fhem/FHEM/36_Shelly.pm index c996c3418..887a19cea 100644 --- a/fhem/FHEM/36_Shelly.pm +++ b/fhem/FHEM/36_Shelly.pm @@ -39,7 +39,7 @@ use vars qw{%attr %defs}; sub Log($$); #-- globals on start -my $version = "3.1"; +my $version = "3.3"; #-- these we may get on request my %gets = ( @@ -62,8 +62,8 @@ my %setssw = ( ); my %setsrol = ( - "closed:noArg" => "C", - "open:noArg" => "O", + "closed" => "C", + "open" => "O", "stop:noArg" => "S", "config" => "K", "password" => "P", @@ -671,27 +671,35 @@ sub Shelly_Set ($@) { return $msg } - #-- open 100% or 0% ? - my $pctnormal = (AttrVal($name,"pct100","open") eq "open"); + #-- open 100% or 0% ? + my $pctnormal = (AttrVal($name,"pct100","open") eq "open"); - if( $cmd eq "stop" ){ + if( $cmd eq "stop" ){ Shelly_updown($hash,"?go=stop"); # -- estimate pos here ??? $hash->{DURATION} = 0; - }elsif( $cmd eq "closed" ){ - $hash->{MOVING} = "moving_down"; - $hash->{DURATION} = $max; - $hash->{TARGETPCT} = $pctnormal ? 0 : 100; - Shelly_updown($hash,"?go=close"); - }elsif( $cmd eq "open" ){ - $hash->{MOVING} = "moving_up"; - $hash->{DURATION} = $max; - $hash->{TARGETPCT} = $pctnormal ? 100 : 0; - Shelly_updown($hash,"?go=open"); + }elsif( $cmd =~ /(closed)|(open)/ ){ + $hash->{DURATION} = (defined($value))?$value:$max; + if( $cmd eq "closed" ){ + $hash->{MOVING} = "moving_down"; + $hash->{TARGETPCT} = $pctnormal ? 0 : 100; + $cmd = "?go=close"; + }else{ + $hash->{MOVING} = "moving_up"; + $hash->{TARGETPCT} = $pctnormal ? 100 : 0; + $cmd =" ?go=open"; + } + $cmd .= "&duration=$value" + if(defined($value)); + Shelly_updown($hash,$cmd); }elsif( $cmd eq "pct" ){ my $targetpct = $value; my $pos = ReadingsVal($name,"position",""); my $pct = ReadingsVal($name,"pct",undef); + #-- check for sign + if( "$value" =~ /[\+-]\d*/ ){ + $targetpct = eval($pos."$value"); + } if( !$max ){ Log3 $name,1,"[Shelly_Set] please set the maxtime attribute for proper operation"; @@ -1649,11 +1657,12 @@ sub Shelly_updown2($){
For Shelly roller blind devices (model=shelly2/2.5 and mode=roller)