So... I have a driver that I wrote. After playing with it for a few weeks (a year ago), I abandoned it. I can understand why there is not an extended (multi-zone) driver.
Here is what I learned.
Sending single commands is easy. It is an IP command, and very straight forward to send the commands. In the driver, it is one line of code. Setting volume, power, source, etc... easy.
Getting status is easy. The Denon AVR updates the status of the AVR after every command sent. For basic commands, interrogation of the message is straightforward.
Controlling multiple zones is much more difficult. Let me explain; Let’s say you want the following setup: Zone 1 and Zone 2 with Stereo Audio and HDMI 1 as the source. You need to turn on the power, turn on zone 1, turn on zone 2, set the source on zone 1 and zone 2. Set the volume on both zones and then set the mode to stereo.
Timing is critical because if zone 1 is not ready and you set the volume, nothing happens. Additionally, every-time you send a command, a status message is sent. Depending on the command sent, it could be a short of very long status message. If you try to send a command and get interrupted by a status message, it can mess things up.
I tried building a state machine that would not continue until status was reported with success. That lead to a mess of repeat messages and many complicated setups taking 30+ seconds. 90% of the time, things worked well. But it took forever just to turn on the AVR in the right mode.
Additionally, sometimes the start state required handling things differently. Example; if zone 1 was on, and zone 2 was off and I wanted zone 2 on with stereo sound, I needed a different set of commands than if I was starting from cold steel.
Lastly, I found it possible to get into a “broken” state; where I was unsure of my “actual” state. This required a query of system state (multiple commands) and ultimately a reset (POR).
Ugh. Just thinking about it gives me a headache. I never got 100% stable, which means the wife never approved insertion into the main system.
I can publish the code for any interested parties. Just understand; its ugly.