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