Initial ESPHome port for Wake Up Light II

This commit is contained in:
elizard committed 2026-10-08 10:45:05 +03:00
commit 086a040802
10 files changed
+1132

No files matched your search

+70
View File
@@ -0,0 +1,70 @@
#!/usr/bin/env python3
"""Apply the Wake Up Light II WBR3 PA13/PA14 UART0 workaround to installed ESPHome.
This is intentionally narrow: it only adds the alternate PA13/PA14 UART0 mapping
needed by this lamp, then calls LibreTiny Serial0.setPins() before begin().
"""
from pathlib import Path
import shutil
import sys
try:
import esphome
except ImportError:
sys.exit("ERROR: ESPHome is not importable in this Python environment")
p = Path(esphome.__file__).parent / "components" / "uart" / "uart_component_libretiny.cpp"
if not p.exists():
sys.exit(f"ERROR: not found: {p}")
s = p.read_text()
marker = 'Using alternate UART0 pins RX=PA13 TX=PA14'
if marker in s:
print(f"Already patched: {p}")
sys.exit(0)
old_select = '''#if LT_HW_UART0
else if ((tx_pin == -1 || tx_pin == PIN_SERIAL0_TX) && (rx_pin == -1 || rx_pin == PIN_SERIAL0_RX) &&
!should_fallback_to_software_serial()) {
this->serial_ = &Serial0;
this->hardware_idx_ = 0;
}
#endif
'''
new_select = '''#if LT_HW_UART0
else if ((((tx_pin == -1 || tx_pin == PIN_SERIAL0_TX) &&
(rx_pin == -1 || rx_pin == PIN_SERIAL0_RX)) ||
(tx_pin == 14 && rx_pin == 13)) &&
!should_fallback_to_software_serial()) {
this->serial_ = &Serial0;
this->hardware_idx_ = 0;
}
#endif
'''
old_begin = ' this->serial_->begin(this->baud_rate_, get_config());\n'
new_begin = ''' if (this->hardware_idx_ == 0 && tx_pin == 14 && rx_pin == 13) {
ESP_LOGI(TAG, "Using alternate UART0 pins RX=PA13 TX=PA14");
Serial0.setPins(rx_pin, tx_pin);
}
this->serial_->begin(this->baud_rate_, get_config());
'''
if old_select not in s:
sys.exit(
"ERROR: UART0 selection block not found. ESPHome source has changed; "
"do not patch blindly. Compare with ESPHome issue #13596 / PR #13629."
)
if old_begin not in s:
sys.exit("ERROR: serial begin() line not found; ESPHome source has changed")
backup = p.with_suffix(p.suffix + ".wake-up-light-backup")
if not backup.exists():
shutil.copy2(p, backup)
print(f"Backup: {backup}")
s = s.replace(old_select, new_select, 1)
s = s.replace(old_begin, new_begin, 1)
p.write_text(s)
print(f"Patched: {p}")
print("Run: esphome clean wake-up-light-ii.yaml && esphome compile wake-up-light-ii.yaml")
+26
View File
@@ -0,0 +1,26 @@
--- a/esphome/components/uart/uart_component_libretiny.cpp
+++ b/esphome/components/uart/uart_component_libretiny.cpp
@@ -64,8 +64,10 @@ void LibreTinyUARTComponent::setup() {
return;
}
#if LT_HW_UART0
- else if ((tx_pin == -1 || tx_pin == PIN_SERIAL0_TX) && (rx_pin == -1 || rx_pin == PIN_SERIAL0_RX) &&
- !should_fallback_to_software_serial()) {
+ else if ((((tx_pin == -1 || tx_pin == PIN_SERIAL0_TX) &&
+ (rx_pin == -1 || rx_pin == PIN_SERIAL0_RX)) ||
+ (tx_pin == 14 && rx_pin == 13)) &&
+ !should_fallback_to_software_serial()) {
this->serial_ = &Serial0;
this->hardware_idx_ = 0;
}
@@ -111,6 +113,10 @@ void LibreTinyUARTComponent::setup() {
return;
#endif
}
+ if (this->hardware_idx_ == 0 && tx_pin == 14 && rx_pin == 13) {
+ ESP_LOGI(TAG, "Using alternate UART0 pins RX=PA13 TX=PA14");
+ Serial0.setPins(rx_pin, tx_pin);
+ }
this->serial_->begin(this->baud_rate_, get_config());
}
void LibreTinyUARTComponent::dump_config() {