Roon module for Home Assistant

Hi, @GregD.

I have yet another volume related issue with the Roon HA addon. Sorry :frowning:

I have a Linn Selekt DSM that reports it’s volume range to Roon as 0 - 84 as in the image below. This is not user modifiable.

As far as I can tell, the Home Assistant Roon integration does not take this into account and this causes issues in calls to volume_set. The consequence of this is that if I try to set the volume of this device to a specific value, the device volume will change but then will reduce by 1 after a short delay.

An example of this is that if I set the volume on this device to 33, it will change to 32 after a short delay.

Here’s an automation which illustrates this, though I’m not sure how you can reproduce this if you don’t have a device that behaves similarly.

I believe that in Home Assistant, each media player can specify its own volume range. It looks like the Roon integration actually knows about the range of each Roon endpoint (I think).

Have you, or would you possibly, consider specifying the range for each Roon endpoint? Thanks!

alias: Test Volume
trigger: []
action:
  - service: notify.notify
    data_template:
      message: "Initial Volume: {{ state_attr('media_player.media_room', 'volume_level') }}"
  - delay: 00:00:01
  - service: media_player.volume_set
    data_template:
      entity_id: media_player.media_room
      volume_level: 0.33
  - service: notify.notify
    data_template:
      message: "Volume after set: {{ state_attr('media_player.media_room', 'volume_level') }}"
  - delay: 00:00:02
  - service: notify.notify
    data_template:
      message: "Volume after delay: {{ state_attr('media_player.media_room', 'volume_level') }}"

The home assistant integration does now look at the device volume parameters - do it should work - although there may be bugs or limitations.

I think HA will always show a 0-100 volume range - which is then converted into what the device needs.

So are you setting to 33 in HA or in roon.

And if in HA - what does roon / linn show as the volume changes from 33 to 32?

If in HA you set the volume to 33 - the Linn converted volume will be 27.72.

Ideally this should set the Linn to 28, my suspicion is that this value is being truncated - and so it is actually setting it to 27.

This will convert back to 32 in HA.

If my guess above is right I I can look at rounding the value before I pass it to roon.

I’m setting it in HA with something equivalent to the automation I included in my previous post. At the same time, I have Roon open and am watching the volume for the zone I’m modifying. I see it go up, then back down.

Here’s a video of what I see in Roon (though this was done with a value other than 33).

Maybe I can do this in my automation. My Blueprint for that new Philips controller allows the user to enter total steps and also how many increments depending on speed of knob rotation. Because it’s a blueprint, it’s a form and you can see the relevant portion below.

I’m currently reading the current volume state, then doing something like:

(1.0 / num_steps) * speed_increment

But that’s not working because of the range conversions and truncations that are happening downstream between HA and the Roon integration. It works fine when steps == 100, but not when it doesn’t. There must be some math I can be doing but it’s eluding me. Any ideas?

Also: Blueprints are cool :slight_smile:

Can you take a look at what is happening in roon / the Linn when this happens?

You can see the HA / Roon conversion code here:

And here:-

Thanks for the links. I will later this evening or early tomorrow (PST).

1 Like

Actually, I’m not sure what you’re asking me to look at here. Can you clarify?

I’d like to know what the native roon /linn volume is when you set the volume in HA to one of the numbers that change. Look in the roon app.

And whether the roon native volume changes when you see the HA change (I suspect it won’t).

When I look in Roon, the volume goes up and then back down. Take a look at the video I linked above. That’s a video of the Roon UI illustrating what happens when I make the change in Home Assistant using the code I shared.

I hope it’s clear that it does change in Roon - it goes up and then back down. To my uneducated eye, it looks like your code is changing the volume on the endpoint, then the endpoint is somehow on its own, adjusting down, and then your code is getting notified of the change. But that’s just a guess.

Can you get me the exact numbers?

Both in HA - and in Roon?

Will help me work out if rounding is the issue…

33 is an example. When I set the volume to 33 in Home Assistant, it briefly changes to 33 and then changes to 32. These changes are visible in Room and Home Assistant. This is occurring on the Linn device, which has a volume range of 0 to 84.

Got it - I imagined Linn was telling Roon that the max volume was 84, and so in turn I was scaling this to that 100 in HA was 84 in roon.

But sounds like this isn’t happening.

What happens in Roon if you try to set the volume in HA above 84?

I What is the minimum volume in Roon - is it 0 or 1?

