Servo with manual movement

I am working on a project where the servo could be moved manually, but the servo component doesn’t seem to have a way to set the current position of the servo via a lambda.

Currently I have a transition length set, but if I move the servo manually, then move it via ESPHome, it rapidly moves to the last position set by ESPHome, and then slowly moves to where I told ESPHome to move it to.

Is there a way around this problem that I am missing, or does the servo component need to be modified to have a way to update the position in memory without moving the servo?

A rotary encoder?

Isn’t that what the lambda you refer to would be reading position from?

Isn’t the difference between a “smart servo” and an analogue one the fact that smart servos add a rotary encoder + matching logic to know their position (amoungst many other features).

I have dabbled with the Lynxmotion LSS line and they allow you to configure hold vs limp mode. And in limp mode they update their position value. And let you make changes of direction relative to last.

I didn’t know how to built a “smart servo” with all that logic from an analogue one.

I have an analog feedback servo, but the problem is thag if transition_length is set, then the servo will rapidly jump back to the last set position and slowly move to the position that I tell it to go to.

Example:
ESPHome moves servo to -0.5
I move servo to ~0.5
I tell ESPHome to move to 1.0
ESPHome rapidly moves to -0.5, then slowly moves to 1.0

Have you found a solution so far? I assume you’re using the standard servo component from ESPHome? I’d like to implement this project from Adafruit: Code the Two Way Telegraph | Two Way Telegraph with Analog Feedback Servos | Adafruit Learning System
They did it with CircuitPython, but I want to use ESPHome and need a starting point on how to do it

Did anybody find a solution yet? I am having exaclty the same issue. I do have a rotary encoder (actually is a rotational switch, as my servo can physically be in only 5 positions), so I know the current position of the servo, but I don’t know how to tell this to esphome.