Some initial mandatory settings converted to optional settings

This commit is contained in:
2024-07-15 22:28:43 +03:00
parent 2f66f01781
commit 243f0ae4ff
4 changed files with 179 additions and 51 deletions

View File

@ -48,19 +48,55 @@ menu "ZH Gateway Configuration"
help
MQTT topic prefix.
config SYSLOG_SERVER_USING
bool "Enable using Syslog server"
default true
help
Enable using Syslog server.
config SYSLOG_SERVER_IP
depends on SYSLOG_SERVER_USING
string "Syslog server IP"
default "192.168.1.2"
help
Syslog server IP.
config SYSLOG_SERVER_PORT
depends on SYSLOG_SERVER_USING
int "Syslog server port"
range 0 65635
default 514
help
Syslog server port.
config NTP_SERVER_USING
bool "Enable using NTP server"
default true
help
Enable using NTP server.
config NTP_SERVER_URL
depends on NTP_SERVER_USING
string "NTP server url"
default "ntpserver.com"
help
NTP server url.
config NTP_TIME_ZONE
depends on NTP_SERVER_USING
string "NTP time zone"
default "UTC-3"
help
NTP time zone.
config FIRMWARE_UPGRADE_SERVER_USING
bool "Enable using OTA update"
default true
help
Enable using OTA update.
config FIRMWARE_UPGRADE_URL
depends on FIRMWARE_UPGRADE_SERVER_USING
string "Firmware upgrade url"
default "https://yourserver.com"
help

View File

