The way I've done this is to use an EnergyPlus measure to have the exterior walls reference an SurfaceProperty:ExteriorNaturallyVentedCavity object that the measure adds. The object models an opaque surface (if your double skin is glazed then it won't be appropriate), and also only effects opaque exterior surfaces (i.e. won't cover windows).
The measure creates a SurfaceProperty:OtherSideConditionsModel object:
sideConditionModel = "
SurfaceProperty:OtherSideConditionsModel,
ScreenCavityModel, ! OtherSideConditionsModel Name
GapConvectionRadiation; ! Type of Modeling used to determine Boundary Conditions
"
object = OpenStudio::IdfObject::load(sideConditionModel).get
wsObject = workspace.addObject(object)
then loops through the model surfaces to find exterior walls (by construction or surface type or other criteria of your choice), and assigns the other side condition with
surface.setString(4,"OtherSideConditionsModel")
surface.setString(5,"ScreenCavityModel")
and finally adds the ExteriorNaturallyVentedCavity object:
naturallyVentedCavity = "
SurfaceProperty:ExteriorNaturalVentedCavity,
Vented Cavity Exterior Surface, ! Name
ScreenCavityModel, ! OtherSideConditionsModel Object Name
0.02, ! Area Fraction of Openings
0.9, ! Thermal Emissivity of Exterior Baffle Material
0.92, ! Solar Absorbtivity of Exterior Baffle
0.05, ! Height scale for bouyancy-driven ventilation
0.05, ! Effective Thickness of Cavity Behind Exterior Baffle
0.97, ! Ratio of Actual surface area to projected surface area
Smooth , ! Roughness of collector
0.1 , ! Cv, Effectiveness for perforations with respect to Wind
0.5 , ! Cd, Discharge Coefficient for Openings with respect to bouyancy-driven flow
#{surface_names.join(",")} ; ! Surface Name
"
cavity = OpenStudio::IdfObject::load(naturallyVentedCavity).get
wsCavity = workspace.addObject(cavity)
To find the heat transfer through the object would likely take some creative post-processing, for which I will refer you to the object outputs.