Clear fault conditions and reset alarms on your Fanuc robot remotely using different protocols.

## SNPX

SNPX can clear alarms, read the active alarm, and browse alarm history:

**C# : HowToResetFanucAlarmRemotelySnpx**
```csharp
using System;
using UnderAutomation.Fanuc;
using UnderAutomation.Fanuc.Snpx.Internal;
using UnderAutomation.Fanuc.Common;

public class HowToResetFanucAlarmRemotelySnpx
{
    static void Main()
    {
        FanucRobot robot = new FanucRobot();
        robot.Connect("192.168.0.1");

        /**/
        // Clear all alarms (equivalent to pressing FAULT RESET)
        robot.Snpx.ClearAlarms();

        // Read the active alarm
        RobotAlarm activeAlarm = robot.Snpx.ActiveAlarm.Read(1);
        Console.WriteLine($"Alarm: {activeAlarm.Message} (Severity: {activeAlarm.Severity})");

        // Read alarm history
        RobotAlarm histAlarm = robot.Snpx.AlarmHistory.Read(10);
        /**/
    }
}
```

**Python : HowToResetFanucAlarmRemotelySnpx**
```python
from underautomation.fanuc.fanuc_robot import FanucRobot

robot = FanucRobot()
robot.connect("192.168.0.1")

##
# Clear all alarms (equivalent to pressing FAULT RESET)
robot.snpx.clear_alarms()

# Read the active alarm
active_alarm = robot.snpx.active_alarm.read(1)
print(f"Alarm: {active_alarm.message} (Severity: {active_alarm.severity})")

# Read alarm history
hist_alarm = robot.snpx.alarm_history.read(10)
##
```

See also: [SNPX Alarms & task status](/fanuc/documentation/snpx-alarms-tasks)

## Telnet KCL

Telnet can reset alarms using KCL commands:

**C# : HowToResetFanucAlarmRemotelyTelnet**
```csharp
using UnderAutomation.Fanuc;

public class HowToResetFanucAlarmRemotelyTelnet
{
    static void Main()
    {
        FanucRobot robot = new FanucRobot();
        robot.Connect("192.168.0.1");

        /**/
        // Reset the robot (clears faults, exits HOLD)
        robot.Telnet.Reset();

        // Or use a custom KCL command
        robot.Telnet.SendCustomCommand("RESET");
        /**/
    }
}
```

**Python : HowToResetFanucAlarmRemotelyTelnet**
```python
from underautomation.fanuc.fanuc_robot import FanucRobot

robot = FanucRobot()
robot.connect("192.168.0.1")

##
# Reset the robot (clears faults, exits HOLD)
robot.telnet.reset()

# Or use a custom KCL command
robot.telnet.send_custom_command_unsafe("RESET")
##
```

See also: [Telnet Program control](/fanuc/documentation/telnet-program-control)

## CGTP Web Server

CGTP can check alarm-related variables:

**C# : HowToResetFanucAlarmRemotelyCgtp**
```csharp
using UnderAutomation.Fanuc;
using UnderAutomation.Fanuc.Cgtp;
using UnderAutomation.Fanuc.Common;
using UnderAutomation.Fanuc.Common.Files.List;

public class HowToResetFanucAlarmRemotelyCgtp
{
  static void Main()
  {
    FanucRobot robot = new FanucRobot();
    robot.Connect("192.168.0.1");

    /**/
    // Read alarm history
    ErrorList errors = robot.Cgtp.Http.GetAllErrorsList();

    // extract active alarms from the full list
    var activeAlarms = errors.FilterActiveAlarms();

    // reset alarms
    robot.Cgtp.Kcl.Reset();

    // Read user alarms definitions
    UserAlarmDefinition[] alarms = robot.Cgtp.ReadUserAlarms();

    // write user alarm definition
    robot.Cgtp.SetUserAlarmSeverity(1, 8); // Set user alarm #1 to severity 8 
    robot.Cgtp.SetComment(CgtpCommentType.UserAlarm, 1, "Overheat alarm"); // Set comment for user alarm #1
    /**/
  }
}
```

**Python : HowToResetFanucAlarmRemotelyCgtp**
```python
from underautomation.fanuc.fanuc_robot import FanucRobot

robot = FanucRobot()
robot.connect("192.168.0.1")

##
# Read alarm history
errors = robot.cgtp.http.get_all_errors_list()

# extract active alarms from the full list
activeAlarms = errors.filter_active_alarms()

# reset alarms
robot.cgtp.kcl.reset()

# Read user alarms definitions
alarms = robot.cgtp.read_user_alarms()

# write user alarm definition
robot.cgtp.set_user_alarm_severity(1, 8) # Set user alarm #1 to severity 8 
robot.cgtp.set_comment(CgtpCommentType.UserAlarm, 1, "Overheat alarm") # Set comment for user alarm #1
##
```

See also: [CGTP Alarms, comments & files](/fanuc/documentation/cgtp-alarms-files)

## FTP (offline)

Download and parse the error log:

**C# : HowToResetFanucAlarmRemotelyFtp**
```csharp
using UnderAutomation.Fanuc;
using UnderAutomation.Fanuc.Common;
using UnderAutomation.Fanuc.Common.Files.List;

public class HowToResetFanucAlarmRemotelyFtp
{
    static void Main()
    {
        FanucRobot robot = new FanucRobot();
        robot.Connect("192.168.0.1");

        /**/
        // Read alarm history via FTP 
        ErrorList errors = robot.Ftp.GetAllErrorsList();

        // extract active alarms from the full list
        errors.FilterActiveAlarms();
        /**/
    }
}
```

**Python : HowToResetFanucAlarmRemotelyFtp**
```python
from underautomation.fanuc.fanuc_robot import FanucRobot
from underautomation.fanuc.connection_parameters import ConnectionParameters

robot = FanucRobot()
parameters = ConnectionParameters("192.168.0.1")
parameters.ftp.enable = True
parameters.ftp.ftp_user = ""       
parameters.ftp.ftp_password = ""  
robot.connect(parameters)


##
#  Read alarm history via FTP 
errors = robot.ftp.get_all_errors_list()

# extract active alarms from the full list
active_alarms = errors.filter_active_alarms()
##
```

## Protocol comparison

| Feature | SNPX | Telnet | CGTP | FTP |
|---------|------|--------|------|-----|
| **Clear alarms** | Yes | Yes | Yes | No |
| **Read active alarm** | Yes | No | Yes | No |
| **Alarm history** | Yes | No | Yes | Yes |
| **User alarms** | No | No | Yes | No |