Revision history [back]
After much faffing, I finally got it all working.
The key points were:
- FMPy doesn't work with EnergyPlusToFMU
 - The PyFMI on the chria channel is not being maintained. The one on conda-forge seems to be the best place to get the binary package.
 - The 
_fmu-export-actuator.idfsimulation is in fact three days long, and differences are only visible on the third day! - Initialising yShade is not enough, you must pass it in to the 
inputparameter ofsimulate(). 
I've added my final python file to a gist (with graphs of the output) as it's pretty long and I can only upload images here. The important bit is this though:
# ...
# Setup the input array.
step_size = seconds_in_hour / idf_steps_per_hour
shade_val = np.array([(i*step_size, yShade) for i in range(ncp)])
shade_val = ('yShade', shade_val)
# Set initial value of yShade
model.set(shade_val[0], shade_val[1][0][1])
res = model.simulate(start_time=0,
                     final_time=final_time,
                     input=shade_val,  # This must be passed in!
                     options=opts)
# ...
 And here's a couple of graphs so that people know what to look for:
yShade = 0:

yShade = 7:

After much faffing, I finally got it all working.
The key points were:
- FMPy doesn't work with EnergyPlusToFMU
 - The PyFMI on the chria channel is not being maintained. The one on conda-forge seems to be the best place to get the binary package.
 - The 
_fmu-export-actuator.idfsimulation is in fact three days long, and differences are only visible on the third day! - Initialising yShade is not enough, you must pass it in to the 
inputparameter ofsimulate(). 
I've added my final python file to a gist (with graphs of the output) as it's pretty long and I can only upload images here. The important bit is this though:
# ...
# Setup the input array.
step_size = seconds_in_hour / idf_steps_per_hour
shade_val = np.array([(i*step_size, yShade) for i in range(ncp)])
shade_val = ('yShade', shade_val)
# Set initial value of yShade
model.set(shade_val[0], shade_val[1][0][1])
res = model.simulate(start_time=0,
                     final_time=final_time,
                     input=shade_val,  # This must be passed in!
                     options=opts)
# ...
 And here's a couple of graphs so that people know what to look for:
yShade = 0:

yShade = 7:
