#include Config config; ConfigManager::ConfigManager() {} // EEPROM initialize void ConfigManager::begin() { ESP_LOGI(TAG_CONF, "Begin config"); EEPROM.begin(EEPROM_SIZE); if (isEEPROMEmpty()) { ESP_LOGI(TAG_CONF, "EEPROM Empty"); resetToDefaults(); generateApiKey(config.apiKey, sizeof(config.apiKey)); saveConfig(); readConfig(); } else { //Logger::getInstance().log(LOG_INFO, "READ Config"); readConfig(); } } // Check is EEPROM is empty bool ConfigManager::isEEPROMEmpty() { if (EEPROM.read(0) != 253){ ESP_LOGI(TAG_CONF, "EEPROM is new!"); return true; } else { return false; } } // Read configuration from EEPROM void ConfigManager::readConfig() { ESP_LOGI(TAG_CONF, "Read config from EEPROM"); EEPROM.get(1, config); } // Save config to EEPROM void ConfigManager::saveConfig() { ESP_LOGI(TAG_CONF, "SAVE CONFIG"); EEPROM.put(1, config); EEPROM.write(0, 253); if (EEPROM.commit()) { ESP_LOGI(TAG_CONF, "Config saved"); } else { ESP_LOGE(TAG_CONF, "Error save config"); } EEPROM.end(); } void ConfigManager::generateApiKey(uint8_t *buf, size_t len) { for (size_t i = 0; i < len; i += 4) { uint32_t r = esp_random(); // losowe 32 bity z TRNG ESP32 size_t chunk = (len - i >= 4) ? 4 : (len - i); // ostatnia iteracja może być < 4 bajtów memcpy(buf + i, &r, chunk); } } // Factory reset EEPROM void ConfigManager::resetToDefaults() { ESP_LOGI(TAG_CONF, "EEPROM RESET FACTORY"); EEPROM.begin(EEPROM_SIZE); for (int i = 0; i < EEPROM_SIZE; i++) { EEPROM.write(i, 0); } EEPROM.write(0, 0); strcpy(config.ssid, "politechnika"); strcpy(config.password, ""); strcpy(config.hostname, "WMT001"); strcpy(config.place, "WMT Stalowa Wola"); config.dhcp = 1; strcpy(config.ip, "192.168.0.10"); strcpy(config.subnet, "255.255.255.0"); strcpy(config.gateway, "192.168.0.1"); strcpy(config.dns, "8.8.8.8"); strcpy(config.user, "admin"); strcpy(config.pass, "admin"); strcpy(config.ntp, "pl.pool.ntp.org"); config.connect = 1; // urządzenie połączone z siecią lub 0 offline config.measure = 1; // włącz automatyczny pomiar co x sekunt (pause) config.duration = 5; // czas trwania pomiaru 5 sekund config.pause = 10000; // odstęp pomiędzy pomiarami w ms //strcpy(config.ntp, "0.pl.pool.ntp.org"); strcpy(config.restURL, "http://62.93.60.19"); config.restPort = 5004; strcpy(config.restUser, "SN001234ABCD56789012"); strcpy(config.restPass, "device001"); strcpy(config.S0, "ACCEL1"); strcpy(config.S1, "ACCEL2"); strcpy(config.S2, "ACCEL3"); strcpy(config.S3, "ACCEL4"); strcpy(config.S4, "ACCEL5"); strcpy(config.S5, "ACCEL6"); strcpy(config.S6, "ACCEL7"); strcpy(config.S7, "ACCEL8"); EEPROM.put(1, config); EEPROM.write(0, 253); saveConfig(); readConfig(); isRebootRequired = true; } void ConfigManager::showConfig(){ ESP_LOGI(TAG_CONF, "Config size: %d bytes max %d", sizeof(config), EEPROM_SIZE); String ii; if(config.connect) ii = "online"; else ii = "offline"; ESP_LOGI(TAG_CONF, "Mode: %s", ii.c_str()); if(config.measure) ii = "auto"; else ii = "manual"; ESP_LOGI(TAG_CONF, "MEASURE: %s", ii.c_str()); ii = "PLACE: " + String(config.place); ESP_LOGI(TAG_CONF, "%s", ii.c_str()); ii = "HOSTNAME: " + String(config.hostname); ESP_LOGI(TAG_CONF, "%s", ii.c_str()); ii = "WIFI SSID: " + String(config.ssid); ESP_LOGI(TAG_CONF, "%s", ii.c_str()); ii = "WIFI PASS: " + String(config.password); ESP_LOGI(TAG_CONF, "%s", ii.c_str()); if(config.dhcp) ii = "yes"; else ii = "no"; ESP_LOGI(TAG_CONF, "DHCP: %s", ii.c_str()); ii = "IP: " + String(config.ip); ESP_LOGI(TAG_CONF, "%s", ii.c_str()); ii = "MASK: " + String(config.subnet); ESP_LOGI(TAG_CONF, "%s", ii.c_str()); ii = "GATEWAY: " + String(config.gateway); ESP_LOGI(TAG_CONF, "%s", ii.c_str()); ii = "DNS: " + String(config.dns); ESP_LOGI(TAG_CONF, "%s", ii.c_str()); ii = "USER: " + String(config.user); ESP_LOGI(TAG_CONF, "%s", ii.c_str()); ii = "USER PASS: " + String(config.pass); ESP_LOGI(TAG_CONF, "%s", ii.c_str()); if(config.connect) { ii = "URL: " + String(config.restURL); ESP_LOGI(TAG_CONF, "%s", ii.c_str()); ii = "PORT: " + String(config.restPort); ESP_LOGI(TAG_CONF, "%s", ii.c_str()); ii = "USER: " + String(config.restUser); ESP_LOGI(TAG_CONF, "%s", ii.c_str()); ii = "PASS: " + String(config.restPass); ESP_LOGI(TAG_CONF, "%s", ii.c_str()); } for (size_t i = 0; i < 32; i++) { if (config.apiKey[i] < 0x10) Serial.print("0"); Serial.print(config.apiKey[i], HEX); } Serial.println(); ii = "Delay: " + String(config.pause) + "ms"; ESP_LOGI(TAG_CONF, "%s", ii.c_str()); ii = "S1: " + String(config.S0); ESP_LOGI(TAG_CONF, "%s", ii.c_str()); ii = "S2: " + String(config.S1); ESP_LOGI(TAG_CONF, "%s", ii.c_str()); ii = "S3: " + String(config.S2); ESP_LOGI(TAG_CONF, "%s", ii.c_str()); ii = "S4: " + String(config.S3); ESP_LOGI(TAG_CONF, "%s", ii.c_str()); ii = "S5: " + String(config.S4); ESP_LOGI(TAG_CONF, "%s", ii.c_str()); ii = "S6: " + String(config.S5); ESP_LOGI(TAG_CONF, "%s", ii.c_str()); ii = "S7: " + String(config.S6); ESP_LOGI(TAG_CONF, "%s", ii.c_str()); ii = "S8: " + String(config.S7); ESP_LOGI(TAG_CONF, "%s", ii.c_str()); }