Roon API - "zones_seek_changed" bug?[Ticket In]

I think I may have found a bug in the Roon API? :smiley:

It is with regard to the registered callback for event “zones_seek_changed”. For the most part, the zone data is returned correctly and shows the the state as playing (when the zone is playing). However, if I have grouped some zones and then ungroup the zones back to a single zone in the middle of a playing track, then the state field is shown as either stopped or paused on the single zone. This is despite the track continuing to play on the single zone and the zone data showing the seek times updating every second (i.e. the state is inconsistent with what is actually happening). The state field should show playing but doesn’t until the next track starts and then becomes consistent.

I am using this Python Library (I don’t think it is an issue with the Library): python-roon in a Roon Plugin I have developed for Indigo.

Here is some sample captured data that illustrates the point:

Grouped Zone playing (with two outputs)

>==> ROON: ZONES SEEK CHANGED ZONE DATA <== :{u'queue_items_remaining': 11, **u'queue_time_remaining': 2401**, u'display_name': u'Study + 1', u'zone_id': u'160142aaf7582d500549a9b51697cf57192e', u'settings': {u'auto_radio': False, u'shuffle': False, u'loop': u'disabled'}, u'outputs': [{u'output_id': u'1701c65c1ac106d7d3c8c6782c8eca432416', u'display_name': u'Study', u'zone_id': u'160142aaf7582d500549a9b51697cf57192e', u'source_controls': [{u'status': u'indeterminate', u'control_key': u'1', u'display_name': u'Yamaha NX-N500 Output', u'supports_standby': False}], u'volume': {u'hard_limit_min': 0, u'min': 0, u'is_muted': False, u'max': 100, u'value': 20, u'step': 1, u'hard_limit_max': 100, u'soft_limit': 100, u'type': u'number'}, u'can_group_with_output_ids': [u'1701d7cff40b67e8ab59524e1b23358cbfb0', u'1701de745b23dceb5a169a22b5e9ad56ccce', u'17012797a39d1d2944133f83c753f69db38b', u'1701cce9e2c094698e8ed5214d7fa43edf58', u'1701c65c1ac106d7d3c8c6782c8eca432416', u'1701a95377db0b4f193431dd4e99288fff9a']}, {u'output_id': u'1701de745b23dceb5a169a22b5e9ad56ccce', u'display_name': u'Living Room', u'zone_id': u'160142aaf7582d500549a9b51697cf57192e', u'source_controls': [{u'status': u'indeterminate', u'control_key': u'1', u'display_name': u'Bluesound NODE 2i', u'supports_standby': False}], u'volume': {u'hard_limit_min': 0, u'min': 0, u'is_muted': False, u'max': 100, u'value': 100, u'step': 1, u'hard_limit_max': 100, u'soft_limit': 100, u'type': u'number'}, u'can_group_with_output_ids': [u'1701d7cff40b67e8ab59524e1b23358cbfb0', u'1701de745b23dceb5a169a22b5e9ad56ccce', u'17012797a39d1d2944133f83c753f69db38b', u'1701cce9e2c094698e8ed5214d7fa43edf58', u'1701c65c1ac106d7d3c8c6782c8eca432416', u'1701a95377db0b4f193431dd4e99288fff9a']}], u'now_playing': {u'artist_image_keys': [u'378cbea01f97ff4d409ccf50ffe3d091'], u'image_key': u'6f76e6e24325794dac45735aa76f47b8', u'three_line': {u'line3': u'Forever Changes (2015 Remastered Version)', u'line2': u'Love / Arthur Lee & Love', u'line1': u'Alone Again Or'}, u'one_line': {u'line1': u'Alone Again Or - Love / Arthur Lee & Love'}, u'length': 197, u'seek_position': 185, u'two_line': {u'line2': u'Love / Arthur Lee & Love', u'line1': u'Alone Again Or'}}, u'is_seek_allowed': True, u'is_pause_allowed': True, u'is_previous_allowed': True, **u'state': u'playing'**, **u'seek_position': 165**, u'is_play_allowed': False, u'is_next_allowed': True}

Zone ungrouped
‘queue_time_remaining’ and ‘seek_position’ still updating but ‘state’ becomes ‘paused’

