Merge pull request #2580 from esphome/bump-2021.10.1

2021.10.1
This commit is contained in:
Otto Winter 2021-10-21 15:31:26 +02:00 committed by GitHub
commit e5a38ce748
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 89 additions and 16 deletions

View File

@ -43,7 +43,7 @@ RUN \
# Ubuntu python3-pip is missing wheel # Ubuntu python3-pip is missing wheel
pip3 install --no-cache-dir \ pip3 install --no-cache-dir \
wheel==0.36.2 \ wheel==0.36.2 \
platformio==5.2.0 \ platformio==5.2.1 \
# Change some platformio settings # Change some platformio settings
&& platformio settings set enable_telemetry No \ && platformio settings set enable_telemetry No \
&& platformio settings set check_libraries_interval 1000000 \ && platformio settings set check_libraries_interval 1000000 \

View File

@ -8,6 +8,23 @@ import sys
config = configparser.ConfigParser(inline_comment_prefixes=(';', )) config = configparser.ConfigParser(inline_comment_prefixes=(';', ))
config.read(sys.argv[1]) config.read(sys.argv[1])
libs = [x for x in config['common']['lib_deps'].splitlines() if len(x) != 0]
libs = []
# Extract from every lib_deps key in all sections
for section in config.sections():
conf = config[section]
if "lib_deps" not in conf:
continue
for lib_dep in conf["lib_deps"].splitlines():
if not lib_dep:
# Empty line or comment
continue
if lib_dep.startswith("${"):
# Extending from another section
continue
if "@" not in lib_dep:
# No version pinned, this is an internal lib
continue
libs.append(lib_dep)
subprocess.check_call(['platformio', 'lib', '-g', 'install', *libs]) subprocess.check_call(['platformio', 'lib', '-g', 'install', *libs])

View File

