Pioneer AVR integration (supporting config flow and asyncio)

The receiver supports query_volume.

I got it work. During testing I noticed that media_player.set_volume works anyway even it is not shown in the device entity list.

If anyone needs an example for media_player.set_volume

action: media_player.volume_set
metadata: {}
data:
  volume_level: 0.13
target:
  device_id: c16e3ec51d264f78116c8a488a286372
  entity_id: media_player.pioneer_avr_main_zone

Thanks again for supporting!

Is there a way to use send command in a action script in Home assistant to send Cursor UP, Down and OK button, tu be able to select Internet Radio Station, i manage to see the FL display, so i can see what is on the AVR display, but i dont have any way to choose station, as i can choose FM preset. so either working solution ( cursor selection) or a preset command as in FM Tuner would be appreciated.

I’m not aware of any API commands for selecting a particular internet radio station, but you might be able to emulate remote button presses. On newer versions of the integration, you can try something like this:

action: pioneer_async.send_command
data:
  command: operation_amp_cursor_up

Here are the available amp operation commands from the source code:

    "operation_amp_status_display": {Zone.Z1: "STS"},
    "operation_amp_cursor_up": {Zone.Z1: "CUP"},
    "operation_amp_cursor_down": {Zone.Z1: "CDN"},
    "operation_amp_cursor_right": {Zone.Z1: "CRI"},
    "operation_amp_cursor_left": {Zone.Z1: "CLE"},
    "operation_amp_cursor_enter": {Zone.Z1: "CEN"},
    "operation_amp_cursor_return": {Zone.Z1: "CRT"},
    "operation_amp_audio_parameter": {Zone.Z1: "ATA"},
    "operation_amp_output_parameter": {Zone.Z1: "HPA"},
    "operation_amp_video_parameter": {Zone.Z1: "VPA"},
    "operation_amp_channel_select": {Zone.Z1: "CLC"},
    "operation_amp_home_menu": {Zone.Z1: "HM"},
    "operation_amp_key_off": {Zone.Z1: "KOF"},

You are a wonderful human being!

Thank you for this integration.

Is there a way to control Speaker A/B/Both ? My deck speakers are wired like this - so that I can control a set of speakers near or far from the house.

Hi, the Speaker Mode select entity should be enabled by default in version 0.12, and is part of the device for the main AVR (ie. not the zone devices). Do you not see this entity on your install? Note that the AVR main zone needs to be on for this entity to be changed.

That is insane!!! I see it!

Is there a solution for my Pioneer VSA-LX805
With the original integration I can’t get any connection. :frowning:

Google suggests that the VSA-LX805 was released by Pioneer in 2023. This integration works with pre-2016 Pioneer AVRs - this is mentioned in the first paragraph of the repo’s README. As suggested in the community testing discussion, try using one of the Onkyo or onkyo-eiscp integrations instead.

already this is impressive! did anyone get any luck with the vsx-824? I have some control but not everything that I expected. I can control the volume (though the reported level doesn’t match), on/off, change source but that’s about it. Also, I know it’s not much information to go off of so just let me know what more I can give you to help you help me.

In the latest version of the HA integration, the entities for most controllable amp and zone parameters are disabled by default because not all Pioneer AVRs support the configuration of every possible parameter. To reveal all available entities that control individual parameters, go to Settings > Devices & Services > Pioneer AVR > AVR or zone device, then in the Configuration panel click +nn disabled entities. Enable the ones that are supported for your AVR model. Supported parameters referenced in the manual for your AVR model are usually configurable.

HA harmonises media_player entity volume level to a float between 0 and 1, whereas most Pioneer AVRs report volume as an int between 0 and 185 (1 step = 0.5 dB), and 0 and 81 (1 step = 1 dB) for HDZone if supported. The device volume and volume as dB are available as attributes on the media_player zone entities, but unfortunately attributes are not shown on the default more-info page for this entity type. You can however see the current attribute values via Developer tools > States page, and these values can also be shown on dashboards and accessed by scripts and automations as well.

Hi! Just stumbled upon this integration because the original one was giving some errors.

However, i cannot seem to connect.
Cannot connect to AVR: device not responding to Pioneer AVR protocol

Its a sc-lx76, so its old enough.

The original integration through configuration.yaml was working somewhat. But i commented that out.

Ip and port are set the same. Webpage is available.

Anything else i could check?

SC-LX73, SC-LX77 and SC-LX78 are listed as working on the list of supported models identified by the community so numerically it is likely to be supported.

The AVR needs to respond to the model query command (?RGD) to identify itself as a Pioneer AVR. You can bypass this query by manually entering an AVR model on the AVR connection form. This will set some default parameters appropriate for the AVR model like available zones, etc. Try entering SC-LX76 in this field.

Somehow it suddenly started working. Dont know what triggered it. But it does what it should.

Must be a bit blind, but i cannot find the surround mode settings anywhere?

Ah, never mind, though it would be a separate entity

