Some more finger exercises. 
So you could set up your single timeline as in the original. But only as a guide to get the Rotate angles etc. Or to use in more direct controls later on...
But to get through the complexity of what's needed in the animation in regard to duration and position of elements for each stage. you can then just use the Timeline as a guide to the properties needed and set them using code.
The property values would be set on the Additional Attributes of the buttons.
When the button is clicked it runs the code and its Attributes are read and used.
open Button

Half Open Button

The code uses the setProperty API. where we can set the property and duration.
The setProperty API also uses relative property values similar to a relative time line.
We do not get extra behaviour if the same button is clicked twice because the properties are already set to the values.
Code :
//== The Symbol
var machine_ = hypeDocument.getSymbolInstanceById('machine')
//== The Buttons
var Engranaje_ = machine_.element().querySelector('#Engranaje')
var Iris_ = machine_.element().querySelector('#Iris')
var Apertura_ = machine_.element().querySelector('#Apertura')
var Aspas_ = machine_.element().querySelector('#Aspas')
var Lampara_ = machine_.element().querySelector('#Lampara')
//== Action on for the Buttons Attributes
hypeDocument.setElementProperty(Engranaje_, 'rotateZ', element.getAttribute('EngranajeZAngle'), 2.0, 'easeinout')
hypeDocument.setElementProperty(Iris_, 'rotateZ', element.getAttribute('IrisZAngle'), 2.0, 'easeinout')
hypeDocument.setElementProperty(Apertura_, 'width', element.getAttribute('AperturaWH'), 2.0, 'easeinout')
hypeDocument.setElementProperty(Apertura_, 'height', element.getAttribute('AperturaWH'), 2.0, 'easeinout')
hypeDocument.setElementProperty(Apertura_, 'top', element.getAttribute('AperturaTop'), 2.0, 'easeinout')
hypeDocument.setElementProperty(Apertura_, 'left', element.getAttribute('AperturaLeft'), 2.0, 'easeinout')
hypeDocument.setElementProperty(Aspas_, 'rotateZ', element.getAttribute('AspasZAngle'), 2.0, 'easeinout')
//== Always set to 0 regardless
hypeDocument.setElementProperty(Lampara_, 'opacity', 0)
//== Action on for the Buttons Attributes // This will only really show the Lamp when needed.
setTimeout(() => {
hypeDocument.setElementProperty(Lampara_, 'opacity', element.getAttribute('Lampara'), 0.3, 'easeinout')
}, 1800);
machinery_mhv1.hype.zip (1.3 MB)