>ROON: ZONES SEEK CHANGED ZONE DATA :{u'queue_items_remaining': 11, **u'queue_time_remaining': 2400**, u'display_name': u'Study', u'zone_id': u'1601c65c1ac106d7d3c8c6782c8eca432416', u'settings': {u'auto_radio': False, u'shuffle': False, u'loop': u'disabled'}, u'outputs': [{u'output_id': u'1701c65c1ac106d7d3c8c6782c8eca432416', u'display_name': u'Study', u'zone_id': u'1601c65c1ac106d7d3c8c6782c8eca432416', u'source_controls': [{u'status': u'indeterminate', u'control_key': u'1', u'display_name': u'Yamaha NX-N500 Output', u'supports_standby': False}], u'volume': {u'hard_limit_min': 0, u'min': 0, u'is_muted': False, u'max': 100, u'value': 20, u'step': 1, u'hard_limit_max': 100, u'soft_limit': 100, u'type': u'number'}, u'can_group_with_output_ids': [u'1701d7cff40b67e8ab59524e1b23358cbfb0', u'1701de745b23dceb5a169a22b5e9ad56ccce', u'17012797a39d1d2944133f83c753f69db38b', u'1701cce9e2c094698e8ed5214d7fa43edf58', u'1701c65c1ac106d7d3c8c6782c8eca432416', u'1701a95377db0b4f193431dd4e99288fff9a']}], u'now_playing': {u'artist_image_keys': [u'378cbea01f97ff4d409ccf50ffe3d091'], u'image_key': u'6f76e6e24325794dac45735aa76f47b8', u'three_line': {u'line3': u'Forever Changes (2015 Remastered Version)', u'line2': u'Love / Arthur Lee & Love', u'line1': u'Alone Again Or'}, u'one_line': {u'line1': u'Alone Again Or - Love / Arthur Lee & Love'}, u'length': 197, u'seek_position': 165, u'two_line': {u'line2': u'Love / Arthur Lee & Love', u'line1': u'Alone Again Or'}}, u'is_seek_allowed': True, u'is_pause_allowed': False, u'is_previous_allowed': True, **u'state': u'paused'**, **u'seek_position': 166**, u'is_play_allowed': True, u'is_next_allowed': True}
>ROON: ZONES SEEK CHANGED ZONE DATA :{u'queue_items_remaining': 11, **u'queue_time_remaining': 2399**, u'display_name': u'Study', u'zone_id': u'1601c65c1ac106d7d3c8c6782c8eca432416', u'settings': {u'auto_radio': False, u'shuffle': False, u'loop': u'disabled'}, u'outputs': [{u'output_id': u'1701c65c1ac106d7d3c8c6782c8eca432416', u'display_name': u'Study', u'zone_id': u'1601c65c1ac106d7d3c8c6782c8eca432416', u'source_controls': [{u'status': u'indeterminate', u'control_key': u'1', u'display_name': u'Yamaha NX-N500 Output', u'supports_standby': False}], u'volume': {u'hard_limit_min': 0, u'min': 0, u'is_muted': False, u'max': 100, u'value': 20, u'step': 1, u'hard_limit_max': 100, u'soft_limit': 100, u'type': u'number'}, u'can_group_with_output_ids': [u'1701d7cff40b67e8ab59524e1b23358cbfb0', u'1701de745b23dceb5a169a22b5e9ad56ccce', u'17012797a39d1d2944133f83c753f69db38b', u'1701cce9e2c094698e8ed5214d7fa43edf58', u'1701c65c1ac106d7d3c8c6782c8eca432416', u'1701a95377db0b4f193431dd4e99288fff9a']}], u'now_playing': {u'artist_image_keys': [u'378cbea01f97ff4d409ccf50ffe3d091'], u'image_key': u'6f76e6e24325794dac45735aa76f47b8', u'three_line': {u'line3': u'Forever Changes (2015 Remastered Version)', u'line2': u'Love / Arthur Lee & Love', u'line1': u'Alone Again Or'}, u'one_line': {u'line1': u'Alone Again Or - Love / Arthur Lee & Love'}, u'length': 197, u'seek_position': 165, u'two_line': {u'line2': u'Love / Arthur Lee & Love', u'line1': u'Alone Again Or'}}, u'is_seek_allowed': True, u'is_pause_allowed': False, u'is_previous_allowed': True, **u'state': u'paused'**, **u'seek_position': 167**, u'is_play_allowed': True, u'is_next_allowed': True}
>ROON: ZONES SEEK CHANGED ZONE DATA :{u'queue_items_remaining': 11, **u'queue_time_remaining': 2398**, u'display_name': u'Study', u'zone_id': u'1601c65c1ac106d7d3c8c6782c8eca432416', u'settings': {u'auto_radio': False, u'shuffle': False, u'loop': u'disabled'}, u'outputs': [{u'output_id': u'1701c65c1ac106d7d3c8c6782c8eca432416', u'display_name': u'Study', u'zone_id': u'1601c65c1ac106d7d3c8c6782c8eca432416', u'source_controls': [{u'status': u'indeterminate', u'control_key': u'1', u'display_name': u'Yamaha NX-N500 Output', u'supports_standby': False}], u'volume': {u'hard_limit_min': 0, u'min': 0, u'is_muted': False, u'max': 100, u'value': 20, u'step': 1, u'hard_limit_max': 100, u'soft_limit': 100, u'type': u'number'}, u'can_group_with_output_ids': [u'1701d7cff40b67e8ab59524e1b23358cbfb0', u'1701de745b23dceb5a169a22b5e9ad56ccce', u'17012797a39d1d2944133f83c753f69db38b', u'1701cce9e2c094698e8ed5214d7fa43edf58', u'1701c65c1ac106d7d3c8c6782c8eca432416', u'1701a95377db0b4f193431dd4e99288fff9a']}], u'now_playing': {u'artist_image_keys': [u'378cbea01f97ff4d409ccf50ffe3d091'], u'image_key': u'6f76e6e24325794dac45735aa76f47b8', u'three_line': {u'line3': u'Forever Changes (2015 Remastered Version)', u'line2': u'Love / Arthur Lee & Love', u'line1': u'Alone Again Or'}, u'one_line': {u'line1': u'Alone Again Or - Love / Arthur Lee & Love'}, u'length': 197, u'seek_position': 165, u'two_line': {u'line2': u'Love / Arthur Lee & Love', u'line1': u'Alone Again Or'}}, u'is_seek_allowed': True, u'is_pause_allowed': False, u'is_previous_allowed': True, **u'state': u'paused'**, **u'seek_position': 168**, u'is_play_allowed': True, u'is_next_allowed': True}

