global updateAvailableEvent updateAvailableEvent.wait() returndata = [] r = {} r['changes'] = True returndata.append(r) return json.dumps(returndata) def __updateAvailableCallback(): global updateAvailableEvent updateAvailableEvent.set() def __resetUpdateAvailableEventThread(): global updateAvailableEvent while True: updateAvailableEvent.wait() updateAvailableEvent.clear() raumfeld.registerChangeCallback(__updateAvailableCallback) raumfeld.init() # Start observing the device list resetUpdateAvailableEventThread = threading.Thread( target=__resetUpdateAvailableEventThread) resetUpdateAvailableEventThread.daemon = True resetUpdateAvailableEventThread.start() run(host='0.0.0.0', port=8080, debug=True)
"""Returns when an update in the DataStructure happened""" global updateAvailableEvent updateAvailableEvent.wait() returndata = [] r = {} r['changes'] = True returndata.append(r) return json.dumps(returndata) def __updateAvailableCallback(): global updateAvailableEvent updateAvailableEvent.set() def __resetUpdateAvailableEventThread(): global updateAvailableEvent while True: updateAvailableEvent.wait() updateAvailableEvent.clear() raumfeld.registerChangeCallback(__updateAvailableCallback) raumfeld.init() print("Host URL: " +raumfeld.hostBaseURL) # Start observing the device list resetUpdateAvailableEventThread = threading.Thread(target=__resetUpdateAvailableEventThread) resetUpdateAvailableEventThread.daemon = True resetUpdateAvailableEventThread.start() run(host='0.0.0.0', port=8080, debug=True)
unicode(renderer.volume)) print("Unassigned Rooms:") for room in raumfeld.getUnassignedRooms(): print("Name: " + room.Name + " UDN: " + room.UDN) for renderer in room.getRenderers(): print("\tUDN: " + renderer.UDN + " Name: " + renderer.Name + " Location: " + renderer.Location) print( "########## This gets updated when the config changes. To QUIT press any key... ##########" ) #kueche = raumfeld.getRoomsByName(u'Küche')[0] #kuecheZone = raumfeld.getZoneWithRoomName(u'Wohnzimmer')[0] #status = kuecheZone.mute #print("Mute: {0}".format(status)) #kueche.mute = not status #kuecheZone.play() #print("Volume: {0}".format(kuecheZone.volume)) #raumfeld.connectRoomToZone(kueche.UDN) raumfeld.setLogging(logging.WARN) raumfeld.registerChangeCallback(dataHasBeenUpdated) raumfeld.init() # or with the host IP: raumfeld.init("192.168.0.10") print("Host URL: " + raumfeld.hostBaseURL) # To QUIT press any key... raw_input()
* getZoneWithRoom(room_obj) returns the Zone containing the provided room object * getZoneWithRoomName(name) returns the Zone containing a room defined by its name * getZoneWithRoomUDN(udn) returns the Zone containing a room defined by its UDN Zone-Configuration-Functions are: * dropRoomByUDN(udn) drops a room from its Zone * connectRoomToZone(room_udn, [zone_udn(optional)] puts the room with the given roomUDN in the zone with the zoneUDN. If no zone_udn is provided, a new zone is created Global variables: * hostBaseURL (readonly) the base URL of the host * debug (True/False) to show debug messages ''' import raumfeld raumfeld.debug = True raumfeld.init("10.10.10.93") #raw_input('Press any key to end...') print(raumfeld.hostBaseURL) inp = '' while inp == '': print("Zones:") for zone in raumfeld.getZones(): print("UDN: " + zone.UDN + " Name: " + zone.Name + " Location: " + zone.Location) for room in zone.getRooms(): print("\tUDN: " + room.UDN + " Name: " + room.Name) for renderer in room.getRenderers(): print("\t\tUDN: " + renderer.UDN + " Name: " + renderer.Name + " Location: " + renderer.Location + " Volume: " +
for room in zone.getRooms(): print("\tUDN: " + room.UDN + " Name: " + room.Name) for renderer in room.getRenderers(): print("\t\tUDN: " + renderer.UDN + " Name: " + renderer.Name + " Location: " + renderer.Location + " Volume: " + unicode(renderer.volume)) print("Unassigned Rooms:") for room in raumfeld.getUnassignedRooms(): print("Name: " + room.Name + " UDN: " + room.UDN) for renderer in room.getRenderers(): print("\tUDN: " + renderer.UDN + " Name: " + renderer.Name + " Location: " + renderer.Location) print("########## This gets updated when the config changes. To QUIT press any key... ##########") #kueche = raumfeld.getRoomsByName(u'Küche')[0] #kuecheZone = raumfeld.getZoneWithRoomName(u'Wohnzimmer')[0] #status = kuecheZone.mute #print("Mute: {0}".format(status)) #kueche.mute = not status #kuecheZone.play() #print("Volume: {0}".format(kuecheZone.volume)) #raumfeld.connectRoomToZone(kueche.UDN) raumfeld.setLogging(logging.WARN); raumfeld.registerChangeCallback(dataHasBeenUpdated) raumfeld.init() # or with the host IP: raumfeld.init("192.168.0.10") print("Host URL: " +raumfeld.hostBaseURL) # To QUIT press any key... raw_input()
playlist_items, item_count = browse_children(all_tracks['id']) elif cur_meta['class'] == 'object.item.audioItem.audioBroadcast.radio': playlist_items, item_count = [cur_meta], '0' else: playlist_items, item_count = browse_children(cur_meta['parentID']) except: playlist_items, item_count = [cur_meta], '0' __browseLock.release() return template('playlist', playlist_items = playlist_items, queue_id = queue_id, item_count = item_count, cur_track = cur_track) raumfeld.registerChangeCallback(discover_active_zone) raumfeld.debug = True if os.path.isfile('host_ip')==False: raumfeld.init() else: with open('host_ip', 'a+') as f: host_ip = f.readlines()[0] raumfeld.init(host_ip) check_title_change_thread = threading.Thread(target=check_title_change) check_title_change_thread.daemon = True check_title_change_thread.start() resetUpdateAvailableEventThread = threading.Thread(target=__resetUpdateAvailableEventThread) resetUpdateAvailableEventThread.daemon = True resetUpdateAvailableEventThread.start() from gevent.pywsgi import WSGIServer