Nimbin[12]?Embedded / esp_garden / commits / 0874b2a

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 fixed MAC

Christian Immanuel · 2025-10-26 13:56 · 0874b2a5f64bd660e495d223ac0de8d40161b8e8

 client_sensor/ClientSensor.cpp | 31 +++++++++++++++++--------------
 globals.cpp                    | 10 +++++-----
 globals.h                      |  2 +-
 3 files changed, 23 insertions(+), 20 deletions(-)

diff --git a/client_sensor/ClientSensor.cpp b/client_sensor/ClientSensor.cpp
index c0982ee..eb8fd6c 100644
--- a/client_sensor/ClientSensor.cpp
+++ b/client_sensor/ClientSensor.cpp
@@ -6,9 +6,6 @@ volatile bool response_received = false;
 volatile bool send_process_complete = false;
 volatile bool send_response_process_complete = false;
 
-
-bool pump_unreachable = true;
-
 uint8_t config_request_attempts = 0;
 
 // ----------------------------------------------------------------------------
@@ -138,7 +135,7 @@ void on_DataSent(const wifi_tx_info_t* info, esp_now_send_status_t status) {
     }
 
     if (status == ESP_NOW_SEND_SUCCESS)
-        DBG_PRINTLN(" queued successfully (waiting for ACK)");
+        DBG_PRINTLN(" queued successfully (waiting for Response)");
     else
         DBG_PRINTLN(" failed to queue!");
 }
