Nimbin[12]?Embedded / esp_garden / commits / 8b922ef

esp_garden git · master

Distributed ESP sensor and actuator system (garden)

esp32 esp-idf iot sensors c++ sql · first commit 2025-10-15 · last commit 2026-01-20 (8 months ago) · synced 3 days ago · upstream: git.ide3.de/hsnr/mic/esp_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.gz

Fix send prep time from sensor to server

Chris esp · 2025-11-04 16:44 · 8b922ef9799a580f96c69330bf62e495ae733506

 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;