I’ve had good success using an RJ12 connection with my Omnidesk.
One quirk I discovered: the desk goes to sleep roughly 5 seconds after the last height message. If you send a command after this timeout, it gets ignored—so you’d need to send it twice to get a response.
To work around this, I’ve updated this on a fork of @Rocka84’s code to automatically send a “stop” message first if more than 4.5 seconds have passed since the last received message. This wakes the desk before sending any actual command.
I also noticed that near the physical limits, the desk can sometimes report inaccurate height values. For example, at the lowest position (63.7 cm), it occasionally returns something like 51.2 cm. So I’ve added logic to set any out-of-bounds readings to the nearest physical limit. The display seems to have similar logic as it shows the correct height (63.7cm) also.
I’m also interested to know how the bluetooth app is saving settings to the desk (i.e. custom heights and positions). I know it talks direct to the display as the controller has no bluetooth from what I can see? So I assume this is done via UART on the RJ45, but can’t see any TX pins in the original image. I have a logic analyser so would be great to find some more commands. If anyone has an idea of what pin the display is using for TX that would be great to know.