mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 22:53:59 +00:00 
			
		
		
		
	Add copy output platform (#472)
This commit is contained in:
		
							
								
								
									
										58
									
								
								esphome/components/output/copy.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								esphome/components/output/copy.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | ||||
| import voluptuous as vol | ||||
|  | ||||
| from esphome.components import output | ||||
| import esphome.config_validation as cv | ||||
| from esphome.const import CONF_ID, CONF_OUTPUTS, CONF_TYPE | ||||
| from esphome.cpp_generator import Pvariable, get_variable | ||||
| from esphome.cpp_helpers import setup_component | ||||
|  | ||||
| BinaryCopyOutput = output.output_ns.class_('BinaryCopyOutput', output.BinaryOutput) | ||||
| FloatCopyOutput = output.output_ns.class_('FloatCopyOutput', output.FloatOutput) | ||||
|  | ||||
| BINARY_SCHEMA = output.PLATFORM_SCHEMA.extend({ | ||||
|     vol.Required(CONF_ID): cv.declare_variable_id(BinaryCopyOutput), | ||||
|     vol.Required(CONF_TYPE): 'binary', | ||||
|     vol.Required(CONF_OUTPUTS): cv.ensure_list(cv.use_variable_id(output.BinaryOutput)), | ||||
| }) | ||||
|  | ||||
| FLOAT_SCHEMA = output.PLATFORM_SCHEMA.extend({ | ||||
|     vol.Required(CONF_ID): cv.declare_variable_id(FloatCopyOutput), | ||||
|     vol.Required(CONF_TYPE): 'float', | ||||
|     vol.Required(CONF_OUTPUTS): cv.ensure_list(cv.use_variable_id(output.FloatOutput)), | ||||
| }) | ||||
|  | ||||
|  | ||||
| def validate_copy_output(value): | ||||
|     if not isinstance(value, dict): | ||||
|         raise vol.Invalid("Value must be dict") | ||||
|     type = cv.string_strict(value.get(CONF_TYPE, 'float')).lower() | ||||
|     value[CONF_TYPE] = type | ||||
|     if type == 'binary': | ||||
|         return BINARY_SCHEMA(value) | ||||
|     if type == 'float': | ||||
|         return FLOAT_SCHEMA(value) | ||||
|     raise vol.Invalid("type must either be binary or float, not {}!".format(type)) | ||||
|  | ||||
|  | ||||
| PLATFORM_SCHEMA = validate_copy_output | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
|     outputs = [] | ||||
|     for out in config[CONF_OUTPUTS]: | ||||
|         for var in get_variable(out): | ||||
|             yield | ||||
|         outputs.append(var) | ||||
|  | ||||
|     klass = { | ||||
|         'binary': BinaryCopyOutput, | ||||
|         'float': FloatCopyOutput, | ||||
|     }[config[CONF_TYPE]] | ||||
|     rhs = klass.new(outputs) | ||||
|     gpio = Pvariable(config[CONF_ID], rhs) | ||||
|  | ||||
|     output.setup_output_platform(gpio, config) | ||||
|     setup_component(gpio, config) | ||||
|  | ||||
|  | ||||
| BUILD_FLAGS = '-DUSE_COPY_OUTPUT' | ||||
| @@ -701,6 +701,18 @@ output: | ||||
|   - platform: my9231 | ||||
|     id: my_5 | ||||
|     channel: 5 | ||||
|   - platform: copy | ||||
|     id: my_copy1 | ||||
|     outputs: | ||||
|       - my_1 | ||||
|       - my_2 | ||||
|       - my_3 | ||||
|   - platform: copy | ||||
|     id: my_copy2 | ||||
|     type: binary | ||||
|     outputs: | ||||
|       - id22 | ||||
|       - id2 | ||||
|  | ||||
| light: | ||||
|   - platform: binary | ||||
|   | ||||
		Reference in New Issue
	
	Block a user