namespace InnovEnergy.App.Backend.Services; /// /// Static knowledge base for Sinexcel and Growatt alarms. /// Provides pre-defined diagnostics without requiring Mistral API calls. /// Data sourced from vendor alarm documentation. /// public static class AlarmKnowledgeBase { /// /// Tries to find a pre-defined diagnostic for the given alarm description. /// Returns null if the alarm is not in the knowledge base. /// public static DiagnosticResponse? TryGetDiagnosis(string alarmDescription) { if (string.IsNullOrWhiteSpace(alarmDescription)) return null; // Normalize the description for lookup var normalized = alarmDescription.Trim(); // Try exact match first if (SinexcelAlarms.TryGetValue(normalized, out var sinexcelDiag)) return sinexcelDiag; if (GrowattAlarms.TryGetValue(normalized, out var growattDiag)) return growattDiag; // Try case-insensitive match for Sinexcel (alarm names may vary in casing) var lowerDesc = normalized.ToLowerInvariant(); foreach (var kvp in SinexcelAlarms) { if (kvp.Key.ToLowerInvariant() == lowerDesc) return kvp.Value; } return null; } // ── Sinexcel Alarms ────────────────────────────────────────────────────── // Register addresses: 0x1048 - 0x10D5 // Recovery types: AUTO (wait), MANUAL (fix and restart), SERVICE (contact service) private static readonly IReadOnlyDictionary SinexcelAlarms = new Dictionary { // Grid-related alarms ["AbnormalGridVoltage"] = new() { Explanation = "The inverter has detected that the grid voltage is outside the acceptable operating range. This is an ERROR level condition requiring manual intervention.", Causes = new[] { "Utility grid voltage fluctuation", "Poor grid connection", "Local transformer issues", "High load demand on grid" }, NextSteps = new[] { "Check the grid voltage with a multimeter", "Verify grid connection wiring", "Fix the underlying cause", "Restart the inverter after the issue is resolved" } }, ["AbnormalGridFrequency"] = new() { Explanation = "The inverter has detected that the grid frequency is outside the acceptable range (typically 50Hz or 60Hz +/- tolerance). This is an ERROR level condition.", Causes = new[] { "Grid instability", "Generator frequency drift", "Local grid issues" }, NextSteps = new[] { "Check grid frequency stability", "If using a generator, verify its frequency setting", "Fix the cause, then restart the inverter" } }, ["InvertedSequenceOfGridVoltage"] = new() { Explanation = "The phase sequence of the three-phase grid voltage is reversed. This is a WARNING level condition.", Causes = new[] { "Incorrect wiring of grid phases (L1, L2, L3)", "Installation error" }, NextSteps = new[] { "Power off the system safely", "Swap any two phase wires to correct the sequence", "Restart the inverter" } }, ["GridVoltagePhaseLoss"] = new() { Explanation = "One or more phases of the three-phase grid connection are missing. This is an ERROR level condition.", Causes = new[] { "Blown fuse on one phase", "Loose connection on a phase wire", "Grid-side breaker tripped", "Cable damage" }, NextSteps = new[] { "Check all three phase connections", "Verify fuses and breakers", "Fix the missing phase connection", "Restart after repair" } }, ["AbnormalGridCurrent"] = new() { Explanation = "The grid current is abnormal, which may indicate overcurrent or current imbalance. This is an ERROR level condition.", Causes = new[] { "Grid-side short circuit", "Overloaded system", "Faulty current sensor", "Ground fault" }, NextSteps = new[] { "Check for short circuits", "Reduce system load", "Verify current sensor operation", "Fix the cause, then restart" } }, // Output-related alarms ["AbnormalOutputVoltage"] = new() { Explanation = "The inverter's output voltage is outside acceptable limits. This is an ERROR level condition.", Causes = new[] { "Internal inverter fault", "Overload condition", "Grid voltage influence" }, NextSteps = new[] { "Check connected load", "Verify inverter settings", "Fix the cause, then restart the inverter" } }, ["AbnormalOutputFrequency"] = new() { Explanation = "The inverter's output frequency is abnormal. This is an ERROR level condition.", Causes = new[] { "Internal control system fault", "Heavy load transients" }, NextSteps = new[] { "Reduce load if possible", "Fix the cause, then restart the inverter" } }, ["AbnormalNullLine"] = new() { Explanation = "The neutral line connection is abnormal. This is an ERROR level condition.", Causes = new[] { "Loose or missing neutral wire", "Neutral wire damage", "Incorrect wiring" }, NextSteps = new[] { "Power off safely", "Check neutral wire connection", "Fix wiring issues", "Restart after repair" } }, ["AbnormalOffGridOutputVoltage"] = new() { Explanation = "The off-grid (backup) output voltage is abnormal. This is an ERROR level condition.", Causes = new[] { "Overload on backup output", "Internal inverter issue", "Battery voltage too low" }, NextSteps = new[] { "Check backup load", "Verify battery state", "Fix the cause, then restart" } }, // Temperature alarms ["ExcessivelyHighAmbientTemperature"] = new() { Explanation = "The ambient temperature around the inverter is too high. This is a WARNING - the inverter may reduce output to protect itself.", Causes = new[] { "Poor ventilation", "High environmental temperature", "Direct sunlight exposure", "Enclosure overheating" }, NextSteps = new[] { "Improve ventilation around the inverter", "Provide shade if outdoors", "Consider adding cooling", "Restart after temperature drops" } }, ["ExcessiveRadiatorTemperature"] = new() { Explanation = "The inverter's heat sink/radiator temperature is too high. This is a WARNING level condition.", Causes = new[] { "Blocked air vents", "Fan failure", "High ambient temperature", "Excessive load" }, NextSteps = new[] { "Clean air vents and filters", "Check fan operation", "Reduce load temporarily", "Fix the cause, then restart" } }, ["PcbOvertemperature"] = new() { Explanation = "The printed circuit board temperature is too high. This is a WARNING level condition.", Causes = new[] { "Poor cooling", "High ambient temperature", "Excessive power output" }, NextSteps = new[] { "Improve ventilation", "Check fan operation", "Allow cooling before restart" } }, ["DcConverterOvertemperature"] = new() { Explanation = "The DC converter section is overheating. This is a WARNING level condition.", Causes = new[] { "High charging/discharging current", "Poor cooling", "Ambient temperature too high" }, NextSteps = new[] { "Reduce power flow", "Improve ventilation", "Fix the cause, then restart" } }, ["InverterOvertemperatureAlarm"] = new() { Explanation = "The inverter temperature is approaching dangerous levels. This is a WARNING.", Causes = new[] { "Overload", "Poor ventilation", "Fan failure", "High ambient temperature" }, NextSteps = new[] { "Reduce load", "Check cooling system", "Fix the cause, then restart" } }, ["InverterOvertemperature"] = new() { Explanation = "The inverter has overheated. This is a WARNING level condition.", Causes = new[] { "Sustained overload", "Cooling system failure", "Environmental conditions" }, NextSteps = new[] { "Allow inverter to cool down", "Check fans and ventilation", "Fix the cause, then restart" } }, ["DcConverterOvertemperatureAlarm"] = new() { Explanation = "The DC converter temperature alarm is active. This is a WARNING.", Causes = new[] { "High power throughput", "Inadequate cooling" }, NextSteps = new[] { "Reduce power flow temporarily", "Check cooling", "Fix the cause, then restart" } }, // Insulation and safety alarms ["InsulationFault"] = new() { Explanation = "An insulation fault has been detected, indicating possible current leakage to ground. This is an ERROR level safety condition.", Causes = new[] { "Damaged cable insulation", "Moisture ingress", "Component insulation breakdown", "Ground fault in PV array" }, NextSteps = new[] { "Do not touch the system", "Power off safely", "Check all cable insulation", "Test insulation resistance", "Repair before restart" } }, ["LeakageProtectionFault"] = new() { Explanation = "The ground fault/leakage current protection has tripped. This is an ERROR level safety condition.", Causes = new[] { "Ground fault in the system", "Damaged insulation", "Moisture in connections", "Faulty RCD/GFCI" }, NextSteps = new[] { "Power off the system", "Check for ground faults", "Inspect cable insulation", "Fix the cause before restart" } }, ["AbnormalLeakageSelfCheck"] = new() { Explanation = "The leakage current self-check has failed. This is an ERROR level condition.", Causes = new[] { "Self-check circuit fault", "Ground fault present", "Sensor malfunction" }, NextSteps = new[] { "Power off safely", "Check system grounding", "Fix the cause, then restart" } }, ["PoorGrounding"] = new() { Explanation = "Poor grounding connection detected. This is a WARNING level safety condition.", Causes = new[] { "Loose ground connection", "Corroded ground terminal", "High ground resistance", "Missing ground wire" }, NextSteps = new[] { "Check all ground connections", "Clean corroded terminals", "Verify ground resistance", "Fix grounding, then restart" } }, // Fan and cooling alarms ["FanFault"] = new() { Explanation = "The cooling fan has failed or is not operating correctly. This is an ERROR level condition that can lead to overheating.", Causes = new[] { "Fan motor failure", "Fan blade obstruction", "Loose fan connector", "Control circuit fault" }, NextSteps = new[] { "Check fan operation visually", "Remove any obstructions", "Check fan power connection", "Replace fan if faulty" } }, // Power supply alarms ["AuxiliaryPowerFault"] = new() { Explanation = "The auxiliary power supply inside the inverter has failed. This is an ERROR level condition.", Causes = new[] { "Internal power supply failure", "Input voltage issue", "Component failure" }, NextSteps = new[] { "Power cycle the inverter", "If persistent, contact service technician" } }, // Model and configuration alarms ["ModelCapacityFault"] = new() { Explanation = "The inverter has detected a model/capacity configuration mismatch. This is an ERROR level condition.", Causes = new[] { "Incorrect model configuration", "Firmware mismatch", "Hardware mismatch" }, NextSteps = new[] { "Verify inverter model settings", "Check firmware version", "Fix configuration, then restart" } }, // Lightning and surge protection ["AbnormalLightningArrester"] = new() { Explanation = "The surge protection device (lightning arrester) has failed or triggered. This is an ERROR level condition.", Causes = new[] { "Lightning strike damage", "Surge event", "SPD component failure" }, NextSteps = new[] { "Check SPD indicator", "Replace SPD if triggered", "Fix the cause, then restart" } }, // Island protection ["IslandProtection"] = new() { Explanation = "Island protection is active - the inverter has disconnected from the grid to prevent back-feeding during a grid outage. This is an INFO level condition that typically auto-recovers.", Causes = new[] { "Grid power outage", "Grid voltage/frequency outside limits", "Intentional grid disconnection" }, NextSteps = new[] { "Wait for grid to stabilize", "The inverter will automatically reconnect when grid is normal", "Monitor until it clears" } }, // Battery 1 alarms ["Battery1NotConnected"] = new() { Explanation = "Battery 1 is not detected or not connected. This is an ERROR level condition.", Causes = new[] { "Battery disconnect switch open", "Loose battery cable", "Battery BMS shutdown", "Battery fuse blown" }, NextSteps = new[] { "Check battery disconnect switch", "Verify battery cable connections", "Check battery BMS status", "Fix connection, then restart" } }, ["Battery1Overvoltage"] = new() { Explanation = "Battery 1 voltage is too high. This is a WARNING level condition - charging will be limited.", Causes = new[] { "Overcharging", "BMS malfunction", "Incorrect battery voltage setting", "Cell imbalance" }, NextSteps = new[] { "Check battery SOC", "Verify charging settings", "Check BMS operation", "Fix the cause, then restart" } }, ["Battery1Undervoltage"] = new() { Explanation = "Battery 1 voltage is too low. This is a WARNING level condition - discharging will be limited.", Causes = new[] { "Battery deeply discharged", "Cell failure", "BMS cutoff", "High load drain" }, NextSteps = new[] { "Allow battery to charge", "Check for excessive loads", "Verify battery health", "Fix the cause, then restart" } }, ["Battery1DischargeEnd"] = new() { Explanation = "Battery 1 has reached its discharge end point (minimum SOC). This is an INFO level condition that auto-recovers when charged.", Causes = new[] { "Battery fully discharged to SOC limit", "High power consumption" }, NextSteps = new[] { "Wait for battery to recharge from PV or grid", "Monitor until it clears" } }, ["Battery1Inverted"] = new() { Explanation = "Battery 1 polarity is reversed. This is a WARNING level condition - do not operate!", Causes = new[] { "Battery cables connected in reverse", "Installation error" }, NextSteps = new[] { "IMMEDIATELY power off the system", "Correct battery cable polarity", "Check for damage before restart" } }, ["Battery1OverloadTimeout"] = new() { Explanation = "Battery 1 has been overloaded for too long. This is an ERROR level condition.", Causes = new[] { "Sustained high load", "Undersized battery", "Battery degradation" }, NextSteps = new[] { "Reduce system load", "Check battery capacity", "Fix the cause, then restart" } }, ["Battery1SoftStartFailure"] = new() { Explanation = "Battery 1 failed to soft-start properly. This is a WARNING level condition.", Causes = new[] { "Pre-charge circuit fault", "Battery voltage mismatch", "Contactor issue" }, NextSteps = new[] { "Check battery voltage", "Verify pre-charge circuit", "Fix the cause, then restart" } }, ["Battery1PowerTubeFault"] = new() { Explanation = "Battery 1 power electronics (IGBT/MOSFET) have failed. This is a PROTECTION level condition requiring service.", Causes = new[] { "Power semiconductor failure", "Overcurrent damage", "Manufacturing defect" }, NextSteps = new[] { "Do not restart the system", "Contact service technician", "Hardware repair required" } }, ["Battery1InsufficientPower"] = new() { Explanation = "Battery 1 cannot provide sufficient power for the load. This is an INFO level condition.", Causes = new[] { "Low state of charge", "High load demand", "Battery capacity limitation" }, NextSteps = new[] { "Wait for battery to recharge", "Reduce load if possible", "Monitor until it clears" } }, ["Battery1BackupProhibited"] = new() { Explanation = "Battery 1 is prohibited from providing backup power. This is a WARNING level condition.", Causes = new[] { "BMS protection active", "Battery in maintenance mode", "SOC too low for backup" }, NextSteps = new[] { "Check BMS settings", "Verify battery SOC", "Fix the cause, then restart" } }, // Battery 2 alarms (similar to Battery 1) ["Battery2NotConnected"] = new() { Explanation = "Battery 2 is not detected or not connected. This is an ERROR level condition.", Causes = new[] { "Battery disconnect switch open", "Loose battery cable", "Battery BMS shutdown", "Battery fuse blown" }, NextSteps = new[] { "Check battery disconnect switch", "Verify battery cable connections", "Check battery BMS status", "Fix connection, then restart" } }, ["Battery2Overvoltage"] = new() { Explanation = "Battery 2 voltage is too high. This is a WARNING level condition.", Causes = new[] { "Overcharging", "BMS malfunction", "Incorrect voltage setting" }, NextSteps = new[] { "Check battery SOC", "Verify charging settings", "Fix the cause, then restart" } }, ["Battery2Undervoltage"] = new() { Explanation = "Battery 2 voltage is too low. This is a WARNING level condition.", Causes = new[] { "Battery deeply discharged", "Cell failure", "BMS cutoff" }, NextSteps = new[] { "Allow battery to charge", "Check battery health", "Fix the cause, then restart" } }, ["Battery2DischargeEnd"] = new() { Explanation = "Battery 2 has reached its discharge end point. This is an INFO level condition.", Causes = new[] { "Battery fully discharged to SOC limit" }, NextSteps = new[] { "Wait for battery to recharge", "Monitor until it clears" } }, ["Battery2Inverted"] = new() { Explanation = "Battery 2 polarity is reversed. This is a WARNING - do not operate!", Causes = new[] { "Battery cables connected in reverse" }, NextSteps = new[] { "IMMEDIATELY power off", "Correct battery polarity", "Check for damage" } }, ["Battery2OverloadTimeout"] = new() { Explanation = "Battery 2 has been overloaded for too long. This is an ERROR level condition.", Causes = new[] { "Sustained high load", "Battery degradation" }, NextSteps = new[] { "Reduce system load", "Fix the cause, then restart" } }, ["Battery2SoftStartFailure"] = new() { Explanation = "Battery 2 failed to soft-start properly. This is a WARNING level condition.", Causes = new[] { "Pre-charge circuit fault", "Voltage mismatch" }, NextSteps = new[] { "Check battery voltage", "Fix the cause, then restart" } }, ["Battery2PowerTubeFault"] = new() { Explanation = "Battery 2 power electronics have failed. This is a PROTECTION level condition.", Causes = new[] { "Power semiconductor failure" }, NextSteps = new[] { "Do not restart", "Contact service technician" } }, ["Battery2InsufficientPower"] = new() { Explanation = "Battery 2 cannot provide sufficient power. This is a WARNING level condition.", Causes = new[] { "Low SOC", "High load demand" }, NextSteps = new[] { "Wait for recharge", "Reduce load", "Fix the cause, then restart" } }, ["Battery2BackupProhibited"] = new() { Explanation = "Battery 2 is prohibited from providing backup power. This is a WARNING.", Causes = new[] { "BMS protection active", "SOC too low" }, NextSteps = new[] { "Check BMS settings", "Fix the cause, then restart" } }, // Lithium battery specific alarms ["LithiumBattery1ChargeForbidden"] = new() { Explanation = "Lithium battery 1 BMS has forbidden charging. This is a WARNING level condition.", Causes = new[] { "Battery fully charged", "Temperature out of range", "BMS protection active", "Cell imbalance" }, NextSteps = new[] { "Check battery temperature", "Verify BMS status", "Fix the cause, then restart" } }, ["LithiumBattery1DischargeForbidden"] = new() { Explanation = "Lithium battery 1 BMS has forbidden discharging. This is a WARNING level condition.", Causes = new[] { "Battery empty", "Temperature out of range", "BMS protection", "Low voltage protection" }, NextSteps = new[] { "Allow battery to charge", "Check temperature", "Fix the cause, then restart" } }, ["LithiumBattery2ChargeForbidden"] = new() { Explanation = "Lithium battery 2 BMS has forbidden charging. This is a WARNING level condition.", Causes = new[] { "Battery fully charged", "Temperature out of range", "BMS protection" }, NextSteps = new[] { "Check battery status", "Fix the cause, then restart" } }, ["LithiumBattery2DischargeForbidden"] = new() { Explanation = "Lithium battery 2 BMS has forbidden discharging. This is a WARNING level condition.", Causes = new[] { "Battery empty", "Temperature out of range", "BMS protection" }, NextSteps = new[] { "Allow battery to charge", "Fix the cause, then restart" } }, ["LithiumBattery1Full"] = new() { Explanation = "Lithium battery 1 is fully charged. This is a WARNING indicating charging will stop.", Causes = new[] { "Battery at 100% SOC", "Cell voltage at maximum" }, NextSteps = new[] { "Normal condition if intentional", "Monitor battery health" } }, ["LithiumBattery1DischargeEnd"] = new() { Explanation = "Lithium battery 1 has reached discharge end. This is a WARNING.", Causes = new[] { "Battery at minimum SOC" }, NextSteps = new[] { "Allow battery to recharge", "Fix the cause, then restart" } }, ["LithiumBattery2Full"] = new() { Explanation = "Lithium battery 2 is fully charged. This is a WARNING.", Causes = new[] { "Battery at 100% SOC" }, NextSteps = new[] { "Normal condition if intentional" } }, ["LithiumBattery2DischargeEnd"] = new() { Explanation = "Lithium battery 2 has reached discharge end. This is a WARNING.", Causes = new[] { "Battery at minimum SOC" }, NextSteps = new[] { "Allow battery to recharge" } }, ["LeadBatteryTemperatureAbnormality"] = new() { Explanation = "Lead-acid battery temperature is abnormal. This is an ERROR level condition.", Causes = new[] { "Overheating", "Temperature sensor fault", "Environmental temperature extreme" }, NextSteps = new[] { "Check battery temperature", "Verify sensor", "Fix the cause, then restart" } }, ["BatteryAccessMethodError"] = new() { Explanation = "Battery access method configuration error. This is a WARNING.", Causes = new[] { "Incorrect configuration", "Communication setup error" }, NextSteps = new[] { "Check battery configuration", "Fix the cause, then restart" } }, // PV 1 alarms ["Pv1NotAccessed"] = new() { Explanation = "PV string 1 is not detected or accessible. This is a WARNING level condition.", Causes = new[] { "PV disconnector open", "Cable damage", "PV module fault", "No sunlight" }, NextSteps = new[] { "Check PV disconnector", "Verify PV cable connections", "Check for shading", "Fix the cause, then restart" } }, ["Pv1Overvoltage"] = new() { Explanation = "PV string 1 voltage exceeds maximum input voltage. This is a WARNING - PV input will be limited.", Causes = new[] { "Too many PV modules in series", "Low temperature increasing voltage", "Design error" }, NextSteps = new[] { "Check PV string configuration", "Verify Voc at low temperature", "Reduce modules if needed" } }, ["AbnormalPv1CurrentSharing"] = new() { Explanation = "PV string 1 current sharing is abnormal. This is an ERROR level condition.", Causes = new[] { "Mismatched PV modules", "Partial shading", "Module fault" }, NextSteps = new[] { "Check for shading", "Verify module matching", "Fix the cause, then restart" } }, ["Pv1PowerTubeFault"] = new() { Explanation = "PV 1 DC converter power electronics have failed. This is a PROTECTION level condition.", Causes = new[] { "IGBT/MOSFET failure", "Overcurrent damage" }, NextSteps = new[] { "Do not restart", "Contact service technician" } }, ["Pv1SoftStartFailure"] = new() { Explanation = "PV 1 failed to soft-start properly. This is a WARNING level condition.", Causes = new[] { "Pre-charge circuit fault", "Voltage mismatch" }, NextSteps = new[] { "Check PV voltage", "Fix the cause, then restart" } }, ["Pv1OverloadTimeout"] = new() { Explanation = "PV 1 has been overloaded for too long. This is an ERROR level condition.", Causes = new[] { "Excessive PV power", "DC converter limitation" }, NextSteps = new[] { "Check PV sizing", "Fix the cause, then restart" } }, ["Pv1InsufficientPower"] = new() { Explanation = "PV string 1 is not providing enough power. This is an INFO level condition.", Causes = new[] { "Low irradiance", "Shading", "Cloud cover", "Evening/morning" }, NextSteps = new[] { "Wait for better sunlight conditions", "Check for shading", "Monitor until it clears" } }, ["Photovoltaic1Overcurrent"] = new() { Explanation = "PV string 1 current exceeds limits. This is a WARNING level condition.", Causes = new[] { "PV array oversized", "Ground fault", "Short circuit" }, NextSteps = new[] { "Check PV configuration", "Look for ground faults", "Fix the cause, then restart" } }, // PV 2 alarms ["Pv2NotAccessed"] = new() { Explanation = "PV string 2 is not detected or accessible. This is a WARNING level condition.", Causes = new[] { "PV disconnector open", "Cable damage", "No sunlight" }, NextSteps = new[] { "Check PV disconnector", "Verify connections", "Fix the cause, then restart" } }, ["Pv2Overvoltage"] = new() { Explanation = "PV string 2 voltage exceeds maximum. This is a WARNING level condition.", Causes = new[] { "Too many PV modules in series", "Low temperature" }, NextSteps = new[] { "Check PV configuration", "Reduce modules if needed" } }, ["AbnormalPv2CurrentSharing"] = new() { Explanation = "PV string 2 current sharing is abnormal. This is an ERROR level condition.", Causes = new[] { "Mismatched modules", "Partial shading" }, NextSteps = new[] { "Check for shading", "Fix the cause, then restart" } }, ["Pv2PowerTubeFault"] = new() { Explanation = "PV 2 power electronics have failed. This is a PROTECTION level condition.", Causes = new[] { "Power semiconductor failure" }, NextSteps = new[] { "Do not restart", "Contact service technician" } }, ["Pv2SoftStartFailure"] = new() { Explanation = "PV 2 failed to soft-start. This is a WARNING level condition.", Causes = new[] { "Pre-charge fault", "Voltage mismatch" }, NextSteps = new[] { "Check PV voltage", "Fix the cause, then restart" } }, ["Pv2OverloadTimeout"] = new() { Explanation = "PV 2 has been overloaded for too long. This is an ERROR level condition.", Causes = new[] { "Excessive PV power" }, NextSteps = new[] { "Check PV sizing", "Fix the cause, then restart" } }, ["Pv2InsufficientPower"] = new() { Explanation = "PV string 2 is not providing enough power. This is an INFO level condition.", Causes = new[] { "Low irradiance", "Shading" }, NextSteps = new[] { "Wait for better conditions", "Monitor until it clears" } }, // PV 3 alarms ["Pv3NotConnected"] = new() { Explanation = "PV string 3 is not connected. This is an ERROR level condition.", Causes = new[] { "PV disconnector open", "Cable issue" }, NextSteps = new[] { "Check connections", "Fix the cause, then restart" } }, ["Pv3Overvoltage"] = new() { Explanation = "PV string 3 voltage exceeds maximum. This is a WARNING.", Causes = new[] { "Too many modules in series" }, NextSteps = new[] { "Check PV configuration" } }, ["Pv3AverageCurrentAnomaly"] = new() { Explanation = "PV string 3 current is abnormal. This is a WARNING.", Causes = new[] { "Module mismatch", "Shading" }, NextSteps = new[] { "Check modules", "Fix the cause, then restart" } }, ["Pv3PowerTubeFailure"] = new() { Explanation = "PV 3 power electronics failed. This is a PROTECTION level condition.", Causes = new[] { "Hardware failure" }, NextSteps = new[] { "Do not restart", "Contact service" } }, ["Pv3SoftStartFailure"] = new() { Explanation = "PV 3 soft start failed. This is a WARNING.", Causes = new[] { "Pre-charge fault" }, NextSteps = new[] { "Fix the cause, then restart" } }, ["Pv3OverloadTimeout"] = new() { Explanation = "PV 3 overloaded too long. This is an ERROR.", Causes = new[] { "Excessive power" }, NextSteps = new[] { "Fix the cause, then restart" } }, ["Pv3ReverseConnection"] = new() { Explanation = "PV string 3 is connected with reversed polarity. This is a PROTECTION level condition.", Causes = new[] { "Installation error", "Wrong cable connection" }, NextSteps = new[] { "Do not restart", "Contact service to correct wiring" } }, // PV 4 alarms ["Pv4NotConnected"] = new() { Explanation = "PV string 4 is not connected. This is an ERROR.", Causes = new[] { "Disconnector open", "Cable issue" }, NextSteps = new[] { "Check connections", "Fix the cause, then restart" } }, ["Pv4Overvoltage"] = new() { Explanation = "PV string 4 voltage exceeds maximum. This is a WARNING.", Causes = new[] { "Too many modules" }, NextSteps = new[] { "Check configuration" } }, ["Pv4AverageCurrentAnomaly"] = new() { Explanation = "PV string 4 current abnormal. This is a WARNING.", Causes = new[] { "Module mismatch" }, NextSteps = new[] { "Check modules" } }, ["Pv4PowerTubeFailure"] = new() { Explanation = "PV 4 power electronics failed. This is a PROTECTION level condition.", Causes = new[] { "Hardware failure" }, NextSteps = new[] { "Do not restart", "Contact service" } }, ["Pv4SoftStartFailure"] = new() { Explanation = "PV 4 soft start failed. This is a WARNING.", Causes = new[] { "Pre-charge fault" }, NextSteps = new[] { "Fix the cause, then restart" } }, ["Pv4OverloadTimeout"] = new() { Explanation = "PV 4 overloaded too long. This is an ERROR.", Causes = new[] { "Excessive power" }, NextSteps = new[] { "Fix the cause, then restart" } }, ["Pv4ReverseConnection"] = new() { Explanation = "PV string 4 polarity reversed. This is a PROTECTION condition.", Causes = new[] { "Wrong wiring" }, NextSteps = new[] { "Do not restart", "Contact service" } }, ["InsufficientPhotovoltaicPower"] = new() { Explanation = "Not enough PV power available. This is a WARNING.", Causes = new[] { "Low irradiance", "Evening/cloudy" }, NextSteps = new[] { "Wait for better conditions", "Fix the cause, then restart" } }, // DC Bus alarms ["DcBusOvervoltage"] = new() { Explanation = "The DC bus voltage is too high. This is a WARNING level condition.", Causes = new[] { "Excessive charging power", "Regenerative load", "Control fault" }, NextSteps = new[] { "Check power balance", "Fix the cause, then restart" } }, ["DcBusUndervoltage"] = new() { Explanation = "The DC bus voltage is too low. This is a WARNING level condition.", Causes = new[] { "Excessive load", "Power supply issue", "Battery depletion" }, NextSteps = new[] { "Reduce load", "Check power sources", "Fix the cause, then restart" } }, ["DcBusVoltageUnbalance"] = new() { Explanation = "The DC bus voltage is unbalanced. This is an ERROR level condition.", Causes = new[] { "Capacitor failure", "Control issue", "Asymmetric loading" }, NextSteps = new[] { "Check capacitor bank", "Fix the cause, then restart" } }, ["BusSlowOvervoltage"] = new() { Explanation = "DC bus slow over-voltage detected. This is a WARNING.", Causes = new[] { "Gradual voltage rise", "Charging imbalance" }, NextSteps = new[] { "Check charging control", "Fix the cause, then restart" } }, ["HardwareBusOvervoltage"] = new() { Explanation = "Hardware-level bus over-voltage protection tripped. This is a PROTECTION level condition.", Causes = new[] { "Severe overvoltage event", "Component failure" }, NextSteps = new[] { "Do not restart", "Contact service technician" } }, ["BusSoftStartFailure"] = new() { Explanation = "DC bus failed to soft-start. This is a WARNING.", Causes = new[] { "Pre-charge fault", "Capacitor issue" }, NextSteps = new[] { "Check pre-charge circuit", "Fix the cause, then restart" } }, // Inverter power tube and hardware faults ["InverterPowerTubeFault"] = new() { Explanation = "The main inverter power electronics (IGBT/MOSFET) have failed. This is a PROTECTION level condition requiring professional service.", Causes = new[] { "Power semiconductor failure", "Overcurrent damage", "Short circuit damage", "Thermal damage" }, NextSteps = new[] { "Do not attempt to restart", "Contact service technician", "Hardware repair/replacement required" } }, ["HardwareOvercurrent"] = new() { Explanation = "Hardware overcurrent protection has tripped. This is a PROTECTION level condition.", Causes = new[] { "Short circuit", "Severe overload", "Component failure" }, NextSteps = new[] { "Do not restart", "Contact service technician" } }, ["DcConverterOvervoltage"] = new() { Explanation = "DC converter voltage too high. This is a WARNING.", Causes = new[] { "Input overvoltage", "Control issue" }, NextSteps = new[] { "Check input voltage", "Fix the cause, then restart" } }, ["DcConverterHardwareOvervoltage"] = new() { Explanation = "DC converter hardware overvoltage protection. This is a PROTECTION condition.", Causes = new[] { "Severe overvoltage" }, NextSteps = new[] { "Do not restart", "Contact service" } }, ["DcConverterOvercurrent"] = new() { Explanation = "DC converter current too high. This is a WARNING.", Causes = new[] { "Overload", "Short circuit" }, NextSteps = new[] { "Reduce load", "Fix the cause, then restart" } }, ["DcConverterHardwareOvercurrent"] = new() { Explanation = "DC converter hardware overcurrent protection. This is a PROTECTION condition.", Causes = new[] { "Severe overcurrent" }, NextSteps = new[] { "Do not restart", "Contact service" } }, ["DcConverterResonatorOvercurrent"] = new() { Explanation = "DC converter resonator overcurrent. This is a WARNING.", Causes = new[] { "Resonance condition", "Control issue" }, NextSteps = new[] { "Fix the cause, then restart" } }, // Overload alarms ["SystemOutputOverload"] = new() { Explanation = "The total system output is overloaded. This is an ERROR level condition.", Causes = new[] { "Too many loads connected", "Load exceeds inverter capacity", "Short circuit in load" }, NextSteps = new[] { "Disconnect some loads", "Check for short circuits", "Fix the cause, then restart" } }, ["InverterOverload"] = new() { Explanation = "The inverter is overloaded. This is an ERROR level condition.", Causes = new[] { "Load exceeds rated power", "Inrush current from motors", "Short circuit" }, NextSteps = new[] { "Reduce connected load", "Check load power rating", "Fix the cause, then restart" } }, ["InverterOverloadTimeout"] = new() { Explanation = "The inverter has been overloaded for too long. This is an ERROR level condition.", Causes = new[] { "Sustained overload condition", "Undersized inverter for load" }, NextSteps = new[] { "Permanently reduce load", "Consider larger inverter", "Fix the cause, then restart" } }, ["LoadPowerOverload"] = new() { Explanation = "Load power exceeds system capacity. This is an ERROR.", Causes = new[] { "Excessive load" }, NextSteps = new[] { "Reduce load", "Fix the cause, then restart" } }, ["BalancedCircuitOverloadTimeout"] = new() { Explanation = "Balanced circuit overloaded too long. This is an ERROR.", Causes = new[] { "Unbalanced loading", "Phase overload" }, NextSteps = new[] { "Balance loads", "Fix the cause, then restart" } }, // Soft start failures ["InverterSoftStartFailure"] = new() { Explanation = "The inverter failed during soft-start sequence. This is a WARNING level condition.", Causes = new[] { "Pre-charge resistor fault", "Contactor failure", "DC bus capacitor issue", "Control board fault" }, NextSteps = new[] { "Power cycle the system", "Check DC bus voltage", "If persistent, contact service", "Fix the cause, then restart" } }, // DSP and firmware alarms ["Dsp1ParameterSettingFault"] = new() { Explanation = "DSP 1 parameter configuration error. This is an ERROR level condition.", Causes = new[] { "Incorrect parameter setting", "Firmware corruption", "Configuration mismatch" }, NextSteps = new[] { "Check parameter settings", "Reset to defaults if needed", "Fix the cause, then restart" } }, ["Dsp2ParameterSettingFault"] = new() { Explanation = "DSP 2 parameter configuration error. This is an ERROR level condition.", Causes = new[] { "Incorrect parameter setting", "Firmware corruption" }, NextSteps = new[] { "Check parameter settings", "Fix the cause, then restart" } }, ["DspVersionCompatibilityFault"] = new() { Explanation = "DSP firmware version is incompatible. This is an ERROR level condition.", Causes = new[] { "Firmware mismatch between components", "Incomplete firmware update" }, NextSteps = new[] { "Update firmware to compatible version", "Contact support if needed" } }, ["CpldVersionCompatibilityFault"] = new() { Explanation = "CPLD version is incompatible. This is an ERROR level condition.", Causes = new[] { "Firmware mismatch", "Incomplete update" }, NextSteps = new[] { "Update firmware", "Fix the cause, then restart" } }, ["CpldCommunicationFault"] = new() { Explanation = "Communication with CPLD failed. This is an ERROR level condition.", Causes = new[] { "Internal communication bus fault", "CPLD failure" }, NextSteps = new[] { "Power cycle the system", "If persistent, contact service" } }, ["DspCommunicationFault"] = new() { Explanation = "Communication with DSP failed. This is an ERROR level condition.", Causes = new[] { "Internal communication bus fault", "DSP failure" }, NextSteps = new[] { "Power cycle the system", "If persistent, contact service" } }, // Output DC component alarms ["OutputVoltageDcOverlimit"] = new() { Explanation = "DC component in output voltage exceeds limit. This is a WARNING.", Causes = new[] { "Control drift", "Sensor offset", "Hardware issue" }, NextSteps = new[] { "Restart the inverter", "If persistent, contact service" } }, ["OutputCurrentDcOverlimit"] = new() { Explanation = "DC component in output current exceeds limit. This is a WARNING.", Causes = new[] { "Control issue", "Sensor fault" }, NextSteps = new[] { "Restart the inverter", "Fix the cause, then restart" } }, // Relay alarms ["RelaySelfCheckFails"] = new() { Explanation = "Relay self-check has failed. This is an ERROR level condition.", Causes = new[] { "Relay contact fault", "Relay driver fault", "Welded contacts" }, NextSteps = new[] { "Check relay operation", "Fix the cause, then restart" } }, ["InverterRelayOpen"] = new() { Explanation = "Inverter relay is unexpectedly open. This is an ERROR.", Causes = new[] { "Relay driver fault", "Protection trip" }, NextSteps = new[] { "Check protection status", "Fix the cause, then restart" } }, ["InverterRelayShortCircuit"] = new() { Explanation = "Inverter relay has a short circuit (welded contacts). This is a PROTECTION condition.", Causes = new[] { "Welded relay contacts", "Relay failure" }, NextSteps = new[] { "Do not restart", "Contact service to replace relay" } }, ["OpenCircuitOfPowerGridRelay"] = new() { Explanation = "Grid relay is unexpectedly open. This is an ERROR.", Causes = new[] { "Relay fault", "Protection active" }, NextSteps = new[] { "Check relay", "Fix the cause, then restart" } }, ["ShortCircuitOfPowerGridRelay"] = new() { Explanation = "Grid relay has welded contacts. This is an ERROR.", Causes = new[] { "Relay failure" }, NextSteps = new[] { "Contact service", "Fix the cause, then restart" } }, ["GeneratorRelayOpenCircuit"] = new() { Explanation = "Generator relay is open. This is an ERROR.", Causes = new[] { "Relay fault" }, NextSteps = new[] { "Check relay", "Fix the cause, then restart" } }, ["GeneratorRelayShortCircuit"] = new() { Explanation = "Generator relay has welded. This is an ERROR.", Causes = new[] { "Relay failure" }, NextSteps = new[] { "Contact service", "Fix the cause, then restart" } }, // Abnormal inverter ["AbnormalInverter"] = new() { Explanation = "General inverter abnormality detected. This is an ERROR level condition.", Causes = new[] { "Various internal faults", "Control system issue" }, NextSteps = new[] { "Power cycle the inverter", "Check for other specific alarms", "Fix the cause, then restart" } }, // Parallel operation alarms ["ParallelCommunicationAlarm"] = new() { Explanation = "Communication between parallel inverters has failed. This is an ERROR level condition.", Causes = new[] { "Communication cable fault", "Parallel interface failure", "Settings mismatch" }, NextSteps = new[] { "Check parallel communication cables", "Verify settings match", "Fix the cause, then restart" } }, ["ParallelModuleMissing"] = new() { Explanation = "A parallel module is missing from the system. This is a WARNING.", Causes = new[] { "Module offline", "Communication loss", "Power failure on module" }, NextSteps = new[] { "Check all parallel modules", "Fix the cause, then restart" } }, ["DuplicateMachineNumbersForParallelModules"] = new() { Explanation = "Two parallel modules have the same ID number. This is a WARNING.", Causes = new[] { "Configuration error", "Duplicate addressing" }, NextSteps = new[] { "Assign unique IDs to each module", "Fix the cause, then restart" } }, ["ParameterConflictInParallelModule"] = new() { Explanation = "Parameter conflict between parallel modules. This is a WARNING.", Causes = new[] { "Mismatched settings between units" }, NextSteps = new[] { "Synchronize settings across all units", "Fix the cause, then restart" } }, // System derating ["SystemDerating"] = new() { Explanation = "The system is operating at reduced power (derating). This is a WARNING.", Causes = new[] { "High temperature", "Voltage out of range", "Component limitation" }, NextSteps = new[] { "Check temperature and ventilation", "Identify derating cause", "Fix the cause, then restart" } }, // PV access method ["PvAccessMethodErrorAlarm"] = new() { Explanation = "PV access configuration error. This is a WARNING.", Causes = new[] { "Incorrect PV configuration", "Wiring mismatch" }, NextSteps = new[] { "Check PV configuration settings", "Fix the cause, then restart" } }, // Reserved alarms ["ReservedAlarms4"] = new() { Explanation = "Reserved alarm 4 is active. This is a WARNING level condition.", Causes = new[] { "Undocumented condition" }, NextSteps = new[] { "Monitor the system", "Contact support if issue persists" } }, ["ReservedAlarms5"] = new() { Explanation = "Reserved alarm 5 is active. This is a WARNING level condition.", Causes = new[] { "Undocumented condition" }, NextSteps = new[] { "Monitor the system", "Contact support if issue persists" } }, // Meter alarms ["ReverseMeterConnection"] = new() { Explanation = "The energy meter is connected in reverse. This is a PROTECTION level condition.", Causes = new[] { "Meter CT installed backwards", "Meter wiring reversed" }, NextSteps = new[] { "Do not rely on meter readings", "Contact service to correct meter installation" } }, // Seal pulse ["InverterSealPulse"] = new() { Explanation = "Inverter seal pulse active. This is a WARNING indicating output limiting.", Causes = new[] { "Protection active", "Output limiting" }, NextSteps = new[] { "Check system status", "Fix the cause, then restart" } }, // Diesel generator alarms ["AbnormalDieselGeneratorVoltage"] = new() { Explanation = "Diesel generator voltage is abnormal. This is an ERROR.", Causes = new[] { "Generator voltage out of range", "AVR fault" }, NextSteps = new[] { "Check generator voltage setting", "Fix the cause, then restart" } }, ["AbnormalDieselGeneratorFrequency"] = new() { Explanation = "Diesel generator frequency is abnormal. This is an ERROR.", Causes = new[] { "Generator speed issue", "Governor fault" }, NextSteps = new[] { "Check generator frequency", "Fix the cause, then restart" } }, ["DieselGeneratorVoltageReverseSequence"] = new() { Explanation = "Generator phase sequence is reversed. This is a PROTECTION condition.", Causes = new[] { "Wrong phase wiring" }, NextSteps = new[] { "Do not restart", "Contact service to correct wiring" } }, ["DieselGeneratorVoltageOutOfPhase"] = new() { Explanation = "Generator voltage is out of phase with grid. This is an ERROR.", Causes = new[] { "Sync issue", "Phase angle mismatch" }, NextSteps = new[] { "Check synchronization", "Fix the cause, then restart" } }, ["GeneratorOverload"] = new() { Explanation = "The generator is overloaded. This is an ERROR.", Causes = new[] { "Load exceeds generator capacity" }, NextSteps = new[] { "Reduce load", "Fix the cause, then restart" } }, }; // ── Growatt Alarms ─────────────────────────────────────────────────────── // Keys match GrowattWarningCode and GrowattErrorCode enum member names private static readonly IReadOnlyDictionary GrowattAlarms = new Dictionary { // Warnings (200-series: PV/String) ["StringFault"] = new() { Explanation = "String fault detected. One or more PV strings may have issues affecting power generation.", Causes = new[] { "PV panel fault", "String wiring issue", "Connector problem", "Module degradation" }, NextSteps = new[] { "Check if PV panels are normal after shutdown", "Inspect string connections", "Look for damaged cables" } }, ["PvStringPidQuickConnectAbnormal"] = new() { Explanation = "PV string/PID quick-connect terminals are abnormal.", Causes = new[] { "Loose terminal connections", "Damaged quick-connect", "Corrosion on terminals" }, NextSteps = new[] { "Check wiring of string terminals after shutdown", "Clean and secure connections" } }, ["DcSpdFunctionAbnormal"] = new() { Explanation = "DC SPD function abnormal.", Causes = new[] { "SPD failure" }, NextSteps = new[] { "Check DC SPD after shutdown" } }, ["PvShortCircuited"] = new() { Explanation = "PV1 or PV2 string is short-circuited.", Causes = new[] { "Cable damage causing short", "Connector failure", "Module junction box fault" }, NextSteps = new[] { "Check if PV1 or PV2 is short-circuited", "Inspect cables for damage", "Test string isolation" } }, ["PvBoostDriverAbnormal"] = new() { Explanation = "PV boost driver abnormal.", Causes = new[] { "Driver circuit fault" }, NextSteps = new[] { "Restart the inverter" } }, ["AcSpdFunctionAbnormal"] = new() { Explanation = "AC SPD function abnormal.", Causes = new[] { "SPD failure" }, NextSteps = new[] { "Check AC SPD after shutdown" } }, ["DcFuseBlown"] = new() { Explanation = "DC fuse has blown, interrupting PV input.", Causes = new[] { "Overcurrent in DC circuit", "Short circuit", "Fuse fatigue" }, NextSteps = new[] { "Power off the system", "Check the fuse", "Identify and fix overcurrent cause before replacing fuse" } }, ["DcInputVoltageTooHigh"] = new() { Explanation = "DC input voltage exceeds the upper threshold - potential damage risk.", Causes = new[] { "Too many PV modules in series", "Cold temperature increasing Voc", "System design error" }, NextSteps = new[] { "Turn off DC switch immediately", "Check DC voltage", "Reconfigure string if needed" } }, ["PvReversed"] = new() { Explanation = "PV string polarity is reversed.", Causes = new[] { "Wrong cable connection" }, NextSteps = new[] { "Check PV polarity after shutdown" } }, ["PidFunctionAbnormal"] = new() { Explanation = "PID (Potential Induced Degradation) function is abnormal.", Causes = new[] { "PID module fault", "Configuration issue" }, NextSteps = new[] { "Restart the inverter", "Check PID settings" } }, ["PvStringDisconnected"] = new() { Explanation = "A PV string is disconnected.", Causes = new[] { "DC disconnector open", "Cable disconnection", "Connector failure" }, NextSteps = new[] { "Check if PV string is properly connected", "Verify DC switches" } }, ["PvStringCurrentUnbalanced"] = new() { Explanation = "PV string currents are unbalanced, indicating potential issues.", Causes = new[] { "Shading on some modules", "Module mismatch", "Partial string failure", "Soiling" }, NextSteps = new[] { "Check if PV panels of the corresponding string are normal", "Look for shading", "Clean panels" } }, // Warnings (300-series: Grid/AC) ["NoUtilityGrid"] = new() { Explanation = "No utility grid connection detected or grid power failure.", Causes = new[] { "Grid outage", "AC breaker tripped", "Grid cable disconnected", "Utility maintenance" }, NextSteps = new[] { "Check if grid is down", "Verify AC breaker status", "Check grid cable connections" } }, ["GridVoltageOutOfRange"] = new() { Explanation = "Grid voltage is outside the permissible operating range.", Causes = new[] { "Grid voltage too high or too low", "Local grid issues", "Transformer tap setting" }, NextSteps = new[] { "Check if grid voltage is within specified range", "Contact utility if persistent" } }, ["GridFrequencyOutOfRange"] = new() { Explanation = "Grid frequency is outside the permissible operating range.", Causes = new[] { "Grid frequency unstable", "Generator frequency drift", "Grid disturbance" }, NextSteps = new[] { "Check if grid frequency is within specified range", "Wait for grid to stabilize" } }, ["Overload"] = new() { Explanation = "The system is experiencing an overload condition.", Causes = new[] { "Connected load exceeds capacity", "Inrush current from appliances", "Short circuit in load" }, NextSteps = new[] { "Reduce load connected to EPS output terminal", "Check for faulty appliances" } }, ["MeterDisconnected"] = new() { Explanation = "Energy meter communication is lost.", Causes = new[] { "Meter offline", "Communication cable fault", "Meter power loss" }, NextSteps = new[] { "Check if meter is properly connected", "Verify communication cable", "Check meter power" } }, ["MeterReverselyConnected"] = new() { Explanation = "Energy meter L and N lines are reversed.", Causes = new[] { "Meter wiring error", "Installation mistake" }, NextSteps = new[] { "Check if L line and N line of meter are reversely connected", "Correct wiring" } }, ["LinePeVoltageAbnormal"] = new() { Explanation = "Abnormal voltage detected between neutral (N) and protective earth (PE).", Causes = new[] { "Poor PE connection", "N-PE short somewhere in installation", "Ground fault" }, NextSteps = new[] { "Check if PE cable is reliably connected after shutdown", "Verify grounding system" } }, ["PhaseSequenceError"] = new() { Explanation = "Phase sequence error detected. The system will auto-adjust.", Causes = new[] { "Three-phase wiring in wrong order" }, NextSteps = new[] { "No operation required", "The PCS will automatically adjust phase sequence" } }, // Warnings (400-series: System/Internal) ["FanFailure"] = new() { Explanation = "Cooling fan failure detected - risk of overheating.", Causes = new[] { "Fan motor failure", "Fan blocked", "Fan connector loose", "Fan control fault" }, NextSteps = new[] { "Check if fan is properly connected after shutdown", "Remove obstructions", "Replace fan if faulty" } }, ["MeterAbnormal"] = new() { Explanation = "Energy meter is reporting abnormal readings.", Causes = new[] { "Meter malfunction", "Configuration error", "Communication issue" }, NextSteps = new[] { "Check if meter is turned on", "Verify meter configuration" } }, ["OptimizerCommunicationAbnormal"] = new() { Explanation = "Communication with PV optimizer is abnormal.", Causes = new[] { "Optimizer offline", "Communication interference", "Optimizer fault" }, NextSteps = new[] { "Check if optimizer is turned on", "Verify communication wiring" } }, ["OverTemperature"] = new() { Explanation = "System temperature is too high - power may be limited.", Causes = new[] { "Poor ventilation", "High ambient temperature", "Fan failure", "Excessive load" }, NextSteps = new[] { "Restart the inverter", "If fault persists, improve cooling", "Contact manufacturer if unresolved" } }, ["OverTemperatureAlarm"] = new() { Explanation = "NTC temperature sensor is broken or disconnected.", Causes = new[] { "Sensor failure", "Sensor cable damaged", "Connector issue" }, NextSteps = new[] { "Restart the inverter", "If persistent, sensor may need replacement" } }, ["NtcTemperatureSensorBroken"] = new() { Explanation = "NTC temperature sensor is broken.", Causes = new[] { "Sensor failure" }, NextSteps = new[] { "Replace sensor" } }, ["SyncSignalAbnormal"] = new() { Explanation = "Synchronization signal is abnormal (for parallel systems).", Causes = new[] { "Sync cable fault", "Sync interface failure", "Configuration mismatch" }, NextSteps = new[] { "Check if sync cable is abnormal", "Verify connections" } }, ["GridStartupConditionsNotMet"] = new() { Explanation = "Grid-connection startup requirements are not met.", Causes = new[] { "Grid voltage/frequency out of range", "Incorrect startup voltage configuration" }, NextSteps = new[] { "Check if grid voltage is within specified range", "Check grid-connection startup voltage configuration" } }, // Warnings (500-series: Battery) ["BatteryCommunicationFailure"] = new() { Explanation = "Inverter cannot communicate with the battery BMS.", Causes = new[] { "BMS offline", "Communication cable fault", "Protocol mismatch", "Battery in sleep mode" }, NextSteps = new[] { "Check if battery is turned on", "Verify RS485 communication cable", "Wake up battery if in sleep mode" } }, ["BatteryDisconnected"] = new() { Explanation = "Battery is disconnected from the system.", Causes = new[] { "Battery breaker off", "Cable disconnected", "BMS shutdown", "Battery fault" }, NextSteps = new[] { "Check if battery is properly connected", "Verify battery breaker", "Check BMS status" } }, ["BatteryVoltageTooHigh"] = new() { Explanation = "Battery voltage is too high.", Causes = new[] { "Overcharging", "BMS fault", "Cell imbalance", "Voltage setting error" }, NextSteps = new[] { "Check if battery voltage is within permissible range", "Verify charging settings" } }, ["BatteryVoltageTooLow"] = new() { Explanation = "Battery voltage is too low.", Causes = new[] { "Battery deeply discharged", "Cell failure", "High load drain", "BMS cutoff" }, NextSteps = new[] { "Check if battery voltage is within permissible range", "Allow battery to charge" } }, ["BatteryReverseConnected"] = new() { Explanation = "Battery positive and negative terminals are reversed.", Causes = new[] { "Installation error", "Wrong cable connection" }, NextSteps = new[] { "Check if positive and negative terminals of battery are reversely connected", "CORRECT IMMEDIATELY - risk of damage" } }, ["LeadAcidTempSensorDisconnected"] = new() { Explanation = "Lead-acid battery temperature sensor is disconnected.", Causes = new[] { "Sensor not installed", "Sensor cable fault", "Sensor failure" }, NextSteps = new[] { "Check if temperature sensor of lead-acid battery is installed", "Verify connections" } }, ["BatteryTemperatureOutOfRange"] = new() { Explanation = "Battery temperature is outside the safe operating range.", Causes = new[] { "High ambient temperature", "Poor battery ventilation", "Battery overheating", "Cold environment" }, NextSteps = new[] { "Check if ambient temperature of battery is within specified range", "Improve battery cooling/heating" } }, ["BmsFault"] = new() { Explanation = "Battery BMS has reported a fault preventing charging and discharging.", Causes = new[] { "BMS internal fault", "Cell protection triggered", "Communication error" }, NextSteps = new[] { "Figure out the cause according to BMS error code", "Check battery status display" } }, ["LithiumBatteryOverload"] = new() { Explanation = "Lithium battery overload protection has activated.", Causes = new[] { "Load power exceeds battery discharge rating", "High inrush current" }, NextSteps = new[] { "Check if power of load exceeds BAT rated discharge power", "Reduce load" } }, ["BmsCommunicationAbnormal"] = new() { Explanation = "BMS communication is abnormal.", Causes = new[] { "Communication timeout", "Protocol error", "Cable fault" }, NextSteps = new[] { "Restart the inverter", "Check BMS communication cable" } }, ["BatterySpdAbnormal"] = new() { Explanation = "Battery surge protection device (SPD) function is abnormal.", Causes = new[] { "SPD triggered", "SPD failure", "Lightning damage" }, NextSteps = new[] { "Check BAT SPD after powering off device", "Replace SPD if triggered" } }, // Warnings (600-series: Off-grid/EPS) ["OutputDcComponentBiasAbnormal"] = new() { Explanation = "Output DC component bias is abnormal.", Causes = new[] { "Sensor drift", "Control issue", "Hardware fault" }, NextSteps = new[] { "Restart the inverter", "If fault persists, contact manufacturer" } }, ["DcComponentOverHighOutputVoltage"] = new() { Explanation = "DC component in output voltage is too high.", Causes = new[] { "Control drift", "Sensor fault", "Transformer issue" }, NextSteps = new[] { "Restart the inverter", "Check output for DC offset" } }, ["OffGridOutputVoltageTooLow"] = new() { Explanation = "Off-grid/EPS output voltage is too low.", Causes = new[] { "Overload", "Battery voltage low", "Inverter limitation" }, NextSteps = new[] { "Restart the inverter", "Reduce load", "If fault persists, contact manufacturer" } }, ["OffGridOutputVoltageTooHigh"] = new() { Explanation = "Off-grid/EPS output voltage is too high.", Causes = new[] { "Control fault", "Voltage regulation issue" }, NextSteps = new[] { "Restart the inverter", "If fault persists, contact manufacturer" } }, ["OffGridOutputOverCurrent"] = new() { Explanation = "Off-grid output current overcurrent detected.", Causes = new[] { "Load exceeds specification", "Short circuit in load", "Inrush current" }, NextSteps = new[] { "Check if load is within specification", "Look for short circuits" } }, ["OffGridBusVoltageTooLow"] = new() { Explanation = "Off-grid DC bus voltage is too low.", Causes = new[] { "Battery depleted", "High load demand", "Power electronics issue" }, NextSteps = new[] { "Check if load power exceeds upper limit", "Allow battery to charge" } }, ["OffGridOutputOverload"] = new() { Explanation = "Off-grid output is overloaded.", Causes = new[] { "Load exceeds EPS capacity", "Too many appliances on backup" }, NextSteps = new[] { "Check if load is within specification", "Reduce backup load" } }, ["BalancedCircuitAbnormal"] = new() { Explanation = "Phase balancing circuit is abnormal.", Causes = new[] { "Balance circuit fault", "Control issue" }, NextSteps = new[] { "Restart the inverter", "Check phase balance" } }, // Errors (Protection-level faults) ["ExportLimitationFailSafe"] = new() { Explanation = "Export limitation fail-safe has triggered.", Causes = new[] { "CT disconnected", "Meter communication lost", "Feedback loop failure" }, NextSteps = new[] { "After shutdown, check connection of CT and meter", "Verify export limit settings" } }, ["DcBiasAbnormal"] = new() { Explanation = "DCI (DC Injection) bias is abnormal - safety protection.", Causes = new[] { "DC injection into grid", "Sensor fault", "Transformer issue" }, NextSteps = new[] { "Restart the inverter", "If persistent, requires service" } }, ["HighDcComponentOutputCurrent"] = new() { Explanation = "High DC component detected in output current.", Causes = new[] { "Output filter issue", "Control fault", "Transformer saturation" }, NextSteps = new[] { "Restart the inverter", "Check output connections" } }, ["BusVoltageSamplingAbnormal"] = new() { Explanation = "DC bus voltage sampling is abnormal.", Causes = new[] { "Voltage sensor fault", "ADC error", "Hardware issue" }, NextSteps = new[] { "Restart the inverter", "If persistent, requires service" } }, ["RelayFault"] = new() { Explanation = "Internal relay fault detected.", Causes = new[] { "Relay failure", "Contact welding", "Driver circuit fault" }, NextSteps = new[] { "Restart the inverter", "If persistent, relay replacement needed" } }, ["BusVoltageAbnormal"] = new() { Explanation = "DC bus voltage is abnormal.", Causes = new[] { "Power electronics fault", "Capacitor issue", "Control failure" }, NextSteps = new[] { "Restart the inverter", "If persistent, requires service" } }, ["InternalCommunicationFailure"] = new() { Explanation = "Internal communication failure between control boards.", Causes = new[] { "Communication board fault", "Cable loose", "EMI interference" }, NextSteps = new[] { "Check wiring of communication board after shutdown", "Restart inverter" } }, ["TemperatureSensorDisconnected"] = new() { Explanation = "Temperature sensor is disconnected.", Causes = new[] { "Sensor failure", "Cable fault", "Connector issue" }, NextSteps = new[] { "Check wiring of communication board after shutdown", "Replace sensor if faulty" } }, ["IgbtDriveFault"] = new() { Explanation = "IGBT gate drive fault detected.", Causes = new[] { "Driver circuit failure", "IGBT fault", "Power supply issue" }, NextSteps = new[] { "Restart the inverter", "If persistent, requires professional service" } }, ["EepromError"] = new() { Explanation = "EEPROM read/write error.", Causes = new[] { "Memory chip fault", "Data corruption", "Hardware failure" }, NextSteps = new[] { "Restart the inverter", "Factory reset may be required" } }, ["AuxiliaryPowerAbnormal"] = new() { Explanation = "Auxiliary power supply is abnormal.", Causes = new[] { "Internal power supply failure", "Component fault" }, NextSteps = new[] { "Restart the inverter", "If persistent, requires service" } }, ["DcAcOvercurrentProtection"] = new() { Explanation = "DC/AC overcurrent protection has triggered.", Causes = new[] { "Short circuit", "Severe overload", "Power electronics fault" }, NextSteps = new[] { "Restart the inverter", "Check for short circuits", "Reduce load" } }, ["CommunicationProtocolMismatch"] = new() { Explanation = "Communication protocol mismatch between components.", Causes = new[] { "Firmware version mismatch", "Configuration error" }, NextSteps = new[] { "Restart the inverter", "Update firmware if needed" } }, ["DspComFirmwareMismatch"] = new() { Explanation = "DSP and COM board firmware versions are mismatched.", Causes = new[] { "Incomplete firmware update", "Wrong firmware loaded" }, NextSteps = new[] { "Restart the inverter", "Perform complete firmware update" } }, ["DspSoftwareHardwareMismatch"] = new() { Explanation = "DSP software and hardware versions are mismatched.", Causes = new[] { "Hardware replacement with incompatible firmware" }, NextSteps = new[] { "Restart the inverter", "Contact support for firmware update" } }, ["CpldAbnormal"] = new() { Explanation = "CPLD (programmable logic) is abnormal.", Causes = new[] { "CPLD failure", "Firmware corruption" }, NextSteps = new[] { "Restart the inverter", "If persistent, requires service" } }, ["RedundancySamplingInconsistent"] = new() { Explanation = "Redundancy sampling values are inconsistent.", Causes = new[] { "Sensor mismatch", "Calibration error", "Hardware fault" }, NextSteps = new[] { "Restart the inverter", "May require recalibration" } }, ["PwmPassThroughSignalFailure"] = new() { Explanation = "PWM pass-through signal failure.", Causes = new[] { "Control board fault", "Signal path issue" }, NextSteps = new[] { "Restart the inverter", "If persistent, requires service" } }, ["AfciSelfTestFailure"] = new() { Explanation = "AFCI (Arc Fault Circuit Interrupter) self-test failed.", Causes = new[] { "AFCI module fault", "Self-test circuit issue" }, NextSteps = new[] { "Restart the inverter", "AFCI may need replacement" } }, ["PvCurrentSamplingAbnormal"] = new() { Explanation = "PV current sampling is abnormal.", Causes = new[] { "Current sensor fault", "ADC error" }, NextSteps = new[] { "Restart the inverter", "If persistent, requires service" } }, ["AcCurrentSamplingAbnormal"] = new() { Explanation = "AC current sampling is abnormal.", Causes = new[] { "CT fault", "Sensor failure", "ADC error" }, NextSteps = new[] { "Restart the inverter", "Check CT connections" } }, ["BusSoftbootFailure"] = new() { Explanation = "DC bus soft-boot (pre-charge) failed.", Causes = new[] { "Pre-charge circuit fault", "Capacitor issue", "Relay fault" }, NextSteps = new[] { "Restart the inverter", "If persistent, requires service" } }, ["EpoFault"] = new() { Explanation = "EPO (Emergency Power Off) fault triggered.", Causes = new[] { "EPO button pressed", "EPO circuit activated", "Safety system trigger" }, NextSteps = new[] { "Restart the inverter", "Check EPO circuit if unintentional" } }, ["MonitoringChipBootVerificationFailed"] = new() { Explanation = "Monitoring chip BOOT verification failed.", Causes = new[] { "Firmware corruption", "Chip failure" }, NextSteps = new[] { "Restart the inverter", "May require firmware reload" } }, // Battery Errors ["BmsCommunicationFailure"] = new() { Explanation = "BMS failed to communicate with the inverter.", Causes = new[] { "RS485 cable fault", "BMS offline", "Protocol mismatch" }, NextSteps = new[] { "Check connection of RS485 cable between inverter and battery" } }, ["BmsChargeDischargeFailure"] = new() { Explanation = "BMS reports that battery cannot charge or discharge.", Causes = new[] { "BMS internal fault", "Protection triggered", "Cell issue" }, NextSteps = new[] { "Figure out the fault based on BMS error code", "Check battery status" } }, ["BatteryVoltageLow"] = new() { Explanation = "Battery voltage is below minimum.", Causes = new[] { "Deep discharge, cell failure" }, NextSteps = new[] { "Check battery voltage" } }, ["BatteryVoltageHigh"] = new() { Explanation = "Battery voltage exceeds upper threshold.", Causes = new[] { "Overcharging", "BMS fault", "Cell failure" }, NextSteps = new[] { "Check battery voltage", "If within permissible range, restart inverter" } }, ["BatteryTemperatureAbnormal"] = new() { Explanation = "Battery temperature is outside safe charging/discharging range.", Causes = new[] { "Battery too hot", "Battery too cold", "Sensor fault" }, NextSteps = new[] { "Check temperature of the battery", "Improve battery environment" } }, ["BatteryReversed"] = new() { Explanation = "Battery polarity reversed.", Causes = new[] { "Wrong connection" }, NextSteps = new[] { "Correct polarity immediately" } }, ["BatteryOpenCircuit"] = new() { Explanation = "Battery is open-circuited (not connected).", Causes = new[] { "Battery cable disconnected", "Fuse blown", "BMS cutoff" }, NextSteps = new[] { "Check wiring of battery terminals", "Verify fuses" } }, ["BatteryOverloadProtection"] = new() { Explanation = "Battery overload protection has triggered.", Causes = new[] { "Load exceeds battery discharge rating" }, NextSteps = new[] { "Check if power of load exceeds battery rated discharge power", "Reduce load" } }, ["Bus2VoltageAbnormal"] = new() { Explanation = "Secondary DC bus voltage is abnormal.", Causes = new[] { "Power electronics fault", "Control issue" }, NextSteps = new[] { "Restart the inverter" } }, ["BatteryChargeOcp"] = new() { Explanation = "Battery charge overcurrent protection (OCP) triggered.", Causes = new[] { "PV oversized for battery", "Charge current setting too high" }, NextSteps = new[] { "Check if PV voltage is oversized", "Reduce charge current setting" } }, ["BatteryDischargeOcp"] = new() { Explanation = "Battery discharge overcurrent protection (OCP) triggered.", Causes = new[] { "Load too high", "Discharge current setting wrong" }, NextSteps = new[] { "Check if battery discharge current configuration is proper", "Reduce load" } }, ["BatterySoftStartFailed"] = new() { Explanation = "Battery soft-start failed.", Causes = new[] { "Pre-charge circuit fault", "Battery voltage mismatch" }, NextSteps = new[] { "Restart the inverter", "Check battery voltage" } }, // Off-grid Errors ["EpsOutputShortCircuited"] = new() { Explanation = "EPS output is short-circuited.", Causes = new[] { "Short circuit in load" }, NextSteps = new[] { "Check load wiring" } }, ["OffGridBusVoltageLow"] = new() { Explanation = "Off-grid DC bus voltage is too low.", Causes = new[] { "Battery depleted", "High load", "Power electronics issue" }, NextSteps = new[] { "Check if battery is working properly or has capacity loss" } }, ["OffGridTerminalVoltageAbnormal"] = new() { Explanation = "Abnormal voltage detected at off-grid terminal.", Causes = new[] { "External voltage present", "Wiring fault", "Backfeed" }, NextSteps = new[] { "Check if a voltage is present at AC port", "Verify wiring" } }, ["SoftStartFailed"] = new() { Explanation = "Off-grid soft-start failed.", Causes = new[] { "Pre-charge failure", "Load too heavy at startup" }, NextSteps = new[] { "Restart the inverter", "Reduce initial load" } }, ["OffGridOutputVoltageAbnormal"] = new() { Explanation = "Off-grid output voltage is abnormal.", Causes = new[] { "Control fault", "Hardware issue" }, NextSteps = new[] { "Restart the inverter" } }, ["BalancedCircuitSelfTestFailed"] = new() { Explanation = "Balanced circuit self-test failed.", Causes = new[] { "Balance circuit fault" }, NextSteps = new[] { "Restart the inverter" } }, ["HighDcComponentOutputVoltage"] = new() { Explanation = "High DC component in output voltage.", Causes = new[] { "Control drift", "Transformer issue" }, NextSteps = new[] { "Restart the inverter" } }, ["OffGridOutputOverload"] = new() { Explanation = "Off-grid output overloaded.", Causes = new[] { "Excessive load" }, NextSteps = new[] { "Reduce load" } }, ["OffGridParallelSignalAbnormal"] = new() { Explanation = "Off-grid parallel communication signal is abnormal.", Causes = new[] { "Parallel cable fault", "Configuration mismatch" }, NextSteps = new[] { "Check if communication cables are properly connected" } }, // Special fault codes ["AFCIFault"] = new() { Explanation = "An arc fault has been detected in the PV system - fire risk protection activated.", Causes = new[] { "Loose connection causing arcing", "Damaged cable insulation", "Connector fault", "Module junction box issue" }, NextSteps = new[] { "After shutdown, check connection of PV string", "Inspect all connectors", "Look for damaged insulation" } }, ["GFCIHigh"] = new() { Explanation = "Excessively high ground fault/leakage current detected.", Causes = new[] { "Ground fault in PV array", "Insulation breakdown", "Moisture ingress", "Cable damage" }, NextSteps = new[] { "Restart the inverter", "If persistent, check PV array insulation" } }, ["PVVoltageHigh"] = new() { Explanation = "DC input voltage exceeds the maximum safe limit.", Causes = new[] { "Too many PV modules in series", "Cold temperature increasing Voc" }, NextSteps = new[] { "Disconnect DC switch immediately", "Check voltage", "Reconfigure strings if needed" } }, }; }