YAMAHA_AVR: more robust volume set commands - part 2

git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@15364 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
markusbloch 2017-10-31 16:16:35 +00:00
parent 715b0d5b5f
commit a6c6f1bad4

View File

@ -457,19 +457,19 @@ YAMAHA_AVR_Set($@)
{ {
my $target_volume; my $target_volume;
if($what eq "volume" and defined($a[2]) and $a[2] =~ /^\d{1,3}(?:\.\d)?$/ and $a[2] >= 0 && $a[2] <= 100) if($what eq "volume" and defined($a[2]) and $a[2] =~ /^\d{1,3}(?:\.\d+)?$/ and $a[2] >= 0 && $a[2] <= 100)
{ {
$target_volume = YAMAHA_AVR_volume_rel2abs(int($a[2])); $target_volume = YAMAHA_AVR_volume_rel2abs(int($a[2]));
} }
elsif($what eq "volumeDown" and defined(ReadingsVal($name, "volume", undef))) elsif($what eq "volumeDown" and defined(ReadingsVal($name, "volume", undef)))
{ {
$target_volume = YAMAHA_AVR_volume_rel2abs(ReadingsVal($name, "volume", -45) - ((defined($a[2]) and $a[2] =~ /^\d+(?:\.\d)?$/) ? int($a[2]) : AttrVal($hash->{NAME}, "volumeSteps",5))); $target_volume = YAMAHA_AVR_volume_rel2abs(ReadingsVal($name, "volume", -45) - ((defined($a[2]) and $a[2] =~ /^\d+(?:\.\d+)?$/) ? int($a[2]) : AttrVal($hash->{NAME}, "volumeSteps",5)));
} }
elsif($what eq "volumeUp" and defined(ReadingsVal($name, "volume", undef))) elsif($what eq "volumeUp" and defined(ReadingsVal($name, "volume", undef)))
{ {
$target_volume = YAMAHA_AVR_volume_rel2abs(ReadingsVal($name, "volume", -45) + ((defined($a[2]) and $a[2] =~ /^\d+(?:\.\d)?$/) ? int($a[2]) : AttrVal($hash->{NAME}, "volumeSteps",5))); $target_volume = YAMAHA_AVR_volume_rel2abs(ReadingsVal($name, "volume", -45) + ((defined($a[2]) and $a[2] =~ /^\d+(?:\.\d+)?$/) ? int($a[2]) : AttrVal($hash->{NAME}, "volumeSteps",5)));
} }
elsif($what eq "volumeStraight" and defined($a[2]) and $a[2] =~ /^-?\d+(?:\.\d)?$/) elsif($what eq "volumeStraight" and defined($a[2]) and $a[2] =~ /^-?\d+(?:\.\d+)?$/)
{ {
$target_volume = $a[2]; $target_volume = $a[2];
} }
@ -487,6 +487,9 @@ YAMAHA_AVR_Set($@)
$target_volume = -80.5 if(defined($target_volume) and $target_volume < -80.5); $target_volume = -80.5 if(defined($target_volume) and $target_volume < -80.5);
$target_volume = 16.5 if(defined($target_volume) and $target_volume > 16.5); $target_volume = 16.5 if(defined($target_volume) and $target_volume > 16.5);
# ensure $target_volume mod 0.5 == 0
$target_volume = int($target_volume / 0.5) * 0.5;
Log3 $name, 4, "YAMAHA_AVR ($name) - new target volume: $target_volume"; Log3 $name, 4, "YAMAHA_AVR ($name) - new target volume: $target_volume";
if(defined($target_volume)) if(defined($target_volume))