diff --git a/fhem/CHANGED b/fhem/CHANGED index 3b69e20b8..e567dd666 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,9 @@ # Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Do not insert empty lines here, update check depends on it. + - feature: 70_PIONEERAVR: new set hdmiOut <1/2>to switch hdmi outputs + - new set networkStandby (on|off) Needed to turn on/off... + - new readings hdmiOut, screenLineNumber[First,Last,Total] + - commandref reworked - bugfix: 73_km200; Floating point calculation error fixed - feature: 73_km200; Writing of complete week-list in one single set command - feature: 98_Text2Speech.pm; language now selectable diff --git a/fhem/FHEM/70_PIONEERAVR.pm b/fhem/FHEM/70_PIONEERAVR.pm index 0c158fee7..d947244a6 100644 --- a/fhem/FHEM/70_PIONEERAVR.pm +++ b/fhem/FHEM/70_PIONEERAVR.pm @@ -100,7 +100,7 @@ PIONEERAVR_Initialize($) { $hash->{WriteFn} = "PIONEERAVR_Write"; # $hash->{ReadyFn} = "PIONEERAVR_Ready"; $hash->{Clients} = ":PIONEERAVRZONE:"; - $hash->{ClearFn} = "PIONEERAVR_Clear"; + $hash->{ClearFn} = "PIONEERAVR_Clear"; # Normal devices $hash->{DefFn} = "PIONEERAVR_Define"; @@ -168,8 +168,15 @@ PIONEERAVR_Define($$) { # $hash->{helper}{INPUTNAMES} lists the default input names and their inputNr as provided by Pioneer. # This module tries to read those names and the alias names from the AVR receiver and tries to check if this input is enabled or disabled # So this list is just a fall back if the module can't read the names ... + # Additionally this module tries to get information from the Pioneer AVR + # - about the input level adjust + # - to which connector each input is connected. + # There are 3 groups of connectors: + # - Audio connectors (possible values are: ANALOG, COAX 1...3, OPT 1...3) + # - Component connectors (anaolog video, possible values: COMPONENT 1...3) + # - HDMI connectors (possible values are hdmi 1 ... hdmi 8) $hash->{helper}{INPUTNAMES} = { - "00" => {"name" => "phono", "aliasName" => "", "enabled" => "1", "inpuLevelAdjust" => 1}, + "00" => {"name" => "phono", "aliasName" => "", "enabled" => "1", "audioTerminal" => "No Assign", "componentTerminal" => "No Assign", "hdmiTerminal" => "No Assign", "inputLevelAdjust" => 1}, "01" => {"name" => "cd", "aliasName" => "", "enabled" => "1"}, "02" => {"name" => "tuner", "aliasName" => "", "enabled" => "1"}, "03" => {"name" => "cdrTape", "aliasName" => "", "enabled" => "1"}, @@ -357,6 +364,7 @@ PIONEERAVR_Define($$) { 'currentListNetwork' => '?GAH', 'display' => '?FL', 'eq' => '?ATC', + 'hdmiOut' => '?HO', 'input' => '?F', 'listeningMode' => '?S', 'listeningModePlaying' => '?L', @@ -692,6 +700,13 @@ PIONEERAVR_Define($$) { "0e01"=>"HDMI THROUGH", "0f01"=>"MULTI CH IN" }; + #translation for hdmiOut + $hash->{helper}{HDMIOUT} = { + "0"=>"1+2", + "1"=>"1", + "2"=>"2", + "3"=>"OFF" + }; # for some inputs (e.g. internetRadio) the Pioneer AVR gives more information about the current program # The information is displayed on a (to the Pioneer avr) connected screen @@ -729,7 +744,7 @@ PIONEERAVR_Define($$) { "33"=>"station" }; $hash->{helper}{SCREENTYPES} = { - "00"=>"Massage", + "00"=>"Message", "01"=>"List", "02"=>"Playing(Play)", "03"=>"Playing(Pause)", @@ -771,13 +786,16 @@ PIONEERAVR_Define($$) { "15"=>"screenLineType07", "16"=>"screenLineType08", "17"=>"screenLineHasFocus", - "17"=>"screenLineNumbers", - "18"=>"screenType", - "19"=>"screenName", - "20"=>"screenHierarchy", - "21"=>"screenTopMenuKey", - "22"=>"screenIpodKey", - "23"=>"screenReturnKey" + "18"=>"screenLineNumberFirst", + "19"=>"screenLineNumberLast", + "20"=>"screenLineNumberTotal", + "21"=>"screenLineNumbers", + "22"=>"screenType", + "23"=>"screenName", + "24"=>"screenHierarchy", + "25"=>"screenTopMenuKey", + "26"=>"screenIpodKey", + "27"=>"screenReturnKey" }; ### initialize timer @@ -903,6 +921,8 @@ PIONEERAVR_Set($@) my $list = "reopen:noArg on:noArg off:noArg toggle:noArg input:" . join(',', sort @listInputNames) + . " hdmiOut:" + . join(',', sort values (%{$hash->{helper}{HDMIOUT}})) . " inputUp:noArg inputDown:noArg" . " channelUp:noArg channelDown:noArg channelStraight" # . join(',', sort values ($hash->{helper}{TUNERCHANNELNAMES})) @@ -930,7 +950,8 @@ PIONEERAVR_Set($@) $list .= " play:noArg stop:noArg pause:noArg repeat:noArg shuffle:noArg prev:noArg next:noArg rev:noArg fwd:noArg up:noArg down:noArg"; $list .= " right:noArg left:noArg enter:noArg return:noArg menu:noArg"; $list .= " selectLine01:noArg selectLine02:noArg selectLine03:noArg selectLine04:noArg selectLine05:noArg selectLine06:noArg selectLine07:noArg selectLine08:noArg"; - } + } + $list .= " networkStandby:on,off"; if ( $cmd eq "?" ) { return SetExtensions($hash, $list, $name, $cmd, @args); @@ -971,9 +992,9 @@ PIONEERAVR_Set($@) #### we just "translate" the human readable command to the PioneerAvr command #### lookup in $hash->{helper}{SETS} if the command exists and what to write to PioneerAvr } elsif ( $cmd ~~ @setsWithoutArg ) { - Log3 $name, 5, "PIONEERAVR $name: Set $cmd (setsWithoutArg)"; my $setCmd= $hash->{helper}{SETS}{main}{$a[1]}; my $v= PIONEERAVR_Write($hash, $setCmd); + Log3 $name, 5, "PIONEERAVR $name: Set $cmd (setsWithoutArg): ". $a[1] ." -> $setCmd"; return undef; # statusRequest: execute all "get" commands to update the readings @@ -1044,6 +1065,20 @@ PIONEERAVR_Set($@) } return undef; + ####hdmiOut + } elsif ( $cmd eq "hdmiOut" ) { + Log3 $name, 5, "PIONEERAVR $name: set $cmd ".dq($arg); + foreach my $key ( keys %{$hash->{helper}{HDMIOUT}} ) { + if ( $hash->{helper}{LISTENINGMODES}->{$key} eq $arg ) { + Log3 $name, 5, "PIONEERAVR $name: set $cmd ".dq($arg)." -> found nr: ".$key." for HDMIOut ".dq($arg); + PIONEERAVR_Write($hash, sprintf "%dHO", $key); + return undef; + } + } + my $err= "PIONEERAVR $name: Error: unknown HDMI Out $cmd --- $arg !"; + Log3 $name, 3, $err; + return $err; + ####ListeningMode } elsif ( $cmd eq "listeningMode" ) { Log3 $name, 5, "PIONEERAVR $name: set $cmd ".dq($arg); @@ -1224,16 +1259,29 @@ PIONEERAVR_Set($@) } elsif ( $cmd eq "standingWave" ) { if ($arg eq "on") { PIONEERAVR_Write($hash, "1ATD"); -# readingsSingleUpdate($hash, "standingWave", "on", 1 ); } elsif ($arg eq "off") { PIONEERAVR_Write($hash, "0ATD"); -# readingsSingleUpdate($hash, "standingWave", "off", 1 ); } else { my $err= "PIONEERAVR $name: Error: unknown set ... standingWave argument: $arg !"; Log3 $name, 3, $err; return $err; } + + # Network standby (on|off) + # needs to be "on" to turn on the Pioneer AVR via this module + } elsif ( $cmd eq "networkStandby" ) { + if ($arg eq "on") { + PIONEERAVR_Write($hash, "1STJ"); + } + elsif ($arg eq "off") { + PIONEERAVR_Write($hash, "0STJ"); + } else { + my $err= "PIONEERAVR $name: Error: unknown set ... networkStandby argument: $arg !"; + Log3 $name, 3, $err; + return $err; + } + return undef; ####remoteControl } elsif ( $cmd eq "remoteControl" ) { @@ -1552,6 +1600,21 @@ sub PIONEERAVR_Read($) readingsBulkUpdate($hash, "signalSelect", $signalSelect ); Log3 $hash,5,"PIONEERAVR $name: ".dq($line) ." interpreted as: signalSelect: ". dq($signalSelect); } + # HDMI output + # 0:HDMI OUT 1+2 ON + # 1:HDMI OUT 1 ON + # 2:HDMI OUT 2 ON + # 3:HDMI OUT 1/2 OFF + # Listening Mode + } elsif ( $line =~ m/^(HO)(\d)$/ ) { + if ( defined ( $hash->{helper}{HDMIOUT}->{$2}) ) { + readingsBulkUpdate($hash, "hdmiOut", $hash->{helper}{HDMIOUT}->{$2} ); + Log3 $hash,5,"PIONEERAVR $name: ".dq($line) ." interpreted as: HDMI Out: ". dq($2); + } + else { + Log3 $hash,5,"PIONEERAVR $name: ".dq($line) ." interpreted as: unknown hdmiOut: ". dq($2); + } + # Speaker } elsif ( substr($line,0,3) eq "SPK" ) { my $speakers = substr($line,3,1); @@ -1645,6 +1708,7 @@ sub PIONEERAVR_Read($) Log3 $hash,5,"PIONEERAVR $name: ".dq($line) ." interpreted as: eq is off"; } + # standing wave } elsif ( $line =~ m/^ATD([0|1])/) { if ($1 == "1") { readingsBulkUpdate($hash, "standingWave", "on"); @@ -1654,6 +1718,10 @@ sub PIONEERAVR_Read($) readingsBulkUpdate($hash, "standingWave", "off"); Log3 $hash,5,"PIONEERAVR $name: ".dq($line) ." interpreted as: standingWave is off"; } + + # key received + } elsif ( $line =~ m/^NXA$/) { + Log3 $hash,5,"PIONEERAVR $name: ".dq($line) ." interpreted as: Network player: Key pressed"; # screen type and screen name } elsif ( $line =~ m/^(GCH|GCI)(\d{2})(\d)(\d)(\d)(\d)(\d)\"(.*)\"$/ ) { @@ -1696,6 +1764,12 @@ sub PIONEERAVR_Read($) readingsBulkUpdate($hash, "sourceInfo", $sourceInfo ); Log3 $hash,5,"PIONEERAVR $name: ".dq($line) ." interpreted as: Screen source information: $2 $sourceInfo"; + # total screen lines + } elsif ( $line =~ m/^(GDH)(\d{5})(\d{5})(\d{5})$/ ) { + readingsBulkUpdate($hash, "screenLineNumberFirst", $2+0 ); + readingsBulkUpdate($hash, "screenLineNumberLast", $3+0 ); + readingsBulkUpdate($hash, "screenLineNumbersTotal", $4+0 ); + Log3 $hash,5,"PIONEERAVR $name: ".dq($line) ." interpreted as: Screen Item number of line 1(5byte): $2, Item number of last line(5byte): $3, Total number of items List(5byte): $4 "; # Screen line numbers } elsif ( $line =~ m/^(GBH|GBI)(\d{2})$/ ) { @@ -1741,9 +1815,9 @@ sub PIONEERAVR_Read($) Log3 $hash,5,"PIONEERAVR $name: ".dq($line) ." interpreted as: screen line $2 ($screenLine) type: $lineDataType: " . dq($5); # for being coherent with http://www.fhemwiki.de/wiki/DevelopmentGuidelinesAV - if ($4 ~~ ["20", "21", "22"]) { + if ($4 eq "20" or $4 eq "21" or $4 eq "22") { readingsBulkUpdate($hash, $lineDataType, $5); - Log3 $hash,5,"PIONEERAVR $name: ".dq($line) ." interpreted as: displayDataType $lineDataType: " . dq($5); + Log3 $hash,5,"PIONEERAVR $name: ".dq($line) ." interpreted as: reading update for displayDataType $lineDataType: " . dq($5); } # Tuner channel names @@ -2123,8 +2197,8 @@ RC_layout_PioneerAVR() {

