From ff6a1c1f765c111ca058aca576c03e57c1f6f06b Mon Sep 17 00:00:00 2001 From: fredlcore Date: Wed, 28 Feb 2024 01:06:46 +0800 Subject: [PATCH] Log storage device (SD / flash) can now be set in the webinterface on ESP32 --- BSB_LAN/BSB_LAN.ino | 99 +++++++++++++++++++------------- BSB_LAN/BSB_LAN_EEPROMconfig.h | 10 +++- BSB_LAN/BSB_LAN_config.h.default | 9 ++- BSB_LAN/BSB_LAN_defs.h | 13 +++++ BSB_LAN/localization/LANG_DE.h | 8 +++ BSB_LAN/localization/LANG_EN.h | 4 ++ 6 files changed, 100 insertions(+), 43 deletions(-) diff --git a/BSB_LAN/BSB_LAN.ino b/BSB_LAN/BSB_LAN.ino index 68da2170..c0825a3a 100644 --- a/BSB_LAN/BSB_LAN.ino +++ b/BSB_LAN/BSB_LAN.ino @@ -72,6 +72,7 @@ * - ATTENTION: New configuration options in BSB_LAN_config.h - please update your existing configuration files! * - Support for receiving date and time via NTP instead of taking it from the heater. * - MQTT broker setting now accepts domain names as well as IP addresses. An optional port can be added after a trailing colon, e.g. broker.my-domain.com:1884. Otherwise defaults to 1883. + * - Switching between log storage device (SD card / internal flash) on the ESP32 can now be done in the web interface. * - This release has been supported by the following GitHub sponsors: jsimon3 * version 3.2 * - ATTENTION: In BSB_LAN_config.h, new layout of log_parameters, avg_parameters and ipwe_parameters now written in curly brackets and different size (40 instead of 80) and type ("parameter" instead of "float"). Please update your BSB_LAN_config.h accordingly to prevent errors! @@ -756,23 +757,17 @@ int8_t max_valve[MAX_CUL_DEVICES] = { -1 }; // char _ipstr[20]; // addr in format xxx.yyy.zzz.aaa // byte __remoteIP[4] = {0,0,0,0}; // IP address in bin format +uint64_t minimum_SD_size = 0; #if defined LOGGER || defined WEBSERVER #if defined(ESP32) - #if defined(ESP32_USE_SD) // Use SD card adapter on ESP32 #include "FS.h" #include "SD_MMC.h" - #define SD SD_MMC - #define MINIMUM_FREE_SPACE_ON_SD 100000 - #else // use internal EEPROM flash memory instead of SD card on ESP32 #include - #define SD LittleFS - // Minimum free space in bytes - #define MINIMUM_FREE_SPACE_ON_SD 10000 - #endif // ESP32_USE_SD +FS& SD = SD_MMC; #else // !ESP32 #define FILE_APPEND FILE_WRITE // FILE_APPEND does not exist on Arduino, FILE_WRITE seems to do the same (create if not existing, start writing from EOF onwards) - //leave at least MINIMUM_FREE_SPACE_ON_SD free blocks on SD - #define MINIMUM_FREE_SPACE_ON_SD 100 + //leave at least minimum_SD_size free blocks on SD +minimum_SD_size = 100; // set MAINTAIN_FREE_CLUSTER_COUNT to 1 in SdFatConfig.h if you want increase speed of free space calculation // do not forget set it up after SdFat upgrading #include "src/SdFat/SdFat.h" @@ -2339,15 +2334,6 @@ void generateConfigPage(void) { "ENABLE_ESP32_OTA" #endif - #ifdef ESP32_USE_SD - #ifdef ANY_MODULE_COMPILED - ", " - #else - #define ANY_MODULE_COMPILED - #endif - "ESP32_USE_SD" - #endif - #ifdef IPWE #ifdef ANY_MODULE_COMPILED ", " @@ -2507,7 +2493,7 @@ void generateConfigPage(void) { uint32_t fs = (uint32_t)(volFree*SD.vol()->sectorsPerCluster()/2048); printFmtToWebClient(PSTR(": %lu MB
\r\n"), fs); #else - uint64_t fs = (SD.totalBytes() - SD.usedBytes()); + uint64_t fs = totalBytes()-usedBytes(); printFmtToWebClient(PSTR(": %llu Bytes
\r\n"), fs); #endif // printFmtToWebClient(PSTR("Free space: %lu MB
free clusters: %lu
freeClusterCount() call time: %lu microseconds

