code: def _send_rpc(self, client, uuid, address, rpc, payload, timeout, key):
          
  
          conn_id = self._validate_connection('send_rpc', uuid, key)
          if conn_id is None:
              return
  
          conn_data = self._connections[uuid]
          conn_data['last_touch'] = monotonic()
  
          slug = self._build_device_slug(uuid)
  
          try:
              resp = yield self._manager.send_rpc(conn_id, address, rpc >> 8, rpc & 0xFF, bytes(payload), timeout)
          except Exception as exc:
              self._logger.error("Error in manager send rpc: %s" % str(exc))
              resp = {'success': False, 'reason': "Internal error: %s" % str(exc)}
  
          payload = {'client': client, 'type': 'response', 'operation': 'rpc'}
          payload['success'] = resp['success']
  
          if resp['success'] is False:
              payload['failure_reason'] = resp['reason']
          else:
              payload['status'] = resp['status']
              payload['payload'] = binascii.hexlify(resp['payload'])
  
          self._publish_response(slug, payload)
docs: Send an RPC to a connected device
  
          Args:
              client (string): The client that sent the rpc request
              uuid (int): The id of the device we're opening the interface on
              address (int): The address of the tile that we want to send the RPC to
              rpc (int): The id of the rpc that we want to send.
              payload (bytearray): The payload of arguments that we want to send
              timeout (float): The number of seconds to wait for the response
              key (string): The key to authenticate the caller