diff --git a/docs/PRACTICALITIES.md b/docs/PRACTICALITIES.md index e3e672a..9a134af 100644 --- a/docs/PRACTICALITIES.md +++ b/docs/PRACTICALITIES.md @@ -13,7 +13,7 @@ There seem to be 2 situations where zones have a fixed volume. For the second case the zone still reports the VOL function which can be read and does _not_ give errors when trying to change the volume (I would have expected @RESTRICTED). There are no response/updates on trying to change the volume (as it is fixed). It is unknown which setting causes the volume to become fixed. -For reference, the AV Control Android app also shows volume controls for zone2 which do not work. +For reference, the AV Control Android app also shows volume controls for Zone2 which do not work. The webinterface on the receiver however shows the text "FIXED" for the volume on Zone2 This is based on observations on RX-A810 firmware 1.80/2.01. @@ -32,8 +32,7 @@ See https://github.com/mvdwetering/yamaha_ynca/issues/19 for logs. Currently known receivers that behave like this: - RX-V475 1.34/2.06 (probably also RX-V575/HTR-4066/HTR-5066 as they share the same firmware -Potential workaround would be to send the remote codes for SCENE1 etc... -The remote codes works for my receiver, but I have not had feedback from an RX-V475 user. +As a workaround the remote codes for SCENE1 etc... can be sent. This works at least on RX-V475 based on user feedback. ## No Zone and Scene names @@ -122,7 +121,7 @@ Some receivers have a single audio input and that input is called AUDIO. Receive Seen on RX-V475 receiver in [issue #230](https://github.com/mvdwetering/yamaha_ynca/issues/230), but probably also applies to RX-V575/HTR-4066/HTR-5066 as they share the same firmware. -For some reason this input is _not_ reported when requesting the input names with `@SYS:INPNAME=?` (unlike AUDIO1, AUDIO2 inputs). This makes it impossible to automatically detect if the input is supported by the receiver. The receiver does respond with `@RESTRICTED` when requesting `@SYS:INPNAMEAUDIO1=?` or `@SYS:TRIG1INPAUDIO1=?` instead of `@UNDEFINED`. However these responses are currently not really handled by the library and building support for that will be hard as there is not a guarenteed request/response mechanism due to the asynchronous nature of the protocol. +For some reason this input is _not_ reported when requesting the input names with `@SYS:INPNAME=?` (unlike AUDIO1, AUDIO2 inputs). This makes it impossible to automatically detect if the input is supported by the receiver. The receiver does respond with `@RESTRICTED` when requesting `@SYS:INPNAMEAUDIO1=?` or `@SYS:TRIG1INPAUDIO1=?` instead of `@UNDEFINED`. However these responses are currently not really handled by the library. ~~Building support for that will be hard as there is not a guarenteed request/response mechanism due to the asynchronous nature of the protocol~~ (not true, a GET will result in a response or error). ## Zone A/B receivers @@ -138,7 +137,7 @@ Zone A/B are just "speakersets" where A is the normal set of speakers and B is a On the API, these are controlled with these functions `@MAIN:SPEAKERA` and `@MAIN:SPEAKERB`. -e.g. RX-V573 +e.g. RX-V573? ### Subzone @@ -148,7 +147,7 @@ This zone can be powered individually from the MAIN zone, but will always have t Reason for calling it a subzone is that its functions are exposed on the MAIN subunit. -On the API, this subzone is controlled by the following functions. Note that Mute only supports On/Off +On the API, this subzone is controlled by the following functions. Note that Mute only supports On/Off, not the attenuated ones on the main Mute ``` @MAIN:PWRB @MAIN:ZONEBAVAIL @@ -158,3 +157,11 @@ On the API, this subzone is controlled by the following functions. Note that Mut ``` Note that this variant also has the `@MAIN:SPEAKERA/B` functions. But when controlling the SPEAKERB it will power on/off ZoneB (assumption is that it works the same for SPEAKERA/MAIN zone PWR). So when implementing a client these should probably be hidden/ignored. + +## BASIC Response + +The BASIC response returns a lot of values with 1 request which is nice to speed up things. +However the set of values that comes back is not stable between receivers. + +Initially it was assumed that it would always respond with all supported features. +But at least for PUREDIRMODE this is not the case. It is supported on RX-V1067, but not part of BASIC response. diff --git a/logs/RX-V1067.txt b/logs/RX-V1067.txt new file mode 100644 index 0000000..9052bcb --- /dev/null +++ b/logs/RX-V1067.txt @@ -0,0 +1,296 @@ + "communication": { + "initialization": [ + "Send: @SYS:MODELNAME=?", + "Received: @SYS:MODELNAME=RX-V1067", + "Send: @SYS:MODELNAME=?", + "Received: @SYS:MODELNAME=RX-V1067", + "Send: @SYS:AVAIL=?", + "Received: @UNDEFINED", + "Send: @MAIN:AVAIL=?", + "Received: @MAIN:AVAIL=Ready", + "Send: @ZONE2:AVAIL=?", + "Received: @ZONE2:AVAIL=Not Ready", + "Send: @ZONE3:AVAIL=?", + "Received: @RESTRICTED", + "Send: @ZONE4:AVAIL=?", + "Received: @RESTRICTED", + "Send: @AIRPLAY:AVAIL=?", + "Received: @UNDEFINED", + "Send: @BT:AVAIL=?", + "Received: @BT:AVAIL=Not Connected", + "Send: @DAB:AVAIL=?", + "Received: @UNDEFINED", + "Send: @IPOD:AVAIL=?", + "Received: @IPOD:AVAIL=Not Connected", + "Send: @IPODUSB:AVAIL=?", + "Received: @UNDEFINED", + "Send: @NAPSTER:AVAIL=?", + "Received: @NAPSTER:AVAIL=Not Ready", + "Send: @NETRADIO:AVAIL=?", + "Received: @NETRADIO:AVAIL=Not Ready", + "Send: @PANDORA:AVAIL=?", + "Received: @RESTRICTED", + "Send: @PC:AVAIL=?", + "Received: @PC:AVAIL=Not Ready", + "Send: @RHAP:AVAIL=?", + "Received: @RESTRICTED", + "Send: @SIRIUS:AVAIL=?", + "Received: @RESTRICTED", + "Send: @SIRIUSIR:AVAIL=?", + "Received: @RESTRICTED", + "Send: @SIRIUSXM:AVAIL=?", + "Received: @UNDEFINED", + "Send: @SERVER:AVAIL=?", + "Received: @UNDEFINED", + "Send: @SPOTIFY:AVAIL=?", + "Received: @UNDEFINED", + "Send: @TUN:AVAIL=?", + "Received: @TUN:AVAIL=Not Ready", + "Send: @UAW:AVAIL=?", + "Received: @UAW:AVAIL=Not Connected", + "Send: @USB:AVAIL=?", + "Received: @USB:AVAIL=Not Connected", + "Send: @SYS:VERSION=?", + "Received: @SYS:VERSION=3.70/2.01", + "Send: @SYS:AVAIL=?", + "Received: @UNDEFINED", + "Send: @SYS:HDMIOUT1=?", + "Received: @UNDEFINED", + "Send: @SYS:HDMIOUT2=?", + "Received: @UNDEFINED", + "Send: @SYS:HDMIOUT3=?", + "Received: @UNDEFINED", + "Send: @SYS:INPNAME=?", + "Received: @SYS:INPNAMEMULTICH=MULTI CH", + "Received: @SYS:INPNAMEPHONO=PHONO", + "Received: @SYS:INPNAMEAV1=AV1", + "Received: @SYS:INPNAMEAV2=AV2", + "Received: @SYS:INPNAMEAV3=AV3", + "Received: @SYS:INPNAMEAV4=AV4", + "Received: @SYS:INPNAMEAV5=AV5", + "Received: @SYS:INPNAMEAV6=AV6", + "Received: @SYS:INPNAMEAV7=AV7", + "Received: @SYS:INPNAMEVAUX=V-AUX", + "Received: @SYS:INPNAMEAUDIO1=AUDIO1", + "Received: @SYS:INPNAMEAUDIO2=AUDIO2", + "Received: @SYS:INPNAMEAUDIO3=AUDIO3", + "Received: @SYS:INPNAMEAUDIO4=AUDIO4", + "Received: @SYS:INPNAMEDOCK=DOCK", + "Received: @SYS:INPNAMEUSB=USB", + "Send: @SYS:MODELNAME=?", + "Received: @SYS:MODELNAME=RX-V1067", + "Send: @SYS:PARTY=?", + "Received: @SYS:PARTY=Off", + "Send: @SYS:PARTYMUTE=?", + "Send: @SYS:PWR=?", + "Received: @SYS:PWR=On", + "Send: @SYS:VERSION=?", + "Received: @SYS:VERSION=3.70/2.01", + "Send: @BT:AVAIL=?", + "Received: @BT:AVAIL=Not Connected", + "Send: @SYS:VERSION=?", + "Received: @SYS:VERSION=3.70/2.01", + "Send: @IPOD:METAINFO=?", + "Received: @IPOD:ARTIST=", + "Received: @IPOD:ALBUM=", + "Received: @IPOD:SONG=", + "Send: @IPOD:AVAIL=?", + "Received: @IPOD:AVAIL=Not Connected", + "Send: @IPOD:PLAYBACKINFO=?", + "Received: @IPOD:PLAYBACKINFO=Stop", + "Send: @IPOD:REPEAT=?", + "Received: @IPOD:REPEAT=Off", + "Send: @IPOD:SHUFFLE=?", + "Received: @IPOD:SHUFFLE=Off", + "Send: @SYS:VERSION=?", + "Received: @SYS:VERSION=3.70/2.01", + "Send: @MAIN:ADAPTIVEDRC=?", + "Received: @MAIN:ADAPTIVEDRC=Off", + "Send: @MAIN:AVAIL=?", + "Received: @MAIN:AVAIL=Ready", + "Send: @MAIN:ENHANCER=?", + "Received: @MAIN:ENHANCER=Off", + "Send: @MAIN:HDMIOUT=?", + "Received: @MAIN:HDMIOUT=OUT1", + "Send: @MAIN:HPBASS=?", + "Received: @MAIN:HPBASS=0.0", + "Send: @MAIN:HPTREBLE=?", + "Received: @MAIN:HPTREBLE=0.0", + "Send: @MAIN:INITVOLLVL=?", + "Received: @MAIN:INITVOLLVL=-22.5", + "Send: @MAIN:INITVOLMODE=?", + "Received: @MAIN:INITVOLMODE=On", + "Send: @MAIN:BASIC=?", + "Received: @MAIN:PWR=On", + "Received: @MAIN:SLEEP=Off", + "Received: @MAIN:VOL=-23.5", + "Received: @MAIN:MUTE=Off", + "Received: @MAIN:INP=AV4", + "Received: @MAIN:STRAIGHT=On", + "Received: @MAIN:ENHANCER=Off", + "Received: @MAIN:SOUNDPRG=Surround Decoder", + "Send: @MAIN:LIPSYNCHDMIOUT1OFFSET=?", + "Received: @MAIN:LIPSYNCHDMIOUT1OFFSET=0", + "Send: @MAIN:LIPSYNCHDMIOUT2OFFSET=?", + "Received: @MAIN:LIPSYNCHDMIOUT2OFFSET=0", + "Send: @MAIN:MAXVOL=?", + "Received: @MAIN:MAXVOL=15.0", + "Send: @MAIN:SCENENAME=?", + "Received: @MAIN:SCENE1NAME=BD/DVD Movie Viewing", + "Received: @MAIN:SCENE2NAME=TV Viewing", + "Received: @MAIN:SCENE3NAME=CD Music Listening", + "Received: @MAIN:SCENE4NAME=Radio Listening", + "Received: @MAIN:SCENE5NAME=SCENE5", + "Received: @MAIN:SCENE6NAME=SCENE6", + "Received: @MAIN:SCENE7NAME=SCENE7", + "Received: @MAIN:SCENE8NAME=SCENE8", + "Received: @MAIN:SCENE9NAME=SCENE9", + "Received: @MAIN:SCENE10NAME=SCENE10", + "Received: @MAIN:SCENE11NAME=SCENE11", + "Received: @MAIN:SCENE12NAME=SCENE12", + "Send: @MAIN:SLEEP=?", + "Received: @MAIN:SLEEP=Off", + "Send: @MAIN:SPBASS=?", + "Received: @MAIN:SPBASS=4.0", + "Send: @MAIN:SPEAKERA=?", + "Received: @UNDEFINED", + "Send: @MAIN:SPEAKERB=?", + "Received: @UNDEFINED", + "Send: @MAIN:SPTREBLE=?", + "Received: @MAIN:SPTREBLE=0.0", + "Send: @MAIN:3DCINEMA=?", + "Received: @MAIN:3DCINEMA=Off", + "Send: @MAIN:2CHDECODER=?", + "Received: @MAIN:2CHDECODER=Dolby PLII Music", + "Send: @MAIN:ZONEBNAME=?", + "Received: @UNDEFINED", + "Send: @MAIN:ZONENAME=?", + "Received: @MAIN:ZONENAME=Main", + "Send: @SYS:VERSION=?", + "Received: @SYS:VERSION=3.70/2.01", + "Send: @NAPSTER:METAINFO=?", + "Received: @NAPSTER:ARTIST=", + "Received: @NAPSTER:ALBUM=", + "Received: @NAPSTER:SONG=", + "Send: @NAPSTER:AVAIL=?", + "Received: @NAPSTER:AVAIL=Not Ready", + "Send: @NAPSTER:PLAYBACKINFO=?", + "Received: @NAPSTER:PLAYBACKINFO=Stop", + "Send: @NAPSTER:PRESET=?", + "Send: @NAPSTER:REPEAT=?", + "Received: @NAPSTER:REPEAT=Off", + "Send: @NAPSTER:SHUFFLE=?", + "Received: @NAPSTER:SHUFFLE=Off", + "Send: @SYS:VERSION=?", + "Received: @SYS:VERSION=3.70/2.01", + "Send: @NETRADIO:METAINFO=?", + "Received: @NETRADIO:STATION=", + "Send: @NETRADIO:AVAIL=?", + "Received: @NETRADIO:AVAIL=Not Ready", + "Send: @NETRADIO:PLAYBACKINFO=?", + "Received: @NETRADIO:PLAYBACKINFO=Stop", + "Send: @NETRADIO:PRESET=?", + "Send: @NETRADIO:STATION=?", + "Received: @NETRADIO:STATION=", + "Send: @SYS:VERSION=?", + "Received: @SYS:VERSION=3.70/2.01", + "Send: @PC:METAINFO=?", + "Received: @PC:ARTIST=", + "Received: @PC:ALBUM=", + "Received: @PC:SONG=", + "Send: @PC:AVAIL=?", + "Received: @PC:AVAIL=Not Ready", + "Send: @PC:PLAYBACKINFO=?", + "Received: @PC:PLAYBACKINFO=Stop", + "Send: @PC:PRESET=?", + "Send: @PC:REPEAT=?", + "Received: @PC:REPEAT=Off", + "Send: @PC:SHUFFLE=?", + "Received: @PC:SHUFFLE=Off", + "Send: @SYS:VERSION=?", + "Received: @SYS:VERSION=3.70/2.01", + "Send: @TUN:AMFREQ=?", + "Received: @TUN:AMFREQ=1080", + "Send: @TUN:AVAIL=?", + "Received: @TUN:AVAIL=Not Ready", + "Send: @TUN:BAND=?", + "Received: @TUN:BAND=FM", + "Send: @TUN:FMFREQ=?", + "Received: @TUN:FMFREQ=98.10", + "Send: @TUN:PRESET=?", + "Send: @TUN:RDSINFO=?", + "Send: @SYS:VERSION=?", + "Received: @TUN:PRESET=No Preset", + "Received: @TUN:RDSPRGTYPE=", + "Received: @TUN:RDSPRGSERVICE=", + "Received: @TUN:RDSTXTA=", + "Received: @TUN:RDSTXTB=", + "Received: @TUN:RDSCLOCK=", + "Received: @SYS:VERSION=3.70/2.01", + "Send: @UAW:AVAIL=?", + "Received: @UAW:AVAIL=Not Connected", + "Send: @SYS:VERSION=?", + "Received: @SYS:VERSION=3.70/2.01", + "Send: @USB:METAINFO=?", + "Received: @USB:ARTIST=", + "Received: @USB:ALBUM=", + "Received: @USB:SONG=", + "Send: @USB:AVAIL=?", + "Received: @USB:AVAIL=Not Connected", + "Send: @USB:PLAYBACKINFO=?", + "Received: @USB:PLAYBACKINFO=Stop", + "Send: @USB:PRESET=?", + "Send: @USB:REPEAT=?", + "Received: @USB:REPEAT=Off", + "Send: @USB:SHUFFLE=?", + "Received: @USB:SHUFFLE=Off", + "Send: @SYS:VERSION=?", + "Received: @SYS:VERSION=3.70/2.01", + "Send: @ZONE2:ADAPTIVEDRC=?", + "Received: @UNDEFINED", + "Send: @ZONE2:AVAIL=?", + "Received: @ZONE2:AVAIL=Not Ready", + "Send: @ZONE2:ENHANCER=?", + "Received: @UNDEFINED", + "Send: @ZONE2:HDMIOUT=?", + "Received: @UNDEFINED", + "Send: @ZONE2:HPBASS=?", + "Received: @UNDEFINED", + "Send: @ZONE2:HPTREBLE=?", + "Received: @UNDEFINED", + "Send: @ZONE2:INITVOLLVL=?", + "Received: @ZONE2:INITVOLLVL=-40.0", + "Send: @ZONE2:INITVOLMODE=?", + "Received: @ZONE2:INITVOLMODE=Off", + "Send: @ZONE2:BASIC=?", + "Received: @ZONE2:PWR=Standby", + "Received: @ZONE2:SLEEP=Off", + "Received: @ZONE2:VOL=-40.0", + "Received: @ZONE2:MUTE=Off", + "Received: @ZONE2:INP=AV4", + "Send: @ZONE2:LIPSYNCHDMIOUT1OFFSET=?", + "Received: @UNDEFINED", + "Send: @ZONE2:LIPSYNCHDMIOUT2OFFSET=?", + "Received: @UNDEFINED", + "Send: @ZONE2:MAXVOL=?", + "Received: @ZONE2:MAXVOL=16.5", + "Send: @ZONE2:SCENENAME=?", + "Received: @ZONE2:SCENE1NAME=BD/DVD Movie Viewing", + "Received: @ZONE2:SCENE2NAME=TV Viewing", + "Received: @ZONE2:SCENE3NAME=CD Music Listening", + "Received: @ZONE2:SCENE4NAME=Radio Listening", + "Send: @ZONE2:SLEEP=?", + "Received: @ZONE2:SLEEP=Off", + "Send: @ZONE2:SPBASS=?", + "Received: @UNDEFINED", + "Send: @ZONE2:SPTREBLE=?", + "Received: @UNDEFINED", + "Send: @ZONE2:3DCINEMA=?", + "Received: @UNDEFINED", + "Send: @ZONE2:2CHDECODER=?", + "Received: @UNDEFINED", + "Send: @ZONE2:ZONENAME=?", + "Received: @ZONE2:ZONENAME=Zone2", + "Send: @SYS:VERSION=?", + "Received: @SYS:VERSION=3.70/2.01" + ], diff --git a/ynca/subunits/zone.py b/ynca/subunits/zone.py index bca2230..b92747b 100644 --- a/ynca/subunits/zone.py +++ b/ynca/subunits/zone.py @@ -137,7 +137,7 @@ def lipsynchdmiout2offset_up(self): ), ) mute = EnumFunctionMixin[Mute](Mute, init="BASIC") - puredirmode = EnumFunctionMixin[PureDirMode](PureDirMode, init="BASIC") + puredirmode = EnumFunctionMixin[PureDirMode](PureDirMode) # Not part of BASIC on RX-V1067 pwr = EnumFunctionMixin[Pwr](Pwr, init="BASIC") scene1name = StrFunctionMixin(Cmd.GET, init="SCENENAME") scene2name = StrFunctionMixin(Cmd.GET, init="SCENENAME")