Snipped
Track about to end

>ROON: ZONES SEEK CHANGED ZONE DATA :{u'queue_items_remaining': 11, **u'queue_time_remaining': 2370**, u'display_name': u'Study', u'zone_id': u'1601c65c1ac106d7d3c8c6782c8eca432416', u'settings': {u'auto_radio': False, u'shuffle': False, u'loop': u'disabled'}, u'outputs': [{u'output_id': u'1701c65c1ac106d7d3c8c6782c8eca432416', u'display_name': u'Study', u'zone_id': u'1601c65c1ac106d7d3c8c6782c8eca432416', u'source_controls': [{u'status': u'indeterminate', u'control_key': u'1', u'display_name': u'Yamaha NX-N500 Output', u'supports_standby': False}], u'volume': {u'hard_limit_min': 0, u'min': 0, u'is_muted': False, u'max': 100, u'value': 20, u'step': 1, u'hard_limit_max': 100, u'soft_limit': 100, u'type': u'number'}, u'can_group_with_output_ids': [u'1701d7cff40b67e8ab59524e1b23358cbfb0', u'1701de745b23dceb5a169a22b5e9ad56ccce', u'17012797a39d1d2944133f83c753f69db38b', u'1701cce9e2c094698e8ed5214d7fa43edf58', u'1701c65c1ac106d7d3c8c6782c8eca432416', u'1701a95377db0b4f193431dd4e99288fff9a']}], u'now_playing': {u'artist_image_keys': [u'378cbea01f97ff4d409ccf50ffe3d091'], u'image_key': u'6f76e6e24325794dac45735aa76f47b8', u'three_line': {u'line3': u'Forever Changes (2015 Remastered Version)', u'line2': u'Love / Arthur Lee & Love', u'line1': u'Alone Again Or'}, u'one_line': {u'line1': u'Alone Again Or - Love / Arthur Lee & Love'}, u'length': 197, u'seek_position': 165, u'two_line': {u'line2': u'Love / Arthur Lee & Love', u'line1': u'Alone Again Or'}}, u'is_seek_allowed': True, u'is_pause_allowed': False, u'is_previous_allowed': True, **u'state': u'paused'**, **u'seek_position': 196**, u'is_play_allowed': True, u'is_next_allowed': True}

Next Track Starts
‘state’ now showing as ‘playing’