Awesome integration! I needed control of my VSX-1120 to integrate with Unfolded Circle Remote 3. This will do the trick.
I couldn’t find the sources at first but found them in media_player.pioneer_avr_main_zone along with the sound modes. Did a quick mini-media-player card:

type: custom:mini-media-player
entity: media_player.pioneer_avr_main_zone
group: false
volume_stateless: false
toggle_power: true
sound_mode: full
source: full
hide:
  sound_mode: false

Great, works perfectly with the VSX-830. Why is this not the default integration?

Some work needs to be done to the existing core integration to bring it up to core specs, but given the simplicity of the existing one, this doesn’t seem to hard. @crowbarz would you be up for aiopioneer being used in the core integration?

There is actually quite a lot of work that would need to be completed to prepare the integration code for inclusion in HA core:

  • making the integration pass hassfest (there has been no effort spent on this)
  • adding tests (there are none at the moment)
  • auditing the entire HA integration code to ensure compliance with style guidelines
  • ensuring compliance with the component checklist

As at 2025-12-21, HA analytics shows that 303 users opted into analytics are using the current core integration, and 113 more are using my custom integration. With that level of usage, I’m not convinced at this time that it makes sense to commit the effort required for inclusion in core, and also the ongoing effort to maintain the code once it is included.

In any case, what benefits would inclusion in core provide? I would not be surprised if most integrations interfacing with more niche devices end up being moved out of core, as adding support for more and more devices over time is not scalable in the long run.

Folks with more free time than me are welcome to contribute PRs for any of the work outlined above.

Have used custom integration pioneer_vsx529 until HA Version 2015.11 (Detected blocking call to import_module with args ‘custom_components.pioneer_vsx529.media_player’,).

With custom integration [pioneer_vsx529], it was possible to choose Radio Station Favorites by sending telnet command direct to my Pioneer XC-HM82D like 45FN (Favorites) and 00010GHP (Favorites Entry #10).

Test with [Pioneer AVR integration] works for power_on, power_off, select_source, mute, volume.
But there is no option for Radio Station Favorites selection. Have tried to send_raw_command (like 45FN) by AVR pioneer_async.send_command (unknown AVR command).

Any idea?

As mentioned in crowbarz/aiopioneer#91, it’s not possible to use send_command to send a raw AVR command via the HA integration.

More generally, I would prefer implement a command parser for the GHP command and its associated response in aiopioneer so that it can be sent via send_command, although this particular command is not documented in FY16 API documentation. I have seen some folks simulating favourite selection using arrow control commands, so this command could be quite useful to them as well to create more deterministic scripts.

Following up on my post from August 2024 above — finally got around to actually building this out, sorry for the year-long silence.

Short version: on my VSX-924, CLV is accepted syntactically but returns a non-informative CLVALL50 placeholder and doesn’t actually apply writes. This receiver only speaks channel levels via the legacy bulk ILV command (reports/sets all channels in one fixed-width message, not addressed per-channel like CLV). That’s presumably also true for the AST/VST-adjacent codes I mentioned back then, though those turned out to already be well supported — AST/VST decoders in aiopioneer already handle the FY11-era length variant correctly, no changes needed there.

What’s implemented (fork/branch here: GitHub - HayaminiNL/aiopioneer at ilv-vsx924-channel-level · GitHub):

  • ILV decode + encode, feeding into the same channel_level property CLV already uses — so no changes needed on the Home Assistant integration side, the existing number entities just start working once the underlying library knows how to talk to the receiver.
  • Routed automatically for VSX-924 via a new PARAM_CHANNEL_LEVEL_COMMAND model param (currently scoped to just that model string — see caveat below).
  • Front L/R/C, Surround L/R, Surround Back L/R, and the subwoofer level are all settable this way.
  • SW1/SW2 (independent stereo-sub trim) and the top/height channels decode fine from the extended status response but turned out to be read-only on this receiver — writes are silently accepted but never applied. Left them as read-only rather than guessing at a workaround.

Verified against my actual VSX-924, not just in theory:

  • Decode cross-checked against a traffic capture I made back in 2024.
  • Found the SET wire format the hard way — it’s the reverse of the query direction (ILV<data> for queries, but <data>ILV for sets, data first).
  • Confirmed audibly, channel by channel, that the level actually changes on the correct physical speaker: subwoofer, both surround-backs, front L/R/C. A couple of height/wide channels confirmed via a quick mic-RMS comparison instead of by ear.
  • Two channels (side surrounds) show no effect at all on my setup, but that’s because I don’t have those speakers wired, not a code problem.

Caveat / where I’d like input: right now this is scoped to exactly VSX-924, nothing else, because that’s the only unit I’ve actually tested ?CLV against. If you’re on a same-generation sibling (VSX-920/921/1021/1121, or similar vintage) and can check whether your receiver gives the same CLVALL50-style non-answer to a CLV query, that’d tell us whether it’s safe to widen the model match or whether it’s genuinely VSX-924-specific.

Happy to open this as a proper discussion/PR whenever makes sense — wanted to get real hardware confirmation first rather than send over an untested guess.