Created
October 20, 2023 12:37
-
-
Save sisamiwe/3b9b50d3bfe12256d451493111298e2f to your computer and use it in GitHub Desktop.
soco_play_all
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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