namespace ZB.MOM.WW.OtOpcUa.Core.Abstractions;
///
/// Driver capability for alarm events. Optional — only drivers whose backends expose
/// alarm conditions implement this. Currently: Galaxy (MxAccess alarms), FOCAS
/// (CNC alarms), OPC UA Client (A&C events from upstream server).
///
public interface IAlarmSource
{
///
/// Subscribe to alarm events for a node-set (typically: a folder or equipment subtree).
/// The driver fires for every alarm transition.
///
Task SubscribeAlarmsAsync(
IReadOnlyList sourceNodeIds,
CancellationToken cancellationToken);
/// Cancel an alarm subscription returned by .
Task UnsubscribeAlarmsAsync(IAlarmSubscriptionHandle handle, CancellationToken cancellationToken);
/// Acknowledge one or more active alarms by source node ID + condition ID.
Task AcknowledgeAsync(
IReadOnlyList acknowledgements,
CancellationToken cancellationToken);
/// Server-pushed alarm transition (raise / clear / change).
event EventHandler? OnAlarmEvent;
}
/// Opaque alarm-subscription identity returned by .
public interface IAlarmSubscriptionHandle
{
/// Driver-internal subscription identifier (for diagnostics + post-mortem).
string DiagnosticId { get; }
}
/// One alarm acknowledgement in a batch.
public sealed record AlarmAcknowledgeRequest(
string SourceNodeId,
string ConditionId,
string? Comment);
/// Event payload for .
public sealed record AlarmEventArgs(
IAlarmSubscriptionHandle SubscriptionHandle,
string SourceNodeId,
string ConditionId,
string AlarmType,
string Message,
AlarmSeverity Severity,
DateTime SourceTimestampUtc);
/// Mirrors the NodePermissions alarm-severity enum in docs/v2/acl-design.md.
public enum AlarmSeverity { Low, Medium, High, Critical }