Suggestion - independent sensor for detecting when curtain bot stops moving
I am not sure how the curtain bots calibration actually works. I guess it could count the revolutions of the motor / roller, or simply run a timer (or both). I know the bots should also switch off when they hit a hard stop (even though mine often do not).
However, I think it would be good to have some kind of "independent" sensor that detects how far the bot has moved and when it has stopped. Something like a second un-powered roller which could cross check its revolutions with the main roller, or even a motion sensing camera like the ones you get in a mouse. The mouse camera option would probably be simpler, cheaper and more robust to implement as it would all be solid-state.
In fact, in some cases this would mean no "calibration" would be necessary, as the curtain would just move until the sensor detected that the bot was no longer moving when it hits the end stop.