mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 06:33:51 +00:00 
			
		
		
		
	Let esphomeyaml know about class inheritance (#229)
* Allow overriding setup priority * Add inheritance tree * Global variables * Tests and better validation * Fix * Lint
This commit is contained in:
		| @@ -11,36 +11,48 @@ from esphomeyaml.const import CONF_ALPHA, CONF_BLUE, CONF_BRIGHTNESS, CONF_COLOR | ||||
|     CONF_EFFECT | ||||
| from esphomeyaml.helpers import Application, ArrayInitializer, Pvariable, RawExpression, \ | ||||
|     StructInitializer, add, add_job, esphomelib_ns, process_lambda, setup_mqtt_component, \ | ||||
|     get_variable, TemplateArguments, templatable, uint32, float_, std_string | ||||
|     get_variable, TemplateArguments, templatable, uint32, float_, std_string, Nameable, Component, \ | ||||
|     Action | ||||
|  | ||||
| PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({ | ||||
|  | ||||
| }) | ||||
|  | ||||
| # Base | ||||
| light_ns = esphomelib_ns.namespace('light') | ||||
| LightState = light_ns.LightState | ||||
| LightColorValues = light_ns.LightColorValues | ||||
| MQTTJSONLightComponent = light_ns.MQTTJSONLightComponent | ||||
| ToggleAction = light_ns.ToggleAction | ||||
| TurnOffAction = light_ns.TurnOffAction | ||||
| TurnOnAction = light_ns.TurnOnAction | ||||
| MakeLight = Application.MakeLight | ||||
| RandomLightEffect = light_ns.RandomLightEffect | ||||
| LambdaLightEffect = light_ns.LambdaLightEffect | ||||
| StrobeLightEffect = light_ns.StrobeLightEffect | ||||
| StrobeLightEffectColor = light_ns.StrobeLightEffectColor | ||||
| FlickerLightEffect = light_ns.FlickerLightEffect | ||||
| FastLEDLambdaLightEffect = light_ns.FastLEDLambdaLightEffect | ||||
| FastLEDRainbowLightEffect = light_ns.FastLEDRainbowLightEffect | ||||
| FastLEDColorWipeEffect = light_ns.FastLEDColorWipeEffect | ||||
| FastLEDColorWipeEffectColor = light_ns.FastLEDColorWipeEffectColor | ||||
| FastLEDScanEffect = light_ns.FastLEDScanEffect | ||||
| FastLEDScanEffectColor = light_ns.FastLEDScanEffectColor | ||||
| FastLEDTwinkleEffect = light_ns.FastLEDTwinkleEffect | ||||
| FastLEDRandomTwinkleEffect = light_ns.FastLEDRandomTwinkleEffect | ||||
| FastLEDFireworksEffect = light_ns.FastLEDFireworksEffect | ||||
| FastLEDFlickerEffect = light_ns.FastLEDFlickerEffect | ||||
| FastLEDLightOutputComponent = light_ns.FastLEDLightOutputComponent | ||||
| LightState = light_ns.class_('LightState', Nameable, Component) | ||||
| MakeLight = Application.struct('MakeLight') | ||||
| LightOutput = light_ns.class_('LightOutput') | ||||
| FastLEDLightOutputComponent = light_ns.class_('FastLEDLightOutputComponent', LightOutput) | ||||
|  | ||||
| # Actions | ||||
| ToggleAction = light_ns.class_('ToggleAction', Action) | ||||
| TurnOffAction = light_ns.class_('TurnOffAction', Action) | ||||
| TurnOnAction = light_ns.class_('TurnOnAction', Action) | ||||
|  | ||||
| LightColorValues = light_ns.class_('LightColorValues') | ||||
|  | ||||
|  | ||||
| MQTTJSONLightComponent = light_ns.class_('MQTTJSONLightComponent', mqtt.MQTTComponent) | ||||
|  | ||||
| # Effects | ||||
| LightEffect = light_ns.class_('LightEffect') | ||||
| RandomLightEffect = light_ns.class_('RandomLightEffect', LightEffect) | ||||
| LambdaLightEffect = light_ns.class_('LambdaLightEffect', LightEffect) | ||||
| StrobeLightEffect = light_ns.class_('StrobeLightEffect', LightEffect) | ||||
| StrobeLightEffectColor = light_ns.class_('StrobeLightEffectColor', LightEffect) | ||||
| FlickerLightEffect = light_ns.class_('FlickerLightEffect', LightEffect) | ||||
| BaseFastLEDLightEffect = light_ns.class_('BaseFastLEDLightEffect', LightEffect) | ||||
| FastLEDLambdaLightEffect = light_ns.class_('FastLEDLambdaLightEffect', BaseFastLEDLightEffect) | ||||
| FastLEDRainbowLightEffect = light_ns.class_('FastLEDRainbowLightEffect', BaseFastLEDLightEffect) | ||||
| FastLEDColorWipeEffect = light_ns.class_('FastLEDColorWipeEffect', BaseFastLEDLightEffect) | ||||
| FastLEDColorWipeEffectColor = light_ns.class_('FastLEDColorWipeEffectColor', BaseFastLEDLightEffect) | ||||
| FastLEDScanEffect = light_ns.class_('FastLEDScanEffect', BaseFastLEDLightEffect) | ||||
| FastLEDScanEffectColor = light_ns.class_('FastLEDScanEffectColor', BaseFastLEDLightEffect) | ||||
| FastLEDTwinkleEffect = light_ns.class_('FastLEDTwinkleEffect', BaseFastLEDLightEffect) | ||||
| FastLEDRandomTwinkleEffect = light_ns.class_('FastLEDRandomTwinkleEffect', BaseFastLEDLightEffect) | ||||
| FastLEDFireworksEffect = light_ns.class_('FastLEDFireworksEffect', BaseFastLEDLightEffect) | ||||
| FastLEDFlickerEffect = light_ns.class_('FastLEDFlickerEffect', BaseFastLEDLightEffect) | ||||
|  | ||||
| CONF_STROBE = 'strobe' | ||||
| CONF_FLICKER = 'flicker' | ||||
| @@ -345,7 +357,7 @@ BUILD_FLAGS = '-DUSE_LIGHT' | ||||
|  | ||||
| CONF_LIGHT_TOGGLE = 'light.toggle' | ||||
| LIGHT_TOGGLE_ACTION_SCHEMA = maybe_simple_id({ | ||||
|     vol.Required(CONF_ID): cv.use_variable_id(None), | ||||
|     vol.Required(CONF_ID): cv.use_variable_id(LightState), | ||||
|     vol.Optional(CONF_TRANSITION_LENGTH): cv.templatable(cv.positive_time_period_milliseconds), | ||||
| }) | ||||
|  | ||||
| @@ -367,7 +379,7 @@ def light_toggle_to_code(config, action_id, arg_type): | ||||
|  | ||||
| CONF_LIGHT_TURN_OFF = 'light.turn_off' | ||||
| LIGHT_TURN_OFF_ACTION_SCHEMA = maybe_simple_id({ | ||||
|     vol.Required(CONF_ID): cv.use_variable_id(None), | ||||
|     vol.Required(CONF_ID): cv.use_variable_id(LightState), | ||||
|     vol.Optional(CONF_TRANSITION_LENGTH): cv.templatable(cv.positive_time_period_milliseconds), | ||||
| }) | ||||
|  | ||||
| @@ -389,7 +401,7 @@ def light_turn_off_to_code(config, action_id, arg_type): | ||||
|  | ||||
| CONF_LIGHT_TURN_ON = 'light.turn_on' | ||||
| LIGHT_TURN_ON_ACTION_SCHEMA = maybe_simple_id({ | ||||
|     vol.Required(CONF_ID): cv.use_variable_id(None), | ||||
|     vol.Required(CONF_ID): cv.use_variable_id(LightState), | ||||
|     vol.Exclusive(CONF_TRANSITION_LENGTH, 'transformer'): | ||||
|         cv.templatable(cv.positive_time_period_milliseconds), | ||||
|     vol.Exclusive(CONF_FLASH_LENGTH, 'transformer'): | ||||
|   | ||||
| @@ -1,24 +1,24 @@ | ||||
| import voluptuous as vol | ||||
|  | ||||
| from esphomeyaml.components import light, output | ||||
| import esphomeyaml.config_validation as cv | ||||
| from esphomeyaml.components import light | ||||
| from esphomeyaml.const import CONF_MAKE_ID, CONF_NAME, CONF_OUTPUT, CONF_EFFECTS | ||||
| from esphomeyaml.helpers import App, get_variable, variable | ||||
| from esphomeyaml.const import CONF_EFFECTS, CONF_MAKE_ID, CONF_NAME, CONF_OUTPUT | ||||
| from esphomeyaml.helpers import App, get_variable, setup_component, variable | ||||
|  | ||||
| PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({ | ||||
|     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(light.MakeLight), | ||||
|     vol.Required(CONF_OUTPUT): cv.use_variable_id(None), | ||||
|     vol.Required(CONF_OUTPUT): cv.use_variable_id(output.BinaryOutput), | ||||
|     vol.Optional(CONF_EFFECTS): light.validate_effects(light.BINARY_EFFECTS), | ||||
| })) | ||||
| }).extend(cv.COMPONENT_SCHEMA.schema)) | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
|     output = None | ||||
|     for output in get_variable(config[CONF_OUTPUT]): | ||||
|     for output_ in get_variable(config[CONF_OUTPUT]): | ||||
|         yield | ||||
|     rhs = App.make_binary_light(config[CONF_NAME], output) | ||||
|     rhs = App.make_binary_light(config[CONF_NAME], output_) | ||||
|     light_struct = variable(config[CONF_MAKE_ID], rhs) | ||||
|     light.setup_light(light_struct.Pstate, light_struct.Pmqtt, config) | ||||
|     setup_component(light_struct.Pstate, config) | ||||
|  | ||||
|  | ||||
| def to_hass_config(data, config): | ||||
|   | ||||
| @@ -1,25 +1,25 @@ | ||||
| import voluptuous as vol | ||||
|  | ||||
| import esphomeyaml.config_validation as cv | ||||
| from esphomeyaml.components import light | ||||
| from esphomeyaml.components import light, output | ||||
| from esphomeyaml.components.light.rgbww import validate_cold_white_colder, \ | ||||
|     validate_color_temperature | ||||
| from esphomeyaml.const import CONF_COLD_WHITE, CONF_COLD_WHITE_COLOR_TEMPERATURE, \ | ||||
|     CONF_DEFAULT_TRANSITION_LENGTH, CONF_EFFECTS, CONF_GAMMA_CORRECT, CONF_MAKE_ID, \ | ||||
|     CONF_NAME, CONF_WARM_WHITE, CONF_WARM_WHITE_COLOR_TEMPERATURE | ||||
| from esphomeyaml.helpers import App, get_variable, variable | ||||
| from esphomeyaml.helpers import App, get_variable, variable, setup_component | ||||
|  | ||||
| PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({ | ||||
|     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(light.MakeLight), | ||||
|     vol.Required(CONF_COLD_WHITE): cv.use_variable_id(None), | ||||
|     vol.Required(CONF_WARM_WHITE): cv.use_variable_id(None), | ||||
|     vol.Required(CONF_COLD_WHITE): cv.use_variable_id(output.FloatOutput), | ||||
|     vol.Required(CONF_WARM_WHITE): cv.use_variable_id(output.FloatOutput), | ||||
|     vol.Required(CONF_COLD_WHITE_COLOR_TEMPERATURE): validate_color_temperature, | ||||
|     vol.Required(CONF_WARM_WHITE_COLOR_TEMPERATURE): validate_color_temperature, | ||||
|  | ||||
|     vol.Optional(CONF_GAMMA_CORRECT): cv.positive_float, | ||||
|     vol.Optional(CONF_DEFAULT_TRANSITION_LENGTH): cv.positive_time_period_milliseconds, | ||||
|     vol.Optional(CONF_EFFECTS): light.validate_effects(light.MONOCHROMATIC_EFFECTS), | ||||
| }), validate_cold_white_colder) | ||||
| }).extend(cv.COMPONENT_SCHEMA.schema), validate_cold_white_colder) | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
| @@ -32,6 +32,7 @@ def to_code(config): | ||||
|                               cold_white, warm_white) | ||||
|     light_struct = variable(config[CONF_MAKE_ID], rhs) | ||||
|     light.setup_light(light_struct.Pstate, light_struct.Pmqtt, config) | ||||
|     setup_component(light_struct.Pstate, config) | ||||
|  | ||||
|  | ||||
| def to_hass_config(data, config): | ||||
|   | ||||
| @@ -8,7 +8,7 @@ from esphomeyaml.const import CONF_CHIPSET, CONF_DEFAULT_TRANSITION_LENGTH, CONF | ||||
|     CONF_MAKE_ID, CONF_MAX_REFRESH_RATE, CONF_NAME, CONF_NUM_LEDS, CONF_PIN, CONF_POWER_SUPPLY, \ | ||||
|     CONF_RGB_ORDER, CONF_EFFECTS, CONF_COLOR_CORRECT | ||||
| from esphomeyaml.helpers import App, Application, RawExpression, TemplateArguments, add, \ | ||||
|     get_variable, variable | ||||
|     get_variable, variable, setup_component | ||||
|  | ||||
| TYPES = [ | ||||
|     'NEOPIXEL', | ||||
| @@ -53,7 +53,7 @@ def validate(value): | ||||
|     return value | ||||
|  | ||||
|  | ||||
| MakeFastLEDLight = Application.MakeFastLEDLight | ||||
| MakeFastLEDLight = Application.struct('MakeFastLEDLight') | ||||
|  | ||||
| PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({ | ||||
|     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeFastLEDLight), | ||||
| @@ -70,7 +70,7 @@ PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({ | ||||
|     vol.Optional(CONF_DEFAULT_TRANSITION_LENGTH): cv.positive_time_period_milliseconds, | ||||
|     vol.Optional(CONF_POWER_SUPPLY): cv.use_variable_id(PowerSupplyComponent), | ||||
|     vol.Optional(CONF_EFFECTS): light.validate_effects(light.FASTLED_EFFECTS), | ||||
| }), validate) | ||||
| }).extend(cv.COMPONENT_SCHEMA.schema), validate) | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
| @@ -89,7 +89,6 @@ def to_code(config): | ||||
|         add(fast_led.set_max_refresh_rate(config[CONF_MAX_REFRESH_RATE])) | ||||
|  | ||||
|     if CONF_POWER_SUPPLY in config: | ||||
|         power_supply = None | ||||
|         for power_supply in get_variable(config[CONF_POWER_SUPPLY]): | ||||
|             yield | ||||
|         add(fast_led.set_power_supply(power_supply)) | ||||
| @@ -99,6 +98,7 @@ def to_code(config): | ||||
|         add(fast_led.set_correction(r, g, b)) | ||||
|  | ||||
|     light.setup_light(make.Pstate, make.Pmqtt, config) | ||||
|     setup_component(fast_led, config) | ||||
|  | ||||
|  | ||||
| BUILD_FLAGS = '-DUSE_FAST_LED_LIGHT' | ||||
|   | ||||
| @@ -8,7 +8,7 @@ from esphomeyaml.const import CONF_CHIPSET, CONF_CLOCK_PIN, CONF_DATA_PIN, \ | ||||
|     CONF_DEFAULT_TRANSITION_LENGTH, CONF_GAMMA_CORRECT, CONF_MAKE_ID, CONF_MAX_REFRESH_RATE, \ | ||||
|     CONF_NAME, CONF_NUM_LEDS, CONF_POWER_SUPPLY, CONF_RGB_ORDER, CONF_EFFECTS, CONF_COLOR_CORRECT | ||||
| from esphomeyaml.helpers import App, Application, RawExpression, TemplateArguments, add, \ | ||||
|     get_variable, variable | ||||
|     get_variable, variable, setup_component | ||||
|  | ||||
| CHIPSETS = [ | ||||
|     'LPD8806', | ||||
| @@ -30,7 +30,7 @@ RGB_ORDERS = [ | ||||
|     'BGR', | ||||
| ] | ||||
|  | ||||
| MakeFastLEDLight = Application.MakeFastLEDLight | ||||
| MakeFastLEDLight = Application.struct('MakeFastLEDLight') | ||||
|  | ||||
| PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({ | ||||
|     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeFastLEDLight), | ||||
| @@ -48,7 +48,7 @@ PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({ | ||||
|     vol.Optional(CONF_DEFAULT_TRANSITION_LENGTH): cv.positive_time_period_milliseconds, | ||||
|     vol.Optional(CONF_POWER_SUPPLY): cv.use_variable_id(PowerSupplyComponent), | ||||
|     vol.Optional(CONF_EFFECTS): light.validate_effects(light.FASTLED_EFFECTS), | ||||
| })) | ||||
| }).extend(cv.COMPONENT_SCHEMA.schema)) | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
| @@ -69,7 +69,6 @@ def to_code(config): | ||||
|         add(fast_led.set_max_refresh_rate(config[CONF_MAX_REFRESH_RATE])) | ||||
|  | ||||
|     if CONF_POWER_SUPPLY in config: | ||||
|         power_supply = None | ||||
|         for power_supply in get_variable(config[CONF_POWER_SUPPLY]): | ||||
|             yield | ||||
|         add(fast_led.set_power_supply(power_supply)) | ||||
| @@ -79,6 +78,7 @@ def to_code(config): | ||||
|         add(fast_led.set_correction(r, g, b)) | ||||
|  | ||||
|     light.setup_light(make.Pstate, make.Pmqtt, config) | ||||
|     setup_component(fast_led, config) | ||||
|  | ||||
|  | ||||
| BUILD_FLAGS = '-DUSE_FAST_LED_LIGHT' | ||||
|   | ||||
| @@ -1,27 +1,27 @@ | ||||
| import voluptuous as vol | ||||
|  | ||||
| from esphomeyaml.components import light, output | ||||
| import esphomeyaml.config_validation as cv | ||||
| from esphomeyaml.components import light | ||||
| from esphomeyaml.const import CONF_DEFAULT_TRANSITION_LENGTH, CONF_GAMMA_CORRECT, CONF_MAKE_ID, \ | ||||
|     CONF_NAME, CONF_OUTPUT, CONF_EFFECTS | ||||
| from esphomeyaml.helpers import App, get_variable, variable | ||||
| from esphomeyaml.const import CONF_DEFAULT_TRANSITION_LENGTH, CONF_EFFECTS, CONF_GAMMA_CORRECT, \ | ||||
|     CONF_MAKE_ID, CONF_NAME, CONF_OUTPUT | ||||
| from esphomeyaml.helpers import App, get_variable, setup_component, variable | ||||
|  | ||||
| PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({ | ||||
|     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(light.MakeLight), | ||||
|     vol.Required(CONF_OUTPUT): cv.use_variable_id(None), | ||||
|     vol.Required(CONF_OUTPUT): cv.use_variable_id(output.FloatOutput), | ||||
|     vol.Optional(CONF_GAMMA_CORRECT): cv.positive_float, | ||||
|     vol.Optional(CONF_DEFAULT_TRANSITION_LENGTH): cv.positive_time_period_milliseconds, | ||||
|     vol.Optional(CONF_EFFECTS): light.validate_effects(light.MONOCHROMATIC_EFFECTS), | ||||
| })) | ||||
| }).extend(cv.COMPONENT_SCHEMA.schema)) | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
|     output = None | ||||
|     for output in get_variable(config[CONF_OUTPUT]): | ||||
|     for output_ in get_variable(config[CONF_OUTPUT]): | ||||
|         yield | ||||
|     rhs = App.make_monochromatic_light(config[CONF_NAME], output) | ||||
|     rhs = App.make_monochromatic_light(config[CONF_NAME], output_) | ||||
|     light_struct = variable(config[CONF_MAKE_ID], rhs) | ||||
|     light.setup_light(light_struct.Pstate, light_struct.Pmqtt, config) | ||||
|     setup_component(light_struct.Pstate, config) | ||||
|  | ||||
|  | ||||
| def to_hass_config(data, config): | ||||
|   | ||||
| @@ -1,35 +1,33 @@ | ||||
| import voluptuous as vol | ||||
|  | ||||
| import esphomeyaml.config_validation as cv | ||||
| from esphomeyaml.components import light | ||||
| from esphomeyaml.components import light, output | ||||
| from esphomeyaml.const import CONF_BLUE, CONF_DEFAULT_TRANSITION_LENGTH, CONF_GAMMA_CORRECT, \ | ||||
|     CONF_GREEN, CONF_MAKE_ID, CONF_NAME, CONF_RED, CONF_EFFECTS | ||||
| from esphomeyaml.helpers import App, get_variable, variable | ||||
| from esphomeyaml.helpers import App, get_variable, variable, setup_component | ||||
|  | ||||
| PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({ | ||||
|     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(light.MakeLight), | ||||
|     vol.Required(CONF_RED): cv.use_variable_id(None), | ||||
|     vol.Required(CONF_GREEN): cv.use_variable_id(None), | ||||
|     vol.Required(CONF_BLUE): cv.use_variable_id(None), | ||||
|     vol.Required(CONF_RED): cv.use_variable_id(output.FloatOutput), | ||||
|     vol.Required(CONF_GREEN): cv.use_variable_id(output.FloatOutput), | ||||
|     vol.Required(CONF_BLUE): cv.use_variable_id(output.FloatOutput), | ||||
|     vol.Optional(CONF_GAMMA_CORRECT): cv.positive_float, | ||||
|     vol.Optional(CONF_DEFAULT_TRANSITION_LENGTH): cv.positive_time_period_milliseconds, | ||||
|     vol.Optional(CONF_EFFECTS): light.validate_effects(light.RGB_EFFECTS), | ||||
| })) | ||||
| }).extend(cv.COMPONENT_SCHEMA.schema)) | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
|     red = None | ||||
|     for red in get_variable(config[CONF_RED]): | ||||
|         yield | ||||
|     green = None | ||||
|     for green in get_variable(config[CONF_GREEN]): | ||||
|         yield | ||||
|     blue = None | ||||
|     for blue in get_variable(config[CONF_BLUE]): | ||||
|         yield | ||||
|     rhs = App.make_rgb_light(config[CONF_NAME], red, green, blue) | ||||
|     light_struct = variable(config[CONF_MAKE_ID], rhs) | ||||
|     light.setup_light(light_struct.Pstate, light_struct.Pmqtt, config) | ||||
|     setup_component(light_struct.Pstate, config) | ||||
|  | ||||
|  | ||||
| def to_hass_config(data, config): | ||||
|   | ||||
| @@ -1,39 +1,36 @@ | ||||
| import voluptuous as vol | ||||
|  | ||||
| import esphomeyaml.config_validation as cv | ||||
| from esphomeyaml.components import light | ||||
| from esphomeyaml.components import light, output | ||||
| from esphomeyaml.const import CONF_BLUE, CONF_DEFAULT_TRANSITION_LENGTH, CONF_GAMMA_CORRECT, \ | ||||
|     CONF_GREEN, CONF_MAKE_ID, CONF_NAME, CONF_RED, CONF_WHITE, CONF_EFFECTS | ||||
| from esphomeyaml.helpers import App, get_variable, variable | ||||
| from esphomeyaml.helpers import App, get_variable, variable, setup_component | ||||
|  | ||||
| PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({ | ||||
|     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(light.MakeLight), | ||||
|     vol.Required(CONF_RED): cv.use_variable_id(None), | ||||
|     vol.Required(CONF_GREEN): cv.use_variable_id(None), | ||||
|     vol.Required(CONF_BLUE): cv.use_variable_id(None), | ||||
|     vol.Required(CONF_WHITE): cv.use_variable_id(None), | ||||
|     vol.Required(CONF_RED): cv.use_variable_id(output.FloatOutput), | ||||
|     vol.Required(CONF_GREEN): cv.use_variable_id(output.FloatOutput), | ||||
|     vol.Required(CONF_BLUE): cv.use_variable_id(output.FloatOutput), | ||||
|     vol.Required(CONF_WHITE): cv.use_variable_id(output.FloatOutput), | ||||
|     vol.Optional(CONF_GAMMA_CORRECT): cv.positive_float, | ||||
|     vol.Optional(CONF_DEFAULT_TRANSITION_LENGTH): cv.positive_time_period_milliseconds, | ||||
|     vol.Optional(CONF_EFFECTS): light.validate_effects(light.RGB_EFFECTS), | ||||
| })) | ||||
| }).extend(cv.COMPONENT_SCHEMA.schema)) | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
|     red = None | ||||
|     for red in get_variable(config[CONF_RED]): | ||||
|         yield | ||||
|     green = None | ||||
|     for green in get_variable(config[CONF_GREEN]): | ||||
|         yield | ||||
|     blue = None | ||||
|     for blue in get_variable(config[CONF_BLUE]): | ||||
|         yield | ||||
|     white = None | ||||
|     for white in get_variable(config[CONF_WHITE]): | ||||
|         yield | ||||
|     rhs = App.make_rgbw_light(config[CONF_NAME], red, green, blue, white) | ||||
|     light_struct = variable(config[CONF_MAKE_ID], rhs) | ||||
|     light.setup_light(light_struct.Pstate, light_struct.Pmqtt, config) | ||||
|     setup_component(light_struct.Pstate, config) | ||||
|  | ||||
|  | ||||
| def to_hass_config(data, config): | ||||
|   | ||||
| @@ -1,11 +1,11 @@ | ||||
| import voluptuous as vol | ||||
|  | ||||
| import esphomeyaml.config_validation as cv | ||||
| from esphomeyaml.components import light | ||||
| from esphomeyaml.components import light, output | ||||
| from esphomeyaml.const import CONF_BLUE, CONF_COLD_WHITE, CONF_COLD_WHITE_COLOR_TEMPERATURE, \ | ||||
|     CONF_DEFAULT_TRANSITION_LENGTH, CONF_EFFECTS, CONF_GAMMA_CORRECT, CONF_GREEN, CONF_MAKE_ID, \ | ||||
|     CONF_NAME, CONF_RED, CONF_WARM_WHITE, CONF_WARM_WHITE_COLOR_TEMPERATURE | ||||
| from esphomeyaml.helpers import App, get_variable, variable | ||||
| from esphomeyaml.helpers import App, get_variable, variable, setup_component | ||||
|  | ||||
|  | ||||
| def validate_color_temperature(value): | ||||
| @@ -30,18 +30,18 @@ def validate_cold_white_colder(value): | ||||
|  | ||||
| PLATFORM_SCHEMA = cv.nameable(light.LIGHT_PLATFORM_SCHEMA.extend({ | ||||
|     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(light.MakeLight), | ||||
|     vol.Required(CONF_RED): cv.use_variable_id(None), | ||||
|     vol.Required(CONF_GREEN): cv.use_variable_id(None), | ||||
|     vol.Required(CONF_BLUE): cv.use_variable_id(None), | ||||
|     vol.Required(CONF_COLD_WHITE): cv.use_variable_id(None), | ||||
|     vol.Required(CONF_WARM_WHITE): cv.use_variable_id(None), | ||||
|     vol.Required(CONF_RED): cv.use_variable_id(output.FloatOutput), | ||||
|     vol.Required(CONF_GREEN): cv.use_variable_id(output.FloatOutput), | ||||
|     vol.Required(CONF_BLUE): cv.use_variable_id(output.FloatOutput), | ||||
|     vol.Required(CONF_COLD_WHITE): cv.use_variable_id(output.FloatOutput), | ||||
|     vol.Required(CONF_WARM_WHITE): cv.use_variable_id(output.FloatOutput), | ||||
|     vol.Required(CONF_COLD_WHITE_COLOR_TEMPERATURE): validate_color_temperature, | ||||
|     vol.Required(CONF_WARM_WHITE_COLOR_TEMPERATURE): validate_color_temperature, | ||||
|  | ||||
|     vol.Optional(CONF_GAMMA_CORRECT): cv.positive_float, | ||||
|     vol.Optional(CONF_DEFAULT_TRANSITION_LENGTH): cv.positive_time_period_milliseconds, | ||||
|     vol.Optional(CONF_EFFECTS): light.validate_effects(light.RGB_EFFECTS), | ||||
| }), validate_cold_white_colder) | ||||
| }).extend(cv.COMPONENT_SCHEMA.schema), validate_cold_white_colder) | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
| @@ -60,6 +60,7 @@ def to_code(config): | ||||
|                                red, green, blue, cold_white, warm_white) | ||||
|     light_struct = variable(config[CONF_MAKE_ID], rhs) | ||||
|     light.setup_light(light_struct.Pstate, light_struct.Pmqtt, config) | ||||
|     setup_component(light_struct.Pstate, config) | ||||
|  | ||||
|  | ||||
| def to_hass_config(data, config): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user