I think I may have found a bug in the Roon API?
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}