I probably need a bit more debugging info - I’ll work out how I can get it from you…

I made a mistake in how I described this. I’ve been representing the numbers as being the same in HA and Roon but that’s wrong. Sorry.

If I set the volume to 33 in HA, what I see in HA is that the volume goes to 33 and then, a brief period later, goes to 32. Meanwhile, in Roon, it goes to 28 and then to 27. Sorry for the misinformation on this.

HA allows me to set the volume anywhere from 0 - .99. I tried setting it to .9. When I do this, the volume in HA goes to .90 and then adjust to .89. In Roon, it goes to 76 and then to 75.

The min volume in Roon is 0.

I read somewhere that some media player integrations that deal with volume ranges other than 0 - 99 don’t allow setting above the max allowable setting for the device and don’t attempt to do scaling. I wonder if this would be a better option. I’m wondering if there’s actually anything you can do to make it so that I can reliably do something like increment the volume by “1” on this device.

That’s great - thanks.

Let me check the numbers. I think I saw a possible rounding issue in the code.

If the numbers round as I fear I should be able to fix this.

Interesting! Thanks!

The numbers don’t have the problem I was hoping for. The 28 is correct after rounding - roon is likely doing this from the 27.7 number I am sending.

Does the Linn also have a display?

Does that go to 28, and then 27, or just straight to 27?

The Linn has a display and an app. Both appear to go straight to 27.

There’s no way for me to set an absolute number that you won’t try to scale and will just pass through, right?

I don’t see how I can get this to work. I’m trying to figure out a mathematical approach that will allow me to do the right thing from an automation, but I’m not coming up with anything. I may be alone in this but I’m not sure the scaling you’re doing is helpful. It would actually be better for me if you just capped the volume at the max. But I might just be missing something obvious about how to do this.

Home assistant players always have a volume that goes from 0-100.

Roon players can have any volume scale they like (eg many use a db scale that runs from -80 to 0).

At present I do a conversion from the HA scale to the roon scale - and then call roon with floating point number. Roon clearly accepts this and does the right thing.

In passing this to Linn the floating point number gets incorrectly truncated. This is ‘sort of’ a Linn bug - but they probably weren’t expecting a non integer level.

I could round the floating point number before I call roon. And I may be able to look at the roon ‘volume-step’ property to find out when to do this.
I don’t know if some players really use a floating point volume scale.

So at least we now understand the issue - so I can take a look.

We’re a step forward - do thanks for your investigation!

1 Like

Additional info.

We already know that when my automation attempts to set the volume to 33, you’ll scale that to 27.72 and attempt to change the volume. Here’s what that looks like in the log.

It looks to me that Roon accepts your input, and notifies all listening clients that the volume has been changed to 27.72. It then, again, notifies all clients that the volume has been changed to 27.

So Roon or Linn is truncating instead of rounding. Is there ever a scenario where fractional absolute volume values are meaningful? If, sooner or later, some downstream piece of code is going to either truncate or round, but you know that rounding is better than truncating, then you might as well round at your layer :slight_smile:

There really doesn’t seem to be any clever math I can do in the automation. If I’m missing something, though, I’m happy to give it a try. Otherwise, rounding on set volume seems to be the right fix.

I wonder what you should do when the volume is read. In other words, I don’t yet have an opinion on how precise the value you return should be.

In any case, this log should at least clarify what’s happening:

12/11 10:32:27 Trace: [roonapi] [apiclient 192.168.30.8:53358] GOT com.roonlabs.transport:2/change_volume {"output_id": "1701ba119331f4fa8c002735419a036dd6f3", "how": "absolute", "value": 27.72}
12/11 10:32:27 Trace: [roonapi] [apiclient 192.168.30.8:53358] CONTINUE Changed {"zones_changed":[{"zone_id":"1601ba119331f4fa8c002735419a036dd6f3","display_name":"Media Room","outputs":[{"output_id":"1701ba119331f4fa8c002735419a036dd6f3","zone_id":"1601ba119331f4fa8c002735419a036dd6f3","can_group_with_output_ids":["1701ba119331f4fa8c002735419a036dd6f3"],"display_name":"Media Room","volume":{"type":"number","min":0,"max":84,"value":27.72,"step":1,"is_muted":false,"hard_limit_min":0,"hard_limit_max":84,"soft_limit":84},"source_controls":[{"control_key":"1","display_name":"Linn Selekt DSM","supports_standby":true,"status":"selected"}]}],"state":"paused","is_next_allowed":true,"is_previous_allowed":true,"is_pause_allowed":false,"is_play_allowed":true,"is_seek_allowed":true,"queue_items_remaining":12,"queue_time_remaining":3336,"settings":{"loop":"disabled","shuffle":false,"auto_radio":true},"now_playing":{"seek_position":104,"length":242,"one_line":{"line1":"Some Kinda Love - The Velvet Underground"},"two_line":{"line1":"Some Kinda Love","line2":"The Velvet Underground"},"three_line":{"line1":"Some Kinda Love","line2":"The Velvet Underground","line3":"The Velvet Underground"},"image_key":"3cd5041f7f10cdd2fa8d0ba1d0965ef6","artist_image_keys":["fac18c75960635fa5b90c2126c77df0e"]}}]}
12/11 10:32:27 Trace: [roonapi] [apiclient 192.168.50.70:51168] CONTINUE Changed {"zones_changed":[{"zone_id":"1601ba119331f4fa8c002735419a036dd6f3","display_name":"Media Room","outputs":[{"output_id":"1701ba119331f4fa8c002735419a036dd6f3","zone_id":"1601ba119331f4fa8c002735419a036dd6f3","can_group_with_output_ids":["1701ba119331f4fa8c002735419a036dd6f3"],"display_name":"Media Room","volume":{"type":"number","min":0,"max":84,"value":27.72,"step":1,"is_muted":false,"hard_limit_min":0,"hard_limit_max":84,"soft_limit":84},"source_controls":[{"control_key":"1","display_name":"Linn Selekt DSM","supports_standby":true,"status":"selected"}]}],"state":"paused","is_next_allowed":true,"is_previous_allowed":true,"is_pause_allowed":false,"is_play_allowed":true,"is_seek_allowed":true,"queue_items_remaining":12,"queue_time_remaining":3336,"settings":{"loop":"disabled","shuffle":false,"auto_radio":true},"now_playing":{"seek_position":104,"length":242,"one_line":{"line1":"Some Kinda Love - The Velvet Underground"},"two_line":{"line1":"Some Kinda Love","line2":"The Velvet Underground"},"three_line":{"line1":"Some Kinda Love","line2":"The Velvet Underground","line3":"The Velvet Underground"},"image_key":"3cd5041f7f10cdd2fa8d0ba1d0965ef6","artist_image_keys":["fac18c75960635fa5b90c2126c77df0e"]}}]}
12/11 10:32:27 Trace: [roonapi] [apiclient 192.168.50.3:46482] CONTINUE Changed {"zones_changed":[{"zone_id":"1601ba119331f4fa8c002735419a036dd6f3","display_name":"Media Room","outputs":[{"output_id":"1701ba119331f4fa8c002735419a036dd6f3","zone_id":"1601ba119331f4fa8c002735419a036dd6f3","can_group_with_output_ids":["1701ba119331f4fa8c002735419a036dd6f3"],"display_name":"Media Room","volume":{"type":"number","min":0,"max":84,"value":27.72,"step":1,"is_muted":false,"hard_limit_min":0,"hard_limit_max":84,"soft_limit":84},"source_controls":[{"control_key":"1","display_name":"Linn Selekt DSM","supports_standby":true,"status":"selected"}]}],"state":"paused","is_next_allowed":true,"is_previous_allowed":true,"is_pause_allowed":false,"is_play_allowed":true,"is_seek_allowed":true,"queue_items_remaining":12,"queue_time_remaining":3336,"settings":{"loop":"disabled","shuffle":false,"auto_radio":true},"now_playing":{"seek_position":104,"length":242,"one_line":{"line1":"Some Kinda Love - The Velvet Underground"},"two_line":{"line1":"Some Kinda Love","line2":"The Velvet Underground"},"three_line":{"line1":"Some Kinda Love","line2":"The Velvet Underground","line3":"The Velvet Underground"},"image_key":"3cd5041f7f10cdd2fa8d0ba1d0965ef6","artist_image_keys":["fac18c75960635fa5b90c2126c77df0e"]}}]}
12/11 10:32:27 Trace: [roonapi] [apiclient 192.168.50.72:39582] CONTINUE Changed {"zones_changed":[{"zone_id":"1601ba119331f4fa8c002735419a036dd6f3","display_name":"Media Room","outputs":[{"output_id":"1701ba119331f4fa8c002735419a036dd6f3","zone_id":"1601ba119331f4fa8c002735419a036dd6f3","can_group_with_output_ids":["1701ba119331f4fa8c002735419a036dd6f3"],"display_name":"Media Room","volume":{"type":"number","min":0,"max":84,"value":27.72,"step":1,"is_muted":false,"hard_limit_min":0,"hard_limit_max":84,"soft_limit":84},"source_controls":[{"control_key":"1","display_name":"Linn Selekt DSM","supports_standby":true,"status":"selected"}]}],"state":"paused","is_next_allowed":true,"is_previous_allowed":true,"is_pause_allowed":false,"is_play_allowed":true,"is_seek_allowed":true,"queue_items_remaining":12,"queue_time_remaining":3336,"settings":{"loop":"disabled","shuffle":false,"auto_radio":true},"now_playing":{"seek_position":104,"length":242,"one_line":{"line1":"Some Kinda Love - The Velvet Underground"},"two_line":{"line1":"Some Kinda Love","line2":"The Velvet Underground"},"three_line":{"line1":"Some Kinda Love","line2":"The Velvet Underground","line3":"The Velvet Underground"},"image_key":"3cd5041f7f10cdd2fa8d0ba1d0965ef6","artist_image_keys":["fac18c75960635fa5b90c2126c77df0e"]}}]}
12/11 10:32:27 Trace: [roonapi] [apiclient 192.168.50.225:33802] CONTINUE Changed {"zones_changed":[{"zone_id":"1601ba119331f4fa8c002735419a036dd6f3","display_name":"Media Room","outputs":[{"output_id":"1701ba119331f4fa8c002735419a036dd6f3","zone_id":"1601ba119331f4fa8c002735419a036dd6f3","can_group_with_output_ids":["1701ba119331f4fa8c002735419a036dd6f3"],"display_name":"Media Room","volume":{"type":"number","min":0,"max":84,"value":27.72,"step":1,"is_muted":false,"hard_limit_min":0,"hard_limit_max":84,"soft_limit":84},"source_controls":[{"control_key":"1","display_name":"Linn Selekt DSM","supports_standby":true,"status":"selected"}]}],"state":"paused","is_next_allowed":true,"is_previous_allowed":true,"is_pause_allowed":false,"is_play_allowed":true,"is_seek_allowed":true,"queue_items_remaining":12,"queue_time_remaining":3336,"settings":{"loop":"disabled","shuffle":false,"auto_radio":true},"now_playing":{"seek_position":104,"length":242,"one_line":{"line1":"Some Kinda Love - The Velvet Underground"},"two_line":{"line1":"Some Kinda Love","line2":"The Velvet Underground"},"three_line":{"line1":"Some Kinda Love","line2":"The Velvet Underground","line3":"The Velvet Underground"},"image_key":"3cd5041f7f10cdd2fa8d0ba1d0965ef6","artist_image_keys":["fac18c75960635fa5b90c2126c77df0e"]}}]}
12/11 10:32:27 Trace: [roonapi] [apiclient 192.168.30.8:53358] CONTINUE Changed {"outputs_changed":[{"output_id":"1701ba119331f4fa8c002735419a036dd6f3","zone_id":"1601ba119331f4fa8c002735419a036dd6f3","can_group_with_output_ids":["1701ba119331f4fa8c002735419a036dd6f3"],"display_name":"Media Room","volume":{"type":"number","min":0,"max":84,"value":27.72,"step":1,"is_muted":false,"hard_limit_min":0,"hard_limit_max":84,"soft_limit":84},"source_controls":[{"control_key":"1","display_name":"Linn Selekt DSM","supports_standby":true,"status":"selected"}]}]}
12/11 10:32:27 Trace: [roonapi] [apiclient 192.168.30.8:53358] COMPLETE Success
12/11 10:32:28 Trace: [roonapi] [apiclient 192.168.30.8:53358] CONTINUE Changed {"zones_changed":[{"zone_id":"1601ba119331f4fa8c002735419a036dd6f3","display_name":"Media Room","outputs":[{"output_id":"1701ba119331f4fa8c002735419a036dd6f3","zone_id":"1601ba119331f4fa8c002735419a036dd6f3","can_group_with_output_ids":["1701ba119331f4fa8c002735419a036dd6f3"],"display_name":"Media Room","volume":{"type":"number","min":0,"max":84,"value":27,"step":1,"is_muted":false,"hard_limit_min":0,"hard_limit_max":84,"soft_limit":84},"source_controls":[{"control_key":"1","display_name":"Linn Selekt DSM","supports_standby":true,"status":"selected"}]}],"state":"paused","is_next_allowed":true,"is_previous_allowed":true,"is_pause_allowed":false,"is_play_allowed":true,"is_seek_allowed":true,"queue_items_remaining":12,"queue_time_remaining":3336,"settings":{"loop":"disabled","shuffle":false,"auto_radio":true},"now_playing":{"seek_position":104,"length":242,"one_line":{"line1":"Some Kinda Love - The Velvet Underground"},"two_line":{"line1":"Some Kinda Love","line2":"The Velvet Underground"},"three_line":{"line1":"Some Kinda Love","line2":"The Velvet Underground","line3":"The Velvet Underground"},"image_key":"3cd5041f7f10cdd2fa8d0ba1d0965ef6","artist_image_keys":["fac18c75960635fa5b90c2126c77df0e"]}}]}
12/11 10:32:28 Trace: [roonapi] [apiclient 192.168.50.70:51168] CONTINUE Changed {"zones_changed":[{"zone_id":"1601ba119331f4fa8c002735419a036dd6f3","display_name":"Media Room","outputs":[{"output_id":"1701ba119331f4fa8c002735419a036dd6f3","zone_id":"1601ba119331f4fa8c002735419a036dd6f3","can_group_with_output_ids":["1701ba119331f4fa8c002735419a036dd6f3"],"display_name":"Media Room","volume":{"type":"number","min":0,"max":84,"value":27,"step":1,"is_muted":false,"hard_limit_min":0,"hard_limit_max":84,"soft_limit":84},"source_controls":[{"control_key":"1","display_name":"Linn Selekt DSM","supports_standby":true,"status":"selected"}]}],"state":"paused","is_next_allowed":true,"is_previous_allowed":true,"is_pause_allowed":false,"is_play_allowed":true,"is_seek_allowed":true,"queue_items_remaining":12,"queue_time_remaining":3336,"settings":{"loop":"disabled","shuffle":false,"auto_radio":true},"now_playing":{"seek_position":104,"length":242,"one_line":{"line1":"Some Kinda Love - The Velvet Underground"},"two_line":{"line1":"Some Kinda Love","line2":"The Velvet Underground"},"three_line":{"line1":"Some Kinda Love","line2":"The Velvet Underground","line3":"The Velvet Underground"},"image_key":"3cd5041f7f10cdd2fa8d0ba1d0965ef6","artist_image_keys":["fac18c75960635fa5b90c2126c77df0e"]}}]}
12/11 10:32:28 Trace: [roonapi] [apiclient 192.168.50.3:46482] CONTINUE Changed {"zones_changed":[{"zone_id":"1601ba119331f4fa8c002735419a036dd6f3","display_name":"Media Room","outputs":[{"output_id":"1701ba119331f4fa8c002735419a036dd6f3","zone_id":"1601ba119331f4fa8c002735419a036dd6f3","can_group_with_output_ids":["1701ba119331f4fa8c002735419a036dd6f3"],"display_name":"Media Room","volume":{"type":"number","min":0,"max":84,"value":27,"step":1,"is_muted":false,"hard_limit_min":0,"hard_limit_max":84,"soft_limit":84},"source_controls":[{"control_key":"1","display_name":"Linn Selekt DSM","supports_standby":true,"status":"selected"}]}],"state":"paused","is_next_allowed":true,"is_previous_allowed":true,"is_pause_allowed":false,"is_play_allowed":true,"is_seek_allowed":true,"queue_items_remaining":12,"queue_time_remaining":3336,"settings":{"loop":"disabled","shuffle":false,"auto_radio":true},"now_playing":{"seek_position":104,"length":242,"one_line":{"line1":"Some Kinda Love - The Velvet Underground"},"two_line":{"line1":"Some Kinda Love","line2":"The Velvet Underground"},"three_line":{"line1":"Some Kinda Love","line2":"The Velvet Underground","line3":"The Velvet Underground"},"image_key":"3cd5041f7f10cdd2fa8d0ba1d0965ef6","artist_image_keys":["fac18c75960635fa5b90c2126c77df0e"]}}]}
12/11 10:32:28 Trace: [roonapi] [apiclient 192.168.50.72:39582] CONTINUE Changed {"zones_changed":[{"zone_id":"1601ba119331f4fa8c002735419a036dd6f3","display_name":"Media Room","outputs":[{"output_id":"1701ba119331f4fa8c002735419a036dd6f3","zone_id":"1601ba119331f4fa8c002735419a036dd6f3","can_group_with_output_ids":["1701ba119331f4fa8c002735419a036dd6f3"],"display_name":"Media Room","volume":{"type":"number","min":0,"max":84,"value":27,"step":1,"is_muted":false,"hard_limit_min":0,"hard_limit_max":84,"soft_limit":84},"source_controls":[{"control_key":"1","display_name":"Linn Selekt DSM","supports_standby":true,"status":"selected"}]}],"state":"paused","is_next_allowed":true,"is_previous_allowed":true,"is_pause_allowed":false,"is_play_allowed":true,"is_seek_allowed":true,"queue_items_remaining":12,"queue_time_remaining":3336,"settings":{"loop":"disabled","shuffle":false,"auto_radio":true},"now_playing":{"seek_position":104,"length":242,"one_line":{"line1":"Some Kinda Love - The Velvet Underground"},"two_line":{"line1":"Some Kinda Love","line2":"The Velvet Underground"},"three_line":{"line1":"Some Kinda Love","line2":"The Velvet Underground","line3":"The Velvet Underground"},"image_key":"3cd5041f7f10cdd2fa8d0ba1d0965ef6","artist_image_keys":["fac18c75960635fa5b90c2126c77df0e"]}}]}
12/11 10:32:28 Trace: [roonapi] [apiclient 192.168.50.225:33802] CONTINUE Changed {"zones_changed":[{"zone_id":"1601ba119331f4fa8c002735419a036dd6f3","display_name":"Media Room","outputs":[{"output_id":"1701ba119331f4fa8c002735419a036dd6f3","zone_id":"1601ba119331f4fa8c002735419a036dd6f3","can_group_with_output_ids":["1701ba119331f4fa8c002735419a036dd6f3"],"display_name":"Media Room","volume":{"type":"number","min":0,"max":84,"value":27,"step":1,"is_muted":false,"hard_limit_min":0,"hard_limit_max":84,"soft_limit":84},"source_controls":[{"control_key":"1","display_name":"Linn Selekt DSM","supports_standby":true,"status":"selected"}]}],"state":"paused","is_next_allowed":true,"is_previous_allowed":true,"is_pause_allowed":false,"is_play_allowed":true,"is_seek_allowed":true,"queue_items_remaining":12,"queue_time_remaining":3336,"settings":{"loop":"disabled","shuffle":false,"auto_radio":true},"now_playing":{"seek_position":104,"length":242,"one_line":{"line1":"Some Kinda Love - The Velvet Underground"},"two_line":{"line1":"Some Kinda Love","line2":"The Velvet Underground"},"three_line":{"line1":"Some Kinda Love","line2":"The Velvet Underground","line3":"The Velvet Underground"},"image_key":"3cd5041f7f10cdd2fa8d0ba1d0965ef6","artist_image_keys":["fac18c75960635fa5b90c2126c77df0e"]}}]}
12/11 10:32:28 Trace: [roonapi] [apiclient 192.168.30.8:53358] CONTINUE Changed {"outputs_changed":[{"output_id":"1701ba119331f4fa8c002735419a036dd6f3","zone_id":"1601ba119331f4fa8c002735419a036dd6f3","can_group_with_output_ids":["1701ba119331f4fa8c002735419a036dd6f3"],"display_name":"Media Room","volume":{"type":"number","min":0,"max":84,"value":27,"step":1,"is_muted":false,"hard_limit_min":0,"hard_limit_max":84,"soft_limit":84},"source_controls":[{"control_key":"1","display_name":"Linn Selekt DSM","supports_standby":true,"status":"selected"}]}]}
12

Hi Greg
I’m using the square Symfonisk Gen2 remote with this HA Blueprint ZHA - Ikea Symfonisk sound controller GEN2 (the square one) with dot-button support for new firmware - Blueprints Exchange - Home Assistant Community
It works great, including volume control.
I’m wondering if there is a way to add an action for the dots buttons to change the media player that is controlled by the remote? Like short press single-dot button = switch to media player 1, etc.
I can’t find any other use for the dots buttons so they’re unused for now…
and, by the way, I painted mine for better button visibility :slight_smile:

Thank you

2 Likes