Commit Graph
3585 Commits
Author SHA1 Message Date
J. Nick Koston 8800c10181 [core] Address review: fix docstrings per Copilot feedback
- get_app_state(): say 'STATUS_LED_* only', not 'STATUS_LED_* and lifecycle'
  since lifecycle bits are no longer maintained in app_state_.
- STATUS_LED_SETTLE_S: remove incorrect mention of feed_wdt re-dispatch;
  status_led_light is driven by the main loop, not feed_wdt.
- snapshot_led service: say 'status_led_light output' not 'pin state'
  since the fixture uses a template output, not GPIO.
2026-04-11 17:37:59 -10:00
J. Nick Koston 79f27d7a19 Merge branch 'drop-redundant-app-state-or' into integration 2026-04-11 16:39:14 -10:00
J. Nick Koston 515ec544ce [tests] Extract STATUS_LED_SETTLE_S constant, fix idle count check
Extract the 0.3s magic sleep into a named constant explaining why that
duration is chosen (feed_wdt re-dispatches every ~3 ms; 300 ms gives
~100 opportunities). Fix the idle-write check to snapshot AFTER the
clear instead of before it, so writes still in-flight from the error
phase don't inflate the delta.
2026-04-11 16:32:15 -10:00
J. Nick Koston 542b1fc7f3 [tests] Add set→clear→re-set round-trip check for status_led
Verifies that after clearing all status flags, re-setting a flag makes
status_led_light resume writing to its output. Guards against a future
idle optimization (like #15642) where status_led disables its own
loop() when idle: if the re-enable path were broken, the second set
would not produce writes.

Also checks that writes STOP after all flags are cleared (counter
should not keep growing), proving status_led_light correctly stops
blinking in steady state.
2026-04-11 16:28:54 -10:00
J. Nick Koston 424f1c7b0a [core] Rename any_component_has_status_flag and add integration tests
Drop the trailing underscore from any_component_has_status_flag now
that the method is public. Trailing underscores in the codebase are
reserved for protected/private members per clang-tidy naming rules,
which caused a CI failure on the previously-named public helper.

Add integration tests covering:
- Single-component status_set/clear for warning and error
- Multi-component OR semantics (both clear orders)
- Warning and error independence
- End-to-end proof that status_led_light::loop() reads App.app_state_
  and writes its output when the bits are set (via a fake template
  output whose write_action bumps a counter exposed as a sensor)
2026-04-11 16:20:05 -10:00
J. Nick Koston 09741dc97f Merge remote-tracking branch 'upstream/ota-disable-loop-when-idle' into integration 2026-04-10 17:29:50 -10:00
J. Nick Koston af8fd1d060 [esphome.ota] Fix cleanup race, tighten error message and comments, add tests
Addresses copilot review on #15636.

1. Fix cleanup_connection_() race with queued listener events.
   While an OTA session was active, a second incoming connection would
   fire esphome_socket_event_callback → esphome_wake_ota_component_any_context,
   which sets pending_enable_loop_ on the (still-active) OTA component.
   enable_pending_loops_() only scans the inactive section, so that flag
   goes invisible. When cleanup_connection_() then called disable_loop(),
   the component dropped to LOOP_DONE with a stale pending flag and
   nothing to re-trigger the scan — the queued client sat forever until
   some unrelated socket activity woke the main loop.

   Fix: don't call disable_loop() from cleanup_connection_(). loop() has
   the idempotent idle check at its top; one more dispatch after cleanup
   is cheap and guarantees we re-read server_->ready() and either accept
   the queued client or disable cleanly.

2. Tighten the multi-port error message. Merging is fine — the constraint
   is single-port. Reworded: "Only a single port is supported for 'ota'
   'platform: esphome'. Got ports [...]. Consolidate onto a single port;
   configs sharing a port are merged automatically."

3. Comment drift: three call sites and the fast-select extern declaration
   still referred to enable_loop_soon_any_context() and implied the hook
   wakes the main loop. Updated to reflect the current mechanism (sets
   pending-enable flags only; callers have already woken the main loop).
   Also clarified that esphome_wake_ota_component_any_context fires on
   every RCVPLUS event across all monitored sockets, so false wakes are
   expected and OTA::loop() disables itself again when idle.

4. Added tests/component_tests/ota/test_esphome_ota.py covering
   ota_esphome_final_validate: single instance accepted, same-port
   configs merge, different-port configs rejected with cv.Invalid,
   non-esphome platforms unaffected.
2026-04-10 14:29:32 -10:00
J. Nick Koston 6f4a502dc2 Merge remote-tracking branch 'origin/optimize-format-hex' into integration 2026-04-09 21:51:04 -10:00
J. Nick Koston 1262b98fa1 Merge remote-tracking branch 'upstream/rp2040-ethernet-lwiplock-irq-defer' into integration 2026-04-09 21:48:20 -10:00
J. Nick Koston 17209df7b5 [mcp23016] Add interrupt pin support (#15616) 2026-04-10 15:29:52 +12:00
J. Nick Koston 9cf9b02ba2 [pca6416a] Add interrupt pin support (#15614) 2026-04-10 15:29:26 +12:00
J. Nick Koston c90fa2378a [tca9555] Add interrupt pin support (#15613) 2026-04-10 15:29:00 +12:00
J. Nick Koston fd69a8e380 Merge remote-tracking branch 'upstream/dev' into integration 2026-04-09 11:56:18 -10:00
J. Nick Koston 6fe6bf79d4 Address Copilot review: fix namespace and custom separator test 2026-04-09 09:30:06 -10:00
J. Nick Koston a941422fa6 Add unit tests for format_hex helpers 2026-04-09 08:36:40 -10:00
J. Nick Koston 03db32d045 [core] Add CodSpeed benchmarks for hot helper functions (#15593) 2026-04-09 07:48:32 -10:00
J. Nick Koston 8e02d0a20e [fan] Store preset mode vector on Fan entity to eliminate heap allocation (#15209) 2026-04-09 10:25:37 +12:00
J. Nick Koston faa05031a7 [climate] Store custom mode vectors on Climate entity to eliminate heap allocation (#15206) 2026-04-09 10:25:29 +12:00
J. Nick Koston 576d89a82a [api] Peel first write iteration, inline socket writes, zero-gap batch encoding (#15063) 2026-04-08 11:05:53 -10:00
J. Nick Koston d9ebe1e1e7 Merge branch 'crash-handler-dual-core' into integration 2026-04-08 09:34:33 -10:00
Clyde Stubbs 7de060ed55 [lvgl] Fix args for lambda in set_rotation action (#15555) 2026-04-09 07:22:24 +12:00
J. Nick Koston a72609e640 [yaml] Resolve top-level IncludeFile in load_yaml (#15557) 2026-04-08 08:39:14 -04:00
J. Nick KostonandCopilot a8b7c7a4ac [core] Add TemplatableFn for 4-byte function-pointer templatable storage (#15545)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-08 08:38:00 -04:00
J. Nick Koston ca61dc5d69 Merge remote-tracking branch 'upstream/test_merge_to_beta_again' into integration 2026-04-07 22:48:15 -10:00
J. Nick Koston 7ba5398418 Merge remote-tracking branch 'upstream/templatable-value-specialize' into integration 2026-04-07 22:48:10 -10:00
J. Nick Koston 618ee77e43 Merge remote-tracking branch 'upstream/fix-test-build-include-file' into test_merge_to_beta_again 2026-04-07 22:47:14 -10:00
J. Nick Koston 67f26b6cf7 fix 8266 flash string opt 2026-04-07 22:46:31 -10:00
J. Nick Koston 5079c86d1d Merge remote-tracking branch 'upstream/templatable-value-specialize' into integration 2026-04-07 21:51:20 -10:00
J. Nick Koston b53f1c694b Add test for top-level !include resolution in load_yaml 2026-04-07 21:36:49 -10:00
J. Nick Koston fe17c86f58 now fix is always the same for unwrapped 2026-04-07 21:32:20 -10:00
J. Nick Koston e7a33a93eb Merge branch 'dev' of https://github.com/esphome/esphome into templatable-value-specialize 2026-04-07 19:27:41 -10:00
J. Nick Koston 2a79f91947 Merge remote-tracking branch 'upstream/dev' into integration 2026-04-07 19:14:39 -10:00
J. Nick Koston f278e12841 Merge remote-tracking branch 'upstream/templatable-value-specialize' into integration 2026-04-07 19:14:36 -10:00
Jonathan Swoboda 9bf53e0ab8 [esp32_hosted] Add SPI transport and SDIO 1-bit bus width support (#15551) 2026-04-08 03:17:58 +00:00
J. Nick Koston 0dfd906cb5 Merge branch 'dev' of https://github.com/esphome/esphome into templatable-value-specialize 2026-04-07 17:09:39 -10:00
J. Nick Koston e658a8559e [ethernet] Add W6100 and W6300 support for RP2040 (#15543) 2026-04-07 16:57:05 -10:00
J. Nick Koston 4db82877af [yaml] Add IncludeFile representer to ESPHomeDumper (#15549) 2026-04-07 16:27:11 -10:00
J. Nick Koston 2d9e03352c Merge remote-tracking branch 'upstream/fix-include-file-dumper' into templatable-value-specialize 2026-04-07 16:11:07 -10:00
J. Nick Koston 32fcbc8823 address bot comments 2026-04-07 16:10:40 -10:00
J. Nick Koston a9ce676151 Merge remote-tracking branch 'upstream/fix-include-file-dumper' into templatable-value-specialize 2026-04-07 16:07:04 -10:00
J. Nick Koston 6d44b37297 Merge branch 'dev' of https://github.com/esphome/esphome into templatable-value-specialize 2026-04-07 16:05:15 -10:00
J. Nick Koston 1d982c47cc [yaml] Add tests for IncludeFile YAML dumper representer 2026-04-07 16:02:34 -10:00
J. Nick Koston de7f081799 [emontx] Fix uart package name in tests (#15546) 2026-04-07 21:52:37 -04:00
J. Nick Koston dc9cf44eb1 Merge remote-tracking branch 'upstream/dev' into templatable-value-specialize 2026-04-07 15:48:17 -10:00
Clyde Stubbs 88f4067dd6 [lvgl] Implement rotation with PPA (#15453) 2026-04-08 13:19:29 +12:00
d20d613c1d [substitutions] !include ${filename}, Substitutions in include filename paths (package refactor part 5) (#12213)
Co-authored-by: J. Nick Koston <nick@home-assistant.io>
Co-authored-by: J. Nick Koston <nick@koston.org>
2026-04-07 15:12:55 -10:00
Clyde Stubbs 801f3fadaa [epaper_spi] Fix deep sleep command (#15544) 2026-04-08 13:00:39 +12:00
J. Nick Koston 0ec4e98374 [core] Expand = delete to catch inconvertible return types, add to_exp test
- TemplatableFn = delete now catches both stateful lambdas AND stateless
  lambdas with inconvertible return types (e.g., string -> int)
- Add test for to_exp with non-string output_type (lambda-wraps result)
2026-04-07 14:54:41 -10:00
J. Nick Koston 11c24324d5 Merge remote-tracking branch 'upstream/templatable-value-specialize' into integration 2026-04-07 14:31:35 -10:00
J. Nick Koston 7d497e6b52 Merge remote-tracking branch 'upstream/dev' into integration 2026-04-07 14:31:13 -10:00