Skip to content

Add SNTP-synced system time#25

Open
noahp wants to merge 5 commits into
noahp/heartbeat-ledfrom
noahp/sntp
Open

Add SNTP-synced system time#25
noahp wants to merge 5 commits into
noahp/heartbeat-ledfrom
noahp/sntp

Conversation

@noahp

@noahp noahp commented Mar 5, 2026

Copy link
Copy Markdown
Collaborator

Also add re-triggering wifi connect if not connected, makes the connection stay up much more reliably.

noahp added 5 commits March 1, 2026 20:04
Settings for saving wifi creds, enable auto-connect.

Also fix TLS on Zephyr v4.3.0 at least (PSA might work better on v4.4
dev?), by disabling PSA.
Periodically check if the Wi-Fi connection is down, but should be up:

- run a scan
- if an SSID is in scan results and is in stored Wi-Fi credentials,
  and Wi-Fi is not connected, start a watchdog timeout
- if the timeout elapses, reboot with a custom reboot reason (in the
  "expected" classification, so this does not impact stability score)

Also add a new custom metric `wifi_scan_result_count_max`, just for
curiousity.
Surprisingly involve TBH, but it works! Tested on ESP32-C6 only for now.
Also add re-triggering wifi connect if not connected, makes the
connection stay up much more reliably.
@noahp noahp requested a review from a team as a code owner March 5, 2026 18:28

@gminn gminn left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

great idea!

Comment thread src/sntp_time_sync.c
Comment on lines +21 to +25
//! - On every SNTP sync, a (unix_sec, counter_ticks) anchor is written into a
//! struct placed in RTC slow RAM via RTC_NOINIT_ATTR (esp_attr.h section
//! ".rtc_noinit"). RTC slow RAM is a separate hardware region that is NOT
//! cleared on soft resets, and is not part of the .data/.bss segment, so it
//! is immune to FOTA updates changing the main RAM layout.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

very cool that we can take advantage of this

MEMFAULT_METRICS_KEY_DEFINE(wifi_scan_result_count_max, kMemfaultMetricType_Unsigned)

// Number of successful SNTP time synchronizations in this heartbeat period
MEMFAULT_METRICS_KEY_DEFINE(sntp_sync_count, kMemfaultMetricType_Unsigned)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: sntp_sync_successful_count would be a bit more specific here (granted, I might not think this if I wasn't biased with sync_success/ sync_failure device vitals 😅)

@noahp noahp force-pushed the noahp/heartbeat-led branch 2 times, most recently from dfa3379 to 934b0fa Compare April 13, 2026 18:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants