From b88c95cdbf20fe6c4b59e4f6275e8903671db65f Mon Sep 17 00:00:00 2001 From: markusbloch <> Date: Sun, 18 May 2014 11:17:32 +0000 Subject: [PATCH] YAMAHA_AVR: new commands 3dCinemaDsp,adaptiveDrc,direct and sleep and corresponding readings; minor code optimizations. git-svn-id: https://svn.fhem.de/fhem/trunk@5884 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 2 +- fhem/FHEM/71_YAMAHA_AVR.pm | 446 ++++++++++++++++++++++++++----------- 2 files changed, 311 insertions(+), 137 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index 31961f4ec..7e3e26b0f 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -2,7 +2,7 @@ # Do not insert empty lines here, update check depends on it. - feature: YAMAHA_AVR: new set commands and readings for controlling the sound output behavior (Enhancer, DSP and straight - output). For details, see commandref. + output) and sleep timer. For details, see commandref. - bugfix: configdb filemove not working after previous changes - change: IMPORTANT CHANGES TO configDB! changed: all files will be imported as binary diff --git a/fhem/FHEM/71_YAMAHA_AVR.pm b/fhem/FHEM/71_YAMAHA_AVR.pm index 8eac09dbd..bf88ccdd2 100755 --- a/fhem/FHEM/71_YAMAHA_AVR.pm +++ b/fhem/FHEM/71_YAMAHA_AVR.pm @@ -95,7 +95,7 @@ YAMAHA_AVR_GetStatus($;$) } } - my $zone = YAMAHA_AVR_getZoneName($hash, $hash->{ACTIVE_ZONE}); + my $zone = YAMAHA_AVR_getParamName($hash, $hash->{ACTIVE_ZONE}, $hash->{helper}{ZONES}); if(not defined($zone)) { @@ -105,7 +105,7 @@ YAMAHA_AVR_GetStatus($;$) my $return = YAMAHA_AVR_SendCommand($hash, "<$zone>GetParam"); - Log3 $name, 4, "YAMAHA_AVR: GetStatus-Request returned: $return" if(defined($return)); + #Log3 $name, 4, "YAMAHA_AVR: GetStatus-Request returned: $return" if(defined($return)); if(not defined($return) or $return eq "") { @@ -278,6 +278,37 @@ YAMAHA_AVR_GetStatus($;$) readingsBulkUpdate($hash, "dsp", YAMAHA_AVR_Param2Fhem($1, 0)); } + if($return =~ /.*?<_3D_Cinema_DSP>(.+?)<\/_3D_Cinema_DSP>*?<\/Surround>/) + { + readingsBulkUpdate($hash, "3dCinemaDsp", lc($1)); + } + + if($return =~ /.*?(.+?)<\/Adaptive_DRC>.*?<\/Sound_Video>/) + { + readingsBulkUpdate($hash, "adaptiveDrc", lc($1)); + } + + if($return =~ /.*?(.+?)<\/Sleep>.*?<\/Power_Control>/) + { + readingsBulkUpdate($hash, "sleep", YAMAHA_AVR_Param2Fhem($1, 0)); + } + + if($return =~ /.*?.*?(.+?)<\/Mode>.*?<\/Direct>.*?<\/Sound_Video>/) + { + readingsBulkUpdate($hash, "direct", lc($1)); + $hash->{helper}{DIRECT_TAG} = "Direct"; + } + elsif($return =~ /.*?.*?(.+?)<\/Mode>.*?<\/Pure_Direct>.*?<\/Sound_Video>/) + { + readingsBulkUpdate($hash, "direct", lc($1)); + $hash->{helper}{DIRECT_TAG} = "Pure_Direct"; + } + else + { + delete($hash->{helper}{DIRECT_TAG}) if(exists($hash->{helper}{DIRECT_TAG})); + } + + readingsEndUpdate($hash, 1); @@ -350,7 +381,7 @@ YAMAHA_AVR_Set($@) YAMAHA_AVR_getInputs($hash); } - my $zone = YAMAHA_AVR_getZoneName($hash, $hash->{ACTIVE_ZONE}); + my $zone = YAMAHA_AVR_getParamName($hash, $hash->{ACTIVE_ZONE}, $hash->{helper}{ZONES}); my $inputs_piped = defined($hash->{helper}{INPUTS}) ? YAMAHA_AVR_Param2Fhem(lc($hash->{helper}{INPUTS}), 0) : "" ; my $inputs_comma = defined($hash->{helper}{INPUTS}) ? YAMAHA_AVR_Param2Fhem(lc($hash->{helper}{INPUTS}), 1) : "" ; @@ -367,7 +398,7 @@ YAMAHA_AVR_Set($@) return "No Argument given" if(!defined($a[1])); my $what = $a[1]; - my $usage = "Unknown argument $what, choose one of on:noArg off:noArg volumeStraight:slider,-80,1,16 volume:slider,0,1,100 volumeUp volumeDown input:".$inputs_comma." mute:on,off,toggle remoteControl:setup,up,down,left,right,return,option,display,tunerPresetUp,tunerPresetDown,enter ".(defined($hash->{helper}{SCENES})?"scene:".$scenes_comma." ":"").($hash->{helper}{SELECTED_ZONE} eq "mainzone" ? "straight:on,off ".(defined($hash->{helper}{SCENES}) ? "dsp:".$dsp_modes_comma." " : "")." enhancer:on,off " : "")."statusRequest:noArg"; + my $usage = "Unknown argument $what, choose one of on:noArg off:noArg volumeStraight:slider,-80,1,16 volume:slider,0,1,100 volumeUp volumeDown input:".$inputs_comma." mute:on,off,toggle remoteControl:setup,up,down,left,right,return,option,display,tunerPresetUp,tunerPresetDown,enter ".(defined($hash->{helper}{SCENES})?"scene:".$scenes_comma." ":"").($hash->{helper}{SELECTED_ZONE} eq "mainzone" ? "straight:on,off 3dCinemaDsp:off,auto adaptiveDrc:off,auto ".(exists($hash->{helper}{DIRECT_TAG}) ? "direct:on,off " : "").(exists($hash->{helper}{DSP_MODES}) ? "dsp:".$dsp_modes_comma." " : "")." enhancer:on,off " : "")."sleep:off,30min,60min,90min,120min,last statusRequest:noArg"; # Depending on the status response, use the short or long Volume command @@ -415,7 +446,7 @@ YAMAHA_AVR_Set($@) { if($a[2] =~ /^($inputs_piped)$/) { - $command = YAMAHA_AVR_getParam($hash, $a[2], $hash->{helper}{INPUTS}); + $command = YAMAHA_AVR_getParamName($hash, $a[2], $hash->{helper}{INPUTS}); if(defined($command) and length($command) > 0) { $result = YAMAHA_AVR_SendCommand($hash, "<$zone>".$command.""); @@ -603,7 +634,7 @@ YAMAHA_AVR_Set($@) } } elsif($what eq "dsp") - { + { if(defined($a[2])) { @@ -611,122 +642,259 @@ YAMAHA_AVR_Set($@) { if($a[2] =~ /^($dsp_modes_piped)$/) { - $command = YAMAHA_AVR_getParamName($hash, $a[2],$hash->{helper}{DSP_MODES}); - if(defined($command) and length($command) > 0) - { - $result = YAMAHA_AVR_SendCommand($hash, "<$zone>$command"); - } - else - { - return "invalid dsp mode: ".$a[2]; - } + $command = YAMAHA_AVR_getParamName($hash, $a[2],$hash->{helper}{DSP_MODES}); + if(defined($command) and length($command) > 0) + { + $result = YAMAHA_AVR_SendCommand($hash, "<$zone>$command"); + } + else + { + return "invalid dsp mode: ".$a[2]; + } - if(not $result =~ /RC="0"/) - { - # if the returncode isn't 0, than the command was not successful - return "Could not set dsp mode to ".$a[2]."."; - } - } - else - { - return $usage; - } - } - else - { - return "No DSP presets are avaible. Please try an statusUpdate."; - } - } - else - { - return $dsp_modes_piped eq "" ? "No dsp presets are available. Please try an statusUpdate." : "No dsp preset was given"; - } + if(not $result =~ /RC="0"/) + { + # if the returncode isn't 0, than the command was not successful + return "Could not set dsp mode to ".$a[2]."."; + } + } + else + { + return $usage; + } + } + else + { + return "No DSP presets are avaible. Please try an statusUpdate."; + } + } + else + { + return $dsp_modes_piped eq "" ? "No dsp presets are available. Please try an statusUpdate." : "No dsp preset was given"; + } } elsif($what eq "straight") - { + { + + $result = undef; + if($a[2] eq "on") - { - YAMAHA_AVR_SendCommand($hash, "<$zone>On"); - } - elsif($a[2] eq "off") - { - YAMAHA_AVR_SendCommand($hash, "<$zone>Off"); - } + { + $result = YAMAHA_AVR_SendCommand($hash, "<$zone>On"); + } + elsif($a[2] eq "off") + { + $result = YAMAHA_AVR_SendCommand($hash, "<$zone>Off"); + } + else + { + return $usage; + } + + if(not defined($result) or not $result =~ /RC="0"/) + { + # if the returncode isn't 0, than the command was not successful + return "Could not set straight to ".$a[2]."."; + } + } + elsif($what eq "3dCinemaDsp") + { + + $result = undef; + + if($a[2] eq "auto") + { + $result = YAMAHA_AVR_SendCommand($hash, "<$zone><_3D_Cinema_DSP>Auto"); + } + elsif($a[2] eq "off") + { + $result = YAMAHA_AVR_SendCommand($hash, "<$zone><_3D_Cinema_DSP>Off"); + } + else + { + return $usage; + } + + if(not defined($result) or not $result =~ /RC="0"/) + { + # if the returncode isn't 0, than the command was not successful + return "Could not set 3dCinemaDsp to ".$a[2]."."; + } + } + elsif($what eq "adaptiveDrc") + { + + $result = undef; + + if($a[2] eq "auto") + { + $result = YAMAHA_AVR_SendCommand($hash, "<$zone>Auto"); + } + elsif($a[2] eq "off") + { + $result = YAMAHA_AVR_SendCommand($hash, "<$zone>Off"); + } + else + { + return $usage; + } + + if(not defined($result) or not $result =~ /RC="0"/) + { + # if the returncode isn't 0, than the command was not successful + return "Could not set adaptiveDrc to ".$a[2]."."; + } } elsif($what eq "enhancer") - { + { + + $result = undef; + if($a[2] eq "on") - { - YAMAHA_AVR_SendCommand($hash, "<$zone>On"); - } - elsif($a[2] eq "off") - { - YAMAHA_AVR_SendCommand($hash, "<$zone>Off"); - } + { + $result = YAMAHA_AVR_SendCommand($hash, "<$zone>On"); + } + elsif($a[2] eq "off") + { + $result = YAMAHA_AVR_SendCommand($hash, "<$zone>Off"); + } + else + { + return $usage; + } + + if(not defined($result) or not $result =~ /RC="0"/) + { + # if the returncode isn't 0, than the command was not successful + return "Could not set enhancer to ".$a[2]."."; + } } - elsif($what eq "remoteControl") + elsif($what eq "direct" and exists($hash->{helper}{DIRECT_TAG})) + { + + $result = undef; + + if($a[2] eq "on") + { + $result = YAMAHA_AVR_SendCommand($hash, "<$zone><".$hash->{helper}{DIRECT_TAG}.">On{helper}{DIRECT_TAG}.">"); + } + elsif($a[2] eq "off") + { + $result = YAMAHA_AVR_SendCommand($hash, "<$zone><".$hash->{helper}{DIRECT_TAG}.">Off{helper}{DIRECT_TAG}.">"); + } + else + { + return $usage; + } + + if(not defined($result) or not $result =~ /RC="0"/) + { + # if the returncode isn't 0, than the command was not successful + return "Could not set direct to ".$a[2]."."; + } + } + elsif($what eq "sleep") { + $result = undef; + + if($a[2] eq "off") + { + $result = YAMAHA_AVR_SendCommand($hash, "<$zone>Off"); + } + elsif($a[2] eq "30min") + { + $result = YAMAHA_AVR_SendCommand($hash, "<$zone>30 min"); + } + elsif($a[2] eq "60min") + { + $result = YAMAHA_AVR_SendCommand($hash, "<$zone>60 min"); + } + elsif($a[2] eq "90min") + { + $result = YAMAHA_AVR_SendCommand($hash, "<$zone>90 min"); + } + elsif($a[2] eq "120min") + { + $result = YAMAHA_AVR_SendCommand($hash, "<$zone>120 min"); + } + elsif($a[2] eq "last") + { + $result = YAMAHA_AVR_SendCommand($hash, "<$zone>Last"); + } + else + { + return $usage; + } + + if(not defined($result) or not $result =~ /RC="0"/) + { + # if the returncode isn't 0, than the command was not successful + return "Could not set sleep timer to ".$a[2]."."; + } + } + elsif($what eq "remoteControl") + { + + # the RX-Vx75 series use a different tag name to access the remoteControl commands + my $control_tag = ($hash->{MODEL} =~ /RX-V\d75/ ? "Cursor_Control" : "List_Control"); - # the RX-Vx75 series use a different tag name to access the remoteControl commands - my $control_tag = ($hash->{MODEL} =~ /RX-V\d75/ ? "Cursor_Control" : "List_Control"); - - if($a[2] eq "up") - { - YAMAHA_AVR_SendCommand($hash, "<$zone><$control_tag>Up"); - } - elsif($a[2] eq "down") - { - YAMAHA_AVR_SendCommand($hash, "<$zone><$control_tag>Down"); - } - elsif($a[2] eq "left") - { - YAMAHA_AVR_SendCommand($hash, "<$zone><$control_tag>Left"); - } - elsif($a[2] eq "right") - { - YAMAHA_AVR_SendCommand($hash, "<$zone><$control_tag>Right"); - } - elsif($a[2] eq "display") - { - YAMAHA_AVR_SendCommand($hash,"<$zone><$control_tag>Display"); - } - elsif($a[2] eq "return") - { - YAMAHA_AVR_SendCommand($hash,"<$zone><$control_tag>Return"); - } - elsif($a[2] eq "enter") - { - YAMAHA_AVR_SendCommand($hash,"<$zone><$control_tag>Sel"); - } - elsif($a[2] eq "setup") - { - YAMAHA_AVR_SendCommand($hash,"<$zone><$control_tag>On Screen"); - } - elsif($a[2] eq "option") - { - YAMAHA_AVR_SendCommand($hash,"<$zone><$control_tag>Option"); - } - elsif($a[2] eq "tunerPresetUp") - { - YAMAHA_AVR_SendCommand($hash,"Up"); - } - elsif($a[2] eq "tunerPresetDown") - { - YAMAHA_AVR_SendCommand($hash,"Down"); - } - else - { - return $usage; - } - } - elsif($what eq "statusRequest") - { - # Will be executed anyway on the end of the function - } - else - { - return $usage; - } + if($a[2] eq "up") + { + YAMAHA_AVR_SendCommand($hash, "<$zone><$control_tag>Up"); + } + elsif($a[2] eq "down") + { + YAMAHA_AVR_SendCommand($hash, "<$zone><$control_tag>Down"); + } + elsif($a[2] eq "left") + { + YAMAHA_AVR_SendCommand($hash, "<$zone><$control_tag>Left"); + } + elsif($a[2] eq "right") + { + YAMAHA_AVR_SendCommand($hash, "<$zone><$control_tag>Right"); + } + elsif($a[2] eq "display") + { + YAMAHA_AVR_SendCommand($hash,"<$zone><$control_tag>Display"); + } + elsif($a[2] eq "return") + { + YAMAHA_AVR_SendCommand($hash,"<$zone><$control_tag>Return"); + } + elsif($a[2] eq "enter") + { + YAMAHA_AVR_SendCommand($hash,"<$zone><$control_tag>Sel"); + } + elsif($a[2] eq "setup") + { + YAMAHA_AVR_SendCommand($hash,"<$zone><$control_tag>On Screen"); + } + elsif($a[2] eq "option") + { + YAMAHA_AVR_SendCommand($hash,"<$zone><$control_tag>Option"); + } + elsif($a[2] eq "tunerPresetUp") + { + YAMAHA_AVR_SendCommand($hash,"Up"); + } + elsif($a[2] eq "tunerPresetDown") + { + YAMAHA_AVR_SendCommand($hash,"Down"); + } + else + { + return $usage; + } + } + elsif($what eq "statusRequest") + { + # Will be executed anyway on the end of the function + } + else + { + return $usage; + } # Call the GetStatus() Function to retrieve the new values after setting something (with local flag, so the internal timer is not getting interupted) @@ -792,7 +960,7 @@ YAMAHA_AVR_Define($$) # In case of a redefine, check the zone parameter if the specified zone exist, otherwise use the main zone if(defined($hash->{helper}{ZONES}) and length($hash->{helper}{ZONES}) > 0) { - if(defined(YAMAHA_AVR_getZoneName($hash, lc $hash->{helper}{SELECTED_ZONE}))) + if(defined(YAMAHA_AVR_getParamName($hash, lc $hash->{helper}{SELECTED_ZONE}, $hash->{helper}{ZONES}))) { $hash->{ACTIVE_ZONE} = lc $hash->{helper}{SELECTED_ZONE}; @@ -944,14 +1112,6 @@ sub YAMAHA_AVR_Param2Fhem($$) } -############################# -# Returns the Yamaha Zone Name for the FHEM like zone attribute -sub YAMAHA_AVR_getZoneName($$) -{ - my ($hash, $zone) = @_; - return YAMAHA_AVR_getParamName($hash, $zone, $hash->{helper}{ZONES}); - -} ############################# @@ -1038,6 +1198,8 @@ sub YAMAHA_AVR_getModel($) return undef unless(defined($response)); + delete($hash->{helper}{ZONES}) if(exists($hash->{helper}{ZONES})); + while($response =~ //gc) { if(defined($hash->{helper}{ZONES}) and length($hash->{helper}{ZONES}) > 0) @@ -1049,6 +1211,7 @@ sub YAMAHA_AVR_getModel($) } + delete( $hash->{helper}{DSP_MODES}) if(exists($hash->{helper}{DSP_MODES})); if($response =~ /.*?(.+?)<\/Get>/) { @@ -1071,11 +1234,11 @@ sub YAMAHA_AVR_getModel($) # $hash->{helper}{ZONES} .= "|Zone_2"; $hash->{ZONES_AVAILABLE} = YAMAHA_AVR_Param2Fhem($hash->{helper}{ZONES}, 1); - + # if explicitly given in the define command, set the desired zone - if(defined(YAMAHA_AVR_getZoneName($hash, lc $hash->{helper}{SELECTED_ZONE}))) + if(defined(YAMAHA_AVR_getParamName($hash, lc $hash->{helper}{SELECTED_ZONE}, $hash->{helper}{ZONES}))) { - Log3 $name, 4, "YAMAHA_AVR: using zone ".YAMAHA_AVR_getZoneName($hash, lc $hash->{helper}{SELECTED_ZONE}); + Log3 $name, 4, "YAMAHA_AVR: using zone ".YAMAHA_AVR_getParamName($hash, lc $hash->{helper}{SELECTED_ZONE}, $hash->{helper}{ZONES}); $hash->{ACTIVE_ZONE} = lc $hash->{helper}{SELECTED_ZONE}; } else @@ -1111,8 +1274,8 @@ sub YAMAHA_AVR_getInputs($) my ($hash) = @_; my $name = $hash->{NAME}; my $address = $hash->{helper}{ADDRESS}; - - my $zone = YAMAHA_AVR_getZoneName($hash, $hash->{ACTIVE_ZONE}); + + my $zone = YAMAHA_AVR_getParamName($hash, $hash->{ACTIVE_ZONE}, $hash->{helper}{ZONES}); return undef if (not defined($zone) or $zone eq ""); @@ -1126,11 +1289,8 @@ sub YAMAHA_AVR_getInputs($) return undef unless (defined($response)); - delete($hash->{helper}{INPUTS}) if(defined($hash->{helper}{INPUTS})); - - while($response =~ /(.+?)<\/Param>/gc) { if(defined($hash->{helper}{INPUTS}) and length($hash->{helper}{INPUTS}) > 0) @@ -1147,11 +1307,9 @@ sub YAMAHA_AVR_getInputs($) # query all available scenes $response = YAMAHA_AVR_SendCommand($hash, "<$zone>GetParam", 5); - delete($hash->{helper}{SCENES}) if(defined($hash->{helper}{SCENES})); - return undef unless (defined($response)); - + delete($hash->{helper}{SCENES}) if(defined($hash->{helper}{SCENES})); # get all available scenes from response while($response =~ /.*?(.+?)<\/Param>.*?(\w+)<\/RW>.*?<\/Item_\d+>/gc) @@ -1313,7 +1471,11 @@ sub YAMAHA_AVR_html2txt($)
  • mute on|off|toggle   -   activates volume mute
  • dsp hallinmunich,hallinvienna,...   -   sets the DSP mode to the given preset
  • enhancer on|off   -   controls the internal sound enhancer
  • -
  • straight on|off   -   bypasses all sound enhancement features and plays the sound straight directly
  • +
  • 3dCinemaDsp auto|off   -   controls the CINEMA DSP 3D mode
  • +
  • adaptiveDrc auto|off   -   controls the Adaptive DRC
  • +
  • straight on|off   -   bypasses the internal codec converter and plays the original sound codec
  • +
  • direct on|off   -   bypasses all internal sound enhancement features and plays the sound straight directly
  • +
  • sleep off,30min,60min,...,last   -   activates the internal sleep timer
  • statusRequest   -   requests the current status of the device
  • remoteControl up,down,...   -   sends remote control commands as listed below
  • @@ -1414,16 +1576,20 @@ sub YAMAHA_AVR_html2txt($) Generated Readings/Events:
      +
    • 3dCinemaDsp - The status of the CINEMA DSP 3D mode (can be "auto" or "off")
    • +
    • adaptiveDrc - The status of the Adaptive DRC (can be "auto" or "off")
    • dsp - The current selected DSP mode for sound output
    • +
    • direct - indicates if all sound enhancement features are bypassed or not ("on" => all features are bypassed, "off" => sound enhancement features are used).
    • enhancer - The status of the internal sound enhancer (can be "on" or "off")
    • input - The selected input source according to the FHEM input commands
    • inputName - The input description as seen on the receiver display
    • mute - Reports the mute status of the receiver or zone (can be "on" or "off")
    • power - Reports the power status of the receiver or zone (can be "on" or "off")
    • presence - Reports the presence status of the receiver or zone (can be "absent" or "present"). In case of an absent device, it cannot be controlled via FHEM anymore.
    • -
    • straight - indicates if all sound enhancement features are bypassed or not ("on" => all features are bypassed, "off" => sound enhancement features are used).
    • volume - Reports the current volume level of the receiver or zone in percentage values (between 0 and 100 %)
    • volumeStraight - Reports the current volume level of the receiver or zone in decibel values (between -80.5 and +15.5 dB)
    • +
    • sleep - indicates if the internal sleep timer is activated or not.
    • +
    • straight - indicates if the internal sound codec converter is bypassed or not (can be "on" or "off")
    • state - Reports the current power state and an absence of the device (can be "on", "off" or "absent")


    • Input dependent Readings/Events:
    • currentChannel - Number of the input channel (SIRIUS only)
    • @@ -1525,6 +1691,9 @@ sub YAMAHA_AVR_html2txt($)
    • off   -   Schaltet den Receiver aus
    • dsp hallinmunich,hallinvienna,...   -   Aktiviert das entsprechende DSP Preset
    • enhancer on,off   -   Aktiviert den Sound Enhancer für einen verbesserten Raumklang
    • +
    • 3dCinemaDsp auto,off   -   Aktiviert den CINEMA DSP 3D Modus
    • +
    • adaptiveDrc auto,off   -   Aktiviert Adaptive DRC
    • +
    • direct on,off   -   Umgeht alle internen soundverbessernden Maßnahmen (Equalizer, Enhancer, Adaptive DRC,...) und gibt das Signal unverfälscht wieder
    • input hdmi1,hdmiX,...   -   Wählt den Eingangskanal (es werden nur die tatsächlich verfügbaren Eingänge angeboten)
    • scene scene1,sceneX   -   Wählt eine vorgefertigte Szene aus
    • volume 0...100   -   Setzt die Lautstärke in Prozent (0 bis 100%)
    • @@ -1532,7 +1701,8 @@ sub YAMAHA_AVR_html2txt($)
    • volumeUp [0...100]   -   Erhöht die Lautstärke um 5% oder entsprechend dem Attribut volumeSteps (optional kann der Wert auch als Argument angehangen werden, dieser hat dann Vorang)
    • volumeDown [0...100]   -   Veringert die Lautstärke um 5% oder entsprechend dem Attribut volumeSteps (optional kann der Wert auch als Argument angehangen werden, dieser hat dann Vorang)
    • mute on,off,toggle   -   Schaltet den Receiver stumm
    • -
    • straight on,off   -   Gibt das Signal direkt und unverändert aus (ohne DSP und Enhancer).
    • +
    • straight on,off   -   Umgeht die interne Codec-Umwandlung und gibt den Original-Codec wieder.
    • +
    • sleep off,30min,60min,...,last   -   Aktiviert den internen Sleep-Timer zum automatischen Abschalten
    • statusRequest   -   Fragt den aktuell Status des Receivers ab
    • remoteControl up,down,...   -   Sendet Fernbedienungsbefehle wie im nächsten Abschnitt beschrieben
    @@ -1629,6 +1799,8 @@ sub YAMAHA_AVR_html2txt($) Generierte Readings/Events:
      +
    • 3dCinemaDsp - Der Status des CINEMA DSP 3D-Modus ("auto" => an, "off" => aus)
    • +
    • adaptiveDrc - Der Status des Adaptive DRC ("auto" => an, "off" => aus)
    • dsp - Das aktuell aktive DSP Preset
    • enhancer - Der Status des Enhancers ("on" => an, "off" => aus)
    • input - Der ausgewählte Eingang entsprechend dem FHEM-Kommando
    • @@ -1638,7 +1810,9 @@ sub YAMAHA_AVR_html2txt($)
    • presence - Die aktuelle Empfangsbereitschaft ("present" => empfangsbereit, "absent" => nicht empfangsbereit, z.B. Stromausfall)
    • volume - Der aktuelle Lautstärkepegel in Prozent (zwischen 0 und 100 %)
    • volumeStraight - Der aktuelle Lautstärkepegel in Dezibel (zwischen -80.0 und +15 dB)
    • -
    • straight - Zeigt an, ob soundverbessernde Features umgangen werden oder nicht ("on" => soundverbessernde Features werden umgangen, "off" => soundverbessernde Features werden benutzt)
    • +
    • direct - Zeigt an, ob soundverbessernde Features umgangen werden oder nicht ("on" => soundverbessernde Features werden umgangen, "off" => soundverbessernde Features werden benutzt)
    • +
    • straight - Zeigt an, ob die interne Codec Umwandlung umgangen wird oder nicht ("on" => Codec Umwandlung wird umgangen, "off" => Codec Umwandlung wird benutzt)
    • +
    • sleep - Zeigt den Status des internen Sleep-Timers an
    • state - Der aktuelle Schaltzustand (power-Reading) oder die Abwesenheit des Gerätes (mögliche Werte: "on", "off" oder "absent")


    • Eingangsabhängige Readings/Events:
    • currentChannel - Nummer des Eingangskanals (nur bei SIRIUS)