mirror of
https://github.com/esphome/esphome.git
synced 2024-12-22 05:24:53 +01:00
Enable use of alternate hardware UARTs for logging (#427)
* Enable use of alternate hardware UARTs for logging Enable use of Serial1 on ESP8266 and Serial1/Serial2 on ESP32 for logging. This is frequently done on ESP8266 to allow use of Serial for UART TX+RX, while maintaining logging output on Serial1 which is TX-only via GPIO2. * ESPHOMELIB_UART -> UART_SELECTION_UART; HW_UART -> HARDWARE_UART * Add test3 to travis; remove test4 * Set DEBUG_ESP_PORT based on logger UART setting
This commit is contained in:
parent
463ad6f94b
commit
1b8d242505
4 changed files with 213 additions and 7 deletions
|
@ -22,6 +22,7 @@ matrix:
|
|||
script:
|
||||
- esphomeyaml tests/test1.yaml compile
|
||||
- esphomeyaml tests/test2.yaml compile
|
||||
- esphomeyaml tests/test3.yaml compile
|
||||
#- python: "3.5.3"
|
||||
# env: TARGET=Test3.5
|
||||
# install: pip install -U https://github.com/platformio/platformio-core/archive/develop.zip && pip install -e . && pip install flake8==3.6.0 pylint==2.2.2 pillow
|
||||
|
|
|
@ -5,11 +5,10 @@ import voluptuous as vol
|
|||
from esphomeyaml.automation import ACTION_REGISTRY, LambdaAction
|
||||
import esphomeyaml.config_validation as cv
|
||||
from esphomeyaml.const import CONF_ARGS, CONF_BAUD_RATE, CONF_FORMAT, CONF_ID, CONF_LEVEL, \
|
||||
CONF_LOGS, CONF_TAG, CONF_TX_BUFFER_SIZE
|
||||
CONF_LOGS, CONF_TAG, CONF_TX_BUFFER_SIZE, CONF_HARDWARE_UART
|
||||
from esphomeyaml.core import EsphomeyamlError, Lambda, CORE
|
||||
from esphomeyaml.cpp_generator import Pvariable, RawExpression, add, process_lambda, statement
|
||||
from esphomeyaml.cpp_types import App, Component, esphomelib_ns, global_ns, void
|
||||
|
||||
from esphomeyaml.py_compat import text_type
|
||||
|
||||
LOG_LEVELS = {
|
||||
|
@ -33,10 +32,36 @@ LOG_LEVEL_TO_ESP_LOG = {
|
|||
|
||||
LOG_LEVEL_SEVERITY = ['NONE', 'ERROR', 'WARN', 'INFO', 'DEBUG', 'VERBOSE', 'VERY_VERBOSE']
|
||||
|
||||
UART_SELECTION_ESP32 = ['UART0', 'UART1', 'UART2']
|
||||
|
||||
UART_SELECTION_ESP8266 = ['UART0', 'UART0_SWAP', 'UART1']
|
||||
|
||||
HARDWARE_UART_TO_UART_SELECTION = {
|
||||
'UART0': global_ns.UART_SELECTION_UART0,
|
||||
'UART0_SWAP': global_ns.UART_SELECTION_UART0_SWAP,
|
||||
'UART1': global_ns.UART_SELECTION_UART1,
|
||||
'UART2': global_ns.UART_SELECTION_UART2,
|
||||
}
|
||||
|
||||
HARDWARE_UART_TO_SERIAL = {
|
||||
'UART0': 'Serial',
|
||||
'UART0_SWAP': 'Serial',
|
||||
'UART1': 'Serial1',
|
||||
'UART2': 'Serial2',
|
||||
}
|
||||
|
||||
# pylint: disable=invalid-name
|
||||
is_log_level = cv.one_of(*LOG_LEVELS, upper=True)
|
||||
|
||||
|
||||
def uart_selection(value):
|
||||
if CORE.is_esp32:
|
||||
return cv.one_of(*UART_SELECTION_ESP32, upper=True)(value)
|
||||
if CORE.is_esp8266:
|
||||
return cv.one_of(*UART_SELECTION_ESP8266, upper=True)(value)
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
def validate_local_no_higher_than_global(value):
|
||||
global_level = value.get(CONF_LEVEL, 'DEBUG')
|
||||
for tag, level in value.get(CONF_LOGS, {}).items():
|
||||
|
@ -51,7 +76,8 @@ LogComponent = esphomelib_ns.class_('LogComponent', Component)
|
|||
CONFIG_SCHEMA = vol.All(vol.Schema({
|
||||
cv.GenerateID(): cv.declare_variable_id(LogComponent),
|
||||
vol.Optional(CONF_BAUD_RATE, default=115200): cv.positive_int,
|
||||
vol.Optional(CONF_TX_BUFFER_SIZE): cv.validate_bytes,
|
||||
vol.Optional(CONF_TX_BUFFER_SIZE, default=512): cv.validate_bytes,
|
||||
vol.Optional(CONF_HARDWARE_UART, default='UART0'): uart_selection,
|
||||
vol.Optional(CONF_LEVEL): is_log_level,
|
||||
vol.Optional(CONF_LOGS): vol.Schema({
|
||||
cv.string: is_log_level,
|
||||
|
@ -60,10 +86,10 @@ CONFIG_SCHEMA = vol.All(vol.Schema({
|
|||
|
||||
|
||||
def to_code(config):
|
||||
rhs = App.init_log(config.get(CONF_BAUD_RATE))
|
||||
rhs = App.init_log(config.get(CONF_BAUD_RATE),
|
||||
config.get(CONF_TX_BUFFER_SIZE),
|
||||
HARDWARE_UART_TO_UART_SELECTION[config.get(CONF_HARDWARE_UART)])
|
||||
log = Pvariable(config[CONF_ID], rhs)
|
||||
if CONF_TX_BUFFER_SIZE in config:
|
||||
add(log.set_tx_buffer_size(config[CONF_TX_BUFFER_SIZE]))
|
||||
if CONF_LEVEL in config:
|
||||
add(log.set_global_log_level(LOG_LEVELS[config[CONF_LEVEL]]))
|
||||
for tag, level in config.get(CONF_LOGS, {}).items():
|
||||
|
@ -79,7 +105,8 @@ def required_build_flags(config):
|
|||
is_at_least_verbose = this_severity >= verbose_severity
|
||||
has_serial_logging = config.get(CONF_BAUD_RATE) != 0
|
||||
if CORE.is_esp8266 and has_serial_logging and is_at_least_verbose:
|
||||
flags.append(u"-DDEBUG_ESP_PORT=Serial")
|
||||
debug_serial_port = HARDWARE_UART_TO_SERIAL[config.get(CONF_HARDWARE_UART)]
|
||||
flags.append(u"-DDEBUG_ESP_PORT={}".format(debug_serial_port))
|
||||
flags.append(u"-DLWIP_DEBUG")
|
||||
DEBUG_COMPONENTS = {
|
||||
'HTTP_CLIENT',
|
||||
|
|
|
@ -264,6 +264,7 @@ CONF_DELAYED_OFF = 'delayed_off'
|
|||
CONF_UUID = 'uuid'
|
||||
CONF_TYPE = 'type'
|
||||
CONF_SPI_ID = 'spi_id'
|
||||
CONF_HARDWARE_UART = 'hardware_uart'
|
||||
CONF_UART_ID = 'uart_id'
|
||||
CONF_UID = 'uid'
|
||||
CONF_TX_PIN = 'tx_pin'
|
||||
|
|
177
tests/test3.yaml
Normal file
177
tests/test3.yaml
Normal file
|
@ -0,0 +1,177 @@
|
|||
esphomeyaml:
|
||||
name: $devicename
|
||||
platform: ESP8266
|
||||
board: esp07
|
||||
# Use this for testing while developing:
|
||||
# esphomelib_version:
|
||||
# local: ~/path/to/esphomelib
|
||||
build_path: build/test3
|
||||
|
||||
substitutions:
|
||||
devicename: test3
|
||||
|
||||
api:
|
||||
|
||||
i2c:
|
||||
sda: 4
|
||||
scl: 5
|
||||
scan: False
|
||||
|
||||
spi:
|
||||
clk_pin: GPIO12
|
||||
mosi_pin: GPIO13
|
||||
miso_pin: GPIO14
|
||||
|
||||
uart:
|
||||
tx_pin: GPIO1
|
||||
rx_pin: GPIO3
|
||||
baud_rate: 115200
|
||||
|
||||
ota:
|
||||
safe_mode: True
|
||||
port: 3286
|
||||
|
||||
logger:
|
||||
hardware_uart: UART1
|
||||
level: DEBUG
|
||||
|
||||
web_server:
|
||||
|
||||
deep_sleep:
|
||||
run_duration: 20s
|
||||
sleep_duration: 50s
|
||||
|
||||
sensor:
|
||||
- platform: pmsx003
|
||||
type: PMSX003
|
||||
pm_1_0:
|
||||
name: "PM 1.0 Concentration"
|
||||
pm_2_5:
|
||||
name: "PM 2.5 Concentration"
|
||||
pm_10_0:
|
||||
name: "PM 10.0 Concentration"
|
||||
- platform: pmsx003
|
||||
type: PMS5003T
|
||||
pm_2_5:
|
||||
name: "PM 2.5 Concentration"
|
||||
temperature:
|
||||
name: "PMS Temperature"
|
||||
humidity:
|
||||
name: "PMS Humidity"
|
||||
- platform: pmsx003
|
||||
type: PMS5003ST
|
||||
pm_2_5:
|
||||
name: "PM 2.5 Concentration"
|
||||
temperature:
|
||||
name: "PMS Temperature"
|
||||
humidity:
|
||||
name: "PMS Humidity"
|
||||
formaldehyde:
|
||||
name: "PMS Formaldehyde Concentration"
|
||||
- platform: cse7766
|
||||
voltage:
|
||||
name: "CSE7766 Voltage"
|
||||
current:
|
||||
name: "CSE7766 Current"
|
||||
power:
|
||||
name: "CSE776 Power"
|
||||
- platform: apds9960
|
||||
type: proximity
|
||||
name: APDS9960 Proximity
|
||||
- platform: apds9960
|
||||
type: clear
|
||||
name: APDS9960 Clear
|
||||
- platform: apds9960
|
||||
type: red
|
||||
name: APDS9960 Red
|
||||
- platform: apds9960
|
||||
type: green
|
||||
name: APDS9960 Green
|
||||
- platform: apds9960
|
||||
type: blue
|
||||
name: APDS9960 Blue
|
||||
- platform: homeassistant
|
||||
entity_id: sensor.hello_world
|
||||
id: ha_hello_world
|
||||
|
||||
time:
|
||||
- platform: homeassistant
|
||||
|
||||
apds9960:
|
||||
address: 0x20
|
||||
update_interval: 60s
|
||||
|
||||
binary_sensor:
|
||||
- platform: apds9960
|
||||
direction: up
|
||||
name: APDS9960 Up
|
||||
- platform: apds9960
|
||||
direction: down
|
||||
name: APDS9960 Down
|
||||
- platform: apds9960
|
||||
direction: left
|
||||
name: APDS9960 Left
|
||||
- platform: apds9960
|
||||
direction: right
|
||||
name: APDS9960 Right
|
||||
- platform: homeassistant
|
||||
entity_id: binary_sensor.hello_world
|
||||
id: ha_hello_world_binary
|
||||
|
||||
remote_receiver:
|
||||
pin: GPIO12
|
||||
dump: []
|
||||
|
||||
status_led:
|
||||
pin: GPIO2
|
||||
|
||||
text_sensor:
|
||||
- platform: version
|
||||
name: "Esphomelib Version"
|
||||
icon: mdi:icon
|
||||
id: version_sensor
|
||||
on_value:
|
||||
- lambda: !lambda |-
|
||||
ESP_LOGD("main", "The state is %s=%s", x.c_str(), id(version_sensor).state.c_str());
|
||||
- script.execute: my_script
|
||||
- homeassistant.service:
|
||||
service: notify.html5
|
||||
data:
|
||||
title: New Humidity
|
||||
data_template:
|
||||
message: The humidity is {{ my_variable }}%.
|
||||
variables:
|
||||
my_variable: |-
|
||||
return id(version_sensor).state;
|
||||
- platform: template
|
||||
name: "Template Text Sensor"
|
||||
lambda: |-
|
||||
return {"Hello World"};
|
||||
- platform: homeassistant
|
||||
entity_id: sensor.hello_world2
|
||||
id: ha_hello_world2
|
||||
|
||||
script:
|
||||
- id: my_script
|
||||
then:
|
||||
- lambda: 'ESP_LOGD("main", "Hello World!");'
|
||||
|
||||
stepper:
|
||||
- platform: uln2003
|
||||
id: my_stepper
|
||||
pin_a: GPIO12
|
||||
pin_b: GPIO13
|
||||
pin_c: GPIO14
|
||||
pin_d: GPIO15
|
||||
sleep_when_done: no
|
||||
step_mode: HALF_STEP
|
||||
max_speed: 250 steps/s
|
||||
|
||||
# Optional:
|
||||
acceleration: inf
|
||||
deceleration: inf
|
||||
|
||||
interval:
|
||||
interval: 5s
|
||||
then:
|
||||
- logger.log: "Interval Run"
|
Loading…
Reference in a new issue