There would be another, "artificial" approach to this, that would not only let you use simply your Perk as condition, but also offer an high compatibility with modded smeltable objects, and even let you choose the XP value depending on the object, with no alterations at all.
ScriptName PlayerSmeltingScript extends ReferenceAliasFurniture Property CraftingSmelterMarker1 AutoEVENT OnItemAdded(Form Object, Int ObjectCount, ObjectReference ObjectRef, ObjectReference ContainerRef)if ( PlayerRef.HasPerk(YourPerk) )if ( Object as MiscObject ) ObjectReference SmelterRef = FindClosestReferenceOfTypeFromRef(CraftingSmelterMarker1, PlayerRef, 200.0)if ( SmelterRef ) && ( SmelterRef.IsFurnitureInUse() )if ( !IsInMenuMode() ) && ( !IsFightingControlsEnabled() ) && ( PlayerRef.GetAnimationVariableBool("bAnimationDriven") ) AdvanceSkill("Smithing", ((Object.GetGoldValue()/100)*ObjectCount) as float) ; XP linked to Gold Value, for example Notification("Player has smelted "+ObjectCount+" "+Object.GetName()+" XP = "+((Object.GetGoldValue()/100)*ObjectCount) as float)endifendifendifendifEndEVENT