read_history_events
如果服务端记录事件历史 (HistoryRead Events), 客户端可以按时间区间拉历史事件.
配套
- 实时事件订阅请用 事件订阅.
- 历史变量数据请用 read_history (Raw) / read_history_processed.
签名
def read_history_events(self,
node_id: str,
start_utc: datetime,
end_utc: datetime,
max_events: int = 0) -> List[HistoryEventArgs]: ...
node_id 通常是 i=2253 (Server 节点) 或自定义 EventNotifier 节点.
HistoryEventArgs
@dataclass
class HistoryEventArgs:
severity: int = 0
message: Optional[str] = None
source_name: Optional[str] = None
time: Optional[datetime] = None
event_type: Optional[str] = None
字段语义同 EventArrivedEventArgs, 但生命周期为返回列表存活期 (受托管化, 不需要 dispose).
内置使用 4 个标准 SelectClauses: Severity / Message / SourceName / Time.
用法
import datetime as dt
now = dt.datetime.now(dt.timezone.utc)
events = ua.read_history_events(
"i=2253",
start_utc=now - dt.timedelta(days=1),
end_utc=now)
for e in events:
print(f"[{e.severity}] {e.source_name}: {e.message} @ {e.time}")
自定义 EventFilter
如果想过滤 EventType / Severity, 当前 SDK 用内置 SelectClauses; 高级 EventFilter 待后续版本暴露.
服务端要求
- 必须支持 HistoryRead Events (服务端 ServerCapabilities 标志位)
- 事件源节点必须有 EventNotifier Attribute (12) bit 1 (HistoryRead) 置位
与实时事件订阅的关系
| API | 拿什么 |
|---|---|
subscribe_events(...) | 实时事件 (订阅期间发生的) |
read_history_events(...) | 历史事件 (服务端归档的) |
通常组合用: 启动时 read_history_events 拉过去 24 小时, 然后 subscribe_events 接管实时.