From 7fc46c2670ee18dc3f162dd3cc2f5cb6b715c560 Mon Sep 17 00:00:00 2001 From: Rocka84 Date: Tue, 4 Jun 2024 22:59:24 +0200 Subject: [PATCH] added save_position command and button --- .../jiecang_desk_controller/__init__.py | 3 ++ .../jiecang_desk_controller.cpp | 43 ++++++++++++++++++- .../jiecang_desk_controller.h | 4 ++ example_jiecang_desk_controller.yaml | 14 ++---- 4 files changed, 53 insertions(+), 11 deletions(-) diff --git a/components/jiecang_desk_controller/__init__.py b/components/jiecang_desk_controller/__init__.py index 0528f0e..aa95a57 100644 --- a/components/jiecang_desk_controller/__init__.py +++ b/components/jiecang_desk_controller/__init__.py @@ -28,6 +28,7 @@ CONF_POSITION1 = "position1" CONF_POSITION2 = "position2" CONF_POSITION3 = "position3" CONF_POSITION4 = "position4" +CONF_SAVE_POSITION = "save_position" button_constants = {} @@ -38,6 +39,7 @@ button_constants[CONF_POSITION1] = 3 button_constants[CONF_POSITION2] = 4 button_constants[CONF_POSITION3] = 5 button_constants[CONF_POSITION4] = 6 +button_constants[CONF_SAVE_POSITION] = 7 number_constants = {} number_constants[CONF_HEIGHT] = 0 @@ -95,6 +97,7 @@ CONFIG_SCHEMA = cv.COMPONENT_SCHEMA.extend({ cv.Optional(CONF_POSITION2): button.BUTTON_SCHEMA.extend({cv.GenerateID(): cv.declare_id(JiecangDeskButton)}), 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)}), }), }).extend(uart.UART_DEVICE_SCHEMA) diff --git a/components/jiecang_desk_controller/jiecang_desk_controller.cpp b/components/jiecang_desk_controller/jiecang_desk_controller.cpp index d28b4b1..0c8a66d 100644 --- a/components/jiecang_desk_controller/jiecang_desk_controller.cpp +++ b/components/jiecang_desk_controller/jiecang_desk_controller.cpp @@ -172,8 +172,25 @@ namespace esphome { } } + void JiecangDeskController::save_position(int pos) { + switch (pos) { + case 1: + send_simple_command(0x03); + break; + case 2: + send_simple_command(0x04); + break; + case 3: + send_simple_command(0x25); + break; + case 4: + send_simple_command(0x26); + break; + } + } + void JiecangDeskController::goto_height(float height) { - unsigned char cmd = 0x01B; + unsigned char cmd = 0x1B; unsigned char high_byte = ((int) height * 10) >> 8; unsigned char low_byte = ((int) height * 10) & 0xFF; @@ -205,19 +222,43 @@ namespace esphome { break; case BUTTON_STOP: stop(); + save_position_mode = false; break; case BUTTON_POSITION1: + if (save_position_mode) { + save_position_mode = false; + save_position(1); + return; + } goto_position(1); break; case BUTTON_POSITION2: + if (save_position_mode) { + save_position_mode = false; + save_position(2); + return; + } goto_position(2); break; case BUTTON_POSITION3: + if (save_position_mode) { + save_position_mode = false; + save_position(3); + return; + } goto_position(3); break; case BUTTON_POSITION4: + if (save_position_mode) { + save_position_mode = false; + save_position(4); + return; + } goto_position(4); break; + case BUTTON_SAVE_POSITION: + save_position_mode = true; + break; } } diff --git a/components/jiecang_desk_controller/jiecang_desk_controller.h b/components/jiecang_desk_controller/jiecang_desk_controller.h index 818d642..726dc01 100644 --- a/components/jiecang_desk_controller/jiecang_desk_controller.h +++ b/components/jiecang_desk_controller/jiecang_desk_controller.h @@ -16,6 +16,7 @@ #define BUTTON_POSITION2 4 #define BUTTON_POSITION3 5 #define BUTTON_POSITION4 6 +#define BUTTON_SAVE_POSITION 7 #define NUMBER_HEIGHT 0 @@ -30,6 +31,8 @@ namespace esphome { float physical_min = 0; float physical_max = 0; + bool save_position_mode = false; + float byte2float(int high, int low); bool bufferMessage(int data, unsigned int *buffer, int len); void handleMessage(unsigned int *message); @@ -55,6 +58,7 @@ namespace esphome { void lower(); void stop(); void goto_position(int pos); + void save_position(int pos); void goto_height(float height); void request_physical_limits(); diff --git a/example_jiecang_desk_controller.yaml b/example_jiecang_desk_controller.yaml index 2ddb34b..391df68 100644 --- a/example_jiecang_desk_controller.yaml +++ b/example_jiecang_desk_controller.yaml @@ -62,6 +62,8 @@ jiecang_desk_controller: name: "Position 3" position4: name: "Position 4" + save_position: + name: "Save Position" numbers: height: name: "Height" @@ -81,21 +83,13 @@ jiecang_desk_controller: # on_press: # lambda: "id(my_desk).stop();" # - platform: template -# name: "Position 1" -# on_press: -# lambda: "id(my_desk).goto_position(1);" -# - platform: template # name: "Position 2" # on_press: # lambda: "id(my_desk).goto_position(2);" # - platform: template -# name: "Position 3" +# name: "Save Position 4" # on_press: -# lambda: "id(my_desk).goto_position(3);" -# - platform: template -# name: "Position 4" -# on_press: -# lambda: "id(my_desk).goto_position(4);" +# lambda: "id(my_desk).save_position(4);" # - platform: template # name: "Go to 100cm" # on_press: