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
from esphome import pins
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']
AUTO_LOAD = ['sensor', 'button', 'number']
@@ -43,6 +43,7 @@ button_constants[CONF_SAVE_POSITION] = 7
number_constants = {}
number_constants[CONF_HEIGHT] = 0
number_constants[CONF_HEIGHT_PCT] = 1
CONFIG_SCHEMA = cv.COMPONENT_SCHEMA.extend({
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_HEIGHT): number.NUMBER_SCHEMA.extend({cv.GenerateID(): cv.declare_id(JiecangDeskNumber)}),
# cv.Optional(CONF_HEIGHT): number.number_schema(
# unit_of_measurement = UNIT_CENTIMETER
# ),
cv.Optional(CONF_HEIGHT): 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_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_RAISE): button.BUTTON_SCHEMA.extend({cv.GenerateID(): cv.declare_id(JiecangDeskButton)}),

View File

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

View File

@@ -63,6 +63,8 @@ namespace esphome {
if (height_pct != nullptr && limit_max != 0)
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;
case 0x20:
@@ -267,6 +269,11 @@ namespace esphome {
case NUMBER_HEIGHT:
number_height = number;
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:
return;
}
@@ -280,6 +287,9 @@ namespace esphome {
case NUMBER_HEIGHT:
goto_height(value);
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 NUMBER_HEIGHT 0
#define NUMBER_HEIGHT_PCT 1
namespace esphome {
namespace jiecang_desk_controller {
@@ -79,6 +80,7 @@ namespace esphome {
Sensor *position4{nullptr};
JiecangDeskNumber *number_height{nullptr};
JiecangDeskNumber *number_height_pct{nullptr};
void button_press_action(int type);
};