From eb37a408ab23b9f07e6d36ad6a35cbb6ed906484 Mon Sep 17 00:00:00 2001 From: Rocka84 Date: Sat, 17 May 2025 17:54:17 +0200 Subject: [PATCH] added wakeup signal after 5 seconds Cherry picked from https://github.com/alexw23/esphome_components Fixes #4 --- .../jiecang_desk_controller.cpp | 12 ++++++++++++ .../jiecang_desk_controller.h | 2 ++ 2 files changed, 14 insertions(+) diff --git a/components/jiecang_desk_controller/jiecang_desk_controller.cpp b/components/jiecang_desk_controller/jiecang_desk_controller.cpp index 225f0d1..bc4307c 100644 --- a/components/jiecang_desk_controller/jiecang_desk_controller.cpp +++ b/components/jiecang_desk_controller/jiecang_desk_controller.cpp @@ -50,6 +50,7 @@ namespace esphome { void JiecangDeskController::handleMessage(unsigned int *message) { // ESP_LOGV("jiecang_desk_controller", "message %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X", message[0], message[1], message[2], message[3], message[4], message[5], message[6], message[7], message[8], message[9]); + this->last_message_time = millis(); switch (message[0]) { case 0x01: @@ -138,6 +139,17 @@ namespace esphome { } void JiecangDeskController::send_simple_command(unsigned char cmd) { + // If more than 5 seconds passed since last message, assume desk is asleep + if (millis() - this->last_message_time >= 5000) { + ESP_LOGV(TAG, "Sending wake-up signal."); + write_command(0x2B); // send STOP to wake up + delay(100); // brief delay to allow the desk to wake up + } + + write_command(cmd); + } + + void JiecangDeskController::write_command(unsigned char cmd) { write_array({ 0xF1, 0xF1, cmd, 0x00, cmd, 0x7E }); } diff --git a/components/jiecang_desk_controller/jiecang_desk_controller.h b/components/jiecang_desk_controller/jiecang_desk_controller.h index 4f0a6ef..580fe81 100644 --- a/components/jiecang_desk_controller/jiecang_desk_controller.h +++ b/components/jiecang_desk_controller/jiecang_desk_controller.h @@ -28,6 +28,7 @@ namespace esphome { class JiecangDeskController : public PollingComponent, public sensor::Sensor, public uart::UARTDevice { private: + uint32_t last_message_time = 0; float current_height = 0; float limit_min = 0; float limit_max = 0; @@ -39,6 +40,7 @@ namespace esphome { float byte2float(int high, int low); bool bufferMessage(int data, unsigned int *buffer, int len); void handleMessage(unsigned int *message); + void write_command(unsigned char cmd); public: void update() override;