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:
		| @@ -10,7 +10,7 @@ PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({ | ||||
| }) | ||||
|  | ||||
| display_ns = esphomelib_ns.namespace('display') | ||||
| DisplayBuffer = display_ns.DisplayBuffer | ||||
| DisplayBuffer = display_ns.class_('DisplayBuffer') | ||||
| DisplayBufferRef = DisplayBuffer.operator('ref') | ||||
|  | ||||
| DISPLAY_ROTATIONS = { | ||||
|   | ||||
| @@ -5,11 +5,12 @@ from esphomeyaml import pins | ||||
| from esphomeyaml.components import display | ||||
| from esphomeyaml.const import CONF_DATA_PINS, CONF_DIMENSIONS, CONF_ENABLE_PIN, CONF_ID, \ | ||||
|     CONF_LAMBDA, CONF_RS_PIN, CONF_RW_PIN | ||||
| from esphomeyaml.helpers import App, Pvariable, add, gpio_output_pin_expression, process_lambda | ||||
| from esphomeyaml.helpers import App, Pvariable, add, gpio_output_pin_expression, process_lambda, \ | ||||
|     setup_component, PollingComponent | ||||
|  | ||||
| GPIOLCDDisplay = display.display_ns.GPIOLCDDisplay | ||||
| LCDDisplay = display.display_ns.LCDDisplay | ||||
| LCDDisplay = display.display_ns.class_('LCDDisplay', PollingComponent) | ||||
| LCDDisplayRef = LCDDisplay.operator('ref') | ||||
| GPIOLCDDisplay = display.display_ns.class_('GPIOLCDDisplay', LCDDisplay) | ||||
|  | ||||
|  | ||||
| def validate_lcd_dimensions(value): | ||||
| @@ -36,7 +37,7 @@ PLATFORM_SCHEMA = display.BASIC_DISPLAY_PLATFORM_SCHEMA.extend({ | ||||
|     vol.Required(CONF_ENABLE_PIN): pins.gpio_output_pin_schema, | ||||
|     vol.Required(CONF_RS_PIN): pins.gpio_output_pin_schema, | ||||
|     vol.Optional(CONF_RW_PIN): pins.gpio_output_pin_schema, | ||||
| }) | ||||
| }).extend(cv.COMPONENT_SCHEMA.schema) | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
| @@ -67,6 +68,7 @@ def to_code(config): | ||||
|         add(lcd.set_writer(lambda_)) | ||||
|  | ||||
|     display.setup_display(lcd, config) | ||||
|     setup_component(lcd, config) | ||||
|  | ||||
|  | ||||
| BUILD_FLAGS = '-DUSE_LCD_DISPLAY' | ||||
|   | ||||
| @@ -1,20 +1,21 @@ | ||||
| import voluptuous as vol | ||||
|  | ||||
| import esphomeyaml.config_validation as cv | ||||
| from esphomeyaml.components import display | ||||
| from esphomeyaml.components.display.lcd_gpio import LCDDisplayRef, validate_lcd_dimensions | ||||
| from esphomeyaml.components import display, i2c | ||||
| from esphomeyaml.components.display.lcd_gpio import LCDDisplayRef, validate_lcd_dimensions, \ | ||||
|     LCDDisplay | ||||
| from esphomeyaml.const import CONF_ADDRESS, CONF_DIMENSIONS, CONF_ID, CONF_LAMBDA | ||||
| from esphomeyaml.helpers import App, Pvariable, add, process_lambda | ||||
| from esphomeyaml.helpers import App, Pvariable, add, process_lambda, setup_component | ||||
|  | ||||
| DEPENDENCIES = ['i2c'] | ||||
|  | ||||
| PCF8574LCDDisplay = display.display_ns.PCF8574LCDDisplay | ||||
| PCF8574LCDDisplay = display.display_ns.class_('PCF8574LCDDisplay', LCDDisplay, i2c.I2CDevice) | ||||
|  | ||||
| PLATFORM_SCHEMA = display.BASIC_DISPLAY_PLATFORM_SCHEMA.extend({ | ||||
|     cv.GenerateID(): cv.declare_variable_id(PCF8574LCDDisplay), | ||||
|     vol.Required(CONF_DIMENSIONS): validate_lcd_dimensions, | ||||
|     vol.Optional(CONF_ADDRESS): cv.i2c_address, | ||||
| }) | ||||
| }).extend(cv.COMPONENT_SCHEMA.schema) | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
| @@ -30,6 +31,7 @@ def to_code(config): | ||||
|         add(lcd.set_writer(lambda_)) | ||||
|  | ||||
|     display.setup_display(lcd, config) | ||||
|     setup_component(lcd, config) | ||||
|  | ||||
|  | ||||
| BUILD_FLAGS = ['-DUSE_LCD_DISPLAY', '-DUSE_LCD_DISPLAY_PCF8574'] | ||||
|   | ||||
| @@ -2,16 +2,16 @@ import voluptuous as vol | ||||
|  | ||||
| import esphomeyaml.config_validation as cv | ||||
| from esphomeyaml import pins | ||||
| from esphomeyaml.components import display | ||||
| from esphomeyaml.components import display, spi | ||||
| from esphomeyaml.components.spi import SPIComponent | ||||
| from esphomeyaml.const import CONF_CS_PIN, CONF_ID, CONF_INTENSITY, CONF_LAMBDA, CONF_NUM_CHIPS, \ | ||||
|     CONF_SPI_ID | ||||
| from esphomeyaml.helpers import App, Pvariable, add, get_variable, gpio_output_pin_expression, \ | ||||
|     process_lambda | ||||
|     process_lambda, setup_component, PollingComponent | ||||
|  | ||||
| DEPENDENCIES = ['spi'] | ||||
|  | ||||
| MAX7219Component = display.display_ns.MAX7219Component | ||||
| MAX7219Component = display.display_ns.class_('MAX7219Component', PollingComponent, spi.SPIDevice) | ||||
| MAX7219ComponentRef = MAX7219Component.operator('ref') | ||||
|  | ||||
| PLATFORM_SCHEMA = display.BASIC_DISPLAY_PLATFORM_SCHEMA.extend({ | ||||
| @@ -21,15 +21,15 @@ PLATFORM_SCHEMA = display.BASIC_DISPLAY_PLATFORM_SCHEMA.extend({ | ||||
|  | ||||
|     vol.Optional(CONF_NUM_CHIPS): vol.All(cv.uint8_t, vol.Range(min=1)), | ||||
|     vol.Optional(CONF_INTENSITY): vol.All(cv.uint8_t, vol.Range(min=0, max=15)), | ||||
| }) | ||||
| }).extend(cv.COMPONENT_SCHEMA.schema) | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
|     for spi in get_variable(config[CONF_SPI_ID]): | ||||
|     for spi_ in get_variable(config[CONF_SPI_ID]): | ||||
|         yield | ||||
|     for cs in gpio_output_pin_expression(config[CONF_CS_PIN]): | ||||
|         yield | ||||
|     rhs = App.make_max7219(spi, cs) | ||||
|     rhs = App.make_max7219(spi_, cs) | ||||
|     max7219 = Pvariable(config[CONF_ID], rhs) | ||||
|  | ||||
|     if CONF_NUM_CHIPS in config: | ||||
| @@ -43,6 +43,7 @@ def to_code(config): | ||||
|         add(max7219.set_writer(lambda_)) | ||||
|  | ||||
|     display.setup_display(max7219, config) | ||||
|     setup_component(max7219, config) | ||||
|  | ||||
|  | ||||
| BUILD_FLAGS = '-DUSE_MAX7219' | ||||
|   | ||||
| @@ -1,24 +1,26 @@ | ||||
| import esphomeyaml.config_validation as cv | ||||
| from esphomeyaml.components import display | ||||
| from esphomeyaml.components import display, uart | ||||
| from esphomeyaml.components.uart import UARTComponent | ||||
| import esphomeyaml.config_validation as cv | ||||
| from esphomeyaml.const import CONF_ID, CONF_LAMBDA, CONF_UART_ID | ||||
| from esphomeyaml.helpers import App, Pvariable, add, get_variable, process_lambda | ||||
| from esphomeyaml.helpers import App, PollingComponent, Pvariable, add, get_variable, \ | ||||
|     process_lambda, \ | ||||
|     setup_component | ||||
|  | ||||
| DEPENDENCIES = ['uart'] | ||||
|  | ||||
| Nextion = display.display_ns.Nextion | ||||
| Nextion = display.display_ns.class_('Nextion', PollingComponent, uart.UARTDevice) | ||||
| NextionRef = Nextion.operator('ref') | ||||
|  | ||||
| PLATFORM_SCHEMA = display.BASIC_DISPLAY_PLATFORM_SCHEMA.extend({ | ||||
|     cv.GenerateID(): cv.declare_variable_id(Nextion), | ||||
|     cv.GenerateID(CONF_UART_ID): cv.use_variable_id(UARTComponent), | ||||
| }) | ||||
| }).extend(cv.COMPONENT_SCHEMA.schema) | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
|     for uart in get_variable(config[CONF_UART_ID]): | ||||
|     for uart_ in get_variable(config[CONF_UART_ID]): | ||||
|         yield | ||||
|     rhs = App.make_nextion(uart) | ||||
|     rhs = App.make_nextion(uart_) | ||||
|     nextion = Pvariable(config[CONF_ID], rhs) | ||||
|  | ||||
|     if CONF_LAMBDA in config: | ||||
| @@ -27,6 +29,7 @@ def to_code(config): | ||||
|         add(nextion.set_writer(lambda_)) | ||||
|  | ||||
|     display.setup_display(nextion, config) | ||||
|     setup_component(nextion, config) | ||||
|  | ||||
|  | ||||
| BUILD_FLAGS = '-DUSE_NEXTION' | ||||
|   | ||||
| @@ -7,11 +7,11 @@ from esphomeyaml.components.display import ssd1306_spi | ||||
| from esphomeyaml.const import CONF_ADDRESS, CONF_EXTERNAL_VCC, CONF_ID, \ | ||||
|     CONF_MODEL, CONF_RESET_PIN, CONF_LAMBDA | ||||
| from esphomeyaml.helpers import App, Pvariable, add, \ | ||||
|     gpio_output_pin_expression, process_lambda | ||||
|     gpio_output_pin_expression, process_lambda, setup_component | ||||
|  | ||||
| DEPENDENCIES = ['i2c'] | ||||
|  | ||||
| I2CSSD1306 = display.display_ns.I2CSSD1306 | ||||
| I2CSSD1306 = display.display_ns.class_('I2CSSD1306', ssd1306_spi.SSD1306) | ||||
|  | ||||
| PLATFORM_SCHEMA = display.FULL_DISPLAY_PLATFORM_SCHEMA.extend({ | ||||
|     cv.GenerateID(): cv.declare_variable_id(I2CSSD1306), | ||||
| @@ -19,7 +19,7 @@ PLATFORM_SCHEMA = display.FULL_DISPLAY_PLATFORM_SCHEMA.extend({ | ||||
|     vol.Optional(CONF_RESET_PIN): pins.gpio_output_pin_schema, | ||||
|     vol.Optional(CONF_EXTERNAL_VCC): cv.boolean, | ||||
|     vol.Optional(CONF_ADDRESS): cv.i2c_address, | ||||
| }) | ||||
| }).extend(cv.COMPONENT_SCHEMA.schema) | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
| @@ -41,6 +41,7 @@ def to_code(config): | ||||
|         add(ssd.set_writer(lambda_)) | ||||
|  | ||||
|     display.setup_display(ssd, config) | ||||
|     setup_component(ssd, config) | ||||
|  | ||||
|  | ||||
| BUILD_FLAGS = '-DUSE_SSD1306' | ||||
|   | ||||
| @@ -2,27 +2,29 @@ import voluptuous as vol | ||||
|  | ||||
| import esphomeyaml.config_validation as cv | ||||
| from esphomeyaml import pins | ||||
| from esphomeyaml.components import display | ||||
| from esphomeyaml.components import display, spi | ||||
| from esphomeyaml.components.spi import SPIComponent | ||||
| from esphomeyaml.const import CONF_CS_PIN, CONF_DC_PIN, CONF_EXTERNAL_VCC, \ | ||||
|     CONF_ID, CONF_MODEL, \ | ||||
|     CONF_RESET_PIN, CONF_SPI_ID, CONF_LAMBDA | ||||
| from esphomeyaml.helpers import App, Pvariable, add, get_variable, \ | ||||
|     gpio_output_pin_expression, process_lambda | ||||
|     gpio_output_pin_expression, process_lambda, setup_component, PollingComponent | ||||
|  | ||||
| DEPENDENCIES = ['spi'] | ||||
|  | ||||
| SPISSD1306 = display.display_ns.SPISSD1306 | ||||
| SSD1306 = display.display_ns.class_('SSD1306', PollingComponent, display.DisplayBuffer) | ||||
| SPISSD1306 = display.display_ns.class_('SPISSD1306', SSD1306, spi.SPIDevice) | ||||
| SSD1306Model = display.display_ns.enum('SSD1306Model') | ||||
|  | ||||
| MODELS = { | ||||
|     'SSD1306_128X32': display.display_ns.SSD1306_MODEL_128_32, | ||||
|     'SSD1306_128X64': display.display_ns.SSD1306_MODEL_128_64, | ||||
|     'SSD1306_96X16': display.display_ns.SSD1306_MODEL_96_16, | ||||
|     'SSD1306_64X48': display.display_ns.SSD1306_MODEL_64_48, | ||||
|     'SH1106_128X32': display.display_ns.SH1106_MODEL_128_32, | ||||
|     'SH1106_128X64': display.display_ns.SH1106_MODEL_128_64, | ||||
|     'SH1106_96X16': display.display_ns.SH1106_MODEL_96_16, | ||||
|     'SH1106_64X48': display.display_ns.SH1106_MODEL_64_48, | ||||
|     'SSD1306_128X32': SSD1306Model.SSD1306_MODEL_128_32, | ||||
|     'SSD1306_128X64': SSD1306Model.SSD1306_MODEL_128_64, | ||||
|     'SSD1306_96X16': SSD1306Model.SSD1306_MODEL_96_16, | ||||
|     'SSD1306_64X48': SSD1306Model.SSD1306_MODEL_64_48, | ||||
|     'SH1106_128X32': SSD1306Model.SH1106_MODEL_128_32, | ||||
|     'SH1106_128X64': SSD1306Model.SH1106_MODEL_128_64, | ||||
|     'SH1106_96X16': SSD1306Model.SH1106_MODEL_96_16, | ||||
|     'SH1106_64X48': SSD1306Model.SH1106_MODEL_64_48, | ||||
| } | ||||
|  | ||||
| SSD1306_MODEL = vol.All(vol.Upper, vol.Replace(' ', '_'), cv.one_of(*MODELS)) | ||||
| @@ -35,18 +37,18 @@ PLATFORM_SCHEMA = display.FULL_DISPLAY_PLATFORM_SCHEMA.extend({ | ||||
|     vol.Required(CONF_MODEL): SSD1306_MODEL, | ||||
|     vol.Optional(CONF_RESET_PIN): pins.gpio_output_pin_schema, | ||||
|     vol.Optional(CONF_EXTERNAL_VCC): cv.boolean, | ||||
| }) | ||||
| }).extend(cv.COMPONENT_SCHEMA.schema) | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
|     for spi in get_variable(config[CONF_SPI_ID]): | ||||
|     for spi_ in get_variable(config[CONF_SPI_ID]): | ||||
|         yield | ||||
|     for cs in gpio_output_pin_expression(config[CONF_CS_PIN]): | ||||
|         yield | ||||
|     for dc in gpio_output_pin_expression(config[CONF_DC_PIN]): | ||||
|         yield | ||||
|  | ||||
|     rhs = App.make_spi_ssd1306(spi, cs, dc) | ||||
|     rhs = App.make_spi_ssd1306(spi_, cs, dc) | ||||
|     ssd = Pvariable(config[CONF_ID], rhs) | ||||
|     add(ssd.set_model(MODELS[config[CONF_MODEL]])) | ||||
|  | ||||
| @@ -63,6 +65,7 @@ def to_code(config): | ||||
|         add(ssd.set_writer(lambda_)) | ||||
|  | ||||
|     display.setup_display(ssd, config) | ||||
|     setup_component(ssd, config) | ||||
|  | ||||
|  | ||||
| BUILD_FLAGS = '-DUSE_SSD1306' | ||||
|   | ||||
| @@ -2,25 +2,30 @@ import voluptuous as vol | ||||
|  | ||||
| import esphomeyaml.config_validation as cv | ||||
| from esphomeyaml import pins | ||||
| from esphomeyaml.components import display | ||||
| from esphomeyaml.components import display, spi | ||||
| from esphomeyaml.components.spi import SPIComponent | ||||
| from esphomeyaml.const import CONF_BUSY_PIN, CONF_CS_PIN, CONF_DC_PIN, CONF_FULL_UPDATE_EVERY, \ | ||||
|     CONF_ID, CONF_LAMBDA, CONF_MODEL, CONF_RESET_PIN, CONF_SPI_ID | ||||
| from esphomeyaml.helpers import App, Pvariable, add, get_variable, gpio_input_pin_expression, \ | ||||
|     gpio_output_pin_expression, process_lambda | ||||
|     gpio_output_pin_expression, process_lambda, setup_component, PollingComponent | ||||
|  | ||||
| DEPENDENCIES = ['spi'] | ||||
|  | ||||
| WaveshareEPaperTypeA = display.display_ns.WaveshareEPaperTypeA | ||||
| WaveshareEPaper = display.display_ns.WaveshareEPaper | ||||
| WaveshareEPaper = display.display_ns.class_('WaveshareEPaper', | ||||
|                                             PollingComponent, spi.SPIDevice, display.DisplayBuffer) | ||||
|  | ||||
|  | ||||
| WaveshareEPaperTypeAModel = display.display_ns.enum('WaveshareEPaperTypeAModel') | ||||
| WaveshareEPaperTypeBModel = display.display_ns.enum('WaveshareEPaperTypeBModel') | ||||
|  | ||||
| MODELS = { | ||||
|     '1.54in': ('a', display.display_ns.WAVESHARE_EPAPER_1_54_IN), | ||||
|     '2.13in': ('a', display.display_ns.WAVESHARE_EPAPER_2_13_IN), | ||||
|     '2.90in': ('a', display.display_ns.WAVESHARE_EPAPER_2_9_IN), | ||||
|     '2.70in': ('b', display.display_ns.WAVESHARE_EPAPER_2_7_IN), | ||||
|     '4.20in': ('b', display.display_ns.WAVESHARE_EPAPER_4_2_IN), | ||||
|     '7.50in': ('b', display.display_ns.WAVESHARE_EPAPER_7_5_IN), | ||||
|     '1.54in': ('a', WaveshareEPaperTypeAModel.WAVESHARE_EPAPER_1_54_IN), | ||||
|     '2.13in': ('a', WaveshareEPaperTypeAModel.WAVESHARE_EPAPER_2_13_IN), | ||||
|     '2.90in': ('a', WaveshareEPaperTypeAModel.WAVESHARE_EPAPER_2_9_IN), | ||||
|     '2.70in': ('b', WaveshareEPaperTypeBModel.WAVESHARE_EPAPER_2_7_IN), | ||||
|     '4.20in': ('b', WaveshareEPaperTypeBModel.WAVESHARE_EPAPER_4_2_IN), | ||||
|     '7.50in': ('b', WaveshareEPaperTypeBModel.WAVESHARE_EPAPER_7_5_IN), | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -34,7 +39,7 @@ def validate_full_update_every_only_type_a(value): | ||||
|  | ||||
|  | ||||
| PLATFORM_SCHEMA = vol.All(display.FULL_DISPLAY_PLATFORM_SCHEMA.extend({ | ||||
|     cv.GenerateID(): cv.declare_variable_id(None), | ||||
|     cv.GenerateID(): cv.declare_variable_id(WaveshareEPaper), | ||||
|     cv.GenerateID(CONF_SPI_ID): cv.use_variable_id(SPIComponent), | ||||
|     vol.Required(CONF_CS_PIN): pins.gpio_output_pin_schema, | ||||
|     vol.Required(CONF_DC_PIN): pins.gpio_output_pin_schema, | ||||
| @@ -42,11 +47,11 @@ PLATFORM_SCHEMA = vol.All(display.FULL_DISPLAY_PLATFORM_SCHEMA.extend({ | ||||
|     vol.Optional(CONF_RESET_PIN): pins.gpio_output_pin_schema, | ||||
|     vol.Optional(CONF_BUSY_PIN): pins.gpio_input_pin_schema, | ||||
|     vol.Optional(CONF_FULL_UPDATE_EVERY): cv.uint32_t, | ||||
| }), validate_full_update_every_only_type_a) | ||||
| }).extend(cv.COMPONENT_SCHEMA.schema), validate_full_update_every_only_type_a) | ||||
|  | ||||
|  | ||||
| def to_code(config): | ||||
|     for spi in get_variable(config[CONF_SPI_ID]): | ||||
|     for spi_ in get_variable(config[CONF_SPI_ID]): | ||||
|         yield | ||||
|     for cs in gpio_output_pin_expression(config[CONF_CS_PIN]): | ||||
|         yield | ||||
| @@ -55,10 +60,10 @@ def to_code(config): | ||||
|  | ||||
|     model_type, model = MODELS[config[CONF_MODEL]] | ||||
|     if model_type == 'a': | ||||
|         rhs = App.make_waveshare_epaper_type_a(spi, cs, dc, model) | ||||
|         rhs = App.make_waveshare_epaper_type_a(spi_, cs, dc, model) | ||||
|         epaper = Pvariable(config[CONF_ID], rhs, type=WaveshareEPaperTypeA) | ||||
|     elif model_type == 'b': | ||||
|         rhs = App.make_waveshare_epaper_type_b(spi, cs, dc, model) | ||||
|         rhs = App.make_waveshare_epaper_type_b(spi_, cs, dc, model) | ||||
|         epaper = Pvariable(config[CONF_ID], rhs, type=WaveshareEPaper) | ||||
|     else: | ||||
|         raise NotImplementedError() | ||||
| @@ -79,6 +84,7 @@ def to_code(config): | ||||
|         add(epaper.set_full_update_every(config[CONF_FULL_UPDATE_EVERY])) | ||||
|  | ||||
|     display.setup_display(epaper, config) | ||||
|     setup_component(epaper, config) | ||||
|  | ||||
|  | ||||
| BUILD_FLAGS = '-DUSE_WAVESHARE_EPAPER' | ||||
|   | ||||
		Reference in New Issue
	
	Block a user