mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	| @@ -23,7 +23,8 @@ from esphomeyaml.util import run_external_command, safe_print | |||||||
|  |  | ||||||
| _LOGGER = logging.getLogger(__name__) | _LOGGER = logging.getLogger(__name__) | ||||||
|  |  | ||||||
| PRE_INITIALIZE = ['esphomeyaml', 'logger', 'wifi', 'ota', 'mqtt', 'web_server', 'api', 'i2c'] | PRE_INITIALIZE = ['esphomeyaml', 'logger', 'wifi', 'ethernet', 'ota', 'mqtt', 'web_server', 'api', | ||||||
|  |                   'i2c'] | ||||||
|  |  | ||||||
|  |  | ||||||
| def get_serial_ports(): | def get_serial_ports(): | ||||||
|   | |||||||
							
								
								
									
										73
									
								
								esphomeyaml/components/ethernet.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								esphomeyaml/components/ethernet.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,73 @@ | |||||||
|  | import voluptuous as vol | ||||||
|  |  | ||||||
|  | from esphomeyaml import pins | ||||||
|  | from esphomeyaml.components import wifi | ||||||
|  | import esphomeyaml.config_validation as cv | ||||||
|  | from esphomeyaml.const import CONF_DOMAIN, CONF_HOSTNAME, CONF_ID, CONF_MANUAL_IP, CONF_TYPE, \ | ||||||
|  |     ESP_PLATFORM_ESP32 | ||||||
|  | from esphomeyaml.cpp_generator import Pvariable, add | ||||||
|  | from esphomeyaml.cpp_helpers import gpio_output_pin_expression | ||||||
|  | from esphomeyaml.cpp_types import App, Component, esphomelib_ns, global_ns | ||||||
|  |  | ||||||
|  | CONFLICTS_WITH = ['wifi'] | ||||||
|  | ESP_PLATFORMS = [ESP_PLATFORM_ESP32] | ||||||
|  |  | ||||||
|  | CONF_PHY_ADDR = 'phy_addr' | ||||||
|  | CONF_MDC_PIN = 'mdc_pin' | ||||||
|  | CONF_MDIO_PIN = 'mdio_pin' | ||||||
|  | CONF_CLK_MODE = 'clk_mode' | ||||||
|  | CONF_POWER_PIN = 'power_pin' | ||||||
|  |  | ||||||
|  | EthernetType = esphomelib_ns.enum('EthernetType') | ||||||
|  | ETHERNET_TYPES = { | ||||||
|  |     'LAN8720': EthernetType.ETHERNET_TYPE_LAN8720, | ||||||
|  |     'TLK110': EthernetType.ETHERNET_TYPE_TLK110, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | eth_clock_mode_t = global_ns.enum('eth_clock_mode_t') | ||||||
|  | CLK_MODES = { | ||||||
|  |     'GPIO0_IN': eth_clock_mode_t.ETH_CLOCK_GPIO0_IN, | ||||||
|  |     'GPIO0_OUT': eth_clock_mode_t.ETH_CLOCK_GPIO0_OUT, | ||||||
|  |     'GPIO16_OUT': eth_clock_mode_t.ETH_CLOCK_GPIO16_OUT, | ||||||
|  |     'GPIO17_OUT': eth_clock_mode_t.ETH_CLOCK_GPIO17_OUT, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | EthernetComponent = esphomelib_ns.class_('EthernetComponent', Component) | ||||||
|  |  | ||||||
|  | CONFIG_SCHEMA = vol.Schema({ | ||||||
|  |     cv.GenerateID(): cv.declare_variable_id(EthernetComponent), | ||||||
|  |     vol.Required(CONF_TYPE): cv.one_of(*ETHERNET_TYPES, upper=True), | ||||||
|  |     vol.Required(CONF_MDC_PIN): pins.output_pin, | ||||||
|  |     vol.Required(CONF_MDIO_PIN): pins.input_output_pin, | ||||||
|  |     vol.Optional(CONF_CLK_MODE, default='GPIO0_IN'): cv.one_of(*CLK_MODES, upper=True, space='_'), | ||||||
|  |     vol.Optional(CONF_PHY_ADDR, default=0): vol.All(cv.int_, vol.Range(min=0, max=31)), | ||||||
|  |     vol.Optional(CONF_POWER_PIN): pins.gpio_output_pin_schema, | ||||||
|  |     vol.Optional(CONF_MANUAL_IP): wifi.STA_MANUAL_IP_SCHEMA, | ||||||
|  |     vol.Optional(CONF_HOSTNAME): cv.hostname, | ||||||
|  |     vol.Optional(CONF_DOMAIN, default='.local'): cv.domain_name, | ||||||
|  | }) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def to_code(config): | ||||||
|  |     rhs = App.init_ethernet() | ||||||
|  |     eth = Pvariable(config[CONF_ID], rhs) | ||||||
|  |  | ||||||
|  |     add(eth.set_phy_addr(config[CONF_PHY_ADDR])) | ||||||
|  |     add(eth.set_mdc_pin(config[CONF_MDC_PIN])) | ||||||
|  |     add(eth.set_mdio_pin(config[CONF_MDIO_PIN])) | ||||||
|  |     add(eth.set_type(ETHERNET_TYPES[config[CONF_TYPE]])) | ||||||
|  |     add(eth.set_clk_mode(CLK_MODES[config[CONF_CLK_MODE]])) | ||||||
|  |  | ||||||
|  |     if CONF_POWER_PIN in config: | ||||||
|  |         for pin in gpio_output_pin_expression(config[CONF_POWER_PIN]): | ||||||
|  |             yield | ||||||
|  |         add(eth.set_power_pin(pin)) | ||||||
|  |  | ||||||
|  |     if CONF_HOSTNAME in config: | ||||||
|  |         add(eth.set_hostname(config[CONF_HOSTNAME])) | ||||||
|  |  | ||||||
|  |     if CONF_MANUAL_IP in config: | ||||||
|  |         add(eth.set_manual_ip(wifi.manual_ip(config[CONF_MANUAL_IP]))) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | REQUIRED_BUILD_FLAGS = '-DUSE_ETHERNET' | ||||||
| @@ -79,7 +79,6 @@ def _path_begins_with_(path, other):  # type: (ConfigPath, ConfigPath) -> bool | |||||||
|  |  | ||||||
| def _path_begins_with(path, other):  # type: (ConfigPath, ConfigPath) -> bool | def _path_begins_with(path, other):  # type: (ConfigPath, ConfigPath) -> bool | ||||||
|     ret = _path_begins_with_(path, other) |     ret = _path_begins_with_(path, other) | ||||||
|     # print('_path_begins_with({}, {}) -> {}'.format(path, other, ret)) |  | ||||||
|     return ret |     return ret | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -262,7 +261,7 @@ def validate_config(config): | |||||||
|         success = True |         success = True | ||||||
|         conflicts_with = getattr(component, 'CONFLICTS_WITH', []) |         conflicts_with = getattr(component, 'CONFLICTS_WITH', []) | ||||||
|         for conflict in conflicts_with: |         for conflict in conflicts_with: | ||||||
|             if conflict not in config: |             if conflict in config: | ||||||
|                 result.add_error(u"Component {} cannot be used together with component {}" |                 result.add_error(u"Component {} cannot be used together with component {}" | ||||||
|                                  u"".format(domain, conflict), [domain]) |                                  u"".format(domain, conflict), [domain]) | ||||||
|                 success = False |                 success = False | ||||||
| @@ -317,7 +316,7 @@ def validate_config(config): | |||||||
|             success = True |             success = True | ||||||
|             conflicts_with = getattr(platform, 'CONFLICTS_WITH', []) |             conflicts_with = getattr(platform, 'CONFLICTS_WITH', []) | ||||||
|             for conflict in conflicts_with: |             for conflict in conflicts_with: | ||||||
|                 if conflict not in config: |                 if conflict in config: | ||||||
|                     result.add_error(u"Platform {} cannot be used together with component {}" |                     result.add_error(u"Platform {} cannot be used together with component {}" | ||||||
|                                      u"".format(p_domain, conflict), [domain, i]) |                                      u"".format(p_domain, conflict), [domain, i]) | ||||||
|                     success = False |                     success = False | ||||||
|   | |||||||
| @@ -315,7 +315,13 @@ class EsphomeyamlCore(object): | |||||||
|     def address(self):  # type: () -> str |     def address(self):  # type: () -> str | ||||||
|         from esphomeyaml.components import wifi |         from esphomeyaml.components import wifi | ||||||
|  |  | ||||||
|         return wifi.get_upload_host(self.config[CONF_WIFI]) |         if 'wifi' in self.config: | ||||||
|  |             return wifi.get_upload_host(self.config[CONF_WIFI]) | ||||||
|  |  | ||||||
|  |         if 'ethernet' in self.config: | ||||||
|  |             return wifi.get_upload_host(self.config['ethernet']) | ||||||
|  |  | ||||||
|  |         return None | ||||||
|  |  | ||||||
|     @property |     @property | ||||||
|     def esphomelib_version(self):  # type: () -> Dict[str, str] |     def esphomelib_version(self):  # type: () -> Dict[str, str] | ||||||
|   | |||||||
| @@ -291,6 +291,6 @@ class CheckForUpdateThread(threading.Thread): | |||||||
| def start_update_check_thread(path): | def start_update_check_thread(path): | ||||||
|     # dummy call to strptime as python 2.7 has a bug with strptime when importing from threads |     # dummy call to strptime as python 2.7 has a bug with strptime when importing from threads | ||||||
|     datetime.strptime('20180101', '%Y%m%d') |     datetime.strptime('20180101', '%Y%m%d') | ||||||
|     thread = CheckForUpdateThread(path) |     thread = CheckForUpdateThread(os.path.abspath(path)) | ||||||
|     thread.start() |     thread.start() | ||||||
|     return thread |     return thread | ||||||
|   | |||||||
| @@ -11,10 +11,19 @@ esphomeyaml: | |||||||
| substitutions: | substitutions: | ||||||
|   devicename: test2 |   devicename: test2 | ||||||
|  |  | ||||||
| wifi: | ethernet: | ||||||
|   ssid: 'MySSID' |   type: LAN8720 | ||||||
|   password: 'password1' |   mdc_pin: GPIO23 | ||||||
|   reboot_timeout: 120s |   mdio_pin: GPIO24 | ||||||
|  |   clk_mode: GPIO0_IN | ||||||
|  |   phy_addr: 0 | ||||||
|  |   power_pin: GPIO25 | ||||||
|  |   manual_ip: | ||||||
|  |     static_ip: 192.168.178.56 | ||||||
|  |     gateway: 192.168.178.1 | ||||||
|  |     subnet: 255.255.255.0 | ||||||
|  |   hostname: helloworld | ||||||
|  |   domain: .local | ||||||
|  |  | ||||||
| mqtt: | mqtt: | ||||||
|   broker: '192.168.178.84' |   broker: '192.168.178.84' | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user