diff --git a/components/jiecang_desk_controller/README.md b/components/jiecang_desk_controller/README.md index 4172322..bfb0a91 100644 --- a/components/jiecang_desk_controller/README.md +++ b/components/jiecang_desk_controller/README.md @@ -33,7 +33,7 @@ pin | function #### RJ45 -Untested and only for reference! +**Untested** and only for reference! pin | function ----|--------- @@ -147,6 +147,8 @@ button | description --------------|--------------------------- raise | raise desk by one step (~14mm) lower | lower desk by one step (~14mm) +move_up | move up +move_down | move down stop | stop movement of desk position1 | move to 1st stored height position2 | move to 2nd stored height @@ -160,6 +162,8 @@ lambda method | description ----------------------------------|--------------------------- `id(my_desk).raise()` | raise desk by one step (~14mm) `id(my_desk).lower()` | lower desk by one step (~14mm) +`id(my_desk).move_up(height)` | move up +`id(my_desk).move_down(height)` | move down `id(my_desk).stop()` | stop movement of desk `id(my_desk).goto_position(pos)` | move to stored height `pos` `id(my_desk).save_position(pos)` | save current height to position `pos` @@ -173,3 +177,4 @@ You can find a 3D-printable case in the [stl folder](stl/) or on [onshape](https Thanks to [phord/Jarvis](https://github.com/phord/Jarvis) for reverse engineering the UART interface and most control messages! Thanks to [OkhammahkO](https://github.com/OkhammahkO) for collecting the scattered information at [pimp-my-desk/desk-control](https://gitlab.com/pimp-my-desk/desk-control) and for his work in the home assistant community! + diff --git a/components/jiecang_desk_controller/__init__.py b/components/jiecang_desk_controller/__init__.py index 0c79f0a..e8d2119 100644 --- a/components/jiecang_desk_controller/__init__.py +++ b/components/jiecang_desk_controller/__init__.py @@ -29,6 +29,8 @@ CONF_POSITION2 = "position2" CONF_POSITION3 = "position3" CONF_POSITION4 = "position4" CONF_SAVE_POSITION = "save_position" +CONF_MOVE_UP = "move_up" +CONF_MOVE_DOWN = "move_down" button_constants = {} @@ -40,6 +42,8 @@ button_constants[CONF_POSITION2] = 4 button_constants[CONF_POSITION3] = 5 button_constants[CONF_POSITION4] = 6 button_constants[CONF_SAVE_POSITION] = 7 +button_constants[CONF_MOVE_UP] = 8 +button_constants[CONF_MOVE_DOWN] = 9 number_constants = {} number_constants[CONF_HEIGHT] = 0 @@ -105,6 +109,8 @@ CONFIG_SCHEMA = cv.COMPONENT_SCHEMA.extend({ cv.Optional(CONF_POSITION3): button.BUTTON_SCHEMA.extend({cv.GenerateID(): cv.declare_id(JiecangDeskButton)}), cv.Optional(CONF_POSITION4): button.BUTTON_SCHEMA.extend({cv.GenerateID(): cv.declare_id(JiecangDeskButton)}), cv.Optional(CONF_SAVE_POSITION): button.BUTTON_SCHEMA.extend({cv.GenerateID(): cv.declare_id(JiecangDeskButton)}), + cv.Optional(CONF_MOVE_UP): button.BUTTON_SCHEMA.extend({cv.GenerateID(): cv.declare_id(JiecangDeskButton)}), + cv.Optional(CONF_MOVE_DOWN): button.BUTTON_SCHEMA.extend({cv.GenerateID(): cv.declare_id(JiecangDeskButton)}), }), }).extend(uart.UART_DEVICE_SCHEMA) diff --git a/components/jiecang_desk_controller/example_full.yaml b/components/jiecang_desk_controller/example_full.yaml index ffa9b21..386b0a4 100644 --- a/components/jiecang_desk_controller/example_full.yaml +++ b/components/jiecang_desk_controller/example_full.yaml @@ -66,6 +66,10 @@ jiecang_desk_controller: name: "Position 4" save_position: name: "Save Position" + move_up: + name: "Move up" + move_down: + name: "Move down" numbers: height: name: "Height" diff --git a/components/jiecang_desk_controller/jiecang_desk_controller.cpp b/components/jiecang_desk_controller/jiecang_desk_controller.cpp index 9fad3d5..f7167df 100644 --- a/components/jiecang_desk_controller/jiecang_desk_controller.cpp +++ b/components/jiecang_desk_controller/jiecang_desk_controller.cpp @@ -201,6 +201,14 @@ namespace esphome { write_array({ 0xF1, 0xF1, cmd, 0x02, high_byte, low_byte, checksum, 0x7E }); } + void JiecangDeskController::move_up() { + goto_height(limit_max); + } + + void JiecangDeskController::move_down() { + goto_height(limit_min); + } + void JiecangDeskController::request_physical_limits() { send_simple_command(0x0C); } @@ -226,6 +234,12 @@ namespace esphome { stop(); save_position_mode = false; break; + case BUTTON_MOVE_UP: + move_up(); + break; + case BUTTON_MOVE_DOWN: + move_down(); + break; case BUTTON_POSITION1: if (save_position_mode) { save_position_mode = false; diff --git a/components/jiecang_desk_controller/jiecang_desk_controller.h b/components/jiecang_desk_controller/jiecang_desk_controller.h index f2439bb..56a1058 100644 --- a/components/jiecang_desk_controller/jiecang_desk_controller.h +++ b/components/jiecang_desk_controller/jiecang_desk_controller.h @@ -17,6 +17,8 @@ #define BUTTON_POSITION3 5 #define BUTTON_POSITION4 6 #define BUTTON_SAVE_POSITION 7 +#define BUTTON_MOVE_UP 8 +#define BUTTON_MOVE_DOWN 9 #define NUMBER_HEIGHT 0 #define NUMBER_HEIGHT_PCT 1 @@ -61,6 +63,8 @@ namespace esphome { void goto_position(int pos); void save_position(int pos); void goto_height(float height); + void move_up(); + void move_down(); void request_physical_limits(); void request_limits();