added number entity for height in percent
This commit is contained in:
@@ -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)}),
|
||||
|
||||
@@ -69,6 +69,8 @@ jiecang_desk_controller:
|
||||
numbers:
|
||||
height:
|
||||
name: "Height"
|
||||
height_pct:
|
||||
name: "Height Percent"
|
||||
|
||||
## lambda usage
|
||||
# button:
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user