code: def open_interface_async(self, conn_id, interface, callback, connection_string=None):
          
  
          if interface not in {"rpc", "script", "streaming", "tracing", "debug"}:
              callback(conn_id, self.id, False, "invalid interface name in call to open_interface_async")
              return
  
          if interface == "rpc":
              self._open_rpc_interface(conn_id, callback)
          elif interface == 'script':
              self._open_script_interface(conn_id, callback)
          elif interface == 'streaming':
              self._open_streaming_interface(conn_id, callback)
          elif interface == 'tracing':
              self._open_tracing_interface(conn_id, callback)
          elif interface == 'debug':
              self._open_debug_interface(conn_id, callback, connection_string)
          else:
              callback(conn_id, self.id, False, "interface not supported yet")
docs: Asynchronously open an interface to this IOTile device
  
          The interface parameter must be one of (rpc, script, streaming,
          tracing, debug).  Not all interfaces will be supported by all
          DeviceAdapters.
  
          Args:
              interface (string): The interface to open
              conn_id (int): A unique identifier that will refer to this connection
              callback (callable):  A callback that will be called as
                  callback(conn_id, adapter_id, success, failure_reason)
              connection_string (string): An optional DeviceAdapter specific string that can be used to connect to
                  a device using this DeviceAdapter.