made height_pct sensor independent from other sensors

This commit is contained in:
Rocka84
2024-01-09 01:16:04 +01:00
parent 12444cb537
commit 113a6c3e11
2 changed files with 17 additions and 9 deletions

View File

@@ -54,10 +54,11 @@ namespace esphome {
switch (message[0]) { switch (message[0]) {
case 0x01: case 0x01:
ESP_LOGV("jiecang_desk_controller", "height 0x%0X%0X", message[2], message[3]); ESP_LOGV("jiecang_desk_controller", "height 0x%0X%0X", message[2], message[3]);
if (height != nullptr) height->publish_state(byte2float(message[2], message[3])); current_height = byte2float(message[2], message[3]);
if (height != nullptr) height->publish_state(current_height);
if (height_pct != nullptr) if (height_pct != nullptr && limit_max != 0)
height_pct->publish_state((height->state - height_min->state) / (height_max->state - height_min->state) * 100); height_pct->publish_state((current_height - limit_min) / (limit_max - limit_min) * 100);
break; break;
case 0x0e: case 0x0e:
@@ -68,11 +69,13 @@ namespace esphome {
case 0x20: case 0x20:
ESP_LOGV("jiecang_desk_controller", "limits 0x%0X max %i min %i", message[2], (message[2] & 1), (message[2]>>4)); ESP_LOGV("jiecang_desk_controller", "limits 0x%0X max %i min %i", message[2], (message[2] & 1), (message[2]>>4));
if (height_min != nullptr && (message[2] & 1) == 0) { // low nibble 0 -> no max limit, use physical_max if ((message[2] & 1) == 0) { // low nibble 0 -> no max limit, use physical_max
height_max->publish_state(physical_max); limit_max = physical_max;
if (height_max != nullptr) height_max->publish_state(limit_max);
} }
if (height_max != nullptr && (message[2]>>4) == 0) { // high nibble 0 -> no min limit, use physical_min if ((message[2]>>4) == 0) { // high nibble 0 -> no min limit, use physical_min
height_min->publish_state(physical_min); limit_min = physical_min;
if (height_min != nullptr) height_min->publish_state(limit_min);
} }
break; break;
@@ -84,12 +87,14 @@ namespace esphome {
case 0x21: case 0x21:
ESP_LOGV("jiecang_desk_controller", "height_max 0x%02X%02X", message[2], message[3]); ESP_LOGV("jiecang_desk_controller", "height_max 0x%02X%02X", message[2], message[3]);
if (height_max != nullptr) height_max->publish_state(byte2float(message[2], message[3])); limit_max = byte2float(message[2], message[3]);
if (height_max != nullptr) height_max->publish_state(limit_max);
break; break;
case 0x22: case 0x22:
ESP_LOGV("jiecang_desk_controller", "height_min 0x%02X%02X", message[2], message[3]); ESP_LOGV("jiecang_desk_controller", "height_min 0x%02X%02X", message[2], message[3]);
if (height_min != nullptr) height_min->publish_state(byte2float(message[2], message[3])); limit_min = byte2float(message[2], message[3]);
if (height_min != nullptr) height_min->publish_state(limit_min);
break; break;
case 0x25: case 0x25:

View File

@@ -20,6 +20,9 @@ namespace esphome {
class JiecangDeskController : public PollingComponent, public sensor::Sensor, public uart::UARTDevice { class JiecangDeskController : public PollingComponent, public sensor::Sensor, public uart::UARTDevice {
private: private:
float current_height = 0;
float limit_min = 0;
float limit_max = 0;
float physical_min = 0; float physical_min = 0;
float physical_max = 0; float physical_max = 0;