mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +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:
		| @@ -7,24 +7,27 @@ from esphomeyaml.const import CONF_ID, CONF_MQTT_ID, CONF_OSCILLATION_COMMAND_TO | ||||
|     CONF_OSCILLATION_STATE_TOPIC, CONF_SPEED_COMMAND_TOPIC, CONF_SPEED_STATE_TOPIC, CONF_INTERNAL, \ | ||||
|     CONF_SPEED, CONF_OSCILLATING, CONF_OSCILLATION_OUTPUT, CONF_NAME | ||||
| from esphomeyaml.helpers import Application, Pvariable, add, esphomelib_ns, setup_mqtt_component, \ | ||||
|     TemplateArguments, get_variable, templatable, bool_ | ||||
|     TemplateArguments, get_variable, templatable, bool_, Action, Nameable, Component | ||||
|  | ||||
| PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({ | ||||
|  | ||||
| }) | ||||
|  | ||||
| fan_ns = esphomelib_ns.namespace('fan') | ||||
| FanState = fan_ns.FanState | ||||
| MQTTFanComponent = fan_ns.MQTTFanComponent | ||||
| MakeFan = Application.MakeFan | ||||
| TurnOnAction = fan_ns.TurnOnAction | ||||
| TurnOffAction = fan_ns.TurnOffAction | ||||
| ToggleAction = fan_ns.ToggleAction | ||||
| FanSpeed = fan_ns.FanSpeed | ||||
| FAN_SPEED_OFF = fan_ns.FAN_SPEED_OFF | ||||
| FAN_SPEED_LOW = fan_ns.FAN_SPEED_LOW | ||||
| FAN_SPEED_MEDIUM = fan_ns.FAN_SPEED_MEDIUM | ||||
| FAN_SPEED_HIGH = fan_ns.FAN_SPEED_HIGH | ||||
| FanState = fan_ns.class_('FanState', Nameable, Component) | ||||
| MQTTFanComponent = fan_ns.class_('MQTTFanComponent', mqtt.MQTTComponent) | ||||
| MakeFan = Application.struct('MakeFan') | ||||
|  | ||||
| # Actions | ||||
| TurnOnAction = fan_ns.class_('TurnOnAction', Action) | ||||
| TurnOffAction = fan_ns.class_('TurnOffAction', Action) | ||||
| ToggleAction = fan_ns.class_('ToggleAction', Action) | ||||
|  | ||||
| FanSpeed = fan_ns.enum('FanSpeed') | ||||
| FAN_SPEED_OFF = FanSpeed.FAN_SPEED_OFF | ||||
| FAN_SPEED_LOW = FanSpeed.FAN_SPEED_LOW | ||||
| FAN_SPEED_MEDIUM = FanSpeed.FAN_SPEED_MEDIUM | ||||
| FAN_SPEED_HIGH = FanSpeed.FAN_SPEED_HIGH | ||||
|  | ||||
| FAN_SCHEMA = cv.MQTT_COMMAND_COMPONENT_SCHEMA.extend({ | ||||
|     cv.GenerateID(): cv.declare_variable_id(FanState), | ||||
| @@ -74,7 +77,7 @@ BUILD_FLAGS = '-DUSE_FAN' | ||||
|  | ||||
| CONF_FAN_TOGGLE = 'fan.toggle' | ||||
| FAN_TOGGLE_ACTION_SCHEMA = maybe_simple_id({ | ||||
|     vol.Required(CONF_ID): cv.use_variable_id(None), | ||||
|     vol.Required(CONF_ID): cv.use_variable_id(FanState), | ||||
| }) | ||||
|  | ||||
|  | ||||
| @@ -90,7 +93,7 @@ def fan_toggle_to_code(config, action_id, arg_type): | ||||
|  | ||||
| CONF_FAN_TURN_OFF = 'fan.turn_off' | ||||
| FAN_TURN_OFF_ACTION_SCHEMA = maybe_simple_id({ | ||||
|     vol.Required(CONF_ID): cv.use_variable_id(None), | ||||
|     vol.Required(CONF_ID): cv.use_variable_id(FanState), | ||||
| }) | ||||
|  | ||||
|  | ||||
| @@ -106,7 +109,7 @@ def fan_turn_off_to_code(config, action_id, arg_type): | ||||
|  | ||||
| CONF_FAN_TURN_ON = 'fan.turn_on' | ||||
| FAN_TURN_ON_ACTION_SCHEMA = maybe_simple_id({ | ||||
|     vol.Required(CONF_ID): cv.use_variable_id(None), | ||||
|     vol.Required(CONF_ID): cv.use_variable_id(FanState), | ||||
|     vol.Optional(CONF_OSCILLATING): cv.templatable(cv.boolean), | ||||
|     vol.Optional(CONF_SPEED): cv.templatable(validate_fan_speed), | ||||
| }) | ||||
|   | ||||
| @@ -1,32 +1,31 @@ | ||||
| import voluptuous as vol | ||||
|  | ||||
| import esphomeyaml.config_validation as cv | ||||
| from esphomeyaml.components import fan | ||||
| from esphomeyaml.components import fan, output | ||||
| from esphomeyaml.const import CONF_MAKE_ID, CONF_NAME, CONF_OSCILLATION_OUTPUT, CONF_OUTPUT | ||||
| from esphomeyaml.helpers import App, add, get_variable, variable | ||||
| from esphomeyaml.helpers import App, add, get_variable, variable, setup_component | ||||
|  | ||||
| PLATFORM_SCHEMA = cv.nameable(fan.FAN_PLATFORM_SCHEMA.extend({ | ||||
|     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(fan.MakeFan), | ||||
|     vol.Required(CONF_OUTPUT): cv.use_variable_id(None), | ||||
|     vol.Optional(CONF_OSCILLATION_OUTPUT): cv.use_variable_id(None), | ||||
| })) | ||||
|     vol.Required(CONF_OUTPUT): cv.use_variable_id(output.BinaryOutput), | ||||
|     vol.Optional(CONF_OSCILLATION_OUTPUT): cv.use_variable_id(output.BinaryOutput), | ||||
| }).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_fan(config[CONF_NAME]) | ||||
|     fan_struct = variable(config[CONF_MAKE_ID], rhs) | ||||
|     add(fan_struct.Poutput.set_binary(output)) | ||||
|     add(fan_struct.Poutput.set_binary(output_)) | ||||
|     if CONF_OSCILLATION_OUTPUT in config: | ||||
|         oscillation_output = None | ||||
|         for oscillation_output in get_variable(config[CONF_OSCILLATION_OUTPUT]): | ||||
|             yield | ||||
|         add(fan_struct.Poutput.set_oscillation(oscillation_output)) | ||||
|  | ||||
|     fan.setup_fan(fan_struct.Pstate, fan_struct.Pmqtt, config) | ||||
|     setup_component(fan_struct.Poutput, config) | ||||
|  | ||||
|  | ||||
| def to_hass_config(data, config): | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| import voluptuous as vol | ||||
|  | ||||
| import esphomeyaml.config_validation as cv | ||||
| from esphomeyaml.components import fan, mqtt | ||||
| from esphomeyaml.components import fan, mqtt, output | ||||
| from esphomeyaml.const import CONF_HIGH, CONF_LOW, CONF_MAKE_ID, CONF_MEDIUM, CONF_NAME, \ | ||||
|     CONF_OSCILLATION_OUTPUT, CONF_OUTPUT, CONF_SPEED, CONF_SPEED_COMMAND_TOPIC, \ | ||||
|     CONF_SPEED_STATE_TOPIC | ||||
| @@ -9,35 +9,33 @@ from esphomeyaml.helpers import App, add, get_variable, variable | ||||
|  | ||||
| PLATFORM_SCHEMA = cv.nameable(fan.FAN_PLATFORM_SCHEMA.extend({ | ||||
|     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(fan.MakeFan), | ||||
|     vol.Required(CONF_OUTPUT): cv.use_variable_id(None), | ||||
|     vol.Required(CONF_OUTPUT): cv.use_variable_id(output.FloatOutput), | ||||
|     vol.Optional(CONF_SPEED_STATE_TOPIC): cv.publish_topic, | ||||
|     vol.Optional(CONF_SPEED_COMMAND_TOPIC): cv.subscribe_topic, | ||||
|     vol.Optional(CONF_OSCILLATION_OUTPUT): cv.use_variable_id(None), | ||||
|     vol.Optional(CONF_OSCILLATION_OUTPUT): cv.use_variable_id(output.BinaryOutput), | ||||
|     vol.Optional(CONF_SPEED): vol.Schema({ | ||||
|         vol.Required(CONF_LOW): cv.percentage, | ||||
|         vol.Required(CONF_MEDIUM): cv.percentage, | ||||
|         vol.Required(CONF_HIGH): cv.percentage, | ||||
|     }), | ||||
| })) | ||||
| }).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_fan(config[CONF_NAME]) | ||||
|     fan_struct = variable(config[CONF_MAKE_ID], rhs) | ||||
|     if CONF_SPEED in config: | ||||
|         speeds = config[CONF_SPEED] | ||||
|         add(fan_struct.Poutput.set_speed(output, | ||||
|         add(fan_struct.Poutput.set_speed(output_, | ||||
|                                          speeds[CONF_LOW], | ||||
|                                          speeds[CONF_MEDIUM], | ||||
|                                          speeds[CONF_HIGH])) | ||||
|     else: | ||||
|         add(fan_struct.Poutput.set_speed(output)) | ||||
|         add(fan_struct.Poutput.set_speed(output_)) | ||||
|  | ||||
|     if CONF_OSCILLATION_OUTPUT in config: | ||||
|         oscillation_output = None | ||||
|         for oscillation_output in get_variable(config[CONF_OSCILLATION_OUTPUT]): | ||||
|             yield | ||||
|         add(fan_struct.Poutput.set_oscillation(oscillation_output)) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user