mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 22:53:59 +00:00 
			
		
		
		
	Merge branch 'dev' into custom-sensor
# Conflicts: # esphomeyaml-edge/logo.png # esphomeyaml/components/light/__init__.py # esphomeyaml/pins.py
This commit is contained in:
		| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "esphomeyaml-beta", |   "name": "esphomeyaml-beta", | ||||||
|   "version": "1.9.0", |   "version": "1.9.2", | ||||||
|   "slug": "esphomeyaml-beta", |   "slug": "esphomeyaml-beta", | ||||||
|   "description": "Beta version of esphomeyaml Hass.io add-on.", |   "description": "Beta version of esphomeyaml Hass.io add-on.", | ||||||
|   "url": "https://beta.esphomelib.com/esphomeyaml/index.html", |   "url": "https://beta.esphomelib.com/esphomeyaml/index.html", | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								esphomeyaml-beta/icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								esphomeyaml-beta/icon.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 2.8 KiB | 
							
								
								
									
										
											BIN
										
									
								
								esphomeyaml-beta/logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								esphomeyaml-beta/logo.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 5.5 KiB | 
| @@ -153,7 +153,7 @@ def validate_multi_click_timing(value): | |||||||
| BINARY_SENSOR_SCHEMA = cv.MQTT_COMPONENT_SCHEMA.extend({ | BINARY_SENSOR_SCHEMA = cv.MQTT_COMPONENT_SCHEMA.extend({ | ||||||
|     cv.GenerateID(CONF_MQTT_ID): cv.declare_variable_id(MQTTBinarySensorComponent), |     cv.GenerateID(CONF_MQTT_ID): cv.declare_variable_id(MQTTBinarySensorComponent), | ||||||
|  |  | ||||||
|     vol.Optional(CONF_DEVICE_CLASS): vol.All(vol.Lower, cv.one_of(*DEVICE_CLASSES)), |     vol.Optional(CONF_DEVICE_CLASS): cv.one_of(*DEVICE_CLASSES, lower=True), | ||||||
|     vol.Optional(CONF_FILTERS): FILTERS_SCHEMA, |     vol.Optional(CONF_FILTERS): FILTERS_SCHEMA, | ||||||
|     vol.Optional(CONF_ON_PRESS): automation.validate_automation({ |     vol.Optional(CONF_ON_PRESS): automation.validate_automation({ | ||||||
|         cv.GenerateID(CONF_TRIGGER_ID): cv.declare_variable_id(PressTrigger), |         cv.GenerateID(CONF_TRIGGER_ID): cv.declare_variable_id(PressTrigger), | ||||||
|   | |||||||
| @@ -39,7 +39,7 @@ PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend | |||||||
|     cv.GenerateID(): cv.declare_variable_id(RemoteReceiver), |     cv.GenerateID(): cv.declare_variable_id(RemoteReceiver), | ||||||
|     vol.Optional(CONF_LG): vol.Schema({ |     vol.Optional(CONF_LG): vol.Schema({ | ||||||
|         vol.Required(CONF_DATA): cv.hex_uint32_t, |         vol.Required(CONF_DATA): cv.hex_uint32_t, | ||||||
|         vol.Optional(CONF_NBITS, default=28): vol.All(vol.Coerce(int), cv.one_of(28, 32)), |         vol.Optional(CONF_NBITS, default=28): cv.one_of(28, 32, int=True), | ||||||
|     }), |     }), | ||||||
|     vol.Optional(CONF_NEC): vol.Schema({ |     vol.Optional(CONF_NEC): vol.Schema({ | ||||||
|         vol.Required(CONF_ADDRESS): cv.hex_uint16_t, |         vol.Required(CONF_ADDRESS): cv.hex_uint16_t, | ||||||
| @@ -50,7 +50,7 @@ PLATFORM_SCHEMA = cv.nameable(binary_sensor.BINARY_SENSOR_PLATFORM_SCHEMA.extend | |||||||
|     }), |     }), | ||||||
|     vol.Optional(CONF_SONY): vol.Schema({ |     vol.Optional(CONF_SONY): vol.Schema({ | ||||||
|         vol.Required(CONF_DATA): cv.hex_uint32_t, |         vol.Required(CONF_DATA): cv.hex_uint32_t, | ||||||
|         vol.Optional(CONF_NBITS, default=12): vol.All(vol.Coerce(int), cv.one_of(12, 15, 20)), |         vol.Optional(CONF_NBITS, default=12): cv.one_of(12, 15, 20, int=True), | ||||||
|     }), |     }), | ||||||
|     vol.Optional(CONF_PANASONIC): vol.Schema({ |     vol.Optional(CONF_PANASONIC): vol.Schema({ | ||||||
|         vol.Required(CONF_ADDRESS): cv.hex_uint16_t, |         vol.Required(CONF_ADDRESS): cv.hex_uint16_t, | ||||||
|   | |||||||
| @@ -44,12 +44,12 @@ CONFIG_SCHEMA = vol.Schema({ | |||||||
|     vol.Optional(CONF_SLEEP_DURATION): cv.positive_time_period_milliseconds, |     vol.Optional(CONF_SLEEP_DURATION): cv.positive_time_period_milliseconds, | ||||||
|     vol.Optional(CONF_WAKEUP_PIN): vol.All(cv.only_on_esp32, pins.internal_gpio_input_pin_schema, |     vol.Optional(CONF_WAKEUP_PIN): vol.All(cv.only_on_esp32, pins.internal_gpio_input_pin_schema, | ||||||
|                                            validate_pin_number), |                                            validate_pin_number), | ||||||
|     vol.Optional(CONF_WAKEUP_PIN_MODE): vol.All(cv.only_on_esp32, vol.Upper, |     vol.Optional(CONF_WAKEUP_PIN_MODE): vol.All(cv.only_on_esp32, | ||||||
|                                                 cv.one_of(*WAKEUP_PIN_MODES)), |                                                 cv.one_of(*WAKEUP_PIN_MODES), upper=True), | ||||||
|     vol.Optional(CONF_ESP32_EXT1_WAKEUP): vol.All(cv.only_on_esp32, vol.Schema({ |     vol.Optional(CONF_ESP32_EXT1_WAKEUP): vol.All(cv.only_on_esp32, vol.Schema({ | ||||||
|         vol.Required(CONF_PINS): vol.All(cv.ensure_list, [pins.shorthand_input_pin], |         vol.Required(CONF_PINS): vol.All(cv.ensure_list, [pins.shorthand_input_pin], | ||||||
|                                          [validate_pin_number]), |                                          [validate_pin_number]), | ||||||
|         vol.Required(CONF_MODE): vol.All(vol.Upper, cv.one_of(*EXT1_WAKEUP_MODES)), |         vol.Required(CONF_MODE): cv.one_of(*EXT1_WAKEUP_MODES, upper=True), | ||||||
|     })), |     })), | ||||||
|     vol.Optional(CONF_RUN_CYCLES): cv.positive_int, |     vol.Optional(CONF_RUN_CYCLES): cv.positive_int, | ||||||
|     vol.Optional(CONF_RUN_DURATION): cv.positive_time_period_milliseconds, |     vol.Optional(CONF_RUN_DURATION): cv.positive_time_period_milliseconds, | ||||||
|   | |||||||
| @@ -27,7 +27,7 @@ MODELS = { | |||||||
|     'SH1106_64X48': SSD1306Model.SH1106_MODEL_64_48, |     'SH1106_64X48': SSD1306Model.SH1106_MODEL_64_48, | ||||||
| } | } | ||||||
|  |  | ||||||
| SSD1306_MODEL = vol.All(vol.Upper, vol.Replace(' ', '_'), cv.one_of(*MODELS)) | SSD1306_MODEL = vol.All(vol.Replace(' ', '_'), cv.one_of(*MODELS, upper=True)) | ||||||
|  |  | ||||||
| PLATFORM_SCHEMA = display.FULL_DISPLAY_PLATFORM_SCHEMA.extend({ | PLATFORM_SCHEMA = display.FULL_DISPLAY_PLATFORM_SCHEMA.extend({ | ||||||
|     cv.GenerateID(): cv.declare_variable_id(SPISSD1306), |     cv.GenerateID(): cv.declare_variable_id(SPISSD1306), | ||||||
|   | |||||||
| @@ -45,7 +45,7 @@ PLATFORM_SCHEMA = vol.All(display.FULL_DISPLAY_PLATFORM_SCHEMA.extend({ | |||||||
|     cv.GenerateID(CONF_SPI_ID): cv.use_variable_id(SPIComponent), |     cv.GenerateID(CONF_SPI_ID): cv.use_variable_id(SPIComponent), | ||||||
|     vol.Required(CONF_CS_PIN): pins.gpio_output_pin_schema, |     vol.Required(CONF_CS_PIN): pins.gpio_output_pin_schema, | ||||||
|     vol.Required(CONF_DC_PIN): pins.gpio_output_pin_schema, |     vol.Required(CONF_DC_PIN): pins.gpio_output_pin_schema, | ||||||
|     vol.Required(CONF_MODEL): vol.All(vol.Lower, cv.one_of(*MODELS)), |     vol.Required(CONF_MODEL): cv.one_of(*MODELS, lower=True), | ||||||
|     vol.Optional(CONF_RESET_PIN): pins.gpio_output_pin_schema, |     vol.Optional(CONF_RESET_PIN): pins.gpio_output_pin_schema, | ||||||
|     vol.Optional(CONF_BUSY_PIN): pins.gpio_input_pin_schema, |     vol.Optional(CONF_BUSY_PIN): pins.gpio_input_pin_schema, | ||||||
|     vol.Optional(CONF_FULL_UPDATE_EVERY): cv.uint32_t, |     vol.Optional(CONF_FULL_UPDATE_EVERY): cv.uint32_t, | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ CONF_MINOR = 'minor' | |||||||
|  |  | ||||||
| CONFIG_SCHEMA = vol.Schema({ | CONFIG_SCHEMA = vol.Schema({ | ||||||
|     cv.GenerateID(): cv.declare_variable_id(ESP32BLEBeacon), |     cv.GenerateID(): cv.declare_variable_id(ESP32BLEBeacon), | ||||||
|     vol.Required(CONF_TYPE): vol.All(vol.Upper, cv.one_of('IBEACON')), |     vol.Required(CONF_TYPE): cv.one_of('IBEACON', upper=True), | ||||||
|     vol.Required(CONF_UUID): cv.uuid, |     vol.Required(CONF_UUID): cv.uuid, | ||||||
|     vol.Optional(CONF_MAJOR): cv.uint16_t, |     vol.Optional(CONF_MAJOR): cv.uint16_t, | ||||||
|     vol.Optional(CONF_MINOR): cv.uint16_t, |     vol.Optional(CONF_MINOR): cv.uint16_t, | ||||||
|   | |||||||
| @@ -47,10 +47,6 @@ FAN_SPEEDS = { | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| def validate_fan_speed(value): |  | ||||||
|     return vol.All(vol.Upper, cv.one_of(*FAN_SPEEDS))(value) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def setup_fan_core_(fan_var, mqtt_var, config): | def setup_fan_core_(fan_var, mqtt_var, config): | ||||||
|     if CONF_INTERNAL in config: |     if CONF_INTERNAL in config: | ||||||
|         add(fan_var.set_internal(config[CONF_INTERNAL])) |         add(fan_var.set_internal(config[CONF_INTERNAL])) | ||||||
| @@ -110,7 +106,7 @@ CONF_FAN_TURN_ON = 'fan.turn_on' | |||||||
| FAN_TURN_ON_ACTION_SCHEMA = maybe_simple_id({ | FAN_TURN_ON_ACTION_SCHEMA = maybe_simple_id({ | ||||||
|     vol.Required(CONF_ID): cv.use_variable_id(FanState), |     vol.Required(CONF_ID): cv.use_variable_id(FanState), | ||||||
|     vol.Optional(CONF_OSCILLATING): cv.templatable(cv.boolean), |     vol.Optional(CONF_OSCILLATING): cv.templatable(cv.boolean), | ||||||
|     vol.Optional(CONF_SPEED): cv.templatable(validate_fan_speed), |     vol.Optional(CONF_SPEED): cv.templatable(cv.one_of(*FAN_SPEEDS, upper=True)), | ||||||
| }) | }) | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| import voluptuous as vol | import voluptuous as vol | ||||||
|  |  | ||||||
| from esphomeyaml.automation import maybe_simple_id, ACTION_REGISTRY | from esphomeyaml.automation import ACTION_REGISTRY, maybe_simple_id | ||||||
| from esphomeyaml.components import mqtt | from esphomeyaml.components import mqtt | ||||||
| from esphomeyaml.components.mqtt import setup_mqtt_component | from esphomeyaml.components.mqtt import setup_mqtt_component | ||||||
| import esphomeyaml.config_validation as cv | import esphomeyaml.config_validation as cv | ||||||
| @@ -35,7 +35,6 @@ TurnOnAction = light_ns.class_('TurnOnAction', Action) | |||||||
|  |  | ||||||
| LightColorValues = light_ns.class_('LightColorValues') | LightColorValues = light_ns.class_('LightColorValues') | ||||||
|  |  | ||||||
|  |  | ||||||
| MQTTJSONLightComponent = light_ns.class_('MQTTJSONLightComponent', mqtt.MQTTComponent) | MQTTJSONLightComponent = light_ns.class_('MQTTJSONLightComponent', mqtt.MQTTComponent) | ||||||
|  |  | ||||||
| # Effects | # Effects | ||||||
| @@ -356,7 +355,6 @@ def setup_light(light_obj, mqtt_obj, config): | |||||||
|  |  | ||||||
| BUILD_FLAGS = '-DUSE_LIGHT' | BUILD_FLAGS = '-DUSE_LIGHT' | ||||||
|  |  | ||||||
|  |  | ||||||
| CONF_LIGHT_TOGGLE = 'light.toggle' | CONF_LIGHT_TOGGLE = 'light.toggle' | ||||||
| LIGHT_TOGGLE_ACTION_SCHEMA = maybe_simple_id({ | LIGHT_TOGGLE_ACTION_SCHEMA = maybe_simple_id({ | ||||||
|     vol.Required(CONF_ID): cv.use_variable_id(LightState), |     vol.Required(CONF_ID): cv.use_variable_id(LightState), | ||||||
|   | |||||||
| @@ -59,12 +59,12 @@ MakeFastLEDLight = Application.struct('MakeFastLEDLight') | |||||||
| PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({ | PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({ | ||||||
|     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeFastLEDLight), |     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeFastLEDLight), | ||||||
|  |  | ||||||
|     vol.Required(CONF_CHIPSET): vol.All(vol.Upper, cv.one_of(*TYPES)), |     vol.Required(CONF_CHIPSET): cv.one_of(*TYPES, upper=True), | ||||||
|     vol.Required(CONF_PIN): pins.output_pin, |     vol.Required(CONF_PIN): pins.output_pin, | ||||||
|  |  | ||||||
|     vol.Required(CONF_NUM_LEDS): cv.positive_not_null_int, |     vol.Required(CONF_NUM_LEDS): cv.positive_not_null_int, | ||||||
|     vol.Optional(CONF_MAX_REFRESH_RATE): cv.positive_time_period_microseconds, |     vol.Optional(CONF_MAX_REFRESH_RATE): cv.positive_time_period_microseconds, | ||||||
|     vol.Optional(CONF_RGB_ORDER): vol.All(vol.Upper, cv.one_of(*RGB_ORDERS)), |     vol.Optional(CONF_RGB_ORDER): cv.one_of(*RGB_ORDERS, upper=True), | ||||||
|  |  | ||||||
|     vol.Optional(CONF_GAMMA_CORRECT): cv.positive_float, |     vol.Optional(CONF_GAMMA_CORRECT): cv.positive_float, | ||||||
|     vol.Optional(CONF_COLOR_CORRECT): vol.All([cv.percentage], vol.Length(min=3, max=3)), |     vol.Optional(CONF_COLOR_CORRECT): vol.All([cv.percentage], vol.Length(min=3, max=3)), | ||||||
|   | |||||||
| @@ -36,12 +36,12 @@ MakeFastLEDLight = Application.struct('MakeFastLEDLight') | |||||||
| PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({ | PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({ | ||||||
|     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeFastLEDLight), |     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeFastLEDLight), | ||||||
|  |  | ||||||
|     vol.Required(CONF_CHIPSET): vol.All(vol.Upper, cv.one_of(*CHIPSETS)), |     vol.Required(CONF_CHIPSET): cv.one_of(*CHIPSETS, upper=True), | ||||||
|     vol.Required(CONF_DATA_PIN): pins.output_pin, |     vol.Required(CONF_DATA_PIN): pins.output_pin, | ||||||
|     vol.Required(CONF_CLOCK_PIN): pins.output_pin, |     vol.Required(CONF_CLOCK_PIN): pins.output_pin, | ||||||
|  |  | ||||||
|     vol.Required(CONF_NUM_LEDS): cv.positive_not_null_int, |     vol.Required(CONF_NUM_LEDS): cv.positive_not_null_int, | ||||||
|     vol.Optional(CONF_RGB_ORDER): vol.All(vol.Upper, cv.one_of(*RGB_ORDERS)), |     vol.Optional(CONF_RGB_ORDER): cv.one_of(*RGB_ORDERS, upper=True), | ||||||
|     vol.Optional(CONF_MAX_REFRESH_RATE): cv.positive_time_period_microseconds, |     vol.Optional(CONF_MAX_REFRESH_RATE): cv.positive_time_period_microseconds, | ||||||
|  |  | ||||||
|     vol.Optional(CONF_GAMMA_CORRECT): cv.positive_float, |     vol.Optional(CONF_GAMMA_CORRECT): cv.positive_float, | ||||||
|   | |||||||
| @@ -33,7 +33,7 @@ LOG_LEVEL_TO_ESP_LOG = { | |||||||
| LOG_LEVEL_SEVERITY = ['NONE', 'ERROR', 'WARN', 'INFO', 'DEBUG', 'VERBOSE', 'VERY_VERBOSE'] | LOG_LEVEL_SEVERITY = ['NONE', 'ERROR', 'WARN', 'INFO', 'DEBUG', 'VERBOSE', 'VERY_VERBOSE'] | ||||||
|  |  | ||||||
| # pylint: disable=invalid-name | # pylint: disable=invalid-name | ||||||
| is_log_level = vol.All(vol.Upper, cv.one_of(*LOG_LEVELS)) | is_log_level = cv.one_of(*LOG_LEVELS, upper=True) | ||||||
|  |  | ||||||
|  |  | ||||||
| def validate_local_no_higher_than_global(value): | def validate_local_no_higher_than_global(value): | ||||||
| @@ -110,7 +110,7 @@ CONF_LOGGER_LOG = 'logger.log' | |||||||
| LOGGER_LOG_ACTION_SCHEMA = vol.All(maybe_simple_message({ | LOGGER_LOG_ACTION_SCHEMA = vol.All(maybe_simple_message({ | ||||||
|     vol.Required(CONF_FORMAT): cv.string, |     vol.Required(CONF_FORMAT): cv.string, | ||||||
|     vol.Optional(CONF_ARGS, default=list): vol.All(cv.ensure_list, [cv.lambda_]), |     vol.Optional(CONF_ARGS, default=list): vol.All(cv.ensure_list, [cv.lambda_]), | ||||||
|     vol.Optional(CONF_LEVEL, default="DEBUG"): vol.All(vol.Upper, cv.one_of(*LOG_LEVEL_TO_ESP_LOG)), |     vol.Optional(CONF_LEVEL, default="DEBUG"): cv.one_of(*LOG_LEVEL_TO_ESP_LOG, upper=True), | ||||||
|     vol.Optional(CONF_TAG, default="main"): cv.string, |     vol.Optional(CONF_TAG, default="main"): cv.string, | ||||||
| }), validate_printf) | }), validate_printf) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -19,8 +19,7 @@ MY9231_SCHEMA = vol.Schema({ | |||||||
|                                              vol.Range(3, 1020)), |                                              vol.Range(3, 1020)), | ||||||
|     vol.Optional(CONF_NUM_CHIPS): vol.All(vol.Coerce(int), |     vol.Optional(CONF_NUM_CHIPS): vol.All(vol.Coerce(int), | ||||||
|                                           vol.Range(1, 255)), |                                           vol.Range(1, 255)), | ||||||
|     vol.Optional(CONF_BIT_DEPTH): vol.All(vol.Coerce(int), |     vol.Optional(CONF_BIT_DEPTH): cv.one_of(8, 12, 14, 16, int=True), | ||||||
|                                           cv.one_of(8, 12, 14, 16)), |  | ||||||
|     vol.Optional(CONF_UPDATE_ON_BOOT): vol.Coerce(bool), |     vol.Optional(CONF_UPDATE_ON_BOOT): vol.Coerce(bool), | ||||||
| }).extend(cv.COMPONENT_SCHEMA.schema) | }).extend(cv.COMPONENT_SCHEMA.schema) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -41,7 +41,7 @@ CONFIG_SCHEMA = vol.All(cv.ensure_list, [vol.Schema({ | |||||||
|     vol.Required(CONF_PIN): pins.gpio_input_pin_schema, |     vol.Required(CONF_PIN): pins.gpio_input_pin_schema, | ||||||
|     vol.Optional(CONF_DUMP, default=[]): |     vol.Optional(CONF_DUMP, default=[]): | ||||||
|         vol.Any(validate_dumpers_all, |         vol.Any(validate_dumpers_all, | ||||||
|                 vol.All(cv.ensure_list, [vol.All(vol.Lower, cv.one_of(*DUMPERS))])), |                 vol.All(cv.ensure_list, [cv.one_of(*DUMPERS, lower=True)])), | ||||||
|     vol.Optional(CONF_TOLERANCE): vol.All(cv.percentage_int, vol.Range(min=0)), |     vol.Optional(CONF_TOLERANCE): vol.All(cv.percentage_int, vol.Range(min=0)), | ||||||
|     vol.Optional(CONF_BUFFER_SIZE): cv.validate_bytes, |     vol.Optional(CONF_BUFFER_SIZE): cv.validate_bytes, | ||||||
|     vol.Optional(CONF_FILTER): cv.positive_time_period_microseconds, |     vol.Optional(CONF_FILTER): cv.positive_time_period_microseconds, | ||||||
|   | |||||||
| @@ -62,17 +62,15 @@ RC_SWITCH_TYPE_B_SCHEMA = vol.Schema({ | |||||||
|     vol.Optional(CONF_PROTOCOL, default=1): RC_SWITCH_PROTOCOL_SCHEMA, |     vol.Optional(CONF_PROTOCOL, default=1): RC_SWITCH_PROTOCOL_SCHEMA, | ||||||
| }) | }) | ||||||
| RC_SWITCH_TYPE_C_SCHEMA = vol.Schema({ | RC_SWITCH_TYPE_C_SCHEMA = vol.Schema({ | ||||||
|     vol.Required(CONF_FAMILY): vol.All( |     vol.Required(CONF_FAMILY): cv.one_of('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', | ||||||
|         cv.string, vol.Lower, |                                          'l', 'm', 'n', 'o', 'p', lower=True), | ||||||
|         cv.one_of('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', |  | ||||||
|                   'p')), |  | ||||||
|     vol.Required(CONF_GROUP): vol.All(cv.uint8_t, vol.Range(min=1, max=4)), |     vol.Required(CONF_GROUP): vol.All(cv.uint8_t, vol.Range(min=1, max=4)), | ||||||
|     vol.Required(CONF_DEVICE): vol.All(cv.uint8_t, vol.Range(min=1, max=4)), |     vol.Required(CONF_DEVICE): vol.All(cv.uint8_t, vol.Range(min=1, max=4)), | ||||||
|     vol.Required(CONF_STATE): cv.boolean, |     vol.Required(CONF_STATE): cv.boolean, | ||||||
|     vol.Optional(CONF_PROTOCOL, default=1): RC_SWITCH_PROTOCOL_SCHEMA, |     vol.Optional(CONF_PROTOCOL, default=1): RC_SWITCH_PROTOCOL_SCHEMA, | ||||||
| }) | }) | ||||||
| RC_SWITCH_TYPE_D_SCHEMA = vol.Schema({ | RC_SWITCH_TYPE_D_SCHEMA = vol.Schema({ | ||||||
|     vol.Required(CONF_GROUP): vol.All(cv.string, vol.Lower, cv.one_of('a', 'b', 'c', 'd')), |     vol.Required(CONF_GROUP): cv.one_of('a', 'b', 'c', 'd', lower=True), | ||||||
|     vol.Required(CONF_DEVICE): vol.All(cv.uint8_t, vol.Range(min=1, max=3)), |     vol.Required(CONF_DEVICE): vol.All(cv.uint8_t, vol.Range(min=1, max=3)), | ||||||
|     vol.Required(CONF_STATE): cv.boolean, |     vol.Required(CONF_STATE): cv.boolean, | ||||||
|     vol.Optional(CONF_PROTOCOL, default=1): RC_SWITCH_PROTOCOL_SCHEMA, |     vol.Optional(CONF_PROTOCOL, default=1): RC_SWITCH_PROTOCOL_SCHEMA, | ||||||
|   | |||||||
| @@ -31,7 +31,8 @@ PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({ | |||||||
|     cv.GenerateID(): cv.declare_variable_id(ADCSensorComponent), |     cv.GenerateID(): cv.declare_variable_id(ADCSensorComponent), | ||||||
|     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeADCSensor), |     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeADCSensor), | ||||||
|     vol.Required(CONF_PIN): validate_adc_pin, |     vol.Required(CONF_PIN): validate_adc_pin, | ||||||
|     vol.Optional(CONF_ATTENUATION): vol.All(cv.only_on_esp32, cv.one_of(*ATTENUATION_MODES)), |     vol.Optional(CONF_ATTENUATION): vol.All(cv.only_on_esp32, cv.one_of(*ATTENUATION_MODES, | ||||||
|  |                                                                         lower=True)), | ||||||
|     vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval, |     vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval, | ||||||
| }).extend(cv.COMPONENT_SCHEMA.schema)) | }).extend(cv.COMPONENT_SCHEMA.schema)) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -30,7 +30,7 @@ IIR_FILTER_OPTIONS = { | |||||||
| } | } | ||||||
|  |  | ||||||
| BME280_OVERSAMPLING_SENSOR_SCHEMA = sensor.SENSOR_SCHEMA.extend({ | BME280_OVERSAMPLING_SENSOR_SCHEMA = sensor.SENSOR_SCHEMA.extend({ | ||||||
|     vol.Optional(CONF_OVERSAMPLING): vol.All(vol.Upper, cv.one_of(*OVERSAMPLING_OPTIONS)), |     vol.Optional(CONF_OVERSAMPLING): cv.one_of(*OVERSAMPLING_OPTIONS, upper=True), | ||||||
| }) | }) | ||||||
|  |  | ||||||
| MakeBME280Sensor = Application.struct('MakeBME280Sensor') | MakeBME280Sensor = Application.struct('MakeBME280Sensor') | ||||||
| @@ -53,7 +53,7 @@ PLATFORM_SCHEMA = sensor.PLATFORM_SCHEMA.extend({ | |||||||
|     vol.Required(CONF_HUMIDITY): cv.nameable(BME280_OVERSAMPLING_SENSOR_SCHEMA.extend({ |     vol.Required(CONF_HUMIDITY): cv.nameable(BME280_OVERSAMPLING_SENSOR_SCHEMA.extend({ | ||||||
|         cv.GenerateID(): cv.declare_variable_id(BME280HumiditySensor), |         cv.GenerateID(): cv.declare_variable_id(BME280HumiditySensor), | ||||||
|     })), |     })), | ||||||
|     vol.Optional(CONF_IIR_FILTER): vol.All(vol.Upper, cv.one_of(*IIR_FILTER_OPTIONS)), |     vol.Optional(CONF_IIR_FILTER): cv.one_of(*IIR_FILTER_OPTIONS, upper=True), | ||||||
|     vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval, |     vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval, | ||||||
| }).extend(cv.COMPONENT_SCHEMA.schema) | }).extend(cv.COMPONENT_SCHEMA.schema) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -35,7 +35,7 @@ IIR_FILTER_OPTIONS = { | |||||||
| } | } | ||||||
|  |  | ||||||
| BME680_OVERSAMPLING_SENSOR_SCHEMA = sensor.SENSOR_SCHEMA.extend({ | BME680_OVERSAMPLING_SENSOR_SCHEMA = sensor.SENSOR_SCHEMA.extend({ | ||||||
|     vol.Optional(CONF_OVERSAMPLING): vol.All(vol.Upper, cv.one_of(*OVERSAMPLING_OPTIONS)), |     vol.Optional(CONF_OVERSAMPLING): cv.one_of(*OVERSAMPLING_OPTIONS, upper=True), | ||||||
| }) | }) | ||||||
|  |  | ||||||
| MakeBME680Sensor = Application.struct('MakeBME680Sensor') | MakeBME680Sensor = Application.struct('MakeBME680Sensor') | ||||||
| @@ -63,7 +63,7 @@ PLATFORM_SCHEMA = sensor.PLATFORM_SCHEMA.extend({ | |||||||
|     vol.Required(CONF_GAS_RESISTANCE): cv.nameable(sensor.SENSOR_SCHEMA.extend({ |     vol.Required(CONF_GAS_RESISTANCE): cv.nameable(sensor.SENSOR_SCHEMA.extend({ | ||||||
|         cv.GenerateID(): cv.declare_variable_id(BME680GasResistanceSensor), |         cv.GenerateID(): cv.declare_variable_id(BME680GasResistanceSensor), | ||||||
|     })), |     })), | ||||||
|     vol.Optional(CONF_IIR_FILTER): vol.All(vol.Upper, cv.one_of(*IIR_FILTER_OPTIONS)), |     vol.Optional(CONF_IIR_FILTER): cv.one_of(*IIR_FILTER_OPTIONS, upper=True), | ||||||
|     vol.Optional(CONF_HEATER): vol.Any(None, vol.All(vol.Schema({ |     vol.Optional(CONF_HEATER): vol.Any(None, vol.All(vol.Schema({ | ||||||
|         vol.Optional(CONF_TEMPERATURE, default=320): vol.All(vol.Coerce(int), vol.Range(200, 400)), |         vol.Optional(CONF_TEMPERATURE, default=320): vol.All(vol.Coerce(int), vol.Range(200, 400)), | ||||||
|         vol.Optional(CONF_DURATION, default='150ms'): vol.All( |         vol.Optional(CONF_DURATION, default='150ms'): vol.All( | ||||||
|   | |||||||
| @@ -30,7 +30,7 @@ IIR_FILTER_OPTIONS = { | |||||||
| } | } | ||||||
|  |  | ||||||
| BMP280_OVERSAMPLING_SENSOR_SCHEMA = sensor.SENSOR_SCHEMA.extend({ | BMP280_OVERSAMPLING_SENSOR_SCHEMA = sensor.SENSOR_SCHEMA.extend({ | ||||||
|     vol.Optional(CONF_OVERSAMPLING): vol.All(vol.Upper, cv.one_of(*OVERSAMPLING_OPTIONS)), |     vol.Optional(CONF_OVERSAMPLING): cv.one_of(*OVERSAMPLING_OPTIONS, upper=True), | ||||||
| }) | }) | ||||||
|  |  | ||||||
| MakeBMP280Sensor = Application.struct('MakeBMP280Sensor') | MakeBMP280Sensor = Application.struct('MakeBMP280Sensor') | ||||||
| @@ -48,7 +48,7 @@ PLATFORM_SCHEMA = sensor.PLATFORM_SCHEMA.extend({ | |||||||
|     vol.Required(CONF_PRESSURE): cv.nameable(BMP280_OVERSAMPLING_SENSOR_SCHEMA.extend({ |     vol.Required(CONF_PRESSURE): cv.nameable(BMP280_OVERSAMPLING_SENSOR_SCHEMA.extend({ | ||||||
|         cv.GenerateID(): cv.declare_variable_id(BMP280PressureSensor), |         cv.GenerateID(): cv.declare_variable_id(BMP280PressureSensor), | ||||||
|     })), |     })), | ||||||
|     vol.Optional(CONF_IIR_FILTER): vol.All(vol.Upper, cv.one_of(*IIR_FILTER_OPTIONS)), |     vol.Optional(CONF_IIR_FILTER): cv.one_of(*IIR_FILTER_OPTIONS, upper=True), | ||||||
|     vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval, |     vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval, | ||||||
| }).extend(cv.COMPONENT_SCHEMA.schema) | }).extend(cv.COMPONENT_SCHEMA.schema) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -35,7 +35,7 @@ PLATFORM_SCHEMA = sensor.PLATFORM_SCHEMA.extend({ | |||||||
|     vol.Required(CONF_HUMIDITY): cv.nameable(sensor.SENSOR_SCHEMA.extend({ |     vol.Required(CONF_HUMIDITY): cv.nameable(sensor.SENSOR_SCHEMA.extend({ | ||||||
|         cv.GenerateID(): cv.declare_variable_id(DHTHumiditySensor), |         cv.GenerateID(): cv.declare_variable_id(DHTHumiditySensor), | ||||||
|     })), |     })), | ||||||
|     vol.Optional(CONF_MODEL): vol.All(vol.Upper, cv.one_of(*DHT_MODELS)), |     vol.Optional(CONF_MODEL): cv.one_of(*DHT_MODELS, upper=True), | ||||||
|     vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval, |     vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval, | ||||||
| }).extend(cv.COMPONENT_SCHEMA.schema) | }).extend(cv.COMPONENT_SCHEMA.schema) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -39,7 +39,7 @@ def validate_range(value): | |||||||
|     value = cv.string(value) |     value = cv.string(value) | ||||||
|     if value.endswith(u'µT') or value.endswith('uT'): |     if value.endswith(u'µT') or value.endswith('uT'): | ||||||
|         value = value[:-2] |         value = value[:-2] | ||||||
|     return cv.one_of(*HMC5883L_RANGES)(int(value)) |     return cv.one_of(*HMC5883L_RANGES, int=True)(value) | ||||||
|  |  | ||||||
|  |  | ||||||
| SENSOR_KEYS = [CONF_FIELD_STRENGTH_X, CONF_FIELD_STRENGTH_Y, CONF_FIELD_STRENGTH_Z, | SENSOR_KEYS = [CONF_FIELD_STRENGTH_X, CONF_FIELD_STRENGTH_Y, CONF_FIELD_STRENGTH_Z, | ||||||
|   | |||||||
| @@ -25,7 +25,7 @@ PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({ | |||||||
|     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeHX711Sensor), |     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeHX711Sensor), | ||||||
|     vol.Required(CONF_DOUT_PIN): pins.gpio_input_pin_schema, |     vol.Required(CONF_DOUT_PIN): pins.gpio_input_pin_schema, | ||||||
|     vol.Required(CONF_CLK_PIN): pins.gpio_output_pin_schema, |     vol.Required(CONF_CLK_PIN): pins.gpio_output_pin_schema, | ||||||
|     vol.Optional(CONF_GAIN): vol.All(cv.int_, cv.one_of(*GAINS)), |     vol.Optional(CONF_GAIN): cv.one_of(*GAINS, int=True), | ||||||
|     vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval, |     vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval, | ||||||
| }).extend(cv.COMPONENT_SCHEMA.schema)) | }).extend(cv.COMPONENT_SCHEMA.schema)) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -49,7 +49,7 @@ PMSX003_SENSOR_SCHEMA = sensor.SENSOR_SCHEMA.extend({ | |||||||
| PLATFORM_SCHEMA = vol.All(sensor.PLATFORM_SCHEMA.extend({ | PLATFORM_SCHEMA = vol.All(sensor.PLATFORM_SCHEMA.extend({ | ||||||
|     cv.GenerateID(): cv.declare_variable_id(PMSX003Component), |     cv.GenerateID(): cv.declare_variable_id(PMSX003Component), | ||||||
|     cv.GenerateID(CONF_UART_ID): cv.use_variable_id(UARTComponent), |     cv.GenerateID(CONF_UART_ID): cv.use_variable_id(UARTComponent), | ||||||
|     vol.Required(CONF_TYPE): vol.All(vol.Upper, cv.one_of(*PMSX003_TYPES)), |     vol.Required(CONF_TYPE): cv.one_of(*PMSX003_TYPES, upper=True), | ||||||
|  |  | ||||||
|     vol.Optional(CONF_PM_1_0): cv.nameable(PMSX003_SENSOR_SCHEMA), |     vol.Optional(CONF_PM_1_0): cv.nameable(PMSX003_SENSOR_SCHEMA), | ||||||
|     vol.Optional(CONF_PM_2_5): cv.nameable(PMSX003_SENSOR_SCHEMA), |     vol.Optional(CONF_PM_2_5): cv.nameable(PMSX003_SENSOR_SCHEMA), | ||||||
|   | |||||||
| @@ -17,7 +17,7 @@ COUNT_MODES = { | |||||||
|     'DECREMENT': PulseCounterCountMode.PULSE_COUNTER_DECREMENT, |     'DECREMENT': PulseCounterCountMode.PULSE_COUNTER_DECREMENT, | ||||||
| } | } | ||||||
|  |  | ||||||
| COUNT_MODE_SCHEMA = vol.All(vol.Upper, cv.one_of(*COUNT_MODES)) | COUNT_MODE_SCHEMA = cv.one_of(*COUNT_MODES, upper=True) | ||||||
|  |  | ||||||
| PulseCounterBase = sensor.sensor_ns.class_('PulseCounterBase') | PulseCounterBase = sensor.sensor_ns.class_('PulseCounterBase') | ||||||
| MakePulseCounterSensor = Application.struct('MakePulseCounterSensor') | MakePulseCounterSensor = Application.struct('MakePulseCounterSensor') | ||||||
|   | |||||||
| @@ -28,7 +28,7 @@ PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({ | |||||||
|     vol.Required(CONF_PIN_A): pins.internal_gpio_input_pin_schema, |     vol.Required(CONF_PIN_A): pins.internal_gpio_input_pin_schema, | ||||||
|     vol.Required(CONF_PIN_B): 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_PIN_RESET): pins.internal_gpio_input_pin_schema, | ||||||
|     vol.Optional(CONF_RESOLUTION): vol.All(cv.string, cv.one_of(*RESOLUTIONS)), |     vol.Optional(CONF_RESOLUTION): cv.one_of(*RESOLUTIONS, string=True), | ||||||
| }).extend(cv.COMPONENT_SCHEMA.schema)) | }).extend(cv.COMPONENT_SCHEMA.schema)) | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -64,8 +64,8 @@ PLATFORM_SCHEMA = vol.All(sensor.PLATFORM_SCHEMA.extend({ | |||||||
|     vol.Optional(CONF_COLOR_TEMPERATURE): cv.nameable(sensor.SENSOR_SCHEMA.extend({ |     vol.Optional(CONF_COLOR_TEMPERATURE): cv.nameable(sensor.SENSOR_SCHEMA.extend({ | ||||||
|         cv.GenerateID(): cv.declare_variable_id(TCS35725ColorTemperatureSensor), |         cv.GenerateID(): cv.declare_variable_id(TCS35725ColorTemperatureSensor), | ||||||
|     })), |     })), | ||||||
|     vol.Optional(CONF_INTEGRATION_TIME): cv.one_of(*TCS34725_INTEGRATION_TIMES), |     vol.Optional(CONF_INTEGRATION_TIME): cv.one_of(*TCS34725_INTEGRATION_TIMES, lower=True), | ||||||
|     vol.Optional(CONF_GAIN): vol.All(vol.Upper, cv.one_of(*TCS34725_GAINS)), |     vol.Optional(CONF_GAIN): vol.All(vol.Upper, cv.one_of(*TCS34725_GAINS), upper=True), | ||||||
|     vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval, |     vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval, | ||||||
| }).extend(cv.COMPONENT_SCHEMA.schema), cv.has_at_least_one_key(*SENSOR_KEYS)) | }).extend(cv.COMPONENT_SCHEMA.schema), cv.has_at_least_one_key(*SENSOR_KEYS)) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -42,7 +42,7 @@ PLATFORM_SCHEMA = cv.nameable(sensor.SENSOR_PLATFORM_SCHEMA.extend({ | |||||||
|     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeTSL2561Sensor), |     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeTSL2561Sensor), | ||||||
|     vol.Optional(CONF_ADDRESS, default=0x39): cv.i2c_address, |     vol.Optional(CONF_ADDRESS, default=0x39): cv.i2c_address, | ||||||
|     vol.Optional(CONF_INTEGRATION_TIME): validate_integration_time, |     vol.Optional(CONF_INTEGRATION_TIME): validate_integration_time, | ||||||
|     vol.Optional(CONF_GAIN): vol.All(vol.Upper, cv.one_of(*GAINS)), |     vol.Optional(CONF_GAIN): cv.one_of(*GAINS, upper=True), | ||||||
|     vol.Optional(CONF_IS_CS_PACKAGE): cv.boolean, |     vol.Optional(CONF_IS_CS_PACKAGE): cv.boolean, | ||||||
|     vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval, |     vol.Optional(CONF_UPDATE_INTERVAL): cv.update_interval, | ||||||
| }).extend(cv.COMPONENT_SCHEMA.schema)) | }).extend(cv.COMPONENT_SCHEMA.schema)) | ||||||
|   | |||||||
| @@ -42,7 +42,7 @@ PLATFORM_SCHEMA = cv.nameable(switch.SWITCH_PLATFORM_SCHEMA.extend({ | |||||||
|     cv.GenerateID(): cv.declare_variable_id(RemoteTransmitter), |     cv.GenerateID(): cv.declare_variable_id(RemoteTransmitter), | ||||||
|     vol.Optional(CONF_LG): vol.Schema({ |     vol.Optional(CONF_LG): vol.Schema({ | ||||||
|         vol.Required(CONF_DATA): cv.hex_uint32_t, |         vol.Required(CONF_DATA): cv.hex_uint32_t, | ||||||
|         vol.Optional(CONF_NBITS, default=28): vol.All(vol.Coerce(int), cv.one_of(28, 32)), |         vol.Optional(CONF_NBITS, default=28): cv.one_of(28, 32, int=True), | ||||||
|     }), |     }), | ||||||
|     vol.Optional(CONF_NEC): vol.Schema({ |     vol.Optional(CONF_NEC): vol.Schema({ | ||||||
|         vol.Required(CONF_ADDRESS): cv.hex_uint16_t, |         vol.Required(CONF_ADDRESS): cv.hex_uint16_t, | ||||||
| @@ -53,7 +53,7 @@ PLATFORM_SCHEMA = cv.nameable(switch.SWITCH_PLATFORM_SCHEMA.extend({ | |||||||
|     }), |     }), | ||||||
|     vol.Optional(CONF_SONY): vol.Schema({ |     vol.Optional(CONF_SONY): vol.Schema({ | ||||||
|         vol.Required(CONF_DATA): cv.hex_uint32_t, |         vol.Required(CONF_DATA): cv.hex_uint32_t, | ||||||
|         vol.Optional(CONF_NBITS, default=12): vol.All(vol.Coerce(int), cv.one_of(12, 15, 20)), |         vol.Optional(CONF_NBITS, default=12): cv.one_of(12, 15, 20, int=True), | ||||||
|     }), |     }), | ||||||
|     vol.Optional(CONF_PANASONIC): vol.Schema({ |     vol.Optional(CONF_PANASONIC): vol.Schema({ | ||||||
|         vol.Required(CONF_ADDRESS): cv.hex_uint16_t, |         vol.Required(CONF_ADDRESS): cv.hex_uint16_t, | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ SNTPComponent = time_.time_ns.class_('SNTPComponent', time_.RealTimeClockCompone | |||||||
|  |  | ||||||
| PLATFORM_SCHEMA = time_.TIME_PLATFORM_SCHEMA.extend({ | PLATFORM_SCHEMA = time_.TIME_PLATFORM_SCHEMA.extend({ | ||||||
|     cv.GenerateID(): cv.declare_variable_id(SNTPComponent), |     cv.GenerateID(): cv.declare_variable_id(SNTPComponent), | ||||||
|     vol.Optional(CONF_SERVERS): vol.All(cv.ensure_list, [cv.string], vol.Length(max=3)), |     vol.Optional(CONF_SERVERS): vol.All(cv.ensure_list, [cv.string], vol.Length(min=1, max=3)), | ||||||
|     vol.Optional(CONF_LAMBDA): cv.lambda_, |     vol.Optional(CONF_LAMBDA): cv.lambda_, | ||||||
| }).extend(cv.COMPONENT_SCHEMA.schema) | }).extend(cv.COMPONENT_SCHEMA.schema) | ||||||
|  |  | ||||||
| @@ -20,7 +20,9 @@ def to_code(config): | |||||||
|     rhs = App.make_sntp_component() |     rhs = App.make_sntp_component() | ||||||
|     sntp = Pvariable(config[CONF_ID], rhs) |     sntp = Pvariable(config[CONF_ID], rhs) | ||||||
|     if CONF_SERVERS in config: |     if CONF_SERVERS in config: | ||||||
|         add(sntp.set_servers(*config[CONF_SERVERS])) |         servers = config[CONF_SERVERS] | ||||||
|  |         servers += [''] * (3 - len(servers)) | ||||||
|  |         add(sntp.set_servers(*servers)) | ||||||
|  |  | ||||||
|     time_.setup_time(sntp, config) |     time_.setup_time(sntp, config) | ||||||
|     setup_component(sntp, config) |     setup_component(sntp, config) | ||||||
|   | |||||||
| @@ -86,7 +86,7 @@ CONFIG_SCHEMA = vol.All(vol.Schema({ | |||||||
|     vol.Optional(CONF_HOSTNAME): cv.hostname, |     vol.Optional(CONF_HOSTNAME): cv.hostname, | ||||||
|     vol.Optional(CONF_DOMAIN, default='.local'): cv.domain_name, |     vol.Optional(CONF_DOMAIN, default='.local'): cv.domain_name, | ||||||
|     vol.Optional(CONF_REBOOT_TIMEOUT): cv.positive_time_period_milliseconds, |     vol.Optional(CONF_REBOOT_TIMEOUT): cv.positive_time_period_milliseconds, | ||||||
|     vol.Optional(CONF_POWER_SAVE_MODE): vol.All(vol.Upper, cv.one_of(*WIFI_POWER_SAVE_MODES)), |     vol.Optional(CONF_POWER_SAVE_MODE): cv.one_of(*WIFI_POWER_SAVE_MODES, upper=True), | ||||||
| }), validate) | }), validate) | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "esphomeyaml", |   "name": "esphomeyaml", | ||||||
|   "version": "1.9.0", |   "version": "1.9.2", | ||||||
|   "slug": "esphomeyaml", |   "slug": "esphomeyaml", | ||||||
|   "description": "esphomeyaml Hass.io add-on for intelligently managing all your ESP8266/ESP32 devices.", |   "description": "esphomeyaml Hass.io add-on for intelligently managing all your ESP8266/ESP32 devices.", | ||||||
|   "url": "https://esphomelib.com/esphomeyaml/index.html", |   "url": "https://esphomelib.com/esphomeyaml/index.html", | ||||||
|   | |||||||
| @@ -584,10 +584,22 @@ def valid(value): | |||||||
|     return value |     return value | ||||||
|  |  | ||||||
|  |  | ||||||
| def one_of(*values): | def one_of(*values, **kwargs): | ||||||
|     options = u', '.join(u"'{}'".format(x) for x in values) |     options = u', '.join(u"'{}'".format(x) for x in values) | ||||||
|  |     lower = kwargs.get('lower', False) | ||||||
|  |     upper = kwargs.get('upper', False) | ||||||
|  |     string_ = kwargs.get('string', False) or lower or upper | ||||||
|  |     to_int = kwargs.get('int', False) | ||||||
|  |  | ||||||
|     def validator(value): |     def validator(value): | ||||||
|  |         if string_: | ||||||
|  |             value = string(value) | ||||||
|  |         if to_int: | ||||||
|  |             value = int_(value) | ||||||
|  |         if lower: | ||||||
|  |             value = vol.Lower(value) | ||||||
|  |         if upper: | ||||||
|  |             value = vol.Upper(value) | ||||||
|         if value not in values: |         if value not in values: | ||||||
|             raise vol.Invalid(u"Unknown value '{}', must be one of {}".format(value, options)) |             raise vol.Invalid(u"Unknown value '{}', must be one of {}".format(value, options)) | ||||||
|         return value |         return value | ||||||
|   | |||||||
| @@ -156,15 +156,15 @@ def default_build_path(): | |||||||
|  |  | ||||||
| CONFIG_SCHEMA = vol.Schema({ | CONFIG_SCHEMA = vol.Schema({ | ||||||
|     vol.Required(CONF_NAME): cv.valid_name, |     vol.Required(CONF_NAME): cv.valid_name, | ||||||
|     vol.Required(CONF_PLATFORM): vol.All(vol.Upper, cv.one_of('ESP8266', 'ESPRESSIF8266', |     vol.Required(CONF_PLATFORM): cv.one_of('ESP8266', 'ESPRESSIF8266', 'ESP32', 'ESPRESSIF32', | ||||||
|                                                               'ESP32', 'ESPRESSIF32')), |                                            upper=True), | ||||||
|     vol.Required(CONF_BOARD): validate_board, |     vol.Required(CONF_BOARD): validate_board, | ||||||
|     vol.Optional(CONF_ESPHOMELIB_VERSION, default='latest'): ESPHOMELIB_VERSION_SCHEMA, |     vol.Optional(CONF_ESPHOMELIB_VERSION, default='latest'): ESPHOMELIB_VERSION_SCHEMA, | ||||||
|     vol.Optional(CONF_ARDUINO_VERSION, default='recommended'): validate_arduino_version, |     vol.Optional(CONF_ARDUINO_VERSION, default='recommended'): validate_arduino_version, | ||||||
|     vol.Optional(CONF_USE_CUSTOM_CODE, default=False): cv.boolean, |     vol.Optional(CONF_USE_CUSTOM_CODE, default=False): cv.boolean, | ||||||
|     vol.Optional(CONF_BUILD_PATH, default=default_build_path): cv.string, |     vol.Optional(CONF_BUILD_PATH, default=default_build_path): cv.string, | ||||||
|  |  | ||||||
|     vol.Optional(CONF_BOARD_FLASH_MODE): vol.All(vol.Lower, cv.one_of(*BUILD_FLASH_MODES)), |     vol.Optional(CONF_BOARD_FLASH_MODE): cv.one_of(*BUILD_FLASH_MODES, lower=True), | ||||||
|     vol.Optional(CONF_ON_BOOT): automation.validate_automation({ |     vol.Optional(CONF_ON_BOOT): automation.validate_automation({ | ||||||
|         cv.GenerateID(CONF_TRIGGER_ID): cv.declare_variable_id(StartupTrigger), |         cv.GenerateID(CONF_TRIGGER_ID): cv.declare_variable_id(StartupTrigger), | ||||||
|         vol.Optional(CONF_PRIORITY): vol.Coerce(float), |         vol.Optional(CONF_PRIORITY): vol.Coerce(float), | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								esphomeyaml/icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								esphomeyaml/icon.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 2.8 KiB | 
							
								
								
									
										
											BIN
										
									
								
								esphomeyaml/logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								esphomeyaml/logo.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 5.5 KiB | 
| @@ -257,11 +257,10 @@ PIN_MODES_ESP32 = [ | |||||||
|  |  | ||||||
|  |  | ||||||
| def pin_mode(value): | def pin_mode(value): | ||||||
|     value = vol.All(vol.Coerce(str), vol.Upper)(value) |  | ||||||
|     if CORE.is_esp32: |     if CORE.is_esp32: | ||||||
|         return cv.one_of(*PIN_MODES_ESP32)(value) |         return cv.one_of(*PIN_MODES_ESP32, upper=True)(value) | ||||||
|     elif CORE.is_esp8266: |     elif CORE.is_esp8266: | ||||||
|         return cv.one_of(*PIN_MODES_ESP8266)(value) |         return cv.one_of(*PIN_MODES_ESP8266, upper=True)(value) | ||||||
|     raise NotImplementedError |     raise NotImplementedError | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -299,12 +298,12 @@ PCF8574Component = io_ns.class_('PCF8574Component', Component, I2CDevice) | |||||||
| PCF8574_OUTPUT_PIN_SCHEMA = vol.Schema({ | PCF8574_OUTPUT_PIN_SCHEMA = vol.Schema({ | ||||||
|     vol.Required(CONF_PCF8574): cv.use_variable_id(PCF8574Component), |     vol.Required(CONF_PCF8574): cv.use_variable_id(PCF8574Component), | ||||||
|     vol.Required(CONF_NUMBER): vol.Coerce(int), |     vol.Required(CONF_NUMBER): vol.Coerce(int), | ||||||
|     vol.Optional(CONF_MODE): vol.All(vol.Upper, cv.one_of("OUTPUT")), |     vol.Optional(CONF_MODE): cv.one_of("OUTPUT", upper=True), | ||||||
|     vol.Optional(CONF_INVERTED, default=False): cv.boolean, |     vol.Optional(CONF_INVERTED, default=False): cv.boolean, | ||||||
| }) | }) | ||||||
|  |  | ||||||
| PCF8574_INPUT_PIN_SCHEMA = PCF8574_OUTPUT_PIN_SCHEMA.extend({ | PCF8574_INPUT_PIN_SCHEMA = PCF8574_OUTPUT_PIN_SCHEMA.extend({ | ||||||
|     vol.Optional(CONF_MODE): vol.All(vol.Upper, cv.one_of("INPUT", "INPUT_PULLUP")), |     vol.Optional(CONF_MODE): cv.one_of("INPUT", "INPUT_PULLUP", upper=True), | ||||||
| }) | }) | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user