@ -99,10 +99,11 @@ void zh_load_config(gateway_config_t *gateway_config)
{
nvs_set_u8(nvs_handle, "present", 0xFE);
nvs_close(nvs_handle);
SETUP_INITIAL_SETTINGS:
#ifdef CONFIG_CONNECTION_TYPE_LAN
gateway_config->software_config.is_lan_mode = true;
strcpy(gateway_config->software_config.ssid_name, "ssid");
strcpy(gateway_config->software_config.ssid_password, "password");
strcpy(gateway_config->software_config.ssid_name, "NULL");
strcpy(gateway_config->software_config.ssid_password, "NULL");
#else
gateway_config->software_config.is_lan_mode = false;
strcpy(gateway_config->software_config.ssid_name, CONFIG_WIFI_SSID_NAME);
@ -110,29 +111,62 @@ void zh_load_config(gateway_config_t *gateway_config)
#endif
strcpy(gateway_config->software_config.mqtt_broker_url, CONFIG_MQTT_BROKER_URL);
strcpy(gateway_config->software_config.mqtt_topic_prefix, CONFIG_MQTT_TOPIC_PREFIX);
#ifdef CONFIG_SYSLOG_SERVER_USING
gateway_config->software_config.is_syslog_server_usage = true;
strcpy(gateway_config->software_config.syslog_server_ip, CONFIG_SYSLOG_SERVER_IP);
gateway_config->software_config.syslog_server_port = CONFIG_SYSLOG_SERVER_PORT;
#else
gateway_config->software_config.is_syslog_server_usage = false;
strcpy(gateway_config->software_config.syslog_server_ip, "NULL");
gateway_config->software_config.syslog_server_port = 0;
#endif
#ifdef CONFIG_NTP_SERVER_USING
gateway_config->software_config.is_ntp_server_usage = true;
strcpy(gateway_config->software_config.ntp_server_url, CONFIG_NTP_SERVER_URL);
strcpy(gateway_config->software_config.ntp_time_zone, CONFIG_NTP_TIME_ZONE);
#else
gateway_config->software_config.is_ntp_server_usage = false;
strcpy(gateway_config->software_config.ntp_server_url, "NULL");
strcpy(gateway_config->software_config.ntp_time_zone, "NULL");
#endif
#ifdef CONFIG_FIRMWARE_UPGRADE_SERVER_USING
gateway_config->software_config.is_ota_server_usage = true;
strcpy(gateway_config->software_config.firmware_upgrade_url, CONFIG_FIRMWARE_UPGRADE_URL);
#else
gateway_config->software_config.is_ota_server_usage = false;
strcpy(gateway_config->software_config.firmware_upgrade_url, "NULL");
#endif
zh_save_config(gateway_config);
return;
}
nvs_get_u8(nvs_handle, "lan_mode", (uint8_t *)&gateway_config->software_config.is_lan_mode);
esp_err_t err = ESP_OK;
size_t size = 0;
nvs_get_str(nvs_handle, "ssid_name", NULL, &size);
nvs_get_str(nvs_handle, "ssid_name", gateway_config->software_config.ssid_name, &size);
nvs_get_str(nvs_handle, "ssid_password", NULL, &size);
nvs_get_str(nvs_handle, "ssid_password", gateway_config->software_config.ssid_password, &size);
nvs_get_str(nvs_handle, "mqtt_url", NULL, &size);
nvs_get_str(nvs_handle, "mqtt_url", gateway_config->software_config.mqtt_broker_url, &size);
nvs_get_str(nvs_handle, "topic_prefix", NULL, &size);
nvs_get_str(nvs_handle, "topic_prefix", gateway_config->software_config.mqtt_topic_prefix, &size);
nvs_get_str(nvs_handle, "ntp_url", NULL, &size);
nvs_get_str(nvs_handle, "ntp_url", gateway_config->software_config.ntp_server_url, &size);
nvs_get_str(nvs_handle, "time_zone", NULL, &size);
nvs_get_str(nvs_handle, "time_zone", gateway_config->software_config.ntp_time_zone, &size);
nvs_get_str(nvs_handle, "upgrade_url", NULL, &size);
nvs_get_str(nvs_handle, "upgrade_url", gateway_config->software_config.firmware_upgrade_url, &size);
err += nvs_get_u8(nvs_handle, "lan_mode", (uint8_t *)&gateway_config->software_config.is_lan_mode);
err += nvs_get_str(nvs_handle, "ssid_name", NULL, &size);
err += nvs_get_str(nvs_handle, "ssid_name", gateway_config->software_config.ssid_name, &size);
err += nvs_get_str(nvs_handle, "ssid_password", NULL, &size);
err += nvs_get_str(nvs_handle, "ssid_password", gateway_config->software_config.ssid_password, &size);
err += nvs_get_str(nvs_handle, "mqtt_url", NULL, &size);
err += nvs_get_str(nvs_handle, "mqtt_url", gateway_config->software_config.mqtt_broker_url, &size);
err += nvs_get_str(nvs_handle, "topic_prefix", NULL, &size);
err += nvs_get_str(nvs_handle, "topic_prefix", gateway_config->software_config.mqtt_topic_prefix, &size);
err += nvs_get_u8(nvs_handle, "syslog_usage", (uint8_t *)&gateway_config->software_config.is_syslog_server_usage);
err += nvs_get_str(nvs_handle, "syslog_ip", NULL, &size);
err += nvs_get_str(nvs_handle, "syslog_ip", gateway_config->software_config.syslog_server_ip, &size);
err += nvs_get_u32(nvs_handle, "syslog_port", &gateway_config->software_config.syslog_server_port);
err += nvs_get_u8(nvs_handle, "ntp_usage", (uint8_t *)&gateway_config->software_config.is_ntp_server_usage);
err += nvs_get_str(nvs_handle, "ntp_url", NULL, &size);
err += nvs_get_str(nvs_handle, "ntp_url", gateway_config->software_config.ntp_server_url, &size);
err += nvs_get_str(nvs_handle, "time_zone", NULL, &size);
err += nvs_get_str(nvs_handle, "time_zone", gateway_config->software_config.ntp_time_zone, &size);
err += nvs_get_u8(nvs_handle, "ota_usage", (uint8_t *)&gateway_config->software_config.is_ota_server_usage);
err += nvs_get_str(nvs_handle, "upgrade_url", NULL, &size);
err += nvs_get_str(nvs_handle, "upgrade_url", gateway_config->software_config.firmware_upgrade_url, &size);
nvs_close(nvs_handle);
if (err != ESP_OK)
{
goto SETUP_INITIAL_SETTINGS;
}
}
void zh_save_config(const gateway_config_t *gateway_config)
@ -144,8 +178,13 @@ void zh_save_config(const gateway_config_t *gateway_config)
nvs_set_str(nvs_handle, "ssid_password", gateway_config->software_config.ssid_password);
nvs_set_str(nvs_handle, "mqtt_url", gateway_config->software_config.mqtt_broker_url);
nvs_set_str(nvs_handle, "topic_prefix", gateway_config->software_config.mqtt_topic_prefix);
nvs_set_u8(nvs_handle, "syslog_usage", gateway_config->software_config.is_syslog_server_usage);
nvs_set_str(nvs_handle, "syslog_ip", gateway_config->software_config.syslog_server_ip);
nvs_set_u32(nvs_handle, "syslog_port", gateway_config->software_config.syslog_server_port);
nvs_set_u8(nvs_handle, "ntp_usage", gateway_config->software_config.is_ntp_server_usage);
nvs_set_str(nvs_handle, "ntp_url", gateway_config->software_config.ntp_server_url);
nvs_set_str(nvs_handle, "time_zone", gateway_config->software_config.ntp_time_zone);
nvs_set_u8(nvs_handle, "ota_usage", gateway_config->software_config.is_ota_server_usage);
nvs_set_str(nvs_handle, "upgrade_url", gateway_config->software_config.firmware_upgrade_url);
nvs_close(nvs_handle);
}
@ -161,11 +200,22 @@ void zh_eth_event_handler(void *arg, esp_event_base_t event_base, int32_t event_
esp_mqtt_client_stop(gateway_config->mqtt_client);
gateway_config->mqtt_is_enable = false;
}
if (gateway_config->sntp_is_enable == true)
if (gateway_config->software_config.is_ntp_server_usage == true)
{
esp_sntp_stop();
gateway_config->sntp_is_enable = false;
vTaskDelete(gateway_config->gateway_current_time_task);
if (gateway_config->sntp_is_enable == true)
{
esp_sntp_stop();
gateway_config->sntp_is_enable = false;
vTaskDelete(gateway_config->gateway_current_time_task);
}
}
if (gateway_config->software_config.is_syslog_server_usage == true)
{
if (gateway_config->syslog_is_enable == true)
{
zh_syslog_deinit();
gateway_config->syslog_is_enable = false;
}
}
break;
case IP_EVENT_ETH_GOT_IP:
@ -179,14 +229,25 @@ void zh_eth_event_handler(void *arg, esp_event_base_t event_base, int32_t event_
esp_mqtt_client_start(gateway_config->mqtt_client);
gateway_config->mqtt_is_enable = true;
}
if (gateway_config->sntp_is_enable == false)
if (gateway_config->software_config.is_ntp_server_usage == true)
{
esp_sntp_setoperatingmode(SNTP_OPMODE_POLL);
sntp_set_sync_mode(SNTP_SYNC_MODE_SMOOTH);
esp_sntp_setservername(0, gateway_config->software_config.ntp_server_url);
esp_sntp_init();
gateway_config->sntp_is_enable = true;
xTaskCreatePinnedToCore(&zh_send_espnow_current_time_task, "NULL", ZH_SNTP_STACK_SIZE, gateway_config, ZH_SNTP_TASK_PRIORITY, (TaskHandle_t *)&gateway_config->gateway_current_time_task, tskNO_AFFINITY);
if (gateway_config->sntp_is_enable == false)
{
esp_sntp_setoperatingmode(SNTP_OPMODE_POLL);
sntp_set_sync_mode(SNTP_SYNC_MODE_SMOOTH);
esp_sntp_setservername(0, gateway_config->software_config.ntp_server_url);
esp_sntp_init();
gateway_config->sntp_is_enable = true;
xTaskCreatePinnedToCore(&zh_send_espnow_current_time_task, "NULL", ZH_SNTP_STACK_SIZE, gateway_config, ZH_SNTP_TASK_PRIORITY, (TaskHandle_t *)&gateway_config->gateway_current_time_task, tskNO_AFFINITY);
}
}
if (gateway_config->software_config.is_syslog_server_usage == true)
{
zh_syslog_init_config_t syslog_init_config = ZH_SYSLOG_INIT_CONFIG_DEFAULT();
memcpy(syslog_init_config.syslog_ip, gateway_config->software_config.syslog_server_ip, strlen(gateway_config->software_config.syslog_server_ip));
syslog_init_config.syslog_port = gateway_config->software_config.syslog_server_port;
zh_syslog_init(&syslog_init_config);
gateway_config->syslog_is_enable = true;
}
break;
default:
@ -208,11 +269,22 @@ void zh_wifi_event_handler(void *arg, esp_event_base_t event_base, int32_t event
esp_mqtt_client_stop(gateway_config->mqtt_client);
gateway_config->mqtt_is_enable = false;
}
if (gateway_config->sntp_is_enable == true)
if (gateway_config->software_config.is_ntp_server_usage == true)
{
esp_sntp_stop();
gateway_config->sntp_is_enable = false;
vTaskDelete(gateway_config->gateway_current_time_task);
if (gateway_config->sntp_is_enable == true)
{
esp_sntp_stop();
gateway_config->sntp_is_enable = false;
vTaskDelete(gateway_config->gateway_current_time_task);
}
}
if (gateway_config->software_config.is_syslog_server_usage == true)
{
if (gateway_config->syslog_is_enable == true)
{
zh_syslog_deinit();
gateway_config->syslog_is_enable = false;
}
}
if (gateway_config->wifi_reconnect_retry_num < ZH_WIFI_MAXIMUM_RETRY)
{
@ -240,14 +312,25 @@ void zh_wifi_event_handler(void *arg, esp_event_base_t event_base, int32_t event
esp_mqtt_client_start(gateway_config->mqtt_client);
gateway_config->mqtt_is_enable = true;
}
if (gateway_config->sntp_is_enable == false)
if (gateway_config->software_config.is_ntp_server_usage == true)
{
esp_sntp_setoperatingmode(SNTP_OPMODE_POLL);
sntp_set_sync_mode(SNTP_SYNC_MODE_SMOOTH);
esp_sntp_setservername(0, gateway_config->software_config.ntp_server_url);
esp_sntp_init();
gateway_config->sntp_is_enable = true;
xTaskCreatePinnedToCore(&zh_send_espnow_current_time_task, "NULL", ZH_SNTP_STACK_SIZE, gateway_config, ZH_SNTP_TASK_PRIORITY, (TaskHandle_t *)&gateway_config->gateway_current_time_task, tskNO_AFFINITY);
if (gateway_config->sntp_is_enable == false)
{
esp_sntp_setoperatingmode(SNTP_OPMODE_POLL);
sntp_set_sync_mode(SNTP_SYNC_MODE_SMOOTH);
esp_sntp_setservername(0, gateway_config->software_config.ntp_server_url);
esp_sntp_init();
gateway_config->sntp_is_enable = true;
xTaskCreatePinnedToCore(&zh_send_espnow_current_time_task, "NULL", ZH_SNTP_STACK_SIZE, gateway_config, ZH_SNTP_TASK_PRIORITY, (TaskHandle_t *)&gateway_config->gateway_current_time_task, tskNO_AFFINITY);
}
}
if (gateway_config->software_config.is_syslog_server_usage == true)
{
zh_syslog_init_config_t syslog_init_config = ZH_SYSLOG_INIT_CONFIG_DEFAULT();
memcpy(syslog_init_config.syslog_ip, gateway_config->software_config.syslog_server_ip, strlen(gateway_config->software_config.syslog_server_ip));
syslog_init_config.syslog_port = gateway_config->software_config.syslog_server_port;
zh_syslog_init(&syslog_init_config);
gateway_config->syslog_is_enable = true;
}
break;
default:
@ -500,7 +583,7 @@ void zh_mqtt_event_handler(void *arg, esp_event_base_t event_base, int32_t event
{
if (memcmp(gateway_config->self_mac, incoming_data_mac, 6) == 0)
{
if (strncmp(incoming_payload, "update", strlen(incoming_payload) + 1) == 0)
if (strncmp(incoming_payload, "update", strlen(incoming_payload) + 1) == 0 && gateway_config->software_config.is_ota_server_usage == true)
{
if (xSemaphoreTake(gateway_config->self_ota_in_progress_mutex, portTICK_PERIOD_MS) == pdTRUE)
{
@ -529,7 +612,7 @@ void zh_mqtt_event_handler(void *arg, esp_event_base_t event_base, int32_t event
switch (incoming_data_payload_type)
{
case ZHPT_NONE:
if (strncmp(incoming_payload, "update", strlen(incoming_payload) + 1) == 0)
if (strncmp(incoming_payload, "update", strlen(incoming_payload) + 1) == 0 && gateway_config->software_config.is_ota_server_usage == true)
{
data.payload_type = ZHPT_UPDATE;
zh_send_message(incoming_data_mac, (uint8_t *)&data, sizeof(zh_espnow_data_t));
@ -628,7 +711,7 @@ void zh_mqtt_event_handler(void *arg, esp_event_base_t event_base, int32_t event
switch (incoming_data_payload_type)
{
case ZHPT_NONE:
if (strncmp(incoming_payload, "update", strlen(incoming_payload) + 1) == 0)
if (strncmp(incoming_payload, "update", strlen(incoming_payload) + 1) == 0 && gateway_config->software_config.is_ota_server_usage == true)
{
data.payload_type = ZHPT_UPDATE;
zh_send_message(incoming_data_mac, (uint8_t *)&data, sizeof(zh_espnow_data_t));
@ -735,7 +818,7 @@ void zh_mqtt_event_handler(void *arg, esp_event_base_t event_base, int32_t event
switch (incoming_data_payload_type)
{
case ZHPT_NONE:
if (strncmp(incoming_payload, "update", strlen(incoming_payload) + 1) == 0)
if (strncmp(incoming_payload, "update", strlen(incoming_payload) + 1) == 0 && gateway_config->software_config.is_ota_server_usage == true)
{
data.payload_type = ZHPT_UPDATE;
zh_send_message(incoming_data_mac, (uint8_t *)&data, sizeof(zh_espnow_data_t));
@ -798,7 +881,7 @@ void zh_mqtt_event_handler(void *arg, esp_event_base_t event_base, int32_t event
switch (incoming_data_payload_type)
{
case ZHPT_NONE:
if (strncmp(incoming_payload, "update", strlen(incoming_payload) + 1) == 0)
if (strncmp(incoming_payload, "update", strlen(incoming_payload) + 1) == 0 && gateway_config->software_config.is_ota_server_usage == true)
{
data.payload_type = ZHPT_UPDATE;
zh_send_message(incoming_data_mac, (uint8_t *)&data, sizeof(zh_espnow_data_t));

View File

@ -17,6 +17,7 @@
#include "mqtt_client.h"
#include "zh_json.h"
#include "zh_vector.h"
#include "zh_syslog.h"
#include "zh_config.h"
#ifdef CONFIG_NETWORK_TYPE_DIRECT
@ -72,11 +73,17 @@ typedef struct // Structure of data exchange between tasks, functions and event
char ssid_password[64]; // WiFi password.
char mqtt_broker_url[64]; // MQTT broker url.
char mqtt_topic_prefix[32]; // MQTT topic prefix.
bool is_syslog_server_usage; // Syslog server usage flag.
char syslog_server_ip[16]; // Syslog server IP address.
uint32_t syslog_server_port; // Syslog server port.
bool is_ntp_server_usage; // NTP server usage flag.
char ntp_server_url[64]; // NTP server url.
char ntp_time_zone[10]; // NTP time zone.
bool is_ota_server_usage; // OTA server usage flag.
char firmware_upgrade_url[64]; // Firmware upgrade url.
} software_config;
uint8_t self_mac[6]; // Gateway MAC address. @note Depends at WiFi operation mode.
bool syslog_is_enable; // Syslog client operation status flag. @note Used to control the Syslog functions when the network connection is established / lost.
bool sntp_is_enable; // SNTP client operation status flag. @note Used to control the SNTP functions when the network connection is established / lost.
bool mqtt_is_enable; // MQTT client operation status flag. @note Used to control the MQTT functions when the network connection is established / lost.
bool mqtt_is_connected; // MQTT broker connection status flag. @note Used to control the gateway system tasks when the MQTT connection is established / lost.