added number entity for height in percent

This commit is contained in:
Rocka84
2024-06-05 19:32:15 +02:00
parent e65d33f85e
commit c6e2220214
4 changed files with 26 additions and 5 deletions

View File

@@ -2,7 +2,7 @@ import esphome.codegen as cg
import esphome.config_validation as cv import esphome.config_validation as cv
from esphome import pins from esphome import pins
from esphome.components import uart, sensor, button, number from esphome.components import uart, sensor, button, number
from esphome.const import CONF_ID, CONF_HEIGHT, UNIT_CENTIMETER, UNIT_PERCENT from esphome.const import CONF_ID, CONF_HEIGHT, CONF_UNIT_OF_MEASUREMENT, CONF_ACCURACY_DECIMALS, UNIT_CENTIMETER, UNIT_PERCENT
DEPENDENCIES = ['uart'] DEPENDENCIES = ['uart']
AUTO_LOAD = ['sensor', 'button', 'number'] AUTO_LOAD = ['sensor', 'button', 'number']
@@ -43,6 +43,7 @@ button_constants[CONF_SAVE_POSITION] = 7
number_constants = {} number_constants = {}
number_constants[CONF_HEIGHT] = 0 number_constants[CONF_HEIGHT] = 0
number_constants[CONF_HEIGHT_PCT] = 1
CONFIG_SCHEMA = cv.COMPONENT_SCHEMA.extend({ CONFIG_SCHEMA = cv.COMPONENT_SCHEMA.extend({
cv.GenerateID(): cv.declare_id(JiecangDeskController), cv.GenerateID(): cv.declare_id(JiecangDeskController),
@@ -84,10 +85,16 @@ CONFIG_SCHEMA = cv.COMPONENT_SCHEMA.extend({
), ),
}), }),
cv.Optional(CONF_NUMBERS): cv.Schema({ cv.Optional(CONF_NUMBERS): cv.Schema({
cv.Optional(CONF_HEIGHT): number.NUMBER_SCHEMA.extend({cv.GenerateID(): cv.declare_id(JiecangDeskNumber)}), cv.Optional(CONF_HEIGHT): number.NUMBER_SCHEMA.extend({
# cv.Optional(CONF_HEIGHT): number.number_schema( cv.GenerateID(): cv.declare_id(JiecangDeskNumber),
# unit_of_measurement = UNIT_CENTIMETER cv.Optional(CONF_ACCURACY_DECIMALS, default=1): cv.int_,
# ), cv.Optional(CONF_UNIT_OF_MEASUREMENT, default=UNIT_CENTIMETER): cv.string,
}),
cv.Optional(CONF_HEIGHT_PCT): number.NUMBER_SCHEMA.extend({
cv.GenerateID(): cv.declare_id(JiecangDeskNumber),
cv.Optional(CONF_ACCURACY_DECIMALS, default=1): cv.int_,
cv.Optional(CONF_UNIT_OF_MEASUREMENT, default=UNIT_PERCENT): cv.string,
}),
}), }),
cv.Optional(CONF_BUTTONS): cv.Schema({ cv.Optional(CONF_BUTTONS): cv.Schema({
cv.Optional(CONF_RAISE): button.BUTTON_SCHEMA.extend({cv.GenerateID(): cv.declare_id(JiecangDeskButton)}), cv.Optional(CONF_RAISE): button.BUTTON_SCHEMA.extend({cv.GenerateID(): cv.declare_id(JiecangDeskButton)}),

View File

@@ -69,6 +69,8 @@ jiecang_desk_controller:
numbers: numbers:
height: height:
name: "Height" name: "Height"
height_pct:
name: "Height Percent"
## lambda usage ## lambda usage
# button: # button:

View File

@@ -63,6 +63,8 @@ namespace esphome {
if (height_pct != nullptr && limit_max != 0) if (height_pct != nullptr && limit_max != 0)
height_pct->publish_state((current_height - limit_min) / (limit_max - limit_min) * 100); height_pct->publish_state((current_height - limit_min) / (limit_max - limit_min) * 100);
if (number_height_pct != nullptr && limit_max != 0)
number_height_pct->publish_state(roundf((current_height - limit_min) / (limit_max - limit_min) * 1000)/10);
break; break;
case 0x20: case 0x20:
@@ -267,6 +269,11 @@ namespace esphome {
case NUMBER_HEIGHT: case NUMBER_HEIGHT:
number_height = number; number_height = number;
break; break;
case NUMBER_HEIGHT_PCT:
number_height_pct = number;
number_height_pct->set_min_value(0);
number_height_pct->set_max_value(100);
break;
default: default:
return; return;
} }
@@ -280,6 +287,9 @@ namespace esphome {
case NUMBER_HEIGHT: case NUMBER_HEIGHT:
goto_height(value); goto_height(value);
break; break;
case NUMBER_HEIGHT_PCT:
if (limit_max != 0) goto_height((limit_max - limit_min) * value / 100 + limit_min);
break;
} }
} }

View File

@@ -19,6 +19,7 @@
#define BUTTON_SAVE_POSITION 7 #define BUTTON_SAVE_POSITION 7
#define NUMBER_HEIGHT 0 #define NUMBER_HEIGHT 0
#define NUMBER_HEIGHT_PCT 1
namespace esphome { namespace esphome {
namespace jiecang_desk_controller { namespace jiecang_desk_controller {
@@ -79,6 +80,7 @@ namespace esphome {
Sensor *position4{nullptr}; Sensor *position4{nullptr};
JiecangDeskNumber *number_height{nullptr}; JiecangDeskNumber *number_height{nullptr};
JiecangDeskNumber *number_height_pct{nullptr};
void button_press_action(int type); void button_press_action(int type);
}; };