PIONEERAVR

Solange die Datenverbindung zwischen Fhem und dem Pioneer AV Receiver offen ist, kann kein anderes Gerät (z.B. ein Smartphone) auf dem gleichen Port eine Verbindung zum Pioneer AV Receiver herstellen. - Einige Pioneer AV Receiver bieten mehr als einen Port für die Datenverbindung an. + Einige Pioneer AV Receiver bieten mehr als einen Port für die Datenverbindung an. Pioneer empfiehlt Port 23 sowie 49152-65535, "Invalid number:00000,08102".

Define @@ -2352,7 +2436,7 @@ RC_layout_PioneerAVR() { Definiert ein Fhem device für einen Pioneer AV Receiver (Kommunikationsschnittstelle und Steuerung der Main - Zone). Die Schlüsselwörter telnet bzw. serial sind fix. Der Standard Port für die Ethernet Verbindung bei Pioneer AV Receiver ist 23 - (laut der oben angeführten Pioneer Dokumetation)
+ (laut der oben angeführten Pioneer Dokumentation) - oder 8102 (laut Fhem-Forumsberichten).
Note: PIONEERAVRZONE-Devices zur Steuerung der Zone2, Zone3 und/oder HD-Zone werden per autocreate beim Eintreffen der ersten Nachricht für eine der Zonen erzeugt.

@@ -2370,32 +2454,32 @@ RC_layout_PioneerAVR() { @@ -2462,52 +2559,91 @@ RC_layout_PioneerAVR() { + Falls unten keine Beschreibung für das "get-Kommando" angeführt ist, siehe gleichnamiges "Set-Kommando" +
  • loadInputNames - liest die Namen der Eingangsquellen vom Pioneer AV Receiver und überprüft, ob sie aktiviert sind
  • +
  • display - Aktualisiert das reading 'display' und 'displayPrevious' mit der aktuellen Anzeige des Displays Pioneer AV Receiver
  • +
  • bass - aktualisiert das reading 'bass'
  • +
  • channel -
  • +
  • currentListIpod - aktualisiert die readings currentAlbum, currentArtist, etc.
  • +
  • currentListNetwork -
  • +
  • input -
  • +
  • listeningMode -
  • +
  • listeningModePlaying -
  • +
  • macAddress -
  • +
  • avrModel - Versucht vom Pioneer AV Receiver die Modellbezeichnung (z.B. VSX923) einzulesen und im gleichnamigen reading abzuspeichern
  • +
  • mute -
  • +
  • networkPorts - Versucht vom Pioneer AV Receiver die offenen Ethernet Ports einzulesen und in den Readings networkPort1 ... networkPort4 abzuspeichern
  • +
  • networkSettings - Versucht vom Pioneer AV Receiver die Netzwerkparameter (IP, Gateway, Netmask, Proxy, DHCP, DNS1, DNS2) einzulesen und in Readings abzuspeichern
  • +
  • networkStandby -
  • +
  • power - Versucht vom Pioneer AV Receiver in Erfahrung zu bringen, ob die Main Zone eingeschaltet oder in Standby ist
  • +
  • signalSelect -
  • +
  • softwareVersion - Fragt den Pioneer AV Receiver nach der aktuell im Receiver verwendeten Software Version
  • +
  • speakers -
  • +
  • speakerSystem - Fragt die aktuell verwendete Lautsprecheranwendung vom Pioneer AV Receiver ab. Mögliche Werte sind z.B. "ZONE 2", "Normal(SB/FH)", "5.1ch C+Surr Bi-Amp",...
  • +
  • tone -
  • +
  • tunerFrequency - Fragt die aktuell eingestellte Frequenz des Tuners ab
  • +
  • tunerChannelNames - Sollten für die Tuner Presets Namen im Pioneer AV Receiver gespeichert sein, werden sie hiermit abgefragt
  • +
  • treble -
  • +
  • volume -
  • +

    Attribute



    - + Generated Readings/Events: +

    + +

    + =end html_DE =cut