code: def send_script_async(self, conn_id, data, progress_callback, callback):
          
  
          try:
              context = self.conns.get_context(conn_id)
          except ArgumentError:
              callback(conn_id, self.id, False, "Could not find connection information")
              return
  
          topics = context['topics']
          context['progress_callback'] = progress_callback
  
          self.conns.begin_operation(conn_id, 'script', callback, 60.0)
  
          chunks = 1
          if len(data) > self.mtu:
              chunks = len(data) // self.mtu
              if len(data) % self.mtu != 0:
                  chunks += 1
  
          # Send the script out possibly in multiple chunks if it's larger than our maximum transmit unit
          for i in range(0, chunks):
              start = i*self.mtu
              chunk = data[start:start + self.mtu]
              encoded = base64.standard_b64encode(chunk)
  
              script_message = {'key': context['key'], 'client': self.name, 'type': 'command', 'operation': 'send_script',
                                'script': encoded, 'fragment_count': chunks, 'fragment_index': i}
  
              self.client.publish(topics.action, script_message)
docs: Asynchronously send a a script to this IOTile device
  
          Args:
              conn_id (int): A unique identifer that will refer to this connection
              data (string): the script to send to the device
              progress_callback (callable): A function to be called with status on our progress, called as:
                  progress_callback(done_count, total_count)
              callback (callable): A callback for when we have finished sending the script. The callback will be called as
                  callback(connection_id, adapter_id, success, failure_reason)
                  'connection_id': the connection id
                  'adapter_id': this adapter's id
                  'success': a bool indicating whether we received a response to our attempted RPC
                  'failure_reason': a string with the reason for the failure if success == False