esp_garden git · master
Distributed ESP sensor and actuator system (garden)
C++ 70.7% Markdown 18% C 10.7%git clone https://git.christianimmanuel.de/embedded/esp_garden.gitwget https://git.christianimmanuel.de/embedded/esp_garden/archive/esp_garden.tar.gzFix send prep time from sensor to server
client_sensor/main/main.cpp | 44 +++++++++++++++++++++++--------------------- server/main/Server.cpp | 4 ++-- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/client_sensor/main/main.cpp b/client_sensor/main/main.cpp index 208b98b..61c9e2a 100644 --- a/client_sensor/main/main.cpp +++ b/client_sensor/main/main.cpp @@ -16,6 +16,28 @@ extern "C" esp_err_t esp_base_mac_addr_set(const uint8_t mac[6]); RTC_DATA_ATTR uint32_t fake_value_to_send = 0; +// ---------------------------------------------------------------------------- +// Fix time after power loss and no server connection +// ---------------------------------------------------------------------------- +void restore_TimeBackup() { + int64_t stored_epoch_ref = 0; + int64_t stored_uptime_ref = 0; + // load persisted values from NVS + load_time_reference(&stored_epoch_ref, &stored_uptime_ref); + struct timeval tv; + gettimeofday(&tv, NULL); + int64_t now_unix = tv.tv_sec; + int64_t now_uptime = esp_timer_get_time() / 1000000LL; + if (now_unix < stored_epoch_ref && stored_epoch_ref > 100000 && stored_uptime_ref > 0) { + int64_t reconstructed = stored_epoch_ref + (now_uptime - stored_uptime_ref); + struct timeval new_tv = { .tv_sec = reconstructed, .tv_usec = 0 }; + settimeofday(&new_tv, NULL); + ESP_LOGW("restore_TimeBackup", "System time restored from reference: %lld", get_CurrentUnix()); + ESP_LOGW("restore_TimeBackup", "Resetting next sensor reads!"); + set_AllNextSensorReads(); + } +} + // ---------------------------------------------------------------------------- // Sensor task loop // ---------------------------------------------------------------------------- @@ -49,7 +71,7 @@ void sensor_loop(void*) { // tell server when next read will happen int64_t next_read = get_NextSensorReadsUnixTime(); - send_NextSensorReadToPeer(PEER_SERVER, next_read); + send_NextSensorReadToPeer(PEER_SERVER, next_read - (g_setup_duration + g_wakeup_earlier_sensor)/1000); sleep_UntilNextSend(next_read); @@ -60,26 +82,6 @@ void sensor_loop(void*) { } } -void restore_TimeBackup() { - // save time over power loss - int64_t stored_epoch_ref = 0; - int64_t stored_uptime_ref = 0; - // load persisted values from NVS - load_time_reference(&stored_epoch_ref, &stored_uptime_ref); - struct timeval tv; - gettimeofday(&tv, NULL); - int64_t now_unix = tv.tv_sec; - int64_t now_uptime = esp_timer_get_time() / 1000000LL; - if (now_unix < stored_epoch_ref && stored_epoch_ref > 100000 && stored_uptime_ref > 0) { - int64_t reconstructed = stored_epoch_ref + (now_uptime - stored_uptime_ref); - struct timeval new_tv = { .tv_sec = reconstructed, .tv_usec = 0 }; - settimeofday(&new_tv, NULL); - ESP_LOGW("restore_TimeBackup", "System time restored from reference: %lld", get_CurrentUnix()); - ESP_LOGW("restore_TimeBackup", "Resetting next sensor reads!"); - set_AllNextSensorReads(); - } -} - // ---------------------------------------------------------------------------- // ESP-IDF entry point // ---------------------------------------------------------------------------- diff --git a/server/main/Server.cpp b/server/main/Server.cpp index a9b5075..ac9269f 100644 --- a/server/main/Server.cpp +++ b/server/main/Server.cpp @@ -296,7 +296,7 @@ void sleep_UntilNextReceive() { if (next_connection_unix < now_sec) return; - ESP_LOGI(TAG, "Nex: %lld\tNow: %lld", next_connection_unix, now_sec); + ESP_LOGI(TAG, "Nex: %lld || Now: %lld", next_connection_unix, now_sec); next_connection_unix = 0; @@ -308,7 +308,7 @@ void sleep_UntilNextReceive() { return; } - uint32_t prep_time_ms = g_setup_duration + g_wakeup_earlier_sensor; + uint32_t prep_time_ms = g_setup_duration + g_wakeup_earlier_server; uint32_t sleep_time_ms = (min_delay_ms > prep_time_ms) ? (min_delay_ms - prep_time_ms) : 0;