From a6c6f1bad4432aa79abb238a16b5dc13cf9ef6cc Mon Sep 17 00:00:00 2001 From: markusbloch <> Date: Tue, 31 Oct 2017 16:16:35 +0000 Subject: [PATCH] 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 --- FHEM/71_YAMAHA_AVR.pm | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/FHEM/71_YAMAHA_AVR.pm b/FHEM/71_YAMAHA_AVR.pm index 6650bedbf..78c8c45ee 100755 --- a/FHEM/71_YAMAHA_AVR.pm +++ b/FHEM/71_YAMAHA_AVR.pm @@ -457,19 +457,19 @@ YAMAHA_AVR_Set($@) { 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])); } 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))) { - $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]; } @@ -487,6 +487,9 @@ YAMAHA_AVR_Set($@) $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); + # 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"; if(defined($target_volume))