@ -50,6 +50,13 @@ void ESP8266GPIOPin::pin_mode(gpio::Flags flags) {
mode = OUTPUT; mode = OUTPUT;
} else if (flags == (gpio::FLAG_INPUT | gpio::FLAG_PULLUP)) { } else if (flags == (gpio::FLAG_INPUT | gpio::FLAG_PULLUP)) {
mode = INPUT_PULLUP; mode = INPUT_PULLUP;
if (pin_ == 16) {
// GPIO16 doesn't have a pullup, so pinMode would fail.
// However, sometimes this method is called with pullup mode anyway
// for example from dallas one_wire. For those cases convert this
// to a INPUT mode.
mode = INPUT;
}
} else if (flags == (gpio::FLAG_INPUT | gpio::FLAG_PULLDOWN)) { } else if (flags == (gpio::FLAG_INPUT | gpio::FLAG_PULLDOWN)) {
mode = INPUT_PULLDOWN_16; mode = INPUT_PULLDOWN_16;
} else if (flags == (gpio::FLAG_OUTPUT | gpio::FLAG_OPEN_DRAIN)) { } else if (flags == (gpio::FLAG_OUTPUT | gpio::FLAG_OPEN_DRAIN)) {

View File

@ -107,9 +107,9 @@ def validate_supports(value):
raise cv.Invalid( raise cv.Invalid(
"Open-drain only works with output mode", [CONF_MODE, CONF_OPEN_DRAIN] "Open-drain only works with output mode", [CONF_MODE, CONF_OPEN_DRAIN]
) )
if is_pullup and num == 0: if is_pullup and num == 16:
raise cv.Invalid( raise cv.Invalid(
"GPIO Pin 0 does not support pullup pin mode. " "GPIO Pin 16 does not support pullup pin mode. "
"Please choose another pin.", "Please choose another pin.",
[CONF_MODE, CONF_PULLUP], [CONF_MODE, CONF_PULLUP],
) )

View File

@ -23,7 +23,7 @@ std::vector<MDNSService> MDNSComponent::compile_services_() {
#ifdef USE_API #ifdef USE_API
if (api::global_api_server != nullptr) { if (api::global_api_server != nullptr) {
MDNSService service{}; MDNSService service{};
service.service_type = "esphomelib"; service.service_type = "_esphomelib";
service.proto = "_tcp"; service.proto = "_tcp";
service.port = api::global_api_server->get_port(); service.port = api::global_api_server->get_port();
service.txt_records.push_back({"version", ESPHOME_VERSION}); service.txt_records.push_back({"version", ESPHOME_VERSION});
@ -57,7 +57,7 @@ std::vector<MDNSService> MDNSComponent::compile_services_() {
#ifdef USE_PROMETHEUS #ifdef USE_PROMETHEUS
{ {
MDNSService service{}; MDNSService service{};
service.service_type = "prometheus-http"; service.service_type = "_prometheus-http";
service.proto = "_tcp"; service.proto = "_tcp";
service.port = WEBSERVER_PORT; service.port = WEBSERVER_PORT;
res.push_back(service); res.push_back(service);
@ -68,7 +68,7 @@ std::vector<MDNSService> MDNSComponent::compile_services_() {
// Publish "http" service if not using native API // Publish "http" service if not using native API
// This is just to have *some* mDNS service so that .local resolution works // This is just to have *some* mDNS service so that .local resolution works
MDNSService service{}; MDNSService service{};
service.service_type = "http"; service.service_type = "_http";
service.proto = "_tcp"; service.proto = "_tcp";
service.port = WEBSERVER_PORT; service.port = WEBSERVER_PORT;
service.txt_records.push_back({"version", ESPHOME_VERSION}); service.txt_records.push_back({"version", ESPHOME_VERSION});

View File

@ -13,7 +13,11 @@ struct MDNSTXTRecord {
}; };
struct MDNSService { struct MDNSService {
// service name _including_ underscore character prefix
// as defined in RFC6763 Section 7
std::string service_type; std::string service_type;
// second label indicating protocol _including_ underscore character prefix
// as defined in RFC6763 Section 7, like "_tcp" or "_udp"
std::string proto; std::string proto;
uint16_t port; uint16_t port;
std::vector<MDNSTXTRecord> txt_records; std::vector<MDNSTXTRecord> txt_records;

View File

@ -17,9 +17,21 @@ void MDNSComponent::setup() {
auto services = compile_services_(); auto services = compile_services_();
for (const auto &service : services) { for (const auto &service : services) {
MDNS.addService(service.service_type.c_str(), service.proto.c_str(), service.port); // Strip the leading underscore from the proto and service_type. While it is
// part of the wire protocol to have an underscore, and for example ESP-IDF
// expects the underscore to be there, the ESP8266 implementation always adds
// the underscore itself.
auto proto = service.proto.c_str();
while (*proto == '_') {
proto++;
}
auto service_type = service.service_type.c_str();
while (*service_type == '_') {
service_type++;
}
MDNS.addService(service_type, proto, service.port);
for (const auto &record : service.txt_records) { for (const auto &record : service.txt_records) {
MDNS.addServiceTxt(service.service_type.c_str(), service.proto.c_str(), record.key.c_str(), record.value.c_str()); MDNS.addServiceTxt(service_type, proto, record.key.c_str(), record.value.c_str());
} }
} }
} }

View File

@ -90,9 +90,7 @@ async def to_code(config):
) )
cg.add(RawExpression(f"if ({condition}) return")) cg.add(RawExpression(f"if ({condition}) return"))
if CORE.is_esp8266: if CORE.is_esp32 and CORE.using_arduino:
cg.add_library("Update", None)
elif CORE.is_esp32 and CORE.using_arduino:
cg.add_library("Update", None) cg.add_library("Update", None)
use_state_callback = False use_state_callback = False

View File

@ -159,8 +159,15 @@ def final_validate_power_esp32_ble(value):
"esp32_ble_server", "esp32_ble_server",
"esp32_ble_tracker", "esp32_ble_tracker",
]: ]:
if conflicting not in fv.full_config.get():
continue
try: try:
cv.require_framework_version(esp32_arduino=cv.Version(1, 0, 5))(None) # Only arduino 1.0.5+ and esp-idf impacted
cv.require_framework_version(
esp32_arduino=cv.Version(1, 0, 5),
esp_idf=cv.Version(4, 0, 0),
)(None)
except cv.Invalid: except cv.Invalid:
pass pass
else: else:

View File

@ -1,6 +1,6 @@
"""Constants used by esphome.""" """Constants used by esphome."""
__version__ = "2021.10.0" __version__ = "2021.10.1"
ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_" ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"

View File

@ -206,6 +206,31 @@ def include_file(path, basename):
cg.add_global(cg.RawStatement(f'#include "{basename}"')) cg.add_global(cg.RawStatement(f'#include "{basename}"'))
ARDUINO_GLUE_CODE = """\
#define yield() esphome::yield()
#define millis() esphome::millis()
#define delay(x) esphome::delay(x)
#define delayMicroseconds(x) esphome::delayMicroseconds(x)
"""
@coroutine_with_priority(-999.0)
async def add_arduino_global_workaround():
# The Arduino framework defined these itself in the global
# namespace. For the esphome codebase that is not a problem,
# but when custom code
# 1. writes `millis()` for example AND
# 2. has `using namespace esphome;` like our guides suggest
# Then the compiler will complain that the call is ambiguous
# Define a hacky macro so that the call is never ambiguous
# and always uses the esphome namespace one.
# See also https://github.com/esphome/issues/issues/2510
# Priority -999 so that it runs before adding includes, as those
# also might reference these symbols
for line in ARDUINO_GLUE_CODE.splitlines():
cg.add_global(cg.RawStatement(line))
@coroutine_with_priority(-1000.0) @coroutine_with_priority(-1000.0)
async def add_includes(includes): async def add_includes(includes):
# Add includes at the very end, so that the included files can access global variables # Add includes at the very end, so that the included files can access global variables
@ -287,6 +312,9 @@ async def to_code(config):
cg.add_build_flag("-Wno-unused-but-set-variable") cg.add_build_flag("-Wno-unused-but-set-variable")
cg.add_build_flag("-Wno-sign-compare") cg.add_build_flag("-Wno-sign-compare")
if CORE.using_arduino:
CORE.add_job(add_arduino_global_workaround)
if config[CONF_INCLUDES]: if config[CONF_INCLUDES]:
CORE.add_job(add_includes, config[CONF_INCLUDES]) CORE.add_job(add_includes, config[CONF_INCLUDES])

View File

@ -6,7 +6,7 @@ tornado==6.1
tzlocal==3.0 # from time tzlocal==3.0 # from time
tzdata>=2021.1 # from time tzdata>=2021.1 # from time
pyserial==3.5 pyserial==3.5
platformio==5.2.1 platformio==5.2.1 # When updating platformio, also update Dockerfile
esptool==3.1 esptool==3.1
click==8.0.3 click==8.0.3
esphome-dashboard==20211021.0 esphome-dashboard==20211021.0

View File

@ -1150,7 +1150,7 @@ servo:
ttp229_lsf: ttp229_lsf:
ttp229_bsf: ttp229_bsf:
sdo_pin: D0 sdo_pin: D2
scl_pin: D1 scl_pin: D1
sim800l: sim800l: