mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 06:33:51 +00:00 
			
		
		
		
	Add rotary encoder min/max value (#463)
This commit is contained in:
		| @@ -3,16 +3,16 @@ import voluptuous as vol | ||||
| from esphome import pins | ||||
| from esphome.components import sensor | ||||
| import esphome.config_validation as cv | ||||
| from esphome.const import CONF_ID, CONF_NAME, CONF_RESOLUTION | ||||
| from esphome.const import CONF_ID, CONF_NAME, CONF_RESOLUTION, CONF_MIN_VALUE, CONF_MAX_VALUE | ||||
| from esphome.cpp_generator import Pvariable, add | ||||
| from esphome.cpp_helpers import gpio_input_pin_expression, setup_component | ||||
| from esphome.cpp_types import App, Component | ||||
|  | ||||
| RotaryEncoderResolution = sensor.sensor_ns.enum('RotaryEncoderResolution') | ||||
| RESOLUTIONS = { | ||||
|     '1': RotaryEncoderResolution.ROTARY_ENCODER_1_PULSE_PER_CYCLE, | ||||
|     '2': RotaryEncoderResolution.ROTARY_ENCODER_2_PULSES_PER_CYCLE, | ||||
|     '4': RotaryEncoderResolution.ROTARY_ENCODER_4_PULSES_PER_CYCLE, | ||||
|     1: RotaryEncoderResolution.ROTARY_ENCODER_1_PULSE_PER_CYCLE, | ||||
|     2: RotaryEncoderResolution.ROTARY_ENCODER_2_PULSES_PER_CYCLE, | ||||
|     4: RotaryEncoderResolution.ROTARY_ENCODER_4_PULSES_PER_CYCLE, | ||||
| } | ||||
|  | ||||
| CONF_PIN_A = 'pin_a' | ||||
| @@ -21,13 +21,26 @@ CONF_PIN_RESET = 'pin_reset' | ||||
|  | ||||
| RotaryEncoderSensor = sensor.sensor_ns.class_('RotaryEncoderSensor', sensor.Sensor, Component) | ||||
|  | ||||
|  | ||||
| def validate_min_max_value(config): | ||||
|     if CONF_MIN_VALUE in config and CONF_MAX_VALUE in config: | ||||
|         min_val = config[CONF_MIN_VALUE] | ||||
|         max_val = config[CONF_MAX_VALUE] | ||||
|         if min_val >= max_val: | ||||
|             raise vol.Invalid("Max value {} must be smaller than min value {}" | ||||
|                               "".format(max_val, min_val)) | ||||
|     return config | ||||
|  | ||||
|  | ||||
| PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({ | ||||
|     cv.GenerateID(): cv.declare_variable_id(RotaryEncoderSensor), | ||||
|     vol.Required(CONF_PIN_A): pins.internal_gpio_input_pin_schema, | ||||
|     vol.Required(CONF_PIN_B): pins.internal_gpio_input_pin_schema, | ||||
|     vol.Optional(CONF_PIN_RESET): pins.internal_gpio_input_pin_schema, | ||||
|     vol.Optional(CONF_RESOLUTION): cv.one_of(*RESOLUTIONS, string=True), | ||||
| }).extend(cv.COMPONENT_SCHEMA.schema)) | ||||
|     vol.Optional(CONF_RESOLUTION): cv.one_of(*RESOLUTIONS, int=True), | ||||
|     vol.Optional(CONF_MIN_VALUE): cv.int_, | ||||
|     vol.Optional(CONF_MAX_VALUE): cv.int_, | ||||
| }).extend(cv.COMPONENT_SCHEMA.schema), validate_min_max_value) | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
| @@ -45,6 +58,10 @@ def to_code(config): | ||||
|     if CONF_RESOLUTION in config: | ||||
|         resolution = RESOLUTIONS[config[CONF_RESOLUTION]] | ||||
|         add(encoder.set_resolution(resolution)) | ||||
|     if CONF_MIN_VALUE in config: | ||||
|         add(encoder.set_min_value(config[CONF_MIN_VALUE])) | ||||
|     if CONF_MAX_VALUE in config: | ||||
|         add(encoder.set_min_value(config[CONF_MAX_VALUE])) | ||||
|  | ||||
|     sensor.setup_sensor(encoder, config) | ||||
|     setup_component(encoder, config) | ||||
|   | ||||
| @@ -416,6 +416,9 @@ CONF_FROM = 'from' | ||||
| CONF_TO = 'to' | ||||
| CONF_SEGMENTS = 'segments' | ||||
| CONF_MIN_POWER = 'min_power' | ||||
| CONF_MIN_VALUE = 'min_value' | ||||
| CONF_MAX_VALUE = 'max_value' | ||||
|  | ||||
|  | ||||
| ALLOWED_NAME_CHARS = u'abcdefghijklmnopqrstuvwxyz0123456789_' | ||||
| ARDUINO_VERSION_ESP32_DEV = 'https://github.com/platformio/platform-espressif32.git#feature/stage' | ||||
|   | ||||
		Reference in New Issue
	
	Block a user