Ok I got it sorted ! It needed an Autodesk.Revit.DB.Parameter for the element parameter and Autodesk.Revit.DB.FamilyParameter for the family parameter. The below is a bit messy and can use some improvement but it worked for my purposes. It will only process one element but it will associate multiple parameters; give the Python script node a list of parameter names (strings) and the family parameter names to associate them with like so:
Script:
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)
clr.AddReference('RevitServices')
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
elem = UnwrapElement(IN[0])
paramNames = IN[1]
famNames = IN[2]
if not isinstance(paramNames, list):
paramNames = [paramNames]
if not isinstance(famNames, list):
famNames = [famNames]
elemParams = elem.Parameters
famParams = doc.FamilyManager.Parameters
elemAssoc = []
famAssoc = []
for param in elemParams:
for name in paramNames:
if param.Definition.Name == name:
elemAssoc.append(param)
for fparam in famParams:
for fname in famNames:
if fparam.Definition.Name == fname:
famAssoc.append(fparam)
TransactionManager.Instance.EnsureInTransaction(doc)
for i,j in zip(elemAssoc, famAssoc):
doc.FamilyManager.AssociateElementParameterToFamilyParameter(i, j)
TransactionManager.Instance.TransactionTaskDone()
OUT = elem
Let me know if this works for you as well & if you improve upon it please share