components/jiecang_desk_controller/__init__.py aktualisiert

This commit is contained in:
2026-01-03 19:41:45 +01:00
parent ab73761271
commit faa0ab28e7

View File

@@ -2,17 +2,29 @@ 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, CONF_UNIT_OF_MEASUREMENT, CONF_ACCURACY_DECIMALS, 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']
jiecang_desk_controller_ns = cg.esphome_ns.namespace('jiecang_desk_controller') jiecang_desk_controller_ns = cg.esphome_ns.namespace('jiecang_desk_controller')
JiecangDeskController = jiecang_desk_controller_ns.class_('JiecangDeskController', cg.Component, uart.UARTDevice) JiecangDeskController = jiecang_desk_controller_ns.class_(
JiecangDeskButton = jiecang_desk_controller_ns.class_('JiecangDeskButton', button.Button, cg.Component) 'JiecangDeskController', cg.Component, uart.UARTDevice
JiecangDeskNumber = jiecang_desk_controller_ns.class_('JiecangDeskNumber', number.Number, cg.Component) )
JiecangDeskButton = jiecang_desk_controller_ns.class_(
'JiecangDeskButton', button.Button, cg.Component
)
JiecangDeskNumber = jiecang_desk_controller_ns.class_(
'JiecangDeskNumber', number.Number, cg.Component
)
CONF_SENSORS = "sensors" CONF_SENSORS = "sensors"
CONF_BUTTONS = "buttons" CONF_BUTTONS = "buttons"
@@ -32,18 +44,18 @@ CONF_SAVE_POSITION = "save_position"
CONF_MOVE_UP = "move_up" CONF_MOVE_UP = "move_up"
CONF_MOVE_DOWN = "move_down" CONF_MOVE_DOWN = "move_down"
button_constants = {
button_constants = {} CONF_STEP_UP: 0,
button_constants[CONF_STEP_UP] = 0 CONF_STEP_DOWN: 1,
button_constants[CONF_STEP_DOWN] = 1 CONF_STOP: 2,
button_constants[CONF_STOP] = 2 CONF_POSITION1: 3,
button_constants[CONF_POSITION1] = 3 CONF_POSITION2: 4,
button_constants[CONF_POSITION2] = 4 CONF_POSITION3: 5,
button_constants[CONF_POSITION3] = 5 CONF_POSITION4: 6,
button_constants[CONF_POSITION4] = 6 CONF_SAVE_POSITION: 7,
button_constants[CONF_SAVE_POSITION] = 7 CONF_MOVE_UP: 8,
button_constants[CONF_MOVE_UP] = 8 CONF_MOVE_DOWN: 9,
button_constants[CONF_MOVE_DOWN] = 9 }
# Backward compatibility # Backward compatibility
CONF_RAISE = "raise" CONF_RAISE = "raise"
@@ -51,50 +63,52 @@ CONF_LOWER = "lower"
button_constants[CONF_RAISE] = button_constants[CONF_STEP_UP] button_constants[CONF_RAISE] = button_constants[CONF_STEP_UP]
button_constants[CONF_LOWER] = button_constants[CONF_STEP_DOWN] button_constants[CONF_LOWER] = button_constants[CONF_STEP_DOWN]
number_constants = {
number_constants = {} CONF_HEIGHT: 0,
number_constants[CONF_HEIGHT] = 0 CONF_HEIGHT_PCT: 1,
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),
cv.Optional(CONF_SENSORS): cv.Schema({ cv.Optional(CONF_SENSORS): cv.Schema({
cv.Optional(CONF_HEIGHT): sensor.sensor_schema( cv.Optional(CONF_HEIGHT): sensor.sensor_schema(
accuracy_decimals=1, accuracy_decimals=1,
unit_of_measurement = UNIT_CENTIMETER unit_of_measurement=UNIT_CENTIMETER,
), ),
cv.Optional(CONF_UNIT): sensor.sensor_schema( cv.Optional(CONF_UNIT): sensor.sensor_schema(
accuracy_decimals = 0 accuracy_decimals=0,
), ),
cv.Optional(CONF_HEIGHT_PCT): sensor.sensor_schema( cv.Optional(CONF_HEIGHT_PCT): sensor.sensor_schema(
accuracy_decimals=1, accuracy_decimals=1,
unit_of_measurement = UNIT_PERCENT unit_of_measurement=UNIT_PERCENT,
), ),
cv.Optional(CONF_HEIGHT_MIN): sensor.sensor_schema( cv.Optional(CONF_HEIGHT_MIN): sensor.sensor_schema(
accuracy_decimals=1, accuracy_decimals=1,
unit_of_measurement = UNIT_CENTIMETER unit_of_measurement=UNIT_CENTIMETER,
), ),
cv.Optional(CONF_HEIGHT_MAX): sensor.sensor_schema( cv.Optional(CONF_HEIGHT_MAX): sensor.sensor_schema(
accuracy_decimals=1, accuracy_decimals=1,
unit_of_measurement = UNIT_CENTIMETER unit_of_measurement=UNIT_CENTIMETER,
), ),
cv.Optional(CONF_POSITION1): sensor.sensor_schema( cv.Optional(CONF_POSITION1): sensor.sensor_schema(
accuracy_decimals=1, accuracy_decimals=1,
unit_of_measurement = UNIT_CENTIMETER unit_of_measurement=UNIT_CENTIMETER,
), ),
cv.Optional(CONF_POSITION2): sensor.sensor_schema( cv.Optional(CONF_POSITION2): sensor.sensor_schema(
accuracy_decimals=1, accuracy_decimals=1,
unit_of_measurement = UNIT_CENTIMETER unit_of_measurement=UNIT_CENTIMETER,
), ),
cv.Optional(CONF_POSITION3): sensor.sensor_schema( cv.Optional(CONF_POSITION3): sensor.sensor_schema(
accuracy_decimals=1, accuracy_decimals=1,
unit_of_measurement = UNIT_CENTIMETER unit_of_measurement=UNIT_CENTIMETER,
), ),
cv.Optional(CONF_POSITION4): sensor.sensor_schema( cv.Optional(CONF_POSITION4): sensor.sensor_schema(
accuracy_decimals=1, accuracy_decimals=1,
unit_of_measurement = UNIT_CENTIMETER unit_of_measurement=UNIT_CENTIMETER,
), ),
}), }),
cv.Optional(CONF_NUMBERS): cv.Schema({ cv.Optional(CONF_NUMBERS): cv.Schema({
cv.Optional(CONF_HEIGHT): number._NUMBER_SCHEMA.extend({ cv.Optional(CONF_HEIGHT): number._NUMBER_SCHEMA.extend({
cv.GenerateID(): cv.declare_id(JiecangDeskNumber), cv.GenerateID(): cv.declare_id(JiecangDeskNumber),
@@ -107,23 +121,49 @@ CONFIG_SCHEMA = cv.COMPONENT_SCHEMA.extend({
cv.Optional(CONF_UNIT_OF_MEASUREMENT, default=UNIT_PERCENT): cv.string, 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_STEP_UP): button._BUTTON_SCHEMA.extend({cv.GenerateID(): cv.declare_id(JiecangDeskButton)}), cv.Optional(CONF_STEP_UP): button._BUTTON_SCHEMA.extend({
cv.Optional(CONF_STEP_DOWN): button._BUTTON_SCHEMA.extend({cv.GenerateID(): cv.declare_id(JiecangDeskButton)}), cv.GenerateID(): cv.declare_id(JiecangDeskButton)
cv.Optional(CONF_STOP): button._BUTTON_SCHEMA.extend({cv.GenerateID(): cv.declare_id(JiecangDeskButton)}), }),
cv.Optional(CONF_POSITION1): button._BUTTON_SCHEMA.extend({cv.GenerateID(): cv.declare_id(JiecangDeskButton)}), cv.Optional(CONF_STEP_DOWN): button._BUTTON_SCHEMA.extend({
cv.Optional(CONF_POSITION2): button._BUTTON_SCHEMA.extend({cv.GenerateID(): cv.declare_id(JiecangDeskButton)}), cv.GenerateID(): cv.declare_id(JiecangDeskButton)
cv.Optional(CONF_POSITION3): button._BUTTON_SCHEMA.extend({cv.GenerateID(): cv.declare_id(JiecangDeskButton)}), }),
cv.Optional(CONF_POSITION4): button._BUTTON_SCHEMA.extend({cv.GenerateID(): cv.declare_id(JiecangDeskButton)}), cv.Optional(CONF_STOP): button._BUTTON_SCHEMA.extend({
cv.Optional(CONF_SAVE_POSITION): button._BUTTON_SCHEMA.extend({cv.GenerateID(): cv.declare_id(JiecangDeskButton)}), cv.GenerateID(): cv.declare_id(JiecangDeskButton)
cv.Optional(CONF_MOVE_UP): button._BUTTON_SCHEMA.extend({cv.GenerateID(): cv.declare_id(JiecangDeskButton)}), }),
cv.Optional(CONF_MOVE_DOWN): button._BUTTON_SCHEMA.extend({cv.GenerateID(): cv.declare_id(JiecangDeskButton)}), cv.Optional(CONF_POSITION1): button._BUTTON_SCHEMA.extend({
cv.GenerateID(): cv.declare_id(JiecangDeskButton)
}),
cv.Optional(CONF_POSITION2): button._BUTTON_SCHEMA.extend({
cv.GenerateID(): cv.declare_id(JiecangDeskButton)
}),
cv.Optional(CONF_POSITION3): button._BUTTON_SCHEMA.extend({
cv.GenerateID(): cv.declare_id(JiecangDeskButton)
}),
cv.Optional(CONF_POSITION4): button._BUTTON_SCHEMA.extend({
cv.GenerateID(): cv.declare_id(JiecangDeskButton)
}),
cv.Optional(CONF_SAVE_POSITION): button._BUTTON_SCHEMA.extend({
cv.GenerateID(): cv.declare_id(JiecangDeskButton)
}),
cv.Optional(CONF_MOVE_UP): button._BUTTON_SCHEMA.extend({
cv.GenerateID(): cv.declare_id(JiecangDeskButton)
}),
cv.Optional(CONF_MOVE_DOWN): button._BUTTON_SCHEMA.extend({
cv.GenerateID(): cv.declare_id(JiecangDeskButton)
}),
# Backward compatibility # Backward compatibility
cv.Optional(CONF_RAISE): button._BUTTON_SCHEMA.extend({cv.GenerateID(): cv.declare_id(JiecangDeskButton)}), cv.Optional(CONF_RAISE): button._BUTTON_SCHEMA.extend({
cv.Optional(CONF_LOWER): button._BUTTON_SCHEMA.extend({cv.GenerateID(): cv.declare_id(JiecangDeskButton)}), cv.GenerateID(): cv.declare_id(JiecangDeskButton)
}),
cv.Optional(CONF_LOWER): button._BUTTON_SCHEMA.extend({
cv.GenerateID(): cv.declare_id(JiecangDeskButton)
}),
}), }),
}).extend(uart.UART_DEVICE_SCHEMA) }).extend(uart.UART_DEVICE_SCHEMA)
async def to_code(config): async def to_code(config):
var = cg.new_Pvariable(config[CONF_ID]) var = cg.new_Pvariable(config[CONF_ID])
await cg.register_component(var, config) await cg.register_component(var, config)
@@ -133,42 +173,35 @@ async def to_code(config):
sensors = config[CONF_SENSORS] sensors = config[CONF_SENSORS]
if CONF_HEIGHT in sensors: if CONF_HEIGHT in sensors:
sens = await sensor.new_sensor(sensors[CONF_HEIGHT]) cg.add(var.set_sensor_height(await sensor.new_sensor(sensors[CONF_HEIGHT])))
cg.add(var.set_sensor_height(sens))
if CONF_UNIT in sensors: if CONF_UNIT in sensors:
sens = await sensor.new_sensor(sensors[CONF_UNIT]) cg.add(var.set_sensor_unit(await sensor.new_sensor(sensors[CONF_UNIT])))
cg.add(var.set_sensor_unit(sens))
if CONF_HEIGHT_MIN in sensors: if CONF_HEIGHT_MIN in sensors:
sens = await sensor.new_sensor(sensors[CONF_HEIGHT_MIN]) cg.add(var.set_sensor_height_min(await sensor.new_sensor(sensors[CONF_HEIGHT_MIN])))
cg.add(var.set_sensor_height_min(sens))
if CONF_HEIGHT_MAX in sensors: if CONF_HEIGHT_MAX in sensors:
sens = await sensor.new_sensor(sensors[CONF_HEIGHT_MAX]) cg.add(var.set_sensor_height_max(await sensor.new_sensor(sensors[CONF_HEIGHT_MAX])))
cg.add(var.set_sensor_height_max(sens))
if CONF_HEIGHT_PCT in sensors: if CONF_HEIGHT_PCT in sensors:
sens = await sensor.new_sensor(sensors[CONF_HEIGHT_PCT]) cg.add(var.set_sensor_height_pct(await sensor.new_sensor(sensors[CONF_HEIGHT_PCT])))
cg.add(var.set_sensor_height_pct(sens))
if CONF_POSITION1 in sensors: if CONF_POSITION1 in sensors:
sens = await sensor.new_sensor(sensors[CONF_POSITION1]) cg.add(var.set_sensor_position1(await sensor.new_sensor(sensors[CONF_POSITION1])))
cg.add(var.set_sensor_position1(sens))
if CONF_POSITION2 in sensors: if CONF_POSITION2 in sensors:
sens = await sensor.new_sensor(sensors[CONF_POSITION2]) cg.add(var.set_sensor_position2(await sensor.new_sensor(sensors[CONF_POSITION2])))
cg.add(var.set_sensor_position2(sens))
if CONF_POSITION3 in sensors: if CONF_POSITION3 in sensors:
sens = await sensor.new_sensor(sensors[CONF_POSITION3]) cg.add(var.set_sensor_position3(await sensor.new_sensor(sensors[CONF_POSITION3])))
cg.add(var.set_sensor_position3(sens))
if CONF_POSITION4 in sensors: if CONF_POSITION4 in sensors:
sens = await sensor.new_sensor(sensors[CONF_POSITION4]) cg.add(var.set_sensor_position4(await sensor.new_sensor(sensors[CONF_POSITION4])))
cg.add(var.set_sensor_position4(sens))
if CONF_BUTTONS in config: if CONF_BUTTONS in config:
buttons = config[CONF_BUTTONS] for button_type, button_cfg in config[CONF_BUTTONS].items():
for button_type in buttons.keys(): btn = await button.new_button(button_cfg)
btn = await button.new_button(buttons[button_type])
cg.add(var.add_button(btn, button_constants[button_type])) cg.add(var.add_button(btn, button_constants[button_type]))
if CONF_NUMBERS in config: if CONF_NUMBERS in config:
numbers = config[CONF_NUMBERS] for number_type, number_cfg in config[CONF_NUMBERS].items():
for number_type in numbers.keys(): num = await number.new_number(
num = await number.new_number(numbers[number_type], min_value=0, max_value=100, step=.1) number_cfg,
min_value=0,
max_value=100,
step=0.1,
)
cg.add(var.add_number(num, number_constants[number_type])) cg.add(var.add_number(num, number_constants[number_type]))