mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 22:53:59 +00:00 
			
		
		
		
	Add internal modifier. Fixes ottowinter/esphomelib#77
This commit is contained in:
		| @@ -1,7 +1,7 @@ | ||||
| import voluptuous as vol | ||||
|  | ||||
| import esphomeyaml.config_validation as cv | ||||
| from esphomeyaml.const import CONF_ICON, CONF_ID, CONF_INVERTED, CONF_MQTT_ID | ||||
| from esphomeyaml.const import CONF_ICON, CONF_ID, CONF_INVERTED, CONF_MQTT_ID, CONF_INTERNAL | ||||
| from esphomeyaml.helpers import App, Pvariable, add, esphomelib_ns, setup_mqtt_component | ||||
|  | ||||
| PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({ | ||||
| @@ -22,8 +22,12 @@ SWITCH_SCHEMA = cv.MQTT_COMMAND_COMPONENT_SCHEMA.extend({ | ||||
|     vol.Optional(CONF_INVERTED): cv.boolean, | ||||
| }) | ||||
|  | ||||
| SWITCH_PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(SWITCH_SCHEMA.schema) | ||||
|  | ||||
|  | ||||
| def setup_switch_core_(switch_var, mqtt_var, config): | ||||
|     if CONF_INTERNAL in config: | ||||
|         add(switch_var.set_internal(config[CONF_INTERNAL])) | ||||
|     if CONF_ICON in config: | ||||
|         add(switch_var.set_icon(config[CONF_ICON])) | ||||
|     if CONF_INVERTED in config: | ||||
|   | ||||
| @@ -8,10 +8,10 @@ from esphomeyaml.helpers import App, Application, gpio_output_pin_expression, va | ||||
|  | ||||
| MakeGPIOSwitch = Application.MakeGPIOSwitch | ||||
|  | ||||
| PLATFORM_SCHEMA = switch.PLATFORM_SCHEMA.extend({ | ||||
| PLATFORM_SCHEMA = cv.nameable(switch.SWITCH_PLATFORM_SCHEMA.extend({ | ||||
|     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeGPIOSwitch), | ||||
|     vol.Required(CONF_PIN): pins.gpio_output_pin_schema, | ||||
| }).extend(switch.SWITCH_SCHEMA.schema) | ||||
| })) | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
|   | ||||
| @@ -1,104 +0,0 @@ | ||||
| import voluptuous as vol | ||||
|  | ||||
| import esphomeyaml.config_validation as cv | ||||
| from esphomeyaml.components import switch | ||||
| from esphomeyaml.components.ir_transmitter import IRTransmitterComponent | ||||
| from esphomeyaml.const import CONF_ADDRESS, CONF_CARRIER_FREQUENCY, CONF_COMMAND, CONF_DATA, \ | ||||
|     CONF_INVERTED, CONF_IR_TRANSMITTER_ID, CONF_LG, CONF_NAME, CONF_NBITS, CONF_NEC, \ | ||||
|     CONF_PANASONIC, CONF_RAW, CONF_REPEAT, CONF_SONY, CONF_TIMES, CONF_WAIT_TIME | ||||
| from esphomeyaml.core import ESPHomeYAMLError | ||||
| from esphomeyaml.helpers import App, ArrayInitializer, HexIntLiteral, get_variable | ||||
|  | ||||
| DEPENDENCIES = ['ir_transmitter'] | ||||
|  | ||||
| IR_KEYS = [CONF_NEC, CONF_LG, CONF_SONY, CONF_PANASONIC, CONF_RAW] | ||||
|  | ||||
| WAIT_TIME_MESSAGE = "The wait_time_us option has been renamed to wait_time in order to decrease " \ | ||||
|                     "ambiguity. " | ||||
|  | ||||
| PLATFORM_SCHEMA = vol.All(switch.PLATFORM_SCHEMA.extend({ | ||||
|     vol.Exclusive(CONF_NEC, 'code'): vol.Schema({ | ||||
|         vol.Required(CONF_ADDRESS): cv.hex_uint16_t, | ||||
|         vol.Required(CONF_COMMAND): cv.hex_uint16_t, | ||||
|     }), | ||||
|     vol.Exclusive(CONF_LG, 'code'): vol.Schema({ | ||||
|         vol.Required(CONF_DATA): cv.hex_uint32_t, | ||||
|         vol.Optional(CONF_NBITS, default=28): vol.All(vol.Coerce(int), vol.Range(min=0, max=32)), | ||||
|     }), | ||||
|     vol.Exclusive(CONF_SONY, 'code'): vol.Schema({ | ||||
|         vol.Required(CONF_DATA): cv.hex_uint32_t, | ||||
|         vol.Optional(CONF_NBITS, default=12): vol.All(vol.Coerce(int), vol.Range(min=0, max=32)), | ||||
|     }), | ||||
|     vol.Exclusive(CONF_PANASONIC, 'code'): vol.Schema({ | ||||
|         vol.Required(CONF_ADDRESS): cv.hex_uint16_t, | ||||
|         vol.Required(CONF_COMMAND): cv.hex_uint32_t, | ||||
|     }), | ||||
|     vol.Exclusive(CONF_RAW, 'code'): vol.Schema({ | ||||
|         vol.Required(CONF_CARRIER_FREQUENCY): vol.All(cv.frequency, vol.Coerce(int)), | ||||
|         vol.Required(CONF_DATA): [vol.Coerce(int)], | ||||
|     }), | ||||
|     vol.Optional(CONF_REPEAT): vol.Any(cv.positive_not_null_int, vol.Schema({ | ||||
|         vol.Required(CONF_TIMES): cv.positive_not_null_int, | ||||
|         vol.Required(CONF_WAIT_TIME): cv.positive_time_period_microseconds, | ||||
|  | ||||
|         vol.Optional('wait_time_us'): cv.invalid(WAIT_TIME_MESSAGE), | ||||
|     })), | ||||
|     cv.GenerateID(CONF_IR_TRANSMITTER_ID): cv.use_variable_id(IRTransmitterComponent), | ||||
|     vol.Optional(CONF_INVERTED): cv.invalid("IR Transmitters do not support inverted mode!"), | ||||
| }).extend(switch.SWITCH_SCHEMA.schema), cv.has_at_least_one_key(*IR_KEYS)) | ||||
|  | ||||
| # pylint: disable=invalid-name | ||||
| ir_ns = switch.switch_ns.namespace('ir') | ||||
| SendData = ir_ns.namespace('SendData') | ||||
| DataTransmitter = IRTransmitterComponent.DataTransmitter | ||||
|  | ||||
|  | ||||
| def safe_hex(value): | ||||
|     if value is None: | ||||
|         return None | ||||
|     return HexIntLiteral(value) | ||||
|  | ||||
|  | ||||
| def exp_send_data(config): | ||||
|     if CONF_NEC in config: | ||||
|         conf = config[CONF_NEC] | ||||
|         base = SendData.from_nec(safe_hex(conf[CONF_ADDRESS]), | ||||
|                                  safe_hex(conf[CONF_COMMAND])) | ||||
|     elif CONF_LG in config: | ||||
|         conf = config[CONF_LG] | ||||
|         base = SendData.from_lg(safe_hex(conf[CONF_DATA]), conf.get(CONF_NBITS)) | ||||
|     elif CONF_SONY in config: | ||||
|         conf = config[CONF_SONY] | ||||
|         base = SendData.from_sony(safe_hex(conf[CONF_DATA]), conf.get(CONF_NBITS)) | ||||
|     elif CONF_PANASONIC in config: | ||||
|         conf = config[CONF_PANASONIC] | ||||
|         base = SendData.from_panasonic(safe_hex(conf[CONF_ADDRESS]), | ||||
|                                        safe_hex(conf[CONF_COMMAND])) | ||||
|     elif CONF_RAW in config: | ||||
|         conf = config[CONF_RAW] | ||||
|         data = ArrayInitializer(*conf[CONF_DATA]) | ||||
|         base = SendData.from_raw(data, conf[CONF_CARRIER_FREQUENCY]) | ||||
|     else: | ||||
|         raise ESPHomeYAMLError(u"Unsupported IR mode {}".format(config)) | ||||
|  | ||||
|     if CONF_REPEAT in config: | ||||
|         if isinstance(config[CONF_REPEAT], int): | ||||
|             times = config[CONF_REPEAT] | ||||
|             wait_us = None | ||||
|         else: | ||||
|             times = config[CONF_REPEAT][CONF_TIMES] | ||||
|             wait_us = config[CONF_REPEAT][CONF_WAIT_TIME] | ||||
|         base = base.repeat(times, wait_us) | ||||
|     return base | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
|     ir = None | ||||
|     for ir in get_variable(config[CONF_IR_TRANSMITTER_ID]): | ||||
|         yield | ||||
|     send_data = exp_send_data(config) | ||||
|     rhs = App.register_component(ir.create_transmitter(config[CONF_NAME], send_data)) | ||||
|     switch.register_switch(rhs, config) | ||||
|  | ||||
|  | ||||
| BUILD_FLAGS = '-DUSE_IR_TRANSMITTER' | ||||
| @@ -7,10 +7,10 @@ from esphomeyaml.helpers import App, Application, get_variable, variable | ||||
|  | ||||
| MakeSimpleSwitch = Application.MakeSimpleSwitch | ||||
|  | ||||
| PLATFORM_SCHEMA = switch.PLATFORM_SCHEMA.extend({ | ||||
| PLATFORM_SCHEMA = cv.nameable(switch.SWITCH_PLATFORM_SCHEMA.extend({ | ||||
|     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeSimpleSwitch), | ||||
|     vol.Required(CONF_OUTPUT): cv.use_variable_id(None), | ||||
| }).extend(switch.SWITCH_SCHEMA.schema) | ||||
| })) | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
|   | ||||
							
								
								
									
										98
									
								
								esphomeyaml/components/switch/remote_transmitter.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								esphomeyaml/components/switch/remote_transmitter.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,98 @@ | ||||