@@ -173,7 +170,7 @@ void on_DataRecvResponse(const esp_now_recv_info *info, const uint8_t *data, int
     memcpy(msg, data, copylen);
     msg[copylen] = '\0';
 
-    DBG_PRINTF("ACK received: %s\n", msg);
+    DBG_PRINTF("Response received: %s\n", msg);
 
     const char *time_ptr = strstr(msg, "time:");
     if (time_ptr) {
@@ -182,7 +179,7 @@ void on_DataRecvResponse(const esp_now_recv_info *info, const uint8_t *data, int
         settimeofday(&tv, nullptr);
         rtc_synced_with_server = true;
         response_received = true;
-        DBG_PRINTLN("System time updated from server (ACK).");
+        DBG_PRINTLN("System time updated from server (Response).");
     }
 
     const char *cfg_ptr = msg;
@@ -317,7 +314,7 @@ bool send_AndWaitResponse(const uint8_t* peer, const char* message, uint32_t tim
     }
 
     if (!response_received) {
-        DBG_PRINT("No ACK received from ");
+        DBG_PRINT("No Response received from ");
         printMac(peer);
         return false;
     }
@@ -341,7 +338,7 @@ bool request_TimeSync(uint32_t timeout_ms) {
     const uint8_t* server_mac = PEER_SERVER;
     unsigned long start = millis();
     esp_now_register_recv_cb(on_DataRecv);
-    send_Message(server_mac, "time?sensor");
+    send_Message(server_mac, "time?");
     while (millis() - start < timeout_ms) {
         if (rtc_synced_with_server) return true;
         delay(50);
@@ -373,7 +370,9 @@ uint16_t get_CurrentMinutes() {
 // ----------------------------------------------------------------------------
 
 
-bool is_TimeToReadSensor(SensorConfig_s& p) {
+bool is_TimeToReadSensor(size_t config_id) {
+    SensorConfig_s& p = sensor_configs[config_id];
+
     DBG_PRINTF("check is_TimeToReadSensor: %s\n", p.sensor_name);
 
     if (!p.is_active) {
@@ -483,12 +482,14 @@ char sensor_config_message[256] = { 0 };
 
 void on_DataRecvSensorConfig(const esp_now_recv_info* info, const uint8_t* data, int len) {
     if (!info || !data || len <= 0) return;
+    printMac(info->src_addr);
     if (memcmp(info->src_addr, PEER_SERVER, 6) != 0) return;
 
     int copylen = len < (int)sizeof(sensor_config_message) - 1 ? len : (int)sizeof(sensor_config_message) - 1;
     memcpy(sensor_config_message, data, copylen);
     sensor_config_message[copylen] = '\0';
 
+    DBG_PRINTF("%s\n", sensor_config_message);
     if (strncmp(sensor_config_message, "cfg:", 4) != 0) return;
 
     sensor_config_received = true;
@@ -580,7 +581,7 @@ bool request_SensorConfig(const char* sensor_name) {
     uint8_t new_mac[6];
     sscanf(tokens[7], "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",
                 &new_mac[0], &new_mac[1], &new_mac[2], &new_mac[3], &new_mac[4], &new_mac[5]);
-    */
+                */
     cfg->delay_ms = atoi(tokens[7]);
     cfg->use_time = atoi(tokens[8]) != 0;
 
@@ -691,9 +692,12 @@ void get_AllSensorConfigs() {
 // ----------------------------------------------------------------------------
 
 
-void send_DataToPeer(SensorConfig_s& p, uint32_t value) {
+void send_DataToPeer(size_t config_id, uint32_t value) {
     char message[64];
 
+
+    SensorConfig_s& p = sensor_configs[config_id];
+
     DBG_PRINTF("send_DataToPeer: %s\n", p.sensor_name);
 
     snprintf(message, sizeof(message), "%s:%u:%lld", p.sensor_name, value, p.last_sensor_read);
@@ -703,9 +707,8 @@ void send_DataToPeer(SensorConfig_s& p, uint32_t value) {
     send_response_process_complete = false;
     if (!send_AndWaitResponse(p.pump_mac, message)) {
         DBG_PRINTLN("Delivery failed or peer offline!");
-        pump_unreachable = true;
         send_response_process_complete = true;
-    } else pump_unreachable = false;
+    }
 
     while (!send_response_process_complete) delay(100);
 
@@ -723,7 +726,7 @@ void send_DataToPeer(SensorConfig_s& p, uint32_t value) {
 void send_NextSensorReadToPeer(const uint8_t* mac, int64_t unix_time) {
     char message[64];
 
-    snprintf(message, sizeof(message), "next_read:%lld:reached_pump:%d", unix_time, !pump_unreachable);
+    snprintf(message, sizeof(message), "next_read:%lld", unix_time);
 
     DBG_PRINT("Sending to peer: ");
     printMac(mac);
diff --git a/globals.cpp b/globals.cpp
index 8e1e5b6..b97506e 100644
--- a/globals.cpp
+++ b/globals.cpp
@@ -19,12 +19,12 @@ bool g_received_ok_from_server = false;
 const uint32_t g_min_sleep_time = 60000;
 RTC_DATA_ATTR bool all_init_configs_received = false;
 
-constexpr uint8_t PEER_SERVER[6] = {0x55,0xde,0x67,0x2a,0x1e,0x29};
-constexpr uint8_t PEER_PUMP[6]   = {0x55,0xc1,0x79,0x1e,0xed,0x18};
+constexpr uint8_t PEER_SERVER[6] = {0xc2,0xde,0x67,0x2a,0x1e,0x29};
+constexpr uint8_t PEER_PUMP[6]   = {0xc2,0xc1,0x79,0x1e,0xed,0x18};
 
-RTC_DATA_ATTR SensorConfig_s sensor_configs[] = {
-    {"moisture_1", true, 11, 10, "pump_1", 0, 0, PEER_PUMP,  90000, true,  {465, 466}, 2, 0, 0},
-    {"moisture_2", true, 11, 10, "pump_2", 0, 0, PEER_PUMP, 120000, false, {0}, 0, 0, 0}
+SensorConfig_s sensor_configs[] = {
+    {"moisture_1", true, 11, 10, "pump_1", 0, 0, {0},  90000, true,  {465, 466}, 2, 0, 0},
+    {"moisture_2", true, 11, 10, "pump_2", 0, 0, {0}, 120000, false, {0}, 0, 0, 0}
 };
 
 uint8_t config_request_attempts_max = 3;
diff --git a/globals.h b/globals.h
index f63fe13..5816a53 100644
--- a/globals.h
+++ b/globals.h
@@ -62,7 +62,7 @@ struct SensorConfig_s {
     char notification_name[32];
     int  pumping_delay_sec;
     int  pumping_duration;
-    const uint8_t* pump_mac;       // {0x51,0xc1,0x79,0x1e,0xed,0x18}
+    uint8_t pump_mac[6];       // {0x51,0xc1,0x79,0x1e,0xed,0x18}
     int  delay_ms;
     bool use_time;
     uint16_t times[8];