>ROON: ZONES SEEK CHANGED ZONE DATA :{u'queue_items_remaining': 10, **u'queue_time_remaining': 2369**, u'display_name': u'Study', u'zone_id': u'1601c65c1ac106d7d3c8c6782c8eca432416', u'settings': {u'auto_radio': False, u'shuffle': False, u'loop': u'disabled'}, u'outputs': [{u'output_id': u'1701c65c1ac106d7d3c8c6782c8eca432416', u'display_name': u'Study', u'zone_id': u'1601c65c1ac106d7d3c8c6782c8eca432416', u'source_controls': [{u'status': u'indeterminate', u'control_key': u'1', u'display_name': u'Yamaha NX-N500 Output', u'supports_standby': False}], u'volume': {u'hard_limit_min': 0, u'min': 0, u'is_muted': False, u'max': 100, u'value': 20, u'step': 1, u'hard_limit_max': 100, u'soft_limit': 100, u'type': u'number'}, u'can_group_with_output_ids': [u'1701d7cff40b67e8ab59524e1b23358cbfb0', u'1701de745b23dceb5a169a22b5e9ad56ccce', u'17012797a39d1d2944133f83c753f69db38b', u'1701cce9e2c094698e8ed5214d7fa43edf58', u'1701c65c1ac106d7d3c8c6782c8eca432416', u'1701a95377db0b4f193431dd4e99288fff9a']}], u'now_playing': {u'artist_image_keys': [u'378cbea01f97ff4d409ccf50ffe3d091'], u'image_key': u'6f76e6e24325794dac45735aa76f47b8', u'three_line': {u'line3': u'Forever Changes (2015 Remastered Version)', u'line2': u'Love / Arthur Lee & Love', u'line1': u'A House Is Not a Motel'}, u'one_line': {u'line1': u'A House Is Not a Motel - Love / Arthur Lee & Love'}, u'length': 211, u'seek_position': 0, u'two_line': {u'line2': u'Love / Arthur Lee & Love', u'line1': u'A House Is Not a Motel'}}, u'is_seek_allowed': True, u'is_pause_allowed': True, u'is_previous_allowed': True, **u'state': u'playing'**, **u'seek_position': 0**, u'is_play_allowed': False, u'is_next_allowed': True}
>ROON: ZONES SEEK CHANGED ZONE DATA :{u'queue_items_remaining': 10, **u'queue_time_remaining': 2368**, u'display_name': u'Study', u'zone_id': u'1601c65c1ac106d7d3c8c6782c8eca432416', u'settings': {u'auto_radio': False, u'shuffle': False, u'loop': u'disabled'}, u'outputs': [{u'output_id': u'1701c65c1ac106d7d3c8c6782c8eca432416', u'display_name': u'Study', u'zone_id': u'1601c65c1ac106d7d3c8c6782c8eca432416', u'source_controls': [{u'status': u'indeterminate', u'control_key': u'1', u'display_name': u'Yamaha NX-N500 Output', u'supports_standby': False}], u'volume': {u'hard_limit_min': 0, u'min': 0, u'is_muted': False, u'max': 100, u'value': 20, u'step': 1, u'hard_limit_max': 100, u'soft_limit': 100, u'type': u'number'}, u'can_group_with_output_ids': [u'1701d7cff40b67e8ab59524e1b23358cbfb0', u'1701de745b23dceb5a169a22b5e9ad56ccce', u'17012797a39d1d2944133f83c753f69db38b', u'1701cce9e2c094698e8ed5214d7fa43edf58', u'1701c65c1ac106d7d3c8c6782c8eca432416', u'1701a95377db0b4f193431dd4e99288fff9a']}], u'now_playing': {u'artist_image_keys': [u'378cbea01f97ff4d409ccf50ffe3d091'], u'image_key': u'6f76e6e24325794dac45735aa76f47b8', u'three_line': {u'line3': u'Forever Changes (2015 Remastered Version)', u'line2': u'Love / Arthur Lee & Love', u'line1': u'A House Is Not a Motel'}, u'one_line': {u'line1': u'A House Is Not a Motel - Love / Arthur Lee & Love'}, u'length': 211, u'seek_position': 0, u'two_line': {u'line2': u'Love / Arthur Lee & Love', u'line1': u'A House Is Not a Motel'}}, u'is_seek_allowed': True, u'is_pause_allowed': True, u'is_previous_allowed': True, **u'state': u'playing'**, **u'seek_position': 1**, u'is_play_allowed': False, u'is_next_allowed': True}
1 Like

That does look like a bug in our API. My understanding of the steps you are saying will reproduce the problem is:

  1. Use something like https://github.com/pluggemi/roon-web-controller or your python library to connect to the transport API
  2. Group at least two zones
  3. Start playing music to the grouped zone
  4. Ungroup the grouped zone
  5. Observe the queue_time_remaining continuing to change and state: playing

Is that correct?

@ivan or @vova, could you trying those steps and make a ticket for me?

Hi Ben,
Yes, that’s about it, accept for Item 5. which should be:
5. Observe the queue_time_remaining continuing to change and state: paused/stopped.
i.e. state: is incorrectly set to paused or stopped until the next track starts playing.

@ben, ok, sure thing, I will try to reproduce this.


Ivan