| import voluptuous as vol | ||||
|  | ||||
| import esphomeyaml.config_validation as cv | ||||
| from esphomeyaml.components import switch | ||||
| from esphomeyaml.components.remote_transmitter import RemoteTransmitterComponent, remote_ns | ||||
| from esphomeyaml.const import CONF_ADDRESS, CONF_CARRIER_FREQUENCY, CONF_COMMAND, CONF_DATA, \ | ||||
|     CONF_INVERTED, CONF_LG, CONF_NAME, CONF_NBITS, CONF_NEC, \ | ||||
|     CONF_PANASONIC, CONF_RAW, CONF_REPEAT, CONF_SONY, CONF_TIMES, CONF_WAIT_TIME | ||||
| from esphomeyaml.core import ESPHomeYAMLError | ||||
| from esphomeyaml.helpers import App, ArrayInitializer, HexIntLiteral, get_variable, Pvariable, add | ||||
|  | ||||
| DEPENDENCIES = ['remote_transmitter'] | ||||
|  | ||||
| IR_KEYS = [CONF_NEC, CONF_LG, CONF_SONY, CONF_PANASONIC, CONF_RAW] | ||||
|  | ||||
| CONF_REMOTE_TRANSMITTER_ID = 'remote_transmitter_id' | ||||
| CONF_TRANSMITTER_ID = 'transmitter_id' | ||||
|  | ||||
| RemoteTransmitter = remote_ns.RemoteTransmitter | ||||
| LGTransmitter = remote_ns.LGTransmitter | ||||
| NECTransmitter = remote_ns.NECTransmitter | ||||
| PanasonicTransmitter = remote_ns.PanasonicTransmitter | ||||
| RawTransmitter = remote_ns.RawTransmitter | ||||
| SonyTransmitter = remote_ns.SonyTransmitter | ||||
|  | ||||
| PLATFORM_SCHEMA = cv.nameable(switch.SWITCH_PLATFORM_SCHEMA.extend({ | ||||
|     vol.Optional(CONF_LG): vol.Schema({ | ||||
|         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_NEC): vol.Schema({ | ||||
|         vol.Required(CONF_ADDRESS): cv.hex_uint16_t, | ||||
|         vol.Required(CONF_COMMAND): cv.hex_uint16_t, | ||||
|     }), | ||||
|     vol.Optional(CONF_SONY): vol.Schema({ | ||||
|         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_PANASONIC): vol.Schema({ | ||||
|         vol.Required(CONF_ADDRESS): cv.hex_uint16_t, | ||||
|         vol.Required(CONF_COMMAND): cv.hex_uint32_t, | ||||
|     }), | ||||
|     vol.Optional(CONF_RAW): vol.Schema({ | ||||
|         vol.Required(CONF_DATA): [vol.Any(vol.Coerce(int), cv.time_period_microseconds)], | ||||
|         vol.Optional(CONF_CARRIER_FREQUENCY): vol.All(cv.frequency, vol.Coerce(int)), | ||||
|     }), | ||||
|     vol.Optional(CONF_REPEAT): vol.Any(cv.positive_not_null_int, vol.Schema({ | ||||
|         vol.Required(CONF_TIMES): cv.positive_not_null_int, | ||||
|         vol.Required(CONF_WAIT_TIME): cv.positive_time_period_microseconds, | ||||
|     })), | ||||
|     cv.GenerateID(CONF_REMOTE_TRANSMITTER_ID): cv.use_variable_id(RemoteTransmitterComponent), | ||||
|     cv.GenerateID(CONF_TRANSMITTER_ID): cv.declare_variable_id(RemoteTransmitter), | ||||
|  | ||||
|     vol.Optional(CONF_INVERTED): cv.invalid("Remote Transmitters do not support inverted mode!"), | ||||
| }), cv.has_exactly_one_key(*IR_KEYS)) | ||||
|  | ||||
|  | ||||
| def transmitter_base(config): | ||||
|     if CONF_LG in config: | ||||
|         conf = config[CONF_LG] | ||||
|         return LGTransmitter.new(config[CONF_NAME], conf[CONF_DATA], conf[CONF_NBITS]) | ||||
|     elif CONF_NEC in config: | ||||
|         conf = config[CONF_NEC] | ||||
|         return NECTransmitter.new(config[CONF_NAME], conf[CONF_ADDRESS], conf[CONF_COMMAND]) | ||||
|     elif CONF_PANASONIC in config: | ||||
|         conf = config[CONF_PANASONIC] | ||||
|         return PanasonicTransmitter.new(config[CONF_NAME], conf[CONF_ADDRESS], conf[CONF_COMMAND]) | ||||
|     elif CONF_SONY in config: | ||||
|         conf = config[CONF_SONY] | ||||
|         return SonyTransmitter.new(config[CONF_NAME], conf[CONF_DATA], conf[CONF_NBITS]) | ||||
|     elif CONF_RAW in config: | ||||
|         conf = config[CONF_RAW] | ||||
|         data = ArrayInitializer(*conf[CONF_DATA]) | ||||
|         return RawTransmitter.new(data, conf[CONF_CARRIER_FREQUENCY]) | ||||
|     else: | ||||
|         raise ValueError("Unknown transmitter type {}".format(config)) | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
|     remote = None | ||||
|     for remote in get_variable(config[CONF_REMOTE_TRANSMITTER_ID]): | ||||
|         yield | ||||
|     rhs = App.register_component(transmitter_base(config)) | ||||
|     transmitter = Pvariable(config[CONF_TRANSMITTER_ID], rhs) | ||||
|  | ||||
|     if CONF_REPEAT in config: | ||||
|         if isinstance(config[CONF_REPEAT], int): | ||||
|             times = config[CONF_REPEAT] | ||||
|             wait_us = 1000 | ||||
|         else: | ||||
|             times = config[CONF_REPEAT][CONF_TIMES] | ||||
|             wait_us = config[CONF_REPEAT][CONF_WAIT_TIME] | ||||
|         add(transmitter.set_repeat(times, wait_us)) | ||||
|  | ||||
|     switch.register_switch(remote.add_transmitter(transmitter), config) | ||||
|  | ||||
|  | ||||
| BUILD_FLAGS = '-DUSE_REMOTE_TRANSMITTER' | ||||
| @@ -7,10 +7,10 @@ from esphomeyaml.helpers import App, Application, variable | ||||
|  | ||||
| MakeRestartSwitch = Application.MakeRestartSwitch | ||||
|  | ||||
| PLATFORM_SCHEMA = switch.PLATFORM_SCHEMA.extend({ | ||||
| PLATFORM_SCHEMA = cv.nameable(switch.SWITCH_PLATFORM_SCHEMA.extend({ | ||||
|     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeRestartSwitch), | ||||
|     vol.Optional(CONF_INVERTED): cv.invalid("Restart switches do not support inverted mode!"), | ||||
| }).extend(switch.SWITCH_SCHEMA.schema) | ||||
| })) | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
|   | ||||
| @@ -7,10 +7,10 @@ from esphomeyaml.helpers import App, Application, variable | ||||
|  | ||||
| MakeShutdownSwitch = Application.MakeShutdownSwitch | ||||
|  | ||||
| PLATFORM_SCHEMA = switch.PLATFORM_SCHEMA.extend({ | ||||
| PLATFORM_SCHEMA = cv.nameable(switch.SWITCH_PLATFORM_SCHEMA.extend({ | ||||
|     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeShutdownSwitch), | ||||
|     vol.Optional(CONF_INVERTED): cv.invalid("Shutdown switches do not support inverted mode!"), | ||||
| }).extend(switch.SWITCH_SCHEMA.schema) | ||||
| })) | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
|   | ||||
| @@ -10,13 +10,13 @@ from esphomeyaml.helpers import App, Application, process_lambda, variable, NoAr | ||||
|  | ||||
| MakeTemplateSwitch = Application.MakeTemplateSwitch | ||||
|  | ||||
| PLATFORM_SCHEMA = vol.All(switch.PLATFORM_SCHEMA.extend({ | ||||
| PLATFORM_SCHEMA = cv.nameable(switch.SWITCH_PLATFORM_SCHEMA.extend({ | ||||
|     cv.GenerateID(CONF_MAKE_ID): cv.declare_variable_id(MakeTemplateSwitch), | ||||
|     vol.Optional(CONF_LAMBDA): cv.lambda_, | ||||
|     vol.Optional(CONF_OPTIMISTIC): cv.boolean, | ||||
|     vol.Optional(CONF_TURN_OFF_ACTION): automation.ACTIONS_SCHEMA, | ||||
|     vol.Optional(CONF_TURN_ON_ACTION): automation.ACTIONS_SCHEMA, | ||||
| }).extend(switch.SWITCH_SCHEMA.schema), cv.has_at_least_one_key(CONF_LAMBDA, CONF_OPTIMISTIC)) | ||||
| }), cv.has_at_least_one_key(CONF_LAMBDA, CONF_OPTIMISTIC)) | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user