Skip to content

Instantly share code, notes, and snippets.

@sisamiwe
Created October 20, 2023 12:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sisamiwe/3b9b50d3bfe12256d451493111298e2f to your computer and use it in GitHub Desktop.
Save sisamiwe/3b9b50d3bfe12256d451493111298e2f to your computer and use it in GitHub Desktop.
soco_play_all
import soco
zones = soco.discover()
# store current topology
named_zones = {zone.player_name: zone for zone in zones}
_topology = {}
alert_uri = "https://ia800503.us.archive.org/8/items/futuresoundfx-98/futuresoundfx-96.mp3"
print('>> GROUPING: Group Büronos to Esszimmer')
named_zones['Büronos'].join(named_zones['Esszimmer'])
time.sleep(1)
for zone in zones:
_topology[zone.player_name] = zone.group
print(f"{named_zones=}")
print(f"{zones=}")
print(f"{_topology=}")
# _get_biggest_zone
biggest_zone = zones.pop()
for zones in zones:
if len(zone.group.members) > len(biggest_zone.group.members):
biggest_zone = zone
print(f"{biggest_zone.player_name=}")
# biggest_zone.play_uri(uri=alert_uri, title="Sonos Alert")
print()
print('>> UN-GROUPING')
for member in named_zones['Esszimmer'].group.members:
if member.is_visible:
if member.is_coordinator:
print(f"Not ungrouping coordinator speaker '{member.player_name}'")
else:
member.unjoin()
print(f"Ungrouped speaker '{member.player_name}'")
print()
print('>> RE-GROUPING')
zones = soco.discover()
named_zones = {zone.player_name: zone for zone in zones}
print(f"{named_zones=}")
print(f"{zones=}")
for zone in zones:
for zone_name in _topology:
if zone in _topology[zone_name].members and zone != _topology[zone_name].coordinator: # Wenn aktuelle Zone damals Member war aber nicht Coordinator, dann
#print(f"Zone {zone.player_name} was Member")
#print(f"Coordinator was {_topology[zone_name].coordinator.player_name}")
print(f"Coordinator: {named_zones[_topology[zone_name].coordinator.player_name]}: Members: {named_zones[_topology[zone_name].coordinator.player_name].group.members}")
if zone not in named_zones[_topology[zone_name].coordinator.player_name].group.members:
print(f"Re-gouping {zone.player_name} to {_topology[zone_name].coordinator.player_name}")
zone.join(_topology[zone_name].coordinator)
time.sleep(1)
else:
print('old member already part of new group')
time.sleep(1)
print()
print('>> RESULT')
zones = soco.discover()
named_zones = {zone.player_name: zone for zone in zones}
for zone in zones:
print(zone.group.members)
import soco
zones = soco.discover()
# store current topology
named_zones = {zone.player_name: zone for zone in zones}
_topology = set()
alert_uri = "https://ia800503.us.archive.org/8/items/futuresoundfx-98/futuresoundfx-96.mp3"
print('>> GROUPING: Group Büronos to Esszimmer')
named_zones['Büronos'].join(named_zones['Esszimmer'])
time.sleep(1)
for zone in zones:
_topology.add(zone.group)
print(f"{named_zones=}")
print(f"{zones=}")
print(f"{_topology=}")
# _get_biggest_zone
biggest_zone = zones.pop()
for zones in zones:
if len(zone.group.members) > len(biggest_zone.group.members):
biggest_zone = zone
print(f"{biggest_zone.player_name=}")
# biggest_zone.play_uri(uri=alert_uri, title="Sonos Alert")
print()
print('>> UN-GROUPING')
for member in named_zones['Esszimmer'].group.members:
if member.is_visible:
if member.is_coordinator:
print(f"Not ungrouping coordinator speaker '{member.player_name}'")
else:
member.unjoin()
print(f"Ungrouped speaker '{member.player_name}'")
print()
print('>> RE-GROUPING')
zones = soco.discover()
named_zones = {zone.player_name: zone for zone in zones}
print(f"{named_zones=}")
print(f"{zones=}")
for zone in zones:
for zonegroup in _topology:
print(f"{zonegroup=}")
if zone in zonegroup.members and zone != zonegroup.coordinator: # Wenn aktuelle Zone damals Member war aber nicht Coordinator, dann
#print(f"Zone {zone.player_name} was Member")
#print(f"Coordinator was {zonegroup.coordinator.player_name}")
#print(f"Coordinator: {named_zones[zonegroup.coordinator.player_name]}: Members: {named_zones[zonegroup.coordinator.player_name].group.members}")
if zone not in named_zones[zonegroup.coordinator.player_name].group.members:
print(f"Re-gouping {zone.player_name} to {zonegroup.coordinator.player_name}")
zone.join(zonegroup.coordinator)
time.sleep(1)
else:
print('old member already part of new group')
time.sleep(1)
print()
print('>> RESULT')
zones = soco.discover()
topology = set()
for zone in zones:
topology.add(zone.group)
print(f"{_topology=}")
print(f"{ topology=}")
delta = _topology.intersection(topology)
print(f"{ delta=}")
if _topology == topology:
print('TOP')
else:
print('FLOP')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment