mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-20 19:36:02 +00:00
36_Shelly.pm:dimmer: set..dimup/dimdown
git-svn-id: https://svn.fhem.de/fhem/trunk@28192 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
559b9eb2b3
commit
bb26d3c9cf
@ -47,6 +47,8 @@
|
|||||||
# internal Optimization of Shelly_Set()
|
# internal Optimization of Shelly_Set()
|
||||||
# 5.09 Bug Fix (dimmer-devices): set..pct will not turn on or off
|
# 5.09 Bug Fix (dimmer-devices): set..pct will not turn on or off
|
||||||
# Add (dimmer-devices): set..dim will turn on or off
|
# Add (dimmer-devices): set..dim will turn on or off
|
||||||
|
# 5.10 Add (dimmer-devices): set..dimup / dimdown
|
||||||
|
# Add (sensor-addon): temperatures
|
||||||
|
|
||||||
package main;
|
package main;
|
||||||
|
|
||||||
@ -198,6 +200,7 @@ my %periods = (
|
|||||||
my %attributes = (
|
my %attributes = (
|
||||||
"multichannel" => " defchannel",
|
"multichannel" => " defchannel",
|
||||||
"roller" => " pct100:open,closed maxtime maxtime_close maxtime_open",
|
"roller" => " pct100:open,closed maxtime maxtime_close maxtime_open",
|
||||||
|
"dimmer" => " dimstep",
|
||||||
"input" => " showinputs:show,hide",
|
"input" => " showinputs:show,hide",
|
||||||
"emeter" => " Energymeter_F Energymeter_P Energymeter_R EMchannels:ABC_,L123_,_ABC,_L123".
|
"emeter" => " Energymeter_F Energymeter_P Energymeter_R EMchannels:ABC_,L123_,_ABC,_L123".
|
||||||
" Periods:multiple-strict,Week,day,dayT,dayQ,hour,hourQ,min". # @keys = keys %periods
|
" Periods:multiple-strict,Week,day,dayT,dayQ,hour,hourQ,min". # @keys = keys %periods
|
||||||
@ -214,7 +217,7 @@ my %shelly_dropdowns = (
|
|||||||
"Onoff" => " on off toggle on-for-timer off-for-timer",
|
"Onoff" => " on off toggle on-for-timer off-for-timer",
|
||||||
"Multi" => " ON:noArg OFF:noArg xtrachannels:noArg",
|
"Multi" => " ON:noArg OFF:noArg xtrachannels:noArg",
|
||||||
"Rol" => " closed open stop:noArg pct:slider,0,1,100 delta zero:noArg predefAttr:noArg",
|
"Rol" => " closed open stop:noArg pct:slider,0,1,100 delta zero:noArg predefAttr:noArg",
|
||||||
"RgbwW" => " dim pct",
|
"RgbwW" => " dim dimup dimdown pct",
|
||||||
"BulbW" => " ct:colorpicker,CT,3000,10,6500 pct:slider,0,1,100",
|
"BulbW" => " ct:colorpicker,CT,3000,10,6500 pct:slider,0,1,100",
|
||||||
"RgbwC" => " rgbw rgb:colorpicker,HSV hsv white:slider,0,1,100 gain:slider,0,1,100"
|
"RgbwC" => " rgbw rgb:colorpicker,HSV hsv white:slider,0,1,100 gain:slider,0,1,100"
|
||||||
);
|
);
|
||||||
@ -591,6 +594,7 @@ sub Shelly_Initialize ($) {
|
|||||||
" interval timeout shellyuser verbose:0,1,2,3,4,5".
|
" interval timeout shellyuser verbose:0,1,2,3,4,5".
|
||||||
$attributes{'multichannel'}.
|
$attributes{'multichannel'}.
|
||||||
$attributes{'roller'}.
|
$attributes{'roller'}.
|
||||||
|
$attributes{'dimmer'}.
|
||||||
$attributes{'input'}.
|
$attributes{'input'}.
|
||||||
$attributes{'metering'}.
|
$attributes{'metering'}.
|
||||||
$attributes{'showunits'}.
|
$attributes{'showunits'}.
|
||||||
@ -1046,6 +1050,10 @@ sub Shelly_Attr(@) {
|
|||||||
$old =~ s/ showinputs:show,hide//;
|
$old =~ s/ showinputs:show,hide//;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( $shelly_models{$model}[2]==0 ){ # no dimmer
|
||||||
|
$old =~ s/ dimstep//;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if( $model eq "shellypro3em" ){
|
if( $model eq "shellypro3em" ){
|
||||||
$old =~ s/ webhook//; # Shelly actions do not work properly (fw v0.14.1)
|
$old =~ s/ webhook//; # Shelly actions do not work properly (fw v0.14.1)
|
||||||
@ -1584,7 +1592,7 @@ sub Shelly_Set ($@) {
|
|||||||
}elsif( $model =~ /shelly(rgbw|bulb).*/ && $mode eq "color" ){
|
}elsif( $model =~ /shelly(rgbw|bulb).*/ && $mode eq "color" ){
|
||||||
$newkeys .= $shelly_dropdowns{RgbwC};
|
$newkeys .= $shelly_dropdowns{RgbwC};
|
||||||
}
|
}
|
||||||
$hash->{helper}{Sets}=$newkeys; #Debug "$name: helper set to $newkeys";
|
$hash->{helper}{Sets}=$newkeys;
|
||||||
}
|
}
|
||||||
|
|
||||||
# ':noArg' will be stripped off by calling instance
|
# ':noArg' will be stripped off by calling instance
|
||||||
@ -1712,7 +1720,7 @@ sub Shelly_Set ($@) {
|
|||||||
#-- get channel parameter
|
#-- get channel parameter
|
||||||
if( $cmd eq "toggle" || $cmd eq "on" || $cmd eq "off" ){
|
if( $cmd eq "toggle" || $cmd eq "on" || $cmd eq "off" ){
|
||||||
$channel = $value;
|
$channel = $value;
|
||||||
}elsif( $cmd =~ /(on|off)-for-timer/ || ($cmd eq"pct" && $ff!=1 ) || $cmd eq "dim" || $cmd eq "brightness" || $cmd eq "ct" ){
|
}elsif( $cmd =~ /(on|off)-for-timer/ || ($cmd eq"pct" && $ff!=1 ) || $cmd =~ /dim/ || $cmd eq "brightness" || $cmd eq "ct" ){
|
||||||
$channel = shift @a;
|
$channel = shift @a;
|
||||||
$channel = shift @a if( $channel eq "%" ); # skip %-sign coming from dropdown (units=1)
|
$channel = shift @a if( $channel eq "%" ); # skip %-sign coming from dropdown (units=1)
|
||||||
}
|
}
|
||||||
@ -1825,14 +1833,16 @@ sub Shelly_Set ($@) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#- - pct, brightness, dim - set percentage volume of dimmable device (no rollers) eg. shellydimmer or shellyrgbw in white mode
|
#- - pct, brightness, dim - set percentage volume of dimmable device (no rollers) eg. shellydimmer or shellyrgbw in white mode
|
||||||
if( ($cmd eq "pct" || $cmd eq "brightness" || $cmd eq "dim") && $ff != 1 ){
|
if( ($cmd eq "pct" || $cmd eq "brightness" || $cmd =~ /^(dim)/ ) && $ff != 1 ){
|
||||||
if( $ff !=2 ){
|
if( $ff !=2 ){
|
||||||
$msg = "Error: forbidden command \'$cmd\' for device $name";
|
$msg = "Error: forbidden command \'$cmd\' for device $name";
|
||||||
Log3 $name,1,"[Shelly_Set] ".$msg;
|
Log3 $name,1,"[Shelly_Set] ".$msg;
|
||||||
return $msg;
|
return $msg;
|
||||||
}
|
}
|
||||||
# check value
|
# check value
|
||||||
if( !defined($value) ){
|
if( !defined($value) && $cmd =~ /up|down/ ){
|
||||||
|
$value = AttrVal($name,"dimstep",10) if(!defined($value));
|
||||||
|
}elsif( !defined($value) ){
|
||||||
$msg = "Error: no $cmd value \'$value\' given for device $name";
|
$msg = "Error: no $cmd value \'$value\' given for device $name";
|
||||||
Log3 $name,1,"[Shelly_Set] ".$msg;
|
Log3 $name,1,"[Shelly_Set] ".$msg;
|
||||||
return $msg;
|
return $msg;
|
||||||
@ -1840,7 +1850,7 @@ sub Shelly_Set ($@) {
|
|||||||
$msg = "Error: wrong $cmd value \'$value\' for device $name, must be <integer>";
|
$msg = "Error: wrong $cmd value \'$value\' for device $name, must be <integer>";
|
||||||
Log3 $name,1,"[Shelly_Set] ".$msg;
|
Log3 $name,1,"[Shelly_Set] ".$msg;
|
||||||
return $msg;
|
return $msg;
|
||||||
}elsif( $value == 0 && $cmd eq "pct" ){
|
}elsif( $value == 0 && $cmd =~ /(pct)|(dimup)|(dimdown)/ ){
|
||||||
$msg = "$name Error: wrong $cmd value \'$value\' given, must be 1 ... 100 ";
|
$msg = "$name Error: wrong $cmd value \'$value\' given, must be 1 ... 100 ";
|
||||||
Log3 $name,1,"[Shelly_Set] ".$msg;
|
Log3 $name,1,"[Shelly_Set] ".$msg;
|
||||||
return $msg;
|
return $msg;
|
||||||
@ -1861,6 +1871,8 @@ sub Shelly_Set ($@) {
|
|||||||
$cmd="?turn=off" ;
|
$cmd="?turn=off" ;
|
||||||
}elsif($cmd eq "pct" ){
|
}elsif($cmd eq "pct" ){
|
||||||
$cmd="?brightness=$value";
|
$cmd="?brightness=$value";
|
||||||
|
}elsif($cmd =~ /dim(up|down)/ ){
|
||||||
|
$cmd="?dim=$1"."\&step=$value";
|
||||||
}else{
|
}else{
|
||||||
$cmd="?brightness=$value\&turn=on";
|
$cmd="?brightness=$value\&turn=on";
|
||||||
}
|
}
|
||||||
@ -3330,6 +3342,13 @@ if(0){ # check calculation of reactive power!
|
|||||||
readingsBulkUpdateMonitored($hash,"illumination".$subs,$jhash->{'illuminance:0'}{'illumination'} );
|
readingsBulkUpdateMonitored($hash,"illumination".$subs,$jhash->{'illuminance:0'}{'illumination'} );
|
||||||
}
|
}
|
||||||
# ********
|
# ********
|
||||||
|
# look for sensor addon
|
||||||
|
my $t=100;
|
||||||
|
while( $jhash->{"temperature:$t"}{id} ){
|
||||||
|
$subs = "_".($jhash->{"temperature:$t"}{id}-100);
|
||||||
|
readingsBulkUpdateMonitored($hash,"temperature" .$subs,$jhash->{"temperature:$t"}{'tC'}.$si_units{tempC}[$hash->{units}] );
|
||||||
|
$t++;
|
||||||
|
}
|
||||||
|
|
||||||
################ Shelly.GetConfig
|
################ Shelly.GetConfig
|
||||||
}elsif ($comp eq "config"){
|
}elsif ($comp eq "config"){
|
||||||
@ -3382,6 +3401,12 @@ if(0){ # check calculation of reactive power!
|
|||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
# look if an addon is present:
|
||||||
|
if( $jhash->{'sys'}{'device'}{'addon_type'} ){
|
||||||
|
readingsBulkUpdateMonitored($hash,"addon",$jhash->{'sys'}{'device'}{'addon_type'} );
|
||||||
|
}elsif(ReadingsVal($name,"addon",undef)){
|
||||||
|
fhem("deletereading $name addon");
|
||||||
|
}
|
||||||
|
|
||||||
################ Shelly.GetDeviceInfo
|
################ Shelly.GetDeviceInfo
|
||||||
}elsif ($comp eq "info"){
|
}elsif ($comp eq "info"){
|
||||||
@ -3400,7 +3425,7 @@ if(0){ # check calculation of reactive power!
|
|||||||
}else{
|
}else{
|
||||||
Log3 $name,4,"[Shelly_proc2G:info] $name: new firmware information read from Shelly: $fw_shelly";
|
Log3 $name,4,"[Shelly_proc2G:info] $name: new firmware information read from Shelly: $fw_shelly";
|
||||||
readingsBulkUpdateIfChanged($hash,"firmware","v$fw_shelly");
|
readingsBulkUpdateIfChanged($hash,"firmware","v$fw_shelly");
|
||||||
} #Debug $name."--".$jhash->{'name'};
|
}
|
||||||
if( defined($jhash->{'name'}) ){##&& AttrVal($name,"ShellyName","") ne $jhash->{'name'}) { #ShellyName
|
if( defined($jhash->{'name'}) ){##&& AttrVal($name,"ShellyName","") ne $jhash->{'name'}) { #ShellyName
|
||||||
readingsBulkUpdateIfChanged($hash,"name",$jhash->{'name'} );
|
readingsBulkUpdateIfChanged($hash,"name",$jhash->{'name'} );
|
||||||
# $attr{$hash->{NAME}}{ShellyName} = $jhash->{'name'};
|
# $attr{$hash->{NAME}}{ShellyName} = $jhash->{'name'};
|
||||||
@ -3666,7 +3691,7 @@ sub Shelly_EMData {
|
|||||||
readingsBulkUpdateMonitored($hash,$pr.$mapping{E1}{act_integrated},$mypower);
|
readingsBulkUpdateMonitored($hash,$pr.$mapping{E1}{act_integrated},$mypower);
|
||||||
readingsBulkUpdateMonitored($hash,$pr.$mapping{E1}{act_integratedPos},$mypowerPos);
|
readingsBulkUpdateMonitored($hash,$pr.$mapping{E1}{act_integratedPos},$mypowerPos);
|
||||||
readingsBulkUpdateMonitored($hash,$pr.$mapping{E1}{act_integratedNeg},$mypowerNeg);
|
readingsBulkUpdateMonitored($hash,$pr.$mapping{E1}{act_integratedNeg},$mypowerNeg);
|
||||||
}else{Debug "skipping power calculation";}
|
}else{Log3 $name,6,"[b] skipping power calculation";}
|
||||||
# reset helper values. They will be set while cyclic update of power values. A small update interval is necessary!
|
# reset helper values. They will be set while cyclic update of power values. A small update interval is necessary!
|
||||||
$hash->{helper}{power} = 0;
|
$hash->{helper}{power} = 0;
|
||||||
$hash->{helper}{powerPos} = 0;
|
$hash->{helper}{powerPos} = 0;
|
||||||
@ -5474,6 +5499,21 @@ Shelly_readingsBulkUpdate($$$@) # derived from fhem.pl readingsBulkUpdateIfChang
|
|||||||
<br />Prozentualer Wert für die Helligkeit (brightness). Es wird nur der Helligkeitswert gesetzt und eingeschaltet.
|
<br />Prozentualer Wert für die Helligkeit (brightness). Es wird nur der Helligkeitswert gesetzt und eingeschaltet.
|
||||||
Bei einem Helligkeitswert gleich 0 (Null) wird ausgeschaltet, der im Shelly gespeicherte Helligkeitswert bleibt unverändert.
|
Bei einem Helligkeitswert gleich 0 (Null) wird ausgeschaltet, der im Shelly gespeicherte Helligkeitswert bleibt unverändert.
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<li><a id="Shelly-set-dimup"></a>
|
||||||
|
<code>set <name> dimup [<1...100>] [<channel>] </code>
|
||||||
|
<br />Prozentualer Wert für die Vergrößerung der Helligkeit.
|
||||||
|
Ist kein Wert angegeben, wird das Attribut dimstep ausgewertet.
|
||||||
|
Der größte erreichbare Helligkeitswert ist 100.
|
||||||
|
Ist das Gerät aus, ergibt sich der neue Helligkeitswert aus dem angegebenen Wert und das Gerät wird eingeschaltet.
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li><a id="Shelly-set-dimdown"></a>
|
||||||
|
<code>set <name> dimdown [<1...100>] [<channel>] </code>
|
||||||
|
<br />Prozentualer Wert für die Verringerung der Helligkeit.
|
||||||
|
Ist kein Wert angegeben, wird das Attribut dimstep ausgewertet.
|
||||||
|
Der kleinste erreichbare Helligkeitswert ist der im Shelly gespeicherte Wert für "minimum brightness".
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
Hinweis für ShellyRGBW (white-Mode): Kanalnummern sind 0..3.
|
Hinweis für ShellyRGBW (white-Mode): Kanalnummern sind 0..3.
|
||||||
Wird keine Kanalnummer angegeben, wird der mit dem Attribut 'defchannel' definierte Kanal geschaltet.
|
Wird keine Kanalnummer angegeben, wird der mit dem Attribut 'defchannel' definierte Kanal geschaltet.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user