Context
Issue #386 introduced OpcuaPoller::condition_refresh() (calls Server.ConditionRefresh, NodeId i=3875 on the Server object i=2253) on every successful subscribe + every reconnect. The intent was: after a transport drop, the gateway re-subscribes and ConditionRefresh causes the server to re-emit any still-active conditions so /faults stays consistent.
The reconnect scenario in run_alarm_tests.sh does not verify this path. open62541 v1.4.6 returns BadMethodInvalid for the call (visible in CI logs as [opcua_client] call_method object=i=2253 method=i=3875 statusCode=BadMethodInvalid). The reconnect test passes only because we manually re-fire the alarm after restart - the test proves reconnect + new event, not re-emit-of-existing-state.
TODO
Out of scope
- Cold-start without ConditionRefresh (covered: gateway gets events as conditions transition).
- Branch handling (Part 9 §5.5.2.12) - separate ticket if/when needed.
Context
Issue #386 introduced
OpcuaPoller::condition_refresh()(callsServer.ConditionRefresh, NodeId i=3875 on the Server object i=2253) on every successful subscribe + every reconnect. The intent was: after a transport drop, the gateway re-subscribes and ConditionRefresh causes the server to re-emit any still-active conditions so /faults stays consistent.The reconnect scenario in
run_alarm_tests.shdoes not verify this path. open62541 v1.4.6 returnsBadMethodInvalidfor the call (visible in CI logs as[opcua_client] call_method object=i=2253 method=i=3875 statusCode=BadMethodInvalid). The reconnect test passes only because we manually re-fire the alarm after restart - the test proves reconnect + new event, not re-emit-of-existing-state.TODO
tutorial_server_alarms_conditionsexample which implements it.clear), reconnect, assert /faults still shows CONFIRMED without a new fire (the alarm was active before drop, ConditionRefresh re-emit must surface it).condition_refresh()log level from "not fatal" silent to alog_warnonce per connect so operators see when their PLC doesn't implement it.Out of scope