\r\n"), fs, volFree, micros() - m); @@ -2715,6 +2701,7 @@ bool SaveConfigFromRAMtoEEPROM() { // https://forum.arduino.cc/index.php?topic=89469.0 // Resume: it possible but can cause unpredicable effects case CF_MAC: + case CF_NETWORK_TYPE: case CF_DHCP: case CF_IPADDRESS: case CF_MASK: @@ -2726,6 +2713,7 @@ bool SaveConfigFromRAMtoEEPROM() { case CF_WIFI_PASSWORD: case CF_MDNS_HOSTNAME: case CF_ESP32_ENERGY_SAVE: + case CF_LOG_DEST: needReboot = true; break; case CF_BMEBUS: @@ -2803,7 +2791,13 @@ int returnENUMID4ConfigOption(uint8_t id) { i=findLine(65527,0,NULL); //return ENUM_PPS_MODE break; case CF_LOGMODE: - i=findLine(65526,0,NULL); //return ENUM_PPS_MODE + i=findLine(65526,0,NULL); //return ENUM_LOGMODE + break; + case CF_NETWORK_TYPE: + i=findLine(65525,0,NULL); //return ENUM_NETWORK_TYPE + break; + case CF_LOG_DEST: + i=findLine(65524,0,NULL); //return ENUM_LOG_DEST break; default: i = -1; @@ -3091,7 +3085,7 @@ void generateWebConfigPage(bool printOnly) { } else { printToWebClient(PSTR("")); } - printToWebClient(PSTR("\r\n")); + printToWebClient(PSTR("\r\n")); } printToWebClient(PSTR("

")); if(!printOnly){ @@ -3249,9 +3243,9 @@ void LogTelegram(byte* msg) { float dval; float line = 0; #if !defined(ESP32) - if (SD.vol()->freeClusterCount() < MINIMUM_FREE_SPACE_ON_SD) return; + if (SD.vol()->freeClusterCount() < minimum_SD_size) return; #else - if (SD.totalBytes() - SD.usedBytes() < MINIMUM_FREE_SPACE_ON_SD) return; + if (totalBytes()-usedBytes() < minimum_SD_size) return; #endif if (bus->getBusType() != BUS_PPS) { @@ -4856,9 +4850,9 @@ const char* datalogFileHeader = PSTR("Milliseconds;Date;Parameter;Description;Va const char *cleanupDatalog(unsigned nDays) { // keep most recent nDays only in datalog: // copy back of files to temporary files, remove old files, rename temporary files - unsigned long spaceRequired=MINIMUM_FREE_SPACE_ON_SD, spaceAvailable = + unsigned long spaceRequired=minimum_SD_size, spaceAvailable = #ifdef ESP32 - SD.totalBytes() - SD.usedBytes(); + totalBytes()-usedBytes(); #else SD.vol()->freeClusterCount() * SD.vol()->bytesPerCluster(); #endif @@ -4963,6 +4957,22 @@ bool createdatalogFileAndWriteHeader() { return false; } +uint64_t usedBytes() { + if (LogDestination == 0) { + return SD_MMC.usedBytes(); + } else { + return LittleFS.usedBytes(); + } +} + +uint64_t totalBytes() { + if (LogDestination == 0) { + return SD_MMC.totalBytes(); + } else { + return LittleFS.totalBytes(); + } +} + #endif //#ifdef LOGGER #ifdef MAX_CUL @@ -6052,7 +6062,7 @@ void loop() { freespace = (uint32_t)(freespace*SD.vol()->sectorsPerCluster()/2048); printFmtToWebClient(PSTR("%d"), freespace); #else - uint64_t freespace = SD.totalBytes() - SD.usedBytes(); + uint64_t freespace = totalBytes()-usedBytes(); printFmtToWebClient(PSTR("%llu"), freespace); #endif #else @@ -7180,11 +7190,11 @@ next_parameter: File dataFile; if (LoggingMode & CF_LOGMODE_SD_CARD) { #if defined(ESP32) - uint64_t freespace = SD.totalBytes() - SD.usedBytes(); + uint64_t freespace = totalBytes()-usedBytes(); #else uint32_t freespace = SD.vol()->freeClusterCount(); #endif - if (freespace > MINIMUM_FREE_SPACE_ON_SD) { + if (freespace > minimum_SD_size) { dataFile = SD.open(datalogFileName, FILE_APPEND); if (!dataFile) { // if the file isn't open, pop up an error: @@ -7806,6 +7816,7 @@ void setup() { registerConfigVariable(CF_ESP32_ENERGY_SAVE, (byte *)&esp32_save_energy); #ifdef WEBCONFIG registerConfigVariable(CF_ROOM_DEVICE, (byte *)&pps_values[PPS_QTP]); + registerConfigVariable(CF_NETWORK_TYPE, (byte *)&network_type); registerConfigVariable(CF_MAC, (byte *)mac); registerConfigVariable(CF_DHCP, (byte *)&useDHCP); registerConfigVariable(CF_IPADDRESS, (byte *)ip_addr); @@ -7834,6 +7845,7 @@ void setup() { registerConfigVariable(CF_MQTT_PASSWORD, (byte *)MQTTPassword); registerConfigVariable(CF_MQTT_TOPIC, (byte *)MQTTTopicPrefix); registerConfigVariable(CF_MQTT_DEVICE, (byte *)MQTTDeviceID); + registerConfigVariable(CF_LOG_DEST, (byte *)&LogDestination); registerConfigVariable(CF_LOGMODE, (byte *)&LoggingMode); if (default_flag & FL_SW_CTL_RONLY) { registerConfigVariable(CF_WRITEMODE, (byte *)&programWriteMode); @@ -8087,7 +8099,16 @@ void setup() { } #if defined LOGGER || defined WEBSERVER - printToDebug(PSTR("Starting SD..")); + #ifdef ESP32 + if (LogDestination == 0) { + SD = SD_MMC; + minimum_SD_size = 100000; + } else { + SD = LittleFS; + minimum_SD_size = 10000; + } + #endif + printToDebug(PSTR("Starting SD...\r\n")); #ifndef ESP32 // disable w5100 while setting up SD pinMode(10,OUTPUT); @@ -8098,16 +8119,16 @@ void setup() { printToDebug(PSTR("ok\r\n")); } #else - #if defined(ESP32_USE_SD) - if(!SD_MMC.begin("", true)){ - printToDebug(PSTR("failed\r\n")); + if (LogDestination == 0) { + if(!SD_MMC.begin("", true)){ + printToDebug(PSTR("failed\r\n")); + } else { + printToDebug(PSTR("ok\r\n")); + } +// pinMode(TX1, OUTPUT); // temporary workaround until most recent version of SD_MMC.cpp with slot.width = 1 is part of Arduino installation (should be release 1.0.5) } else { - printToDebug(PSTR("ok\r\n")); + LittleFS.begin(true); // format on fail active } -// pinMode(TX1, OUTPUT); // temporary workaround until most recent version of SD_MMC.cpp with slot.width = 1 is part of Arduino installation (should be release 1.0.5) - #else - SD.begin(true); // format on fail active - #endif #endif #else // no SD card #ifndef ESP32 @@ -8283,7 +8304,7 @@ void setup() { freespace = (uint32_t)(freespace*SD.vol()->sectorsPerCluster()/2048); printFmtToDebug(PSTR("%d MB free\r\n"), freespace); #else - uint64_t freespace = SD.totalBytes() - SD.usedBytes(); + uint64_t freespace = totalBytes()-usedBytes(); printFmtToDebug(PSTR("%llu Bytes free\r\n"), freespace); #endif diff -= (millis() - m); //3 sec - delay diff --git a/BSB_LAN/BSB_LAN_EEPROMconfig.h b/BSB_LAN/BSB_LAN_EEPROMconfig.h index 5b36ff4e..298a288e 100644 --- a/BSB_LAN/BSB_LAN_EEPROMconfig.h +++ b/BSB_LAN/BSB_LAN_EEPROMconfig.h @@ -81,6 +81,9 @@ typedef enum{ CF_LOGMODE, // Size: 1 byte. Bitwise value. Logging: 0 - disabled, 1 - SD card logging, 2 - send to MQTT, 4 - send to UDP // Version 11 (ESP32 energy save mode) CF_ESP32_ENERGY_SAVE, +// Version 12 (MQTT server (changed above), network type, log destination) + CF_LOG_DEST, + CF_NETWORK_TYPE, //Maximim version can be 254 (0xFE). In other case initConfigTable() will locked in infinite loop //Maximum options count can be 253 for same reason (or must changing uint8_t type to uint16_t) CF_LAST_OPTION //Virtual option. Must be last in enum. Only for internal usage. @@ -187,6 +190,8 @@ PROGMEM_LATE const configuration_struct config[]={ {CF_DEVICE_FAMILY, 8, CCAT_BUS, CPI_TEXT, CDT_UINT16, OPT_FL_ADVANCED, STR_GF, sizeof(fixed_device_family)},//need reboot {CF_DEVICE_VARIANT, 8, CCAT_BUS, CPI_TEXT, CDT_UINT16, OPT_FL_ADVANCED, STR_GV, sizeof(fixed_device_variant)},//need reboot #ifdef WEBCONFIG +// Activate this line once we can switch programmatically between LAN card and WiFi. Only relevant for ESP32 +// {CF_NETWORK_TYPE, 12,CCAT_IPV4, CPI_DROPDOWN, CDT_BYTE, OPT_FL_BASIC|OPT_FL_ADVANCED, CF_NETWORK_TYPE_TXT, sizeof(network_type)},//need reboot {CF_PASSKEY, 2, CCAT_IPV4, CPI_TEXT, CDT_STRING, OPT_FL_ADVANCED, CF_PASSKEY_TXT, sizeof(PASSKEY)},//immediately apply {CF_BASICAUTH, 2, CCAT_IPV4, CPI_TEXT, CDT_STRING, OPT_FL_ADVANCED, CF_BASICAUTH_TXT, sizeof(USER_PASS)},//immediately apply {CF_DHCP, 2, CCAT_IPV4, CPI_SWITCH, CDT_BYTE, OPT_FL_BASIC|OPT_FL_ADVANCED, CF_DHCP_TXT, sizeof(useDHCP)}, //need reboot @@ -201,6 +206,9 @@ PROGMEM_LATE const configuration_struct config[]={ {CF_WIFI_SSID, 4, CCAT_IPV4, CPI_TEXT, CDT_STRING, OPT_FL_BASIC|OPT_FL_ADVANCED, CF_WIFI_SSID_TXT, sizeof(wifi_ssid)}, //need reboot {CF_WIFI_PASSWORD, 4, CCAT_IPV4, CPI_TEXT, CDT_STRING, OPT_FL_BASIC|OPT_FL_ADVANCED, CF_WIFI_PASSWORD_TXT, sizeof(wifi_pass)},//need reboot {CF_MDNS_HOSTNAME, 6, CCAT_IPV4, CPI_TEXT, CDT_STRING, OPT_FL_ADVANCED, CF_MDNS_HOSTNAME_TXT, sizeof(mDNS_hostname)},//need reboot +#endif +#ifdef ESP32 + {CF_LOG_DEST, 12,CCAT_LOGGING, CPI_DROPDOWN, CDT_BYTE, OPT_FL_BASIC|OPT_FL_ADVANCED, CF_LOG_DEST_TXT, sizeof(LogDestination)}, //need reboot #endif {CF_LOGMODE, 10,CCAT_LOGGING, CPI_CHECKBOXES,CDT_BYTE, OPT_FL_BASIC|OPT_FL_ADVANCED, CF_LOGMODE_TXT, sizeof(LoggingMode)}, //immediately apply {CF_LOGCURRINTERVAL, 1, CCAT_LOGGING, CPI_TEXT, CDT_UINT32, OPT_FL_BASIC|OPT_FL_ADVANCED, CF_LOGCURRINTERVAL_TXT, sizeof(log_interval)},//immediately apply @@ -209,7 +217,7 @@ PROGMEM_LATE const configuration_struct config[]={ {CF_AVERAGESLIST, 1, CCAT_24HAVG, CPI_TEXT, CDT_PROGNRLIST, OPT_FL_BASIC|OPT_FL_ADVANCED, CF_PROGLIST_TXT, sizeof(avg_parameters)},//immediately apply #ifdef WEBCONFIG {CF_MQTT, 2, CCAT_MQTT, CPI_DROPDOWN, CDT_BYTE, OPT_FL_ADVANCED, CF_USE_TXT, sizeof(mqtt_mode)},//need handler - {CF_MQTT_SERVER, 11,CCAT_MQTT, CPI_TEXT, CDT_STRING, OPT_FL_ADVANCED, CF_MQTT_SERVER_TXT, sizeof(mqtt_broker_addr)},//need handler + {CF_MQTT_SERVER, 12,CCAT_MQTT, CPI_TEXT, CDT_STRING, OPT_FL_ADVANCED, CF_MQTT_SERVER_TXT, sizeof(mqtt_broker_addr)},//need handler {CF_MQTT_USERNAME, 2, CCAT_MQTT, CPI_TEXT, CDT_STRING, OPT_FL_ADVANCED, CF_MQTT_USERNAME_TXT, sizeof(MQTTUsername)},//immediately apply {CF_MQTT_PASSWORD, 2, CCAT_MQTT, CPI_TEXT, CDT_STRING, OPT_FL_ADVANCED, CF_MQTT_PASSWORD_TXT, sizeof(MQTTPassword)},//immediately apply {CF_MQTT_DEVICE, 2, CCAT_MQTT, CPI_TEXT, CDT_STRING, OPT_FL_ADVANCED, CF_MQTT_DEVICE_TXT, sizeof(MQTTDeviceID)}, //immediately apply diff --git a/BSB_LAN/BSB_LAN_config.h.default b/BSB_LAN/BSB_LAN_config.h.default index a01a51e0..984f9cbc 100644 --- a/BSB_LAN/BSB_LAN_config.h.default +++ b/BSB_LAN/BSB_LAN_config.h.default @@ -21,7 +21,7 @@ /* Allow to initialize program configuration by reading settings from EEPROM byte UseEEPROM = 0; // Configuration is read from this config file. - // Configuration can be stored in EEPROM but will not used while UseEEPROM is zero. + // Configuration can be stored in EEPROM but will not be used while UseEEPROM is zero. // Set zero for fallback startup in case EEPROM configuration is broken. byte UseEEPROM = 1; // Configuration will be read from EEPROM. This is the default. */ @@ -146,8 +146,9 @@ Does: log bus telegrams to file #define UDP_LOG_PORT 6502 // fixed here, not configurable via web interface -// Use SD card adapter on ESP32-based boards instead of internal flash-based storage -//#define ESP32_USE_SD +// Setting to determine on ESP32 whether to use SD card adapter (if present) or ESP32's internal flash. +// SD card should always be preferred to protect the ESP32's flash from wearing down. +uint8_t LogDestination = 0; // 0 = SD card, 1 = ESP32's flash memory // Log "raw" bus telegrams. Data saved in journal.txt on SD-card. // Telegrams logged upon boot: @@ -336,6 +337,8 @@ byte destinationServer[128] = ""; // URL string to periodically send values to uint16_t destinationPort = 80; // port number for abovementioned server uint32_t destinationDelay = 84600; // interval in seconds to send values +uint8_t network_type = 0; + #define CONFIG_VERSION 34 /************************************************************************************/ diff --git a/BSB_LAN/BSB_LAN_defs.h b/BSB_LAN/BSB_LAN_defs.h index 387af60a..5dd5d46a 100644 --- a/BSB_LAN/BSB_LAN_defs.h +++ b/BSB_LAN/BSB_LAN_defs.h @@ -228,6 +228,7 @@ const char CF_MAC_TXT[] PROGMEM = MENU_TEXT_MAC; const char CF_DHCP_TXT[] PROGMEM = CF_DHCP_TEXT; const char CF_IPADDRESS_TXT[] PROGMEM = CF_IPADDRESS_TEXT; const char CF_TRUSTEDIPADDRESS_TXT[] PROGMEM = CF_TRUSTEDIPADDRESS_TEXT; +const char CF_NETWORK_TYPE_TXT[] PROGMEM = CF_NETWORK_TYPE_TEXT; const char CF_WIFI_SSID_TXT[] PROGMEM = CF_WIFI_SSID_TEXT; const char CF_WIFI_PASSWORD_TXT[] PROGMEM = CF_WIFI_PASSWORD_TEXT; const char CF_MASK_TXT[] PROGMEM = CF_MASK_TEXT; @@ -250,6 +251,7 @@ const char CF_MQTT_USERNAME_TXT[] PROGMEM = CF_MQTT_USERNAME_TEXT; const char CF_MQTT_PASSWORD_TXT[] PROGMEM = CF_MQTT_PASSWORD_TEXT; const char CF_MQTT_TOPIC_TXT[] PROGMEM = CF_MQTT_TOPIC_TEXT; const char CF_MQTT_DEVICE_TXT[] PROGMEM = CF_MQTT_DEVICE_TEXT; +const char CF_LOG_DEST_TXT[] PROGMEM = CF_LOG_DEST_TEXT; const char CF_LOGMODE_TXT[] PROGMEM = CF_LOGMODE_TEXT; const char CF_CHECKUPDATE_TXT[] PROGMEM = CF_CHECKUPDATE_TEXT; const char CF_MDNS_HOSTNAME_TXT[] PROGMEM = CF_MDNS_HOSTNAME_TEXT; @@ -1106,7 +1108,16 @@ const char ENUM_LOGGER_MODE[] PROGMEM_LATEST = { //#ifdef UDP "\0\x08\x08 " ENUM_LOGMODE_08_TEXT //#endif +}; + +const char ENUM_NETWORK_TYPE[] PROGMEM_LATEST = { +"\x00 " ENUM_NETWORK_TYPE_00_TEXT "\0" +"\x01 " ENUM_NETWORK_TYPE_01_TEXT +}; +const char ENUM_LOG_DEST[] PROGMEM_LATEST = { +"\x00 " ENUM_LOG_DEST_00_TEXT "\0" +"\x01 " ENUM_LOG_DEST_01_TEXT }; // Keep this for legacy parameter lists @@ -1334,6 +1345,8 @@ const char ENUM15046[] PROGMEM_LATEST = { //{CMD_END, VT_UNKNOWN, 65535, "", 0, NULL, DEFAULT_FLAG, DEV_ALL} //Prognr 65526 - 65534 is a dirty trick for reducing enumerations addresses to the same type +{0xDEADBEEF, VT_ENUM, 65524, STR65535, sizeof(ENUM_LOG_DEST), ENUM_LOG_DEST, DEFAULT_FLAG, DEV_ALL}, // +{0xDEADBEEF, VT_ENUM, 65525, STR65535, sizeof(ENUM_NETWORK_TYPE), ENUM_NETWORK_TYPE, DEFAULT_FLAG, DEV_ALL}, // {0xDEADBEEF, VT_ENUM, 65526, STR65535, sizeof(ENUM_LOGGER_MODE), ENUM_LOGGER_MODE, DEFAULT_FLAG, DEV_ALL}, // {0xDEADBEEF, VT_ENUM, 65527, STR65535, sizeof(ENUM_PPS_MODE), ENUM_PPS_MODE, DEFAULT_FLAG, DEV_ALL}, // {0xDEADBEEF, VT_ENUM, 65528, STR65535, sizeof(ENUM_WRITEMODE), ENUM_WRITEMODE, DEFAULT_FLAG, DEV_ALL}, // diff --git a/BSB_LAN/localization/LANG_DE.h b/BSB_LAN/localization/LANG_DE.h index 2b64f6c5..b165e694 100644 --- a/BSB_LAN/localization/LANG_DE.h +++ b/BSB_LAN/localization/LANG_DE.h @@ -222,6 +222,7 @@ #define CF_CALCULATION_TEXT "Berechnung" #define CF_PROGLIST_TEXT "Parameter" #define CF_DEVICES_TEXT "Geräte" +#define CF_NETWORK_TYPE_TEXT "Netzwerkgerät" #define CF_DHCP_TEXT "DHCP verwenden" #define CF_IPADDRESS_TEXT "Statische IP-Adresse" #define CF_TRUSTEDIPADDRESS_TEXT "Vertrauenswürdige IP-Adresse" @@ -243,6 +244,7 @@ #define CF_MQTT_PASSWORD_TEXT "Passwort" #define CF_MQTT_TOPIC_TEXT "Topic Präfix" #define CF_MQTT_DEVICE_TEXT "Geräte ID" +#define CF_LOG_DEST_TEXT "Speicherziel" #define CF_LOGMODE_TEXT "Log-Modus" #define CF_CHECKUPDATE_TEXT "Auf Updates überprüfen" #define CF_RGT1_SENSOR_TEXT "RGT1/PPS Temperatursensor Parameter" @@ -2258,6 +2260,12 @@ #define ENUM_LOGMODE_04_TEXT "An MQTT-Broker senden" #define ENUM_LOGMODE_08_TEXT "Als UDP-Nachrichten senden" +#define ENUM_LOG_DEST_00_TEXT "SD-Karte" +#define ENUM_LOG_DEST_01_TEXT "Interner Flash-Speicher" + +#define ENUM_NETWORK_TYPE_00_TEXT "LAN" +#define ENUM_NETWORK_TYPE_01_TEXT "WiFi" + #define ENUM20_01_TEXT "English" #define ENUM20_02_TEXT "Deutsch" #define ENUM20_03_TEXT "Francais" diff --git a/BSB_LAN/localization/LANG_EN.h b/BSB_LAN/localization/LANG_EN.h index a10aadd0..ec213ae5 100644 --- a/BSB_LAN/localization/LANG_EN.h +++ b/BSB_LAN/localization/LANG_EN.h @@ -210,6 +210,10 @@ #define CF_RGT3_PRES_PIN_TEXT "RU3 presence button: pin" #define CF_SHOW_UNKNOWN_TEXT "Display unknown parameters" #define CF_ENERGY_SAVE_TEXT "ESP32 energy saving" +#define CF_LOG_DEST_TEXT "Storage device" + +#define ENUM_LOG_DEST_00_TEXT "SD card" +#define ENUM_LOG_DEST_01_TEXT "Internal flash storage" #define CAT_GENERAL_TEXT "General" #define CAT_IPV4_TEXT "Network"