Feature: Added additional event log descriptions and implemented i18n

This commit is contained in:
Thomas Basler 2023-10-11 13:22:42 +02:00
parent dc5b5e837f
commit f1a8c2ea82
4 changed files with 213 additions and 120 deletions

View File

@ -7,117 +7,166 @@
#include <cstring> #include <cstring>
const std::array<const AlarmMessage_t, ALARM_MSG_COUNT> AlarmLogParser::_alarmMessages = { { const std::array<const AlarmMessage_t, ALARM_MSG_COUNT> AlarmLogParser::_alarmMessages = { {
{ AlarmMessageType_t::ALL, 1, "Inverter start" }, { AlarmMessageType_t::ALL, 1, "Inverter start", "Wechselrichter gestartet", "L'onduleur a démarré" },
{ AlarmMessageType_t::ALL, 2, "Time calibration" }, { AlarmMessageType_t::ALL, 2, "Time calibration", "", "" },
{ AlarmMessageType_t::ALL, 3, "EEPROM reading and writing error during operation" }, { AlarmMessageType_t::ALL, 3, "EEPROM reading and writing error during operation", "", "" },
{ AlarmMessageType_t::ALL, 4, "Offline" }, { AlarmMessageType_t::ALL, 4, "Offline", "Offline", "Non connecté" },
{ AlarmMessageType_t::ALL, 11, "Grid voltage surge" },
{ AlarmMessageType_t::ALL, 12, "Grid voltage sharp drop" }, { AlarmMessageType_t::ALL, 11, "Grid voltage surge", "", "" },
{ AlarmMessageType_t::ALL, 13, "Grid frequency mutation" }, { AlarmMessageType_t::ALL, 12, "Grid voltage sharp drop", "", "" },
{ AlarmMessageType_t::ALL, 14, "Grid phase mutation" }, { AlarmMessageType_t::ALL, 13, "Grid frequency mutation", "", "" },
{ AlarmMessageType_t::ALL, 15, "Grid transient fluctuation" }, { AlarmMessageType_t::ALL, 14, "Grid phase mutation", "", "" },
{ AlarmMessageType_t::ALL, 36, "INV overvoltage or overcurrent" }, { AlarmMessageType_t::ALL, 15, "Grid transient fluctuation", "", "" },
{ AlarmMessageType_t::ALL, 46, "FB overvoltage" },
{ AlarmMessageType_t::ALL, 47, "FB overcurrent" }, { AlarmMessageType_t::ALL, 36, "INV overvoltage or overcurrent", "", "" },
{ AlarmMessageType_t::ALL, 48, "FB clamp overvoltage" },
{ AlarmMessageType_t::ALL, 49, "FB clamp overvoltage" }, { AlarmMessageType_t::ALL, 46, "FB overvoltage", "FB Überspannung", "" },
{ AlarmMessageType_t::ALL, 61, "Calibration parameter error" }, { AlarmMessageType_t::ALL, 47, "FB overcurrent", "FB Überstrom", "" },
{ AlarmMessageType_t::ALL, 62, "System configuration parameter error" }, { AlarmMessageType_t::ALL, 48, "FB clamp overvoltage", "", "" },
{ AlarmMessageType_t::ALL, 63, "Abnormal power generation data" }, { AlarmMessageType_t::ALL, 49, "FB clamp overvoltage", "", "" },
{ AlarmMessageType_t::ALL, 71, "VW function enable" },
{ AlarmMessageType_t::ALL, 72, "FW function enable" }, { AlarmMessageType_t::ALL, 61, "Calibration parameter error", "", "" },
{ AlarmMessageType_t::ALL, 73, "TW function enable" }, { AlarmMessageType_t::ALL, 62, "System configuration parameter error", "", "" },
{ AlarmMessageType_t::ALL, 95, "PV module in suspected shadow" }, { AlarmMessageType_t::ALL, 63, "Abnormal power generation data", "", "" },
{ AlarmMessageType_t::ALL, 96, "PV module in suspected shadow" },
{ AlarmMessageType_t::ALL, 97, "PV module in suspected shadow" }, { AlarmMessageType_t::ALL, 71, "Grid overvoltage load reduction (VW) function enable", "", "" },
{ AlarmMessageType_t::ALL, 98, "PV module in suspected shadow" }, { AlarmMessageType_t::ALL, 72, "Power grid over-frequency load reduction (FW) function enable", "", "" },
{ AlarmMessageType_t::ALL, 121, "Over temperature protection" }, { AlarmMessageType_t::ALL, 73, "Over-temperature load reduction (TW) function enable", "", "" },
{ AlarmMessageType_t::ALL, 122, "Microinverter is suspected of being stolen" },
{ AlarmMessageType_t::ALL, 123, "Locked by remote control" }, { AlarmMessageType_t::ALL, 95, "PV-1: Module in suspected shadow", "", "" },
{ AlarmMessageType_t::ALL, 124, "Shut down by remote control" }, { AlarmMessageType_t::ALL, 96, "PV-2: Module in suspected shadow", "", "" },
{ AlarmMessageType_t::ALL, 125, "Grid configuration parameter error" }, { AlarmMessageType_t::ALL, 97, "PV-3: Module in suspected shadow", "", "" },
{ AlarmMessageType_t::ALL, 126, "Software error code 126" }, { AlarmMessageType_t::ALL, 98, "PV-4: Module in suspected shadow", "", "" },
{ AlarmMessageType_t::ALL, 127, "Firmware error" },
{ AlarmMessageType_t::ALL, 128, "Software error code 128" }, { AlarmMessageType_t::ALL, 121, "Over temperature protection", "Übertemperaturschutz", "Protection antisurchauffe" },
{ AlarmMessageType_t::ALL, 129, "Abnormal bias" }, { AlarmMessageType_t::ALL, 122, "Microinverter is suspected of being stolen", "", "" },
{ AlarmMessageType_t::ALL, 130, "Offline" }, { AlarmMessageType_t::ALL, 123, "Locked by remote control", "", "" },
{ AlarmMessageType_t::ALL, 141, "Grid: Grid overvoltage" }, { AlarmMessageType_t::ALL, 124, "Shut down by remote control", "Durch Fernsteuerung abgeschaltet", "Arrêt par télécommande" },
{ AlarmMessageType_t::ALL, 142, "Grid: 10 min value grid overvoltage" }, { AlarmMessageType_t::ALL, 125, "Grid configuration parameter error", "Parameterfehler bei der Konfiguration des Elektrizitätsnetzes", "Erreur de paramètre de configuration du réseau" },
{ AlarmMessageType_t::ALL, 143, "Grid: Grid undervoltage" }, { AlarmMessageType_t::ALL, 126, "Software error code 126", "", "" },
{ AlarmMessageType_t::ALL, 144, "Grid: Grid overfrequency" }, { AlarmMessageType_t::ALL, 127, "Firmware error", "Firmwarefehler", "Erreur du micrologiciel" },
{ AlarmMessageType_t::ALL, 145, "Grid: Grid underfrequency" }, { AlarmMessageType_t::ALL, 128, "Hardware configuration error", "", "" },
{ AlarmMessageType_t::ALL, 146, "Grid: Rapid grid frequency change rate" }, { AlarmMessageType_t::ALL, 129, "Abnormal bias", "Abnormaler Trend", "Polarisation anormale" },
{ AlarmMessageType_t::ALL, 147, "Grid: Power grid outage" }, { AlarmMessageType_t::ALL, 130, "Offline", "Offline", "Non connecté" },
{ AlarmMessageType_t::ALL, 148, "Grid: Grid disconnection" },
{ AlarmMessageType_t::ALL, 149, "Grid: Island detected" }, { AlarmMessageType_t::ALL, 141, "Grid: Grid overvoltage", "Netz: Netzüberspannung", "Réseau: Surtension du réseau" },
{ AlarmMessageType_t::ALL, 150, "DCI exceeded" }, { AlarmMessageType_t::ALL, 142, "Grid: 10 min value grid overvoltage", "Netz: 10 Minuten-Mittelwert der Netzüberspannung", "Réseau: Valeur de surtension du réseau pendant 10 min" },
{ AlarmMessageType_t::HMT, 171, "Grid: Abnormal phase difference between phase to phase" }, { AlarmMessageType_t::ALL, 143, "Grid: Grid undervoltage", "Netz: Netzunterspannung", "Réseau: Sous-tension du réseau" },
{ AlarmMessageType_t::ALL, 181, "Abnormal insulation impedance" }, { AlarmMessageType_t::ALL, 144, "Grid: Grid overfrequency", "Netz: Netzüberfrequenz", "Réseau: Surfréquence du réseau" },
{ AlarmMessageType_t::ALL, 182, "Abnormal grounding" }, { AlarmMessageType_t::ALL, 145, "Grid: Grid underfrequency", "Netz: Netzunterfrequenz", "Réseau: Sous-fréquence du réseau" },
{ AlarmMessageType_t::ALL, 205, "MPPT-A: Input overvoltage" }, { AlarmMessageType_t::ALL, 146, "Grid: Rapid grid frequency change rate", "Netz: Schnelle Wechselrate der Netzfrequenz", "Réseau: Taux de fluctuation rapide de la fréquence du réseau" },
{ AlarmMessageType_t::ALL, 206, "MPPT-B: Input overvoltage" }, { AlarmMessageType_t::ALL, 147, "Grid: Power grid outage", "Netz: Eletrizitätsnetzausfall", "Réseau: Panne du réseau électrique" },
{ AlarmMessageType_t::ALL, 207, "MPPT-A: Input undervoltage" }, { AlarmMessageType_t::ALL, 148, "Grid: Grid disconnection", "Netz: Netztrennung", "Réseau: Déconnexion du réseau" },
{ AlarmMessageType_t::ALL, 208, "MPPT-B: Input undervoltage" }, { AlarmMessageType_t::ALL, 149, "Grid: Island detected", "Netz: Inselbetrieb festgestellt", "Réseau: Détection dîlots" },
{ AlarmMessageType_t::ALL, 209, "PV-1: No input" },
{ AlarmMessageType_t::ALL, 210, "PV-2: No input" }, { AlarmMessageType_t::ALL, 150, "DCI exceeded", "", "" },
{ AlarmMessageType_t::ALL, 211, "PV-3: No input" }, { AlarmMessageType_t::HMT, 171, "Grid: Abnormal phase difference between phase to phase", "", "" },
{ AlarmMessageType_t::ALL, 212, "PV-4: No input" }, { AlarmMessageType_t::ALL, 181, "Abnormal insulation impedance", "", "" },
{ AlarmMessageType_t::ALL, 213, "MPPT-A: PV-1 & PV-2 abnormal wiring" }, { AlarmMessageType_t::ALL, 182, "Abnormal grounding", "", "" },
{ AlarmMessageType_t::ALL, 214, "MPPT-B: PV-3 & PV-4 abnormal wiring" },
{ AlarmMessageType_t::ALL, 215, "PV-1: Input overvoltage" }, { AlarmMessageType_t::ALL, 205, "MPPT-A: Input overvoltage", "MPPT-A: Eingangsüberspannung", "MPPT-A: Surtension dentrée" },
{ AlarmMessageType_t::HMT, 215, "MPPT-C: Input overvoltage" }, { AlarmMessageType_t::ALL, 206, "MPPT-B: Input overvoltage", "MPPT-B: Eingangsüberspannung", "MPPT-B: Surtension dentrée" },
{ AlarmMessageType_t::ALL, 216, "PV-1: Input undervoltage" }, { AlarmMessageType_t::ALL, 207, "MPPT-A: Input undervoltage", "MPPT-A: Eingangsunterspannung", "MPPT-A: Sous-tension dentrée" },
{ AlarmMessageType_t::HMT, 216, "MPPT-C: Input undervoltage" }, { AlarmMessageType_t::ALL, 208, "MPPT-B: Input undervoltage", "MPPT-B: Eingangsunterspannung", "MPPT-B: Sous-tension dentrée" },
{ AlarmMessageType_t::ALL, 217, "PV-2: Input overvoltage" },
{ AlarmMessageType_t::HMT, 217, "PV-5: No input" }, { AlarmMessageType_t::ALL, 209, "PV-1: No input", "PV-1: Kein Eingang", "PV-1: Aucune entrée" },
{ AlarmMessageType_t::ALL, 218, "PV-2: Input undervoltage" }, { AlarmMessageType_t::ALL, 210, "PV-2: No input", "PV-2: Kein Eingang", "PV-2: Aucune entrée" },
{ AlarmMessageType_t::HMT, 218, "PV-6: No input" }, { AlarmMessageType_t::ALL, 211, "PV-3: No input", "PV-3: Kein Eingang", "PV-3: Aucune entrée" },
{ AlarmMessageType_t::ALL, 219, "PV-3: Input overvoltage" }, { AlarmMessageType_t::ALL, 212, "PV-4: No input", "PV-4: Kein Eingang", "PV-4: Aucune entrée" },
{ AlarmMessageType_t::HMT, 219, "MPPT-C: PV-5 & PV-6 abnormal wiring" },
{ AlarmMessageType_t::ALL, 220, "PV-3: Input undervoltage" }, { AlarmMessageType_t::ALL, 213, "MPPT-A: PV-1 & PV-2 abnormal wiring", "MPPT-A: Verdrahtungsfehler bei PV-1 und PV-2", "MPPT-A: Câblages photovoltaïques 1 et 2 anormaux" },
{ AlarmMessageType_t::ALL, 221, "PV-4: Input overvoltage" }, { AlarmMessageType_t::ALL, 214, "MPPT-B: PV-3 & PV-4 abnormal wiring", "MPPT-B: Verdrahtungsfehler bei PV-3 und PV-4", "MPPT-B: Câblages photovoltaïques 3 et 4 anormaux" },
{ AlarmMessageType_t::HMT, 221, "Abnormal wiring of grid neutral line" },
{ AlarmMessageType_t::ALL, 222, "PV-4: Input undervoltage" }, { AlarmMessageType_t::ALL, 215, "PV-1: Input overvoltage", "PV-1: Eingangsüberspannung", "PV-1: Surtension dentrée" },
{ AlarmMessageType_t::ALL, 301, "Hardware error code 301 - FB short circuit failure" }, { AlarmMessageType_t::HMT, 215, "MPPT-C: Input overvoltage", "MPPT-C: Eingangsüberspannung", "MPPT-C: Surtension dentrée" },
{ AlarmMessageType_t::ALL, 302, "Hardware error code 302 - FB short circuit failure" }, { AlarmMessageType_t::ALL, 216, "PV-1: Input undervoltage", "PV-1: Eingangsunterspannung", "PV-1: Sous-tension dentrée" },
{ AlarmMessageType_t::ALL, 303, "Hardware error code 303 - FB overcurrent protection failure" }, { AlarmMessageType_t::HMT, 216, "MPPT-C: Input undervoltage", "MPPT-C: Eingangsunterspannung", "MPPT-C: Sous-tension dentrée" },
{ AlarmMessageType_t::ALL, 304, "Hardware error code 304 - FB overcurrent protection failure" }, { AlarmMessageType_t::ALL, 217, "PV-2: Input overvoltage", "PV-2: Eingangsüberspannung", "PV-2: Surtension dentrée" },
{ AlarmMessageType_t::ALL, 305, "Hardware error code 305 - FB clamp circuit failure" }, { AlarmMessageType_t::HMT, 217, "PV-5: No input", "PV-5: Kein Eingang", "PV-5: Aucune entrée" },
{ AlarmMessageType_t::ALL, 306, "Hardware error code 306 - FB clamp circuit failure" }, { AlarmMessageType_t::ALL, 218, "PV-2: Input undervoltage", "PV-2: Eingangsunterspannung", "PV-2: Sous-tension dentrée" },
{ AlarmMessageType_t::ALL, 307, "Hardware error code 307 - INV power device failure" }, { AlarmMessageType_t::HMT, 218, "PV-6: No input", "PV-6: Kein Eingang", "PV-6: Aucune entrée" },
{ AlarmMessageType_t::ALL, 308, "Hardware error code 308 - INV overcurrent or overvoltage protection failure" }, { AlarmMessageType_t::ALL, 219, "PV-3: Input overvoltage", "PV-3: Eingangsüberspannung", "PV-3: Surtension dentrée" },
{ AlarmMessageType_t::ALL, 309, "Hardware error code 309" }, { AlarmMessageType_t::HMT, 219, "MPPT-C: PV-5 & PV-6 abnormal wiring", "", "" },
{ AlarmMessageType_t::ALL, 310, "Hardware error code 310" }, { AlarmMessageType_t::ALL, 220, "PV-3: Input undervoltage", "PV-3: Eingangsunterspannung", "PV-3: Sous-tension dentrée" },
{ AlarmMessageType_t::ALL, 311, "Hardware error code 311" }, { AlarmMessageType_t::ALL, 221, "PV-4: Input overvoltage", "PV-4: Eingangsüberspannung", "PV-4: Surtension dentrée" },
{ AlarmMessageType_t::ALL, 312, "Hardware error code 312" }, { AlarmMessageType_t::HMT, 221, "Abnormal wiring of grid neutral line", "", "" },
{ AlarmMessageType_t::ALL, 313, "Hardware error code 313" }, { AlarmMessageType_t::ALL, 222, "PV-4: Input undervoltage", "PV-4: Eingangsunterspannung", "PV-4: Sous-tension dentrée" },
{ AlarmMessageType_t::ALL, 314, "Hardware error code 314" },
{ AlarmMessageType_t::ALL, 1111, "Repeater" }, { AlarmMessageType_t::ALL, 301, "FB-A: internal short circuit failure", "", "" },
{ AlarmMessageType_t::ALL, 5041, "Error code-04 Port 1" }, { AlarmMessageType_t::ALL, 302, "FB-B: internal short circuit failure", "", "" },
{ AlarmMessageType_t::ALL, 5042, "Error code-04 Port 2" },
{ AlarmMessageType_t::ALL, 5043, "Error code-04 Port 3" }, { AlarmMessageType_t::ALL, 303, "FB-A: overcurrent protection failure", "", "" },
{ AlarmMessageType_t::ALL, 5044, "Error code-04 Port 4" }, { AlarmMessageType_t::ALL, 304, "FB-B: overcurrent protection failure", "", "" },
{ AlarmMessageType_t::ALL, 5051, "PV Input 1 Overvoltage/Undervoltage" },
{ AlarmMessageType_t::ALL, 5052, "PV Input 2 Overvoltage/Undervoltage" }, { AlarmMessageType_t::ALL, 305, "FB-A: clamp circuit failure", "", "" },
{ AlarmMessageType_t::ALL, 5053, "PV Input 3 Overvoltage/Undervoltage" }, { AlarmMessageType_t::ALL, 306, "FB-B: clamp circuit failure", "", "" },
{ AlarmMessageType_t::ALL, 5054, "PV Input 4 Overvoltage/Undervoltage" },
{ AlarmMessageType_t::ALL, 5060, "Abnormal bias" }, { AlarmMessageType_t::ALL, 307, "INV power device failure", "", "" },
{ AlarmMessageType_t::ALL, 5070, "Over temperature protection" }, { AlarmMessageType_t::ALL, 308, "INV overcurrent or overvoltage protection failure", "", "" },
{ AlarmMessageType_t::ALL, 5080, "Grid Overvoltage/Undervoltage" },
{ AlarmMessageType_t::ALL, 5090, "Grid Overfrequency/Underfrequency" }, { AlarmMessageType_t::ALL, 309, "Hardware error code 309", "Hardwarefehlercode 309", "" },
{ AlarmMessageType_t::ALL, 5100, "Island detected" }, { AlarmMessageType_t::ALL, 310, "Hardware error code 310", "Hardwarefehlercode 310", "" },
{ AlarmMessageType_t::ALL, 5110, "GFDI" }, { AlarmMessageType_t::ALL, 311, "Hardware error code 311", "Hardwarefehlercode 311", "" },
{ AlarmMessageType_t::ALL, 5120, "EEPROM reading and writing error" }, { AlarmMessageType_t::ALL, 312, "Hardware error code 312", "Hardwarefehlercode 312", "" },
{ AlarmMessageType_t::ALL, 5141, "FB clamp overvoltage" }, { AlarmMessageType_t::ALL, 313, "Hardware error code 313", "Hardwarefehlercode 313", "" },
{ AlarmMessageType_t::ALL, 5142, "FB clamp overvoltage" }, { AlarmMessageType_t::ALL, 314, "Hardware error code 314", "Hardwarefehlercode 314", "" },
{ AlarmMessageType_t::ALL, 5143, "FB clamp overvoltage" },
{ AlarmMessageType_t::ALL, 5144, "FB clamp overvoltage" }, { AlarmMessageType_t::ALL, 1111, "Repeater", "", "" },
{ AlarmMessageType_t::ALL, 5150, "10 min value grid overvoltage" },
{ AlarmMessageType_t::ALL, 5160, "Grid transient fluctuation" }, { AlarmMessageType_t::ALL, 2000, "Standby", "", "" },
{ AlarmMessageType_t::ALL, 5200, "Firmware error" }, { AlarmMessageType_t::ALL, 2001, "Standby", "", "" },
{ AlarmMessageType_t::ALL, 8310, "Shut down by remote control" }, { AlarmMessageType_t::ALL, 2002, "Standby", "", "" },
{ AlarmMessageType_t::ALL, 8320, "Locked by remote control" }, { AlarmMessageType_t::ALL, 2003, "Standby", "", "" },
{ AlarmMessageType_t::ALL, 9000, "Microinverter is suspected of being stolen" }, { AlarmMessageType_t::ALL, 2004, "Standby", "", "" },
{ AlarmMessageType_t::ALL, 3001, "Reset", "", "" },
{ AlarmMessageType_t::ALL, 3002, "Reset", "", "" },
{ AlarmMessageType_t::ALL, 3003, "Reset", "", "" },
{ AlarmMessageType_t::ALL, 3004, "Reset", "", "" },
{ AlarmMessageType_t::ALL, 5011, "PV-1: MOSFET overcurrent (II)", "PV-1: MOSFET Überstrom (II)", "" },
{ AlarmMessageType_t::ALL, 5012, "PV-2: MOSFET overcurrent (II)", "PV-2: MOSFET Überstrom (II)", "" },
{ AlarmMessageType_t::ALL, 5013, "PV-3: MOSFET overcurrent (II)", "PV-3: MOSFET Überstrom (II)", "" },
{ AlarmMessageType_t::ALL, 5014, "PV-4: MOSFET overcurrent (II)", "PV-4: MOSFET Überstrom (II)", "" },
{ AlarmMessageType_t::ALL, 5020, "H-bridge MOSFET overcurrent or H-bridge overvoltage", "H-Brücken-MOSFET-Überstrom oder H-Brücken-Überspannung", "" },
{ AlarmMessageType_t::ALL, 5041, "PV-1: current overcurrent (II)", "", "" },
{ AlarmMessageType_t::ALL, 5042, "PV-2: current overcurrent (II)", "", "" },
{ AlarmMessageType_t::ALL, 5043, "PV-3: current overcurrent (II)", "", "" },
{ AlarmMessageType_t::ALL, 5044, "PV-4: current overcurrent (II)", "", "" },
{ AlarmMessageType_t::ALL, 5051, "PV-1: Overvoltage/Undervoltage", "", "" },
{ AlarmMessageType_t::ALL, 5052, "PV-2: Overvoltage/Undervoltage", "", "" },
{ AlarmMessageType_t::ALL, 5053, "PV-3: Overvoltage/Undervoltage", "", "" },
{ AlarmMessageType_t::ALL, 5054, "PV-4: Overvoltage/Undervoltage", "", "" },
{ AlarmMessageType_t::ALL, 5060, "Abnormal bias", "Abnormaler Trend", "Polarisation anormale" },
{ AlarmMessageType_t::ALL, 5070, "Over temperature protection", "Übertemperaturschutz", "Protection antisurchauffe" },
{ AlarmMessageType_t::ALL, 5080, "Grid Overvoltage/Undervoltage", "", "" },
{ AlarmMessageType_t::ALL, 5090, "Grid Overfrequency/Underfrequency", "", "" },
{ AlarmMessageType_t::ALL, 5100, "Island detected", "Inselbetrieb festgestellt", "Détection dîlots" },
{ AlarmMessageType_t::ALL, 5110, "GFDI failure", "", "" },
{ AlarmMessageType_t::ALL, 5120, "EEPROM reading and writing error", "", "" },
{ AlarmMessageType_t::ALL, 5141, "FB clamp overvoltage", "", "" },
{ AlarmMessageType_t::ALL, 5142, "FB clamp overvoltage", "", "" },
{ AlarmMessageType_t::ALL, 5143, "FB clamp overvoltage", "", "" },
{ AlarmMessageType_t::ALL, 5144, "FB clamp overvoltage", "", "" },
{ AlarmMessageType_t::ALL, 5150, "10 min value grid overvoltage", "10 Minuten-Mittelwert der Netzüberspannung", "Valeur de surtension du réseau pendant 10 min" },
{ AlarmMessageType_t::ALL, 5160, "Grid transient fluctuation", "", "" },
{ AlarmMessageType_t::ALL, 5200, "Firmware error", "Firmwarefehler", "Erreur du micrologiciel" },
{ AlarmMessageType_t::ALL, 5511, "PV-1: MOSFET overcurrent-H", "PV-1: MOSFET Überstrom-H", "" },
{ AlarmMessageType_t::ALL, 5512, "PV-2: MOSFET overcurrent-H", "PV-2: MOSFET Überstrom-H", "" },
{ AlarmMessageType_t::ALL, 5513, "PV-3: MOSFET overcurrent-H", "PV-3: MOSFET Überstrom-H", "" },
{ AlarmMessageType_t::ALL, 5514, "PV-4: MOSFET overcurrent-H", "PV-4: MOSFET Überstrom-H", "" },
{ AlarmMessageType_t::ALL, 5520, "H-bridge MOSFET overcurrent or H-bridge overvoltage", "H-Brücken-MOSFET-Überstrom oder H-Brücken-Überspannung", "" },
{ AlarmMessageType_t::ALL, 8310, "Shut down by remote control", "Durch Fernsteuerung abgeschaltet", "Arrêt par télécommande" },
{ AlarmMessageType_t::ALL, 8320, "Locked by remote control", "", "" },
{ AlarmMessageType_t::ALL, 9000, "Microinverter is suspected of being stolen", "", "" },
} }; } };
AlarmLogParser::AlarmLogParser() AlarmLogParser::AlarmLogParser()
@ -165,7 +214,7 @@ void AlarmLogParser::setMessageType(AlarmMessageType_t type)
_messageType = type; _messageType = type;
} }
void AlarmLogParser::getLogEntry(uint8_t entryId, AlarmLogEntry_t* entry) void AlarmLogParser::getLogEntry(uint8_t entryId, AlarmLogEntry_t* entry, AlarmMessageLocale_t locale)
{ {
uint8_t entryStartOffset = 2 + entryId * ALARM_LOG_ENTRY_SIZE; uint8_t entryStartOffset = 2 + entryId * ALARM_LOG_ENTRY_SIZE;
@ -194,19 +243,42 @@ void AlarmLogParser::getLogEntry(uint8_t entryId, AlarmLogEntry_t* entry)
entry->EndTime += (endTimeOffset + timezoneOffset); entry->EndTime += (endTimeOffset + timezoneOffset);
} }
switch (locale) {
case AlarmMessageLocale_t::DE:
entry->Message = "Unbekannt";
break;
case AlarmMessageLocale_t::FR:
entry->Message = "Inconnu";
break;
default:
entry->Message = "Unknown"; entry->Message = "Unknown";
}
for (auto& msg : _alarmMessages) { for (auto& msg : _alarmMessages) {
if (msg.MessageId == entry->MessageId) { if (msg.MessageId == entry->MessageId) {
if (msg.InverterType == _messageType) { if (msg.InverterType == _messageType) {
entry->Message = msg.Message; entry->Message = getLocaleMessage(&msg, locale);
break; break;
} else if (msg.InverterType == AlarmMessageType_t::ALL) { } else if (msg.InverterType == AlarmMessageType_t::ALL) {
entry->Message = msg.Message; entry->Message = getLocaleMessage(&msg, locale);
} }
} }
} }
} }
String AlarmLogParser::getLocaleMessage(const AlarmMessage_t* msg, AlarmMessageLocale_t locale)
{
if (locale == AlarmMessageLocale_t::DE) {
return msg->Message_de[0] != '\0' ? msg->Message_de : msg->Message_en;
}
if (locale == AlarmMessageLocale_t::FR) {
return msg->Message_fr[0] != '\0' ? msg->Message_fr : msg->Message_en;
}
return msg->Message_en;
}
int AlarmLogParser::getTimezoneOffset() int AlarmLogParser::getTimezoneOffset()
{ {
// see: https://stackoverflow.com/questions/13804095/get-the-time-zone-gmt-offset-in-c/44063597#44063597 // see: https://stackoverflow.com/questions/13804095/get-the-time-zone-gmt-offset-in-c/44063597#44063597

View File

@ -8,7 +8,7 @@
#define ALARM_LOG_ENTRY_SIZE 12 #define ALARM_LOG_ENTRY_SIZE 12
#define ALARM_LOG_PAYLOAD_SIZE (ALARM_LOG_ENTRY_COUNT * ALARM_LOG_ENTRY_SIZE + 4) #define ALARM_LOG_PAYLOAD_SIZE (ALARM_LOG_ENTRY_COUNT * ALARM_LOG_ENTRY_SIZE + 4)
#define ALARM_MSG_COUNT 111 #define ALARM_MSG_COUNT 130
struct AlarmLogEntry_t { struct AlarmLogEntry_t {
uint16_t MessageId; uint16_t MessageId;
@ -22,10 +22,18 @@ enum class AlarmMessageType_t {
HMT HMT
}; };
enum class AlarmMessageLocale_t {
EN,
DE,
FR
};
typedef struct { typedef struct {
AlarmMessageType_t InverterType; AlarmMessageType_t InverterType;
uint16_t MessageId; uint16_t MessageId;
String Message; char Message_en[62];
char Message_de[63];
char Message_fr[64];
} AlarmMessage_t; } AlarmMessage_t;
class AlarmLogParser : public Parser { class AlarmLogParser : public Parser {
@ -35,7 +43,7 @@ public:
void appendFragment(uint8_t offset, uint8_t* payload, uint8_t len); void appendFragment(uint8_t offset, uint8_t* payload, uint8_t len);
uint8_t getEntryCount(); uint8_t getEntryCount();
void getLogEntry(uint8_t entryId, AlarmLogEntry_t* entry); void getLogEntry(uint8_t entryId, AlarmLogEntry_t* entry, AlarmMessageLocale_t locale = AlarmMessageLocale_t::EN);
void setLastAlarmRequestSuccess(LastCommandSuccess status); void setLastAlarmRequestSuccess(LastCommandSuccess status);
LastCommandSuccess getLastAlarmRequestSuccess(); LastCommandSuccess getLastAlarmRequestSuccess();
@ -44,6 +52,7 @@ public:
private: private:
static int getTimezoneOffset(); static int getTimezoneOffset();
String getLocaleMessage(const AlarmMessage_t *msg, AlarmMessageLocale_t locale);
uint8_t _payloadAlarmLog[ALARM_LOG_PAYLOAD_SIZE]; uint8_t _payloadAlarmLog[ALARM_LOG_PAYLOAD_SIZE];
uint8_t _alarmLogLength = 0; uint8_t _alarmLogLength = 0;

View File

@ -35,6 +35,18 @@ void WebApiEventlogClass::onEventlogStatus(AsyncWebServerRequest* request)
serial = strtoll(s.c_str(), NULL, 16); serial = strtoll(s.c_str(), NULL, 16);
} }
AlarmMessageLocale_t locale = AlarmMessageLocale_t::EN;
if (request->hasParam("locale")) {
String s = request->getParam("locale")->value();
s.toLowerCase();
if (s == "de") {
locale = AlarmMessageLocale_t::DE;
}
if (s == "fr") {
locale = AlarmMessageLocale_t::FR;
}
}
auto inv = Hoymiles.getInverterBySerial(serial); auto inv = Hoymiles.getInverterBySerial(serial);
if (inv != nullptr) { if (inv != nullptr) {
@ -47,7 +59,7 @@ void WebApiEventlogClass::onEventlogStatus(AsyncWebServerRequest* request)
JsonObject eventsObject = eventsArray.createNestedObject(); JsonObject eventsObject = eventsArray.createNestedObject();
AlarmLogEntry_t entry; AlarmLogEntry_t entry;
inv->EventLog()->getLogEntry(logEntry, &entry); inv->EventLog()->getLogEntry(logEntry, &entry, locale);
eventsObject["message_id"] = entry.MessageId; eventsObject["message_id"] = entry.MessageId;
eventsObject["message"] = entry.Message; eventsObject["message"] = entry.Message;

View File

@ -580,7 +580,7 @@ export default defineComponent({
}, },
onShowEventlog(serial: number) { onShowEventlog(serial: number) {
this.eventLogLoading = true; this.eventLogLoading = true;
fetch("/api/eventlog/status?inv=" + serial, { headers: authHeader() }) fetch("/api/eventlog/status?inv=" + serial + "&locale=" + this.$i18n.locale, { headers: authHeader() })
.then((response) => handleResponse(response, this.$emitter, this.$router)) .then((response) => handleResponse(response, this.$emitter, this.$router))
.then((data) => { .then((data) => {
this.eventLogList = data; this.eventLogList = data;