Denon AVR-S660H
I bought this receiver in early 2024 and I feel like the software side of it is a bit disappointing, but I also don’t think I can be that person who will finally make that ideal AV receiver my dad wants, so I will just try to work around things instead of being angry about them.
Something’s off about the 16:10 display I have
I have a 1920x1200 Dell “inherited” from the roommate that shows up once in half a year or so. It has a DisplayPort input rather than an HDMI, so instead I’m using a DVI-HDMI cable.
When given a 1080p signal, the Dell just stretches it to 1200px height. And if I plug in my MacBook as AUX1 and use the Dell as output it sets itself to 1680x1050, and in system settings I can only go up to 1920x1080. Something even funnier happens with the PlayStation 5 instead: it just doesn’t know what resolution to go with, so it does what Dell reports to be 480p. You can force it to go 1080p in console settings, then it’s stretched, but still better than 480p.
I will probably just buy a new display sometime.
Update (2024-12-27)
Turns out the part about MacBook was me not understanding HiDPI and having a not-that-great USB-C to HDMI adapter. I now have a new Dell G3223Q monitor which is 4k 120hz and it made me realize that the adapter can only do 4k 30hz, and that when macOS says it’s outputting 1080p it actually means it’s outputting 4k but HiDPI, sometimes.
The remote control is funny and two-faced
There are two types of remote control going on. First, there is the Denon AVR Remote app using the “IP Protocol” partially described by this PDF linked in Home Assistant docs. There are two ways to access it, a plain text \r-terminated TCP socket at port 23 (which also streams back plain text state changes), and an HTTP socket on port 80 where you just give the plain text command as querystring at /goform/formiPhoneAppDirect.xml. So for example to turn the volume up you send a GET to /goform/formiPhoneAppDirect.xml?MVUP. Home Assistant docs also state that there can only be one TCP connection open on port 23, but that’s not what I observed on this device, so maybe they expanded it since the aforementioned PDF was published in 2015. Some cool commands:
-
SI– select input, followed by the desired input, soSIAUX1,SINET,SIGAME -
SV- video select mode, which means audio keeps playing (from internet radio or other such input where only audio matters) but video is passed instead from specified input, e.g.SVAUX1.
Most of the commands are just what you could do with the remote or by browsing the menus with the remote, which by the way is something you can partially do by just visiting the receiver’s IP address in a web browser (you might get redirected to self-signed HTTPS port 10443).
The second mechanism of remote control is HEOS, and it’s more about the internet features like the internet radios and DLNA and such. It is described in funny PDFs like this. The funniest part for me is that it’s another TCP socket, this time on port 1255, and you feed it URIs with scheme heos, and you get back JSONs repeating the command back to you and giving answer in the form of URL-encoded key-values, and in more complex cases, additional JSON values. State changes also cause JSONs to be sent by the server (it might be necessary to first “register for change events”, but I sometimes got unsolicited events anyway, so this might be persisted for uhhh IP address? no clue honestly, it’s a bit weird).
I don’t have a lot of this figured out yet, but one very useful thing that can be done with this is as follows:
-
Before you can do anything useful, get your player’s ID. Send
heos://player/get_players, and the ID will be under jq query.payload[0].pid. For me it’s a negative integer. -
Play an arbitrary URL. Send
heos://browse/play_stream?pid=PID_GOES_HERE&url=URL_GOES_HERE. This lets you play things like premium internet radio streams you’re paying for.
Heos integration for Home Assistant sometimes just doesn’t work
The Home Assistant integration might fail to set up, with a variety of error messages. It can be “user not logged in” when you obviously are, it can be just timeout (socket dies somehow while getting the list of devices on the network?), and internet wisdom seems to be: just do a cold reboot of the device. Conveniently, you can just write heos://system/reboot on the 1255 port to do that.