This commit is contained in:
Manticore 2025-03-12 16:52:58 +05:30
parent 1d457bb387
commit 55d997c072
4 changed files with 176 additions and 54 deletions

View File

@ -24,6 +24,7 @@
#include "data_processing.h" #include "data_processing.h"
#include "ota.h" #include "ota.h"
#include "hmi.h" #include "hmi.h"
#include "esp_mac.h"
#define LOG_LOCAL_LEVEL ESP_LOG_INFO #define LOG_LOCAL_LEVEL ESP_LOG_INFO
#include "esp_log.h" #include "esp_log.h"
@ -95,6 +96,14 @@ extern uint32_t g_McuUpdate;
extern uint32_t g_ModemUpdate; extern uint32_t g_ModemUpdate;
extern uint32_t g_version; extern uint32_t g_version;
/// mqtt added ///
bool qmtopen_fail = false;
int qmtopen_retries = 0;
#define QMTOPEN_RETRY_NUM 3
/// mqtt added end ///
typedef enum typedef enum
{ {
COMMS_EVENT_START, COMMS_EVENT_START,
@ -112,6 +121,9 @@ typedef enum
COMMS_STATE_WIFI_CONNECT, COMMS_STATE_WIFI_CONNECT,
COMMS_STATE_WIFI_POST_REQ, COMMS_STATE_WIFI_POST_REQ,
COMMS_STATE_WIFI_GET_REQ, COMMS_STATE_WIFI_GET_REQ,
COMMS_STATE_WAIT_MQTT_CONNECT,
COMMS_STATE_WAIT_MQTT_PUB,
COMMS_STATE_WAIT_MQTT_CLOSE,
COMMS_STATE_WAIT_HTTP_SEND_CONFIG_FLAGS, COMMS_STATE_WAIT_HTTP_SEND_CONFIG_FLAGS,
COMMS_STATE_WAIT_HTTP_GET_CONFIG_FLAGS, COMMS_STATE_WAIT_HTTP_GET_CONFIG_FLAGS,
COMMS_STATE_WAIT_HTTP_POST_REQ, COMMS_STATE_WAIT_HTTP_POST_REQ,
@ -217,6 +229,9 @@ static const char* state_str(comms_state_t s)
case COMMS_STATE_WIFI_CONNECT:return "WIFI_CONNECT"; case COMMS_STATE_WIFI_CONNECT:return "WIFI_CONNECT";
case COMMS_STATE_WIFI_POST_REQ:return "WIFI_POST_REQ"; case COMMS_STATE_WIFI_POST_REQ:return "WIFI_POST_REQ";
case COMMS_STATE_WIFI_GET_REQ:return "WIFI_GET_REQ"; case COMMS_STATE_WIFI_GET_REQ:return "WIFI_GET_REQ";
case COMMS_STATE_WAIT_MQTT_CONNECT:return "WAIT_MQTT_CONNECT";
case COMMS_STATE_WAIT_MQTT_PUB:return "WAIT_MQTT_PUB";
case COMMS_STATE_WAIT_MQTT_CLOSE:return "WAIT_MQTT_CLOSE";
case COMMS_STATE_WAIT_HTTP_SEND_CONFIG_FLAGS:return "WAIT_HTTP_SEND_CONFIG_FLAGS"; case COMMS_STATE_WAIT_HTTP_SEND_CONFIG_FLAGS:return "WAIT_HTTP_SEND_CONFIG_FLAGS";
case COMMS_STATE_WAIT_HTTP_GET_CONFIG_FLAGS:return "WAIT_HTTP_GET_CONFIG_FLAGS"; case COMMS_STATE_WAIT_HTTP_GET_CONFIG_FLAGS:return "WAIT_HTTP_GET_CONFIG_FLAGS";
case COMMS_STATE_WAIT_HTTP_POST_REQ:return "WAIT_HTTP_POST_REQ"; case COMMS_STATE_WAIT_HTTP_POST_REQ:return "WAIT_HTTP_POST_REQ";
@ -405,7 +420,86 @@ static void http_op_cb(int status)
} }
} }
////////////////////////////////////////////////mqtt////////////////////////////////
static void mqtt_connect_cb(int status)
{
comms.poll_timer = true;
if (ESP_OK == status)
{
/* connected */
}
else
{
/* Nope - back idle */
ESP_LOGW(TAG,"MQTT connection failed.\r\n");
/*if open fail flag is set then mqtt connection is closed
and then attempt another mqtt sequence*/
if(qmtopen_fail){
//qmtopen_fail = false;
ESP_LOGI(TAG, "Closing connection\r\n");
//GPIO_ResetBits(GPIO_Pin_22);
//heartbeat_time = 5;
transition(COMMS_STATE_WAIT_MQTT_PUB);
}
else{
transition(COMMS_STATE_GOING_IDLE);
}
}
// update_relay_led();
}
static void mqtt_pub_cb(int status)
{
comms.poll_timer = true;
if (ESP_OK == status)
{
/* connected */
}
else
{
/* Nope - back to idle */
ESP_LOGW(TAG, "MQTT publish failed.\r\n");
transition(COMMS_STATE_GOING_IDLE);
}
// update_relay_led();
}
static void mqtt_close_cb(int status)
{
comms.poll_timer = true;
if (ESP_OK == status)
{
}
else
{
if(qmtopen_fail){
if(qmtopen_retries >= QMTOPEN_RETRY_NUM){
qmtopen_retries = 0;
qmtopen_fail = false;
ESP_LOGI(TAG, "MQTT open retries exceeded. bypass SP1\r\n");
transition(COMMS_STATE_WAIT_MQTT_CLOSE);
}
else{
qmtopen_fail = false;
ESP_LOGW(TAG, "MQTT close failed.\r\n");
transition(COMMS_STATE_WAIT_NET_CONNECT);
}
}
}
}
///////////////////////////////////////////end mqtt ////////////////////////////////
static void http_post_op_cb(int status) static void http_post_op_cb(int status)
{ {
@ -1219,7 +1313,7 @@ static int state_machine(comms_event_t evt)
/* Reset the backup flag */ /* Reset the backup flag */
comms_do_wifi_backup = false; comms_do_wifi_backup = false;
comms_do_cell_backup = false; // comms_do_cell_backup = false;
/* Status is ERROR until cleared by successful completion. */ /* Status is ERROR until cleared by successful completion. */
comms.last_cycle_status = COMMS_STATUS_ERROR; comms.last_cycle_status = COMMS_STATUS_ERROR;
@ -1335,11 +1429,7 @@ static int state_machine(comms_event_t evt)
/* Set the posting_failed to be true */ /* Set the posting_failed to be true */
comms_posting_failed = true; comms_posting_failed = true;
/* Do cellular backup for the check-in process */
if(COMMS_OVER_WIFI_CELL_BACKUP)
{
comms_do_cell_backup = true;
}
/* Do a transition to "GOING_IDLE" state */ /* Do a transition to "GOING_IDLE" state */
transition(COMMS_STATE_GOING_IDLE); transition(COMMS_STATE_GOING_IDLE);
@ -2029,6 +2119,43 @@ static int state_machine(comms_event_t evt)
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
char* get_mac(void){
uint8_t mac[6]; // Buffer to store MAC address
esp_efuse_mac_get_default(mac);
// Print original MAC in hex format
printf("MAC Address (Hex): %02X:%02X:%02X:%02X:%02X:%02X\n",
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
// Convert MAC address to a decimal string
char full_mac_decimal[20]; // Buffer for full decimal MAC
int len = snprintf(full_mac_decimal, sizeof(full_mac_decimal), "%d%d%d%d%d%d",
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
// Ensure exactly 15 characters by padding with leading zeros if necessary
char mac_15[16]; // 15 characters + null terminator
if (len < 15) {
// Fill with leading zeros
memset(mac_15, '0', 15 - len);
strcpy(mac_15 + (15 - len), full_mac_decimal);
} else {
// Truncate if necessary
strncpy(mac_15, full_mac_decimal, 15);
}
mac_15[15] = '\0'; // Null-terminate
// Print the final 15-character decimal MAC address
printf("Formatted MAC (15 Characters): %s\n", mac_15);
// strncpy(MAC_ID, mac_15, 15);
// printf("Formatted MAC (15 Characters): %s\n", MAC_ID);
return mac_15;
}
/* Initialize. */ /* Initialize. */
int comms_init(void) int comms_init(void)
{ {

View File

@ -281,4 +281,7 @@ bool comms_is_started(void);
*/ */
int comms_get_status(void); int comms_get_status(void);
// Get MAC id
char* get_mac(void);
#endif /* MAIN_COMMS_H_ */ #endif /* MAIN_COMMS_H_ */

View File

@ -34,11 +34,14 @@
#include "lwip/ip4_addr.h" #include "lwip/ip4_addr.h"
#include "wifi_Init.h" #include "wifi_Init.h"
#include "nvm.h" #include "nvm.h"
#include "wifi_OTA.h"
static const char* TAG = "DATA"; static const char* TAG = "DATA";
#define LOG_LOCAL_LEVEL ESP_LOG_INFO #define LOG_LOCAL_LEVEL ESP_LOG_INFO
#include "esp_log.h" #include "esp_log.h"
#define IMEI "353165803930522"
extern bool isCycleCompleted; extern bool isCycleCompleted;
extern uint8_t comms_mode; extern uint8_t comms_mode;
extern comms_medium_t comms_medium; extern comms_medium_t comms_medium;
@ -2480,17 +2483,22 @@ esp_err_t data_parsing_config(char *buff,int len){
esp_err_t retval = ESP_FAIL; esp_err_t retval = ESP_FAIL;
char *ret = NULL; char *ret = NULL;
char server_request[11]={0}; char server_request[11]={0};
//char setting_req[]="settings"; // char setting_req[]="settings";
ret = strstr(buff, (const char*)"settings"); // ret = strstr(buff, (const char*)"settings");
data_parse_String_value(server_request,"request",buff); // data_parse_String_value(server_request,"request",buff);
if( ret != NULL ){ // if( ret != NULL ){
if(1){
//retval = data_parse_uint_value(&g_server_time,"time", buff); //retval = data_parse_uint_value(&g_server_time,"time", buff);
retval = data_parse_uint_value(&g_ID,"id", buff); retval = data_parse_uint_value(&g_ID,"id", buff);
retval = data_parse_uint_value(&g_SensorInt,"SensorInt", buff); retval = data_parse_uint_value(&g_SensorInt,"SensorInt", buff);
retval = data_parse_uint_value(&g_ConfigUpdate,"ConfigUpdate", buff); retval = data_parse_uint_value(&g_ConfigUpdate,"ConfigUpdate", buff);
retval = data_parse_uint_value(&g_McuUpdate,"McuUpdate", buff); retval = data_parse_uint_value(&g_McuUpdate,"McuUpdate", buff);
retval = data_parse_uint_value(&g_ModemUpdate,"ModemUpdate", buff); retval = data_parse_uint_value(&g_ModemUpdate,"ModemUpdate", buff);
ESP_LOGI(TAG, "ConfigUpdate: %ld McuUpdate: %ld ModemUpdate: %ld", g_ConfigUpdate, g_McuUpdate, g_ModemUpdate); ESP_LOGI(TAG, "ConfigUpdate: %ld McuUpdate: %ld ModemUpdate: %ld", g_ConfigUpdate, g_McuUpdate, g_ModemUpdate);
if(g_McuUpdate == 1)
wifi_ota_start_firmware_update(IMEI);
} }
else else
{ {

View File

@ -34,6 +34,8 @@
#include <sys/time.h> #include <sys/time.h>
#include "rtc.h" #include "rtc.h"
#include "data_processing.h"
@ -85,37 +87,6 @@ void extract_mcu_update(const char *json_data, char *output) {
} }
} }
void get_mac(void){
uint8_t mac[6]; // Buffer to store MAC address
esp_efuse_mac_get_default(mac);
// Print original MAC in hex format
printf("MAC Address (Hex): %02X:%02X:%02X:%02X:%02X:%02X\n",
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
// Convert MAC address to a decimal string
char full_mac_decimal[20]; // Buffer for full decimal MAC
int len = snprintf(full_mac_decimal, sizeof(full_mac_decimal), "%d%d%d%d%d%d",
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
// Ensure exactly 15 characters by padding with leading zeros if necessary
char mac_15[16]; // 15 characters + null terminator
if (len < 15) {
// Fill with leading zeros
memset(mac_15, '0', 15 - len);
strcpy(mac_15 + (15 - len), full_mac_decimal);
} else {
// Truncate if necessary
strncpy(mac_15, full_mac_decimal, 15);
}
mac_15[15] = '\0'; // Null-terminate
// Print the final 15-character decimal MAC address
printf("Formatted MAC (15 Characters): %s\n", mac_15);
strncpy(MAC_ID, mac_15, 15);
printf("Formatted MAC (15 Characters): %s\n", MAC_ID);
}
static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data) static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)
{ {
@ -210,13 +181,22 @@ void app_main(void)
/* Create the UART tasks for both UART0 and UART1 */ /* Create the UART tasks for both UART0 and UART1 */
uart_create_rx_tasks(); uart_create_rx_tasks();
get_mac(); char mac[15];
snprintf(mac,sizeof(mac), get_mac());
ESP_LOGI(TAG, "======> Mac id: %s", mac);
// Get firmwae version // Get firmwae version
const esp_app_desc_t *app_desc = esp_app_get_description(); const esp_app_desc_t *app_desc = esp_app_get_description();
ESP_LOGI(TAG, "Firmware Version: %s", app_desc->version); ESP_LOGI(TAG, "Firmware Version: %s", app_desc->version);
while(1){
vTaskDelay(100 / portTICK_PERIOD_MS);
// get_time();
// ESP_LOGI("TIME", "Current time =====> %s", buff);
ESP_LOGI(TAG,"====>>> Test data <<<=========");
}
/* /*
uint8_t* test_str[] = {0xA5,0x05,0x4C,0x4C,0x42}; // Example command to request current value uint8_t* test_str[] = {0xA5,0x05,0x4C,0x4C,0x42}; // Example command to request current value
@ -263,16 +243,6 @@ void app_main(void)
get_time(); get_time();
while(1){
vTaskDelay(100 / portTICK_PERIOD_MS);
// get_time();
// ESP_LOGI("TIME", "Current time =====> %s", buff);
ESP_LOGI(TAG,"====>>> HIiiiiii <<<=========");
}
// Configure Target brocker URL // Configure Target brocker URL
esp_mqtt_client_config_t mqtt_cfg = { esp_mqtt_client_config_t mqtt_cfg = {
@ -284,8 +254,22 @@ void app_main(void)
esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, NULL); esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, NULL);
esp_mqtt_client_start(client); esp_mqtt_client_start(client);
http_get_request(MCU_CONFIG); http_get_request(MCU_CONFIG);
http_get_request(MCU_UPDATE);
data_parsing_config(&HTTP_GET_DATA, sizeof(HTTP_GET_DATA));
while(1){
vTaskDelay(100 / portTICK_PERIOD_MS);
// get_time();
// ESP_LOGI("TIME", "Current time =====> %s", buff);
ESP_LOGI(TAG,"====>>> Test data <<<=========");
}
char* strret = NULL; char* strret = NULL;
char* token = strtok(HTTP_GET_DATA, "SP4"); char* token = strtok(HTTP_GET_DATA, "SP4");
ESP_LOGI(TAG,"REcived data from main1 %s",token); ESP_LOGI(TAG,"REcived data from main1 %s",token);