def __init__(self, switch_callback=_NOOP, motion_callback=_NOOP, bridge_callback=_NOOP,<EOL>maker_callback=_NOOP, with_discovery=True, with_subscribers=True, with_cache=_MARKER, <EOL>bind=None, config_filename=None):
if with_cache is not _MARKER:<EOL><INDENT>log.warn("<STR_LIT>")<EOL><DEDENT>self._config = WemoConfiguration(filename=config_filename)<EOL>self.upnp = UPnP(bind=bind or self._config.bind)<EOL>discovered.connect(self._found_device, self.upnp)<EOL>self.registry = SubscriptionRegistry()<EOL>self._with_discovery = with_discovery<EOL>self._with_subscribers = with_subscribers<EOL>self._switch_callback = switch_callback<EOL>self._motion_callback = motion_callback<EOL>self._bridge_callback = bridge_callback<EOL>self._maker_callback = maker_callback<EOL>self._switches = {}<EOL>self._motions = {}<EOL>self._bridges = {}<EOL>self._makers = {}<EOL>self.devices = {}<EOL>
Create a WeMo environment.

@param switch_callback: A function to be called when a new switch is
                        discovered.
@type switch_callback:  function
@param motion_callback: A function to be called when a new motion is
                        discovered.
@type motion_callback:  function
@param with_subscribers: Whether to register for events with discovered
                        devices.
@type with_subscribers: bool
@param bind: ip:port to which to bind the response server.
@type bind: str