Files
esphome_components/components/jiecang_desk_controller/README.md
2024-01-11 01:07:18 +01:00

3.2 KiB

ESPHome Jiecang Desk Controller

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

Attention: I only have one RJ12 model to test this but it's likely that other Jiecang 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 GND
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, position1 - position4
    # 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/Rocka84/esphome_components/
    components: [ jiecang_desk_controller ]

uart:
  id: uart_bus
  tx_pin: TX
  rx_pin: RX
  baud_rate: 9600

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

jiecang_desk_controller:
  id: my_desk
  sensors:
    height:
      name: "Height"
  buttons:
    raise:
      name: "Raise"
    position1:
      name: "Position 1"

button:
  - platform: template
    name: "Lower"
    on_press:
      lambda: "id(my_desk).lower();"

See also example_jiecang_desk_controller.yaml.

Available sensors

sensor description
height current height of the desk
height_pct height in percent
height_min minimal height
height_max maximal height
position1 1st stored height
position2 2nd stored height
position3 3rd stored height
position4 4th stored height

Available buttons and methods

button lambda method description
raise id(my_desk).raise() raise desk by one step (~14mm)
lower id(my_desk).raise() lower desk by one step (~14mm)
position1 id(my_desk).goto_position(1) move to 1st stored height
position2 id(my_desk).goto_position(2) move to 2nd stored height
position3 id(my_desk).goto_position(3) move to 3rd stored height
position4 id(my_desk).goto_position(4) move to 4th stored height

Sources

Thanks to phord/Jarvis for reverse engineering the UART interface and most control messages


  1. not used here ↩︎