This commit is contained in:
2024-07-16 09:54:58 +03:00
parent dda46169ed
commit 86b0f39e69
3 changed files with 95 additions and 3 deletions

View File

@ -475,9 +475,35 @@ void zh_espnow_event_handler(void *arg, esp_event_base_t event_base, int32_t eve
break;
case ZHPT_UPDATE_FAIL:
esp_mqtt_client_publish(gateway_config->mqtt_client, topic, "update_fail", 0, 2, true);
if (gateway_config->syslog_is_enable == true)
{
char *mac = (char *)heap_caps_malloc(18, MALLOC_CAP_8BIT);
memset(mac, 0, 18);
sprintf(mac, "" MAC_STR "", MAC2STR(recv_data->mac_addr));
zh_syslog_send(ZH_USER, ZH_ERR, mac, zh_get_device_type_value_name(data->device_type), "Firmware update fail. Incorrect bin file.");
heap_caps_free(mac);
}
break;
case ZHPT_UPDATE_SUCCESS:
esp_mqtt_client_publish(gateway_config->mqtt_client, topic, "update_success", 0, 2, true);
if (gateway_config->syslog_is_enable == true)
{
char *mac = (char *)heap_caps_malloc(18, MALLOC_CAP_8BIT);
memset(mac, 0, 18);
sprintf(mac, "" MAC_STR "", MAC2STR(recv_data->mac_addr));
zh_syslog_send(ZH_USER, ZH_INFO, mac, zh_get_device_type_value_name(data->device_type), "Firmware update success.");
heap_caps_free(mac);
}
break;
case ZHPT_ERROR:
if (gateway_config->syslog_is_enable == true)
{
char *mac = (char *)heap_caps_malloc(18, MALLOC_CAP_8BIT);
memset(mac, 0, 18);
sprintf(mac, "" MAC_STR "", MAC2STR(recv_data->mac_addr));
zh_syslog_send(ZH_USER, ZH_ERR, mac, zh_get_device_type_value_name(data->device_type), data->payload_data.status_message.error_message.message);
heap_caps_free(mac);
}
break;
default:
break;
@ -940,6 +966,9 @@ void zh_mqtt_event_handler(void *arg, esp_event_base_t event_base, int32_t event
void zh_self_ota_update_task(void *pvParameter)
{
gateway_config_t *gateway_config = pvParameter;
char *mac = (char *)heap_caps_malloc(18, MALLOC_CAP_8BIT);
memset(mac, 0, 18);
sprintf(mac, "" MAC_STR "", MAC2STR(gateway_config->self_mac));
xSemaphoreTake(gateway_config->self_ota_in_progress_mutex, portMAX_DELAY);
char *topic = (char *)heap_caps_malloc(strlen(gateway_config->software_config.mqtt_topic_prefix) + strlen(zh_get_device_type_value_name(ZHDT_GATEWAY)) + 20, MALLOC_CAP_8BIT);
memset(topic, 0, strlen(gateway_config->software_config.mqtt_topic_prefix) + strlen(zh_get_device_type_value_name(ZHDT_GATEWAY)) + 20);
@ -948,6 +977,10 @@ void zh_self_ota_update_task(void *pvParameter)
esp_ota_handle_t update_handle = {0};
const esp_partition_t *update_partition = NULL;
esp_mqtt_client_publish(gateway_config->mqtt_client, topic, "update_begin", 0, 2, true);
if (gateway_config->syslog_is_enable == true)
{
zh_syslog_send(ZH_USER, ZH_INFO, mac, zh_get_device_type_value_name(ZHDT_GATEWAY), "Firmware update begin.");
}
const esp_app_desc_t *app_info = esp_app_get_description();
char *app_name = (char *)heap_caps_malloc(strlen(gateway_config->software_config.firmware_upgrade_url) + strlen(app_info->project_name) + 6, MALLOC_CAP_8BIT);
memset(app_name, 0, strlen(gateway_config->software_config.firmware_upgrade_url) + strlen(app_info->project_name) + 6);
@ -965,6 +998,10 @@ void zh_self_ota_update_task(void *pvParameter)
esp_http_client_fetch_headers(https_client);
update_partition = esp_ota_get_next_update_partition(NULL);
esp_mqtt_client_publish(gateway_config->mqtt_client, topic, "update_progress", 0, 2, true);
if (gateway_config->syslog_is_enable == true)
{
zh_syslog_send(ZH_USER, ZH_INFO, mac, zh_get_device_type_value_name(ZHDT_GATEWAY), "Firmware update progress.");
}
esp_ota_begin(update_partition, OTA_WITH_SEQUENTIAL_WRITES, &update_handle);
for (;;)
{
@ -974,7 +1011,12 @@ void zh_self_ota_update_task(void *pvParameter)
esp_http_client_close(https_client);
esp_http_client_cleanup(https_client);
esp_mqtt_client_publish(gateway_config->mqtt_client, topic, "update_error_data_size", 0, 2, true);
if (gateway_config->syslog_is_enable == true)
{
zh_syslog_send(ZH_USER, ZH_ERR, mac, zh_get_device_type_value_name(ZHDT_GATEWAY), "Firmware update error. Incorrect size of read data.");
}
heap_caps_free(topic);
heap_caps_free(mac);
xSemaphoreGive(gateway_config->self_ota_in_progress_mutex);
vTaskDelete(NULL);
}
@ -992,7 +1034,12 @@ void zh_self_ota_update_task(void *pvParameter)
esp_http_client_close(https_client);
esp_http_client_cleanup(https_client);
esp_mqtt_client_publish(gateway_config->mqtt_client, topic, "update_fail", 0, 2, true);
if (gateway_config->syslog_is_enable == true)
{
zh_syslog_send(ZH_USER, ZH_ERR, mac, zh_get_device_type_value_name(ZHDT_GATEWAY), "Firmware update fail. Incorrect bin file.");
}
heap_caps_free(topic);
heap_caps_free(mac);
xSemaphoreGive(gateway_config->self_ota_in_progress_mutex);
vTaskDelete(NULL);
}
@ -1000,7 +1047,12 @@ void zh_self_ota_update_task(void *pvParameter)
esp_http_client_close(https_client);
esp_http_client_cleanup(https_client);
esp_mqtt_client_publish(gateway_config->mqtt_client, topic, "update_success", 0, 2, true);
if (gateway_config->syslog_is_enable == true)
{
zh_syslog_send(ZH_USER, ZH_INFO, mac, zh_get_device_type_value_name(ZHDT_GATEWAY), "Firmware update success.");
}
heap_caps_free(topic);
heap_caps_free(mac);
zh_espnow_data_t data = {0};
data.device_type = ZHDT_GATEWAY;
data.payload_type = ZHPT_KEEP_ALIVE;
@ -1013,6 +1065,10 @@ void zh_self_ota_update_task(void *pvParameter)
void zh_espnow_ota_update_task(void *pvParameter)
{
gateway_config_t *gateway_config = pvParameter;
char *mac = (char *)heap_caps_malloc(18, MALLOC_CAP_8BIT);
memset(mac, 0, 18);
sprintf(mac, "" MAC_STR "", MAC2STR(gateway_config->espnow_ota_data.mac_addr));
// heap_caps_free(mac);
xSemaphoreTake(gateway_config->espnow_ota_in_progress_mutex, portMAX_DELAY);
zh_espnow_data_t data = {0};
data.device_type = ZHDT_GATEWAY;
@ -1020,6 +1076,10 @@ void zh_espnow_ota_update_task(void *pvParameter)
memset(topic, 0, strlen(gateway_config->software_config.mqtt_topic_prefix) + strlen(zh_get_device_type_value_name(gateway_config->espnow_ota_data.device_type)) + 20);
sprintf(topic, "%s/%s/" MAC_STR, gateway_config->software_config.mqtt_topic_prefix, zh_get_device_type_value_name(gateway_config->espnow_ota_data.device_type), MAC2STR(gateway_config->espnow_ota_data.mac_addr));
esp_mqtt_client_publish(gateway_config->mqtt_client, topic, "update_begin", 0, 2, true);
if (gateway_config->syslog_is_enable == true)
{
zh_syslog_send(ZH_USER, ZH_INFO, mac, zh_get_device_type_value_name(gateway_config->espnow_ota_data.device_type), "Firmware update begin.");
}
char espnow_ota_write_data[sizeof(data.payload_data.ota_message.espnow_ota_message.data) + 1] = {0};
char *app_name = (char *)heap_caps_malloc(strlen(gateway_config->software_config.firmware_upgrade_url) + strlen(gateway_config->espnow_ota_data.app_name) + 6, MALLOC_CAP_8BIT);
memset(app_name, 0, strlen(gateway_config->software_config.firmware_upgrade_url) + strlen(gateway_config->espnow_ota_data.app_name) + 6);
@ -1044,11 +1104,20 @@ void zh_espnow_ota_update_task(void *pvParameter)
data.payload_type = ZHPT_UPDATE_ERROR;
zh_send_message(gateway_config->espnow_ota_data.mac_addr, (uint8_t *)&data, sizeof(zh_espnow_data_t));
esp_mqtt_client_publish(gateway_config->mqtt_client, topic, "update_error_begin_timeout", 0, 2, true);
if (gateway_config->syslog_is_enable == true)
{
zh_syslog_send(ZH_USER, ZH_ERR, mac, zh_get_device_type_value_name(gateway_config->espnow_ota_data.device_type), "Firmware update error. Timeout exceed.");
}
heap_caps_free(mac);
heap_caps_free(topic);
xSemaphoreGive(gateway_config->espnow_ota_in_progress_mutex);
vTaskDelete(NULL);
}
esp_mqtt_client_publish(gateway_config->mqtt_client, topic, "update_progress", 0, 2, true);
if (gateway_config->syslog_is_enable == true)
{
zh_syslog_send(ZH_USER, ZH_INFO, mac, zh_get_device_type_value_name(gateway_config->espnow_ota_data.device_type), "Firmware update progress.");
}
for (;;)
{
int data_read_size = esp_http_client_read(https_client, espnow_ota_write_data, sizeof(data.payload_data.ota_message.espnow_ota_message.data));
@ -1057,6 +1126,11 @@ void zh_espnow_ota_update_task(void *pvParameter)
esp_http_client_close(https_client);
esp_http_client_cleanup(https_client);
esp_mqtt_client_publish(gateway_config->mqtt_client, topic, "update_error_data_size", 0, 2, true);
if (gateway_config->syslog_is_enable == true)
{
zh_syslog_send(ZH_USER, ZH_ERR, mac, zh_get_device_type_value_name(gateway_config->espnow_ota_data.device_type), "Firmware update error. Incorrect size of read data.");
}
heap_caps_free(mac);
heap_caps_free(topic);
xSemaphoreGive(gateway_config->espnow_ota_in_progress_mutex);
vTaskDelete(NULL);
@ -1075,6 +1149,11 @@ void zh_espnow_ota_update_task(void *pvParameter)
data.payload_type = ZHPT_UPDATE_ERROR;
zh_send_message(gateway_config->espnow_ota_data.mac_addr, (uint8_t *)&data, sizeof(zh_espnow_data_t));
esp_mqtt_client_publish(gateway_config->mqtt_client, topic, "update_error_progress_timeout", 0, 2, true);
if (gateway_config->syslog_is_enable == true)
{
zh_syslog_send(ZH_USER, ZH_ERR, mac, zh_get_device_type_value_name(gateway_config->espnow_ota_data.device_type), "Firmware update error. Timeout exceed.");
}
heap_caps_free(mac);
heap_caps_free(topic);
xSemaphoreGive(gateway_config->espnow_ota_in_progress_mutex);
vTaskDelete(NULL);
@ -1087,6 +1166,11 @@ void zh_espnow_ota_update_task(void *pvParameter)
data.payload_type = ZHPT_UPDATE_END;
zh_send_message(gateway_config->espnow_ota_data.mac_addr, (uint8_t *)&data, sizeof(zh_espnow_data_t));
esp_mqtt_client_publish(gateway_config->mqtt_client, topic, "update_end", 0, 2, true);
if (gateway_config->syslog_is_enable == true)
{
zh_syslog_send(ZH_USER, ZH_INFO, mac, zh_get_device_type_value_name(gateway_config->espnow_ota_data.device_type), "Firmware update end.");
}
heap_caps_free(mac);
heap_caps_free(topic);
xSemaphoreGive(gateway_config->espnow_ota_in_progress_mutex);
vTaskDelete(NULL);
@ -1101,6 +1185,14 @@ void zh_send_espnow_current_time_task(void *pvParameter)
{
vTaskDelay(5000 / portTICK_PERIOD_MS);
}
if (gateway_config->syslog_is_enable == true)
{
char *mac = (char *)heap_caps_malloc(18, MALLOC_CAP_8BIT);
memset(mac, 0, 18);
sprintf(mac, "" MAC_STR "", MAC2STR(gateway_config->self_mac));
zh_syslog_send(ZH_USER, ZH_INFO, mac, zh_get_device_type_value_name(ZHDT_GATEWAY), "Connected to NTP.");
heap_caps_free(mac);
}
time_t now;
setenv("TZ", gateway_config->software_config.ntp_time_zone, 1);
tzset();
@ -1139,7 +1231,7 @@ void zh_device_availability_check_task(void *pvParameter)
char *mac = (char *)heap_caps_malloc(18, MALLOC_CAP_8BIT);
memset(mac, 0, 18);
sprintf(mac, "" MAC_STR "", MAC2STR(available_device->mac_addr));
zh_syslog_send(ZH_USER, ZH_INFO, mac, zh_get_device_type_value_name(available_device->device_type), "Disconnected from gateway.");
zh_syslog_send(ZH_USER, ZH_WARNING, mac, zh_get_device_type_value_name(available_device->device_type), "Disconnected from gateway.");
heap_caps_free(mac);
}
zh_vector_delete_item(&gateway_config->available_device_vector, i);