Any suggestion how to change the steps the volume increases? Currently a ver small change in on the controler ends up in a big volume increse/decrease. What do i need to do to have this more smooth?
@sparkydave, @Donkeyrollerz, @seamus65 any of you have an idea how to make the spinny less sensitive?
I am not sure.
I think the symfonisk controller has a few issues with ZHA.
Some of the edits and updates people are working on to this Blueprint are very interesting though.
I havenāt yet tried this Blueprint as Iāve been too busy. I was going to try both this one and also this one to see which is best
Have you setup the controller blueprint first?
Finally made the switch from smartthings to HA over the weekend and have two of these Symfonisk controllers. I get them to pair via ZHA (pressing the pair button 4 times) but the only entity exposed is the battery to HA, thereās no actual remote functionality to it. Does anyone know how to fix this?
It works by sending ZHA āeventsā, you donāt need entities. Using this Blueprint will let you automate things without having to know too much about the ZHA events going on in the background.
really bizarre, I have two of them and both pair fine to ZHA but none of them send events when I check logbook. And Iāve tried 3 different blueprints. Do these need to be firmware updated? Its been over a year since Ive used them on smartthings
The events arenāt listed in the logbook. You can see them if you subscribe to zha_events in the developer page.
No, they work straight out of the box.
Thanks everyone, a lot of really nice code above! That variables setting action is amazing, you have no idea the tedious workarounds Iāve used so far to achieve a similar function.
In case it helps anyone, below is how Iāve adapted and implemented the above in my ground floor with one Google home, one Android TV, and a Sonos home theatre system connected to the TV. I had issues with a ton of repeat events coming in from the symfonisk volume controller, but was able to solve that (at least the automation still executes in a useful manner) by introducing a delay at the end of the parent action sequence and setting the automation mode to ārestartā. Itās working pretty smoothly and reliably now, but I have thoughts to implement a kind of panic off action (on double or triple press) to be able to contravene a potential runaway volume increase.
There are some quirks with my media player arrangement that result in some extra logic. Kitchen_display is a Google Home smart speaker/display that is only ever temporarily active when either the home theatre or TV + home theatre are active (i.e. when I tell Google to dim the lights while watching TV). This means when it goes idle I typically want the active media player to revert to either the home theatre or the TV, and that is why my āactive media playerā automation doesnāt trigger on idle state of either the TV or home theatre. The other thing is that the TV audio always comes via the home theatre. So whenever the TV is in a āplayingā state, the home theatre is too. This means that when the TV is active, volume changes must be done via the home theatre, and play/pause must be done via the TV. Another common use case is telling the kitchen_display to play music on the home theatre. In this case the kitchen_display starts off as active, hands off to the home theatre when it is idle, and the TV doesnāt come into the picture at all.
This code and functionality is getting really fun now, and using the single volume dial to control all these things is still simple and intuitive. Iām wondering how many other smart things I can start to do with this single button/dial interface!
Hereās the automation adapted from the above that controls three different media players.
alias: 'Symfonisk: Sound controller actions'
description: ''
trigger:
- platform: event
event_type: zha_event
event_data:
device_id: SYMFONISK_DEV_ID_HERE
condition: []
action:
- variables:
command: '{{ trigger.event.data.command }}'
cluster_id: '{{ trigger.event.data.cluster_id }}'
endpoint_id: '{{ trigger.event.data.endpoint_id }}'
args: '{{ trigger.event.data.args }}'
active_player: '{{ states(''input_text.active_media_player'') }}'
volume_step: 0.04
delay_time: 0.4
- choose:
- conditions:
- condition: template
value_template: '{{ command == ''toggle'' }}'
- condition: template
value_template: '{{ cluster_id == 6 }}'
- condition: template
value_template: '{{ endpoint_id == 1 }}'
sequence:
- choose:
- conditions:
- condition: template
value_template: '{{ active_player == ''media_player.home_theatre'' }}'
sequence:
- service: media_player.media_play_pause
target:
entity_id:
- media_player.home_theatre
- conditions:
- condition: template
value_template: '{{ active_player == ''media_player.tv'' }}'
sequence:
- service: media_player.media_play_pause
target:
entity_id:
- media_player.tv
default:
- service: media_player.media_play_pause
target:
entity_id: media_player.kitchen_display
- conditions:
- condition: template
value_template: '{{ command == ''step'' }}'
- condition: template
value_template: '{{ cluster_id == 8 }}'
- condition: template
value_template: '{{ endpoint_id == 1 }}'
- condition: template
value_template: '{{ args == [0, 1, 0] }}'
sequence:
- service: input_boolean.turn_on
target:
entity_id: input_boolean.report
- conditions:
- condition: template
value_template: '{{ command == ''step'' }}'
- condition: template
value_template: '{{ cluster_id == 8 }}'
- condition: template
value_template: '{{ endpoint_id == 1 }}'
- condition: template
value_template: '{{ args == [1, 1, 0] }}'
sequence:
- service: light.turn_off
target:
entity_id: light.entire_house
- conditions:
- condition: template
value_template: '{{ command == ''move'' }}'
- condition: template
value_template: '{{ cluster_id == 8 }}'
- condition: template
value_template: '{{ endpoint_id == 1 }}'
- condition: template
value_template: '{{ args == [0, 195] }}'
sequence:
repeat:
while:
- condition: template
value_template: '{{ repeat.index < 20 }}'
sequence:
- choose:
- conditions:
- condition: template
value_template: >-
{{ active_player == 'media_player.home_theatre' or
active_player == 'media_player.tv' }}
sequence:
- service: media_player.volume_set
entity_id: media_player.home_theatre
data_template:
volume_level: >-
{{ state_attr('media_player.home_theatre' ,
'volume_level') | float + volume_step }}
default:
- service: media_player.volume_set
entity_id: media_player.kitchen_display
data_template:
volume_level: >-
{{ state_attr('media_player.kitchen_display' ,
'volume_level') | float + volume_step }}
- conditions:
- condition: template
value_template: '{{ command == ''move'' }}'
- condition: template
value_template: '{{ cluster_id == 8 }}'
- condition: template
value_template: '{{ endpoint_id == 1 }}'
- condition: template
value_template: '{{ args == [1, 195] }}'
sequence:
repeat:
while:
- condition: template
value_template: '{{ repeat.index < 20 }}'
sequence:
- choose:
- conditions:
- condition: template
value_template: >-
{{ active_player == 'media_player.home_theatre' or
active_player == 'media_player.tv' }}
sequence:
- service: media_player.volume_set
entity_id: media_player.home_theatre
data_template:
volume_level: >-
{{ state_attr('media_player.home_theatre' ,
'volume_level') | float - volume_step }}
default:
- service: media_player.volume_set
entity_id: media_player.kitchen_display
data_template:
volume_level: >-
{{ state_attr('media_player.kitchen_display' ,
'volume_level') | float - volume_step }}
- delay: delay_time
mode: restart
And here is the automation that decides which is the active media player:
alias: 'Symfonisk: Choose active media player'
description: ''
trigger:
- platform: device
device_id: DEV_ID_HERE
domain: media_player
entity_id: media_player.kitchen_display
type: playing
- platform: device
device_id: DEV_ID_HERE
domain: media_player
entity_id: media_player.kitchen_display
type: idle
- platform: device
device_id: DEV_ID_HERE
domain: media_player
entity_id: media_player.home_theatre
type: playing
- platform: device
device_id: DEV_ID_HERE
domain: media_player
entity_id: media_player.tv
type: playing
condition: []
action:
- service: input_text.set_value
target:
entity_id: input_text.active_media_player
data:
value: >-
{% set player = '' %} {% if is_state('media_player.home_theatre',
'playing') and not is_state('media_player.kitchen_display', 'playing')
%} {% if is_state('media_player.home_theatre', 'playing') and
is_state('media_player.tv', 'playing') %} {% set player =
'media_player.tv' %} {% else %} {% set player =
'media_player.home_theatre' %} {% endif %} {% elif not
is_state('media_player.home_theatre', 'playing') and
is_state('media_player.kitchen_display', 'playing') %} {% set player =
'media_player.kitchen_display' %} {% elif
states.media_player.home_theatre.last_updated >
states.media_player.kitchen_display.last_updated %} {% if
is_state('media_player.home_theatre', 'playing') and
is_state('media_player.tv', 'playing') %} {% set player =
'media_player.tv' %} {% else %} {% set player =
'media_player.home_theatre' %} {% endif %} {% else %} {% set player
= 'media_player.kitchen_display' %} {% endif %} {{player}}
mode: restart
Hi, Iām using this version of the spinny remote blueprint because the volume change felt too slow with the original one, and I have double-click set to call āmedia_player.media_next_trackā to skip whatever is currently playing.
However, it always skips 2 tracks with this blueprint. It works fine with the original one (with the slow volume change). I tried fiddling with the code but I donāt really know what Iām doing, any ideas?
EDIT:
I kinda got it working, I noticed one of the changes was āmodeā from single to repeat. I changed that back to single, and I reduced the ārepeat.indexā to 5, and it works ok. You canāt continuously turn to change the volume (suspect thatās what the ārepeatā bit does) but Iām happy enough.
Yeah, the ārepeatā was so you can continuously spin it to change volume. But it seems that the handling is somewhat dodgy (I find sometimes the volume keeps going up even when Iāve only spun it a little bit, for instance). I think this is HA being overrun with updates from ZHA or something like that.
I donāt use mine enough to feel the need to fix itā¦
Any suggestions on debugging. I have two of these devices connected via ZHA - but the automation (this + a media hook) Never runsā¦
I suspect its a zha issue
Had a lot of issues with ZHA and Ikea devices. Ended up having to re-pair them every few days, and the batteries drained within a week or so (I have 2x Symfonisk knobs and 1x on/off switch). I switched over to ZigBee2MQTT and everything is working much more reliably now with all the same hardware, and the Ikea device batteries are still at 100% after a week despite frequent use. Not sure what the issue was in ZHA, but perhaps this helps someone else with the same problem.