ElVit-esphome_components/components/maidsite_desk_controller/README.md

5.3 KiB

ESPHome Maidsite Desk Controller

ESPHome component for controlling Maidsite desk controllers via their serial protocol.

Attention: I only have one RJ12 model to test this but it's likely that other Maidsite controllers are supported as their serial protocol should be compatible.

Usage

What you need

  • ESPHome compatible microcontroller
  • depending on your model of desk controller
    • cable with RJ12 connector (phone cable, RJ11 may also work)
    • cable with RJ45 connector (network cable)

Wiring

RJ12

Please double check this for your specific model!

pin function
1 NC (pulled up)
2 GND
3 TX
4 VCC
5 RX
6 NC (pulled up)

RJ45

Untested and only for reference!

pin function
1 HS3 1
2 TX
3 GND
4 RX
5 VCC
6 HS2 1
7 HS1 1
8 HS0 1

microcontroller

ESP desk
GND GND
5V VCC
RX TX
TX RX

Usage

esphome:
  ...
  on_boot:
    # This script is required to initialize the following sensors:
    #    height_pct, height_min, height_max, position_m1 - position_m4
    # You can skip this if you don't use those.
    priority: 0 # when mostly everything else is done
    then:
      - lambda: "id(my_desk).request_physical_limits();"
      - delay: 0.1s
      - lambda: "id(my_desk).request_limits();"
      - delay: 0.1s
      - lambda: "id(my_desk).request_settings();"

external_components:
  - source:
      type: git
      url: https://github.com/ElVit/esphome_maidsite_desk/
    components: [ maidsite_desk_controller ]

uart:
  - id: uart_bus
    tx_pin: $pin_tx
    rx_pin: $pin_rx
    baud_rate: 9600

logger:
  baud_rate: 0 # disable logging over uart, required when using the RX/TX pins for the controller

maidsite_desk_controller:
  id: my_desk

  sensors:
    height_abs:
      name: "Height"

  numbers:
    height_abs:
      name: "Height"
      mode: SLIDER

  buttons:
    stop:
      name: "Stop"
    step_up:
      name: "Step up"
    step_down:
      name: "Step down"
    goto_m1:
      name: "Move to M1"
    goto_m2:
      name: "Move to M2"
    goto_m3:
      name: "Move to M3"
    goto_m4:
      name: "Move to M4"

button:
  - platform: template
    name: "Step down"
    on_press:
      lambda: "id(my_desk).goto_height(84.0);"

Examples

Features

sensors

sensor description
height_abs current height of the desk
height_pct height in percent
height_min minimal height
height_max maximal height
position_m1 1st stored height
position_m2 2nd stored height
position_m3 3rd stored height
position_m4 4th stored height

number entities

Hold current values read from the desk and set values to desk when changed.

sensor description
height_abs current height of the desk
height_pct height in percent

buttons

button description
step_up move up desk by one step (~14mm)
step_down move down desk by one step (~14mm)
goto_max move up until stopped
goto_min move down until stopped
stop stop movement of desk
goto_m1 move to 1st stored height
goto_m2 move to 2nd stored height
goto_m3 move to 3rd stored height
goto_m4 move to 4th stored height
save_m1 save current height to 1th position
save_m2 save current height to 2th position
save_m3 save current height to 3th position
save_m4 save current height to 4th position

lambda methods

lambda method description
id(my_desk).step_up() step_up desk by one step (~14mm)
id(my_desk).step_down() step_down desk by one step (~14mm)
id(my_desk).goto_max_position() move up
id(my_desk).goto_min_position() move down
id(my_desk).stop() stop movement of desk
id(my_desk).goto_mem_position(pos) move to stored height pos
id(my_desk).save_mem_position(pos) save current height to position pos
id(my_desk).goto_height(height) move to specified height

Case

You can find a 3D-printable case in the stl folder or on onshape.

Sources

Thanks to Rocka84 Thanks to phord/Jarvis for reverse engineering the UART interface and most control messages!
Thanks to OkhammahkO for collecting the scattered information at pimp-my-desk/desk-control and for his work in the home assistant community!


  1. not used here ↩︎