If the arduino can't keep up with the encoder count, you can use a dedicated chip (or the count function on the 32Bit Due) or use and FPGA like Pappilio which can run Arduino as well. As this is done in Parallel there should be no real issues there. As for encoders, Absolute encoders gets expensive and all they really do is have a battery onboard that allows the count to be saved when the power goes off. Just need to a home position for the encoder on power-up, thats all.
I read that I2C is good for 20 to 30m with an I2C bus extender.
I read a bit about DMX, but don't see how this could be satify.
I would like the addresses to be set automatically, if feasible. This way I can simply swap the slaves around and room_1 will always be room_1 no matter what slave I connect and without doing any addresssing apart from a power down/up.
The above may require that I run a another wire between each slave and each slave is initialiased in a set order, ie when slave_1 is up and running and master has given it an address, the an output goes high to the Slave_2 which then get initilaised.
I think that advanced position control, accel/decel rate, s curve smoothing with quadrature encoder feedback would be very useful. Not sure if serial would be beneficial as could be done via the Arduino.
Well, when using just one sensor the ambient light will have an effect. One way is to add another sensor which is physically offset, ie 30 degrees, so you measure the difference and act when the difference is more than x Off course you could also do this with one sensor, read the ambient light at the start, then act when it is more than x, just not as likely to be as reliable in real lift, but cheaper :-)