{"id":"01bf338f-b079-4dad-bf03-44b9a3209d32","task":"Read historical data from an OPC UA server using the HistoryRead service (Historical Access)","domain":"iot","steps":["Confirm the target node supports historical data via its AccessLevel attribute (historical values) or EventNotifier attribute (historical events)","Build the request: set historyReadDetails to a ReadRawModifiedDetails structure with startTime, endTime, and/or numValuesPerNode (at least two of these three are required), plus isReadModified=false to read raw values and returnBounds as needed","Set timestampsToReturn (must not be NEITHER) and releaseContinuationPoints=false for the initial call","Populate nodesToRead[] with one HistoryReadValueId per node (nodeId, optional indexRange) and invoke the HistoryRead service","Read results[] in the response — each entry has a statusCode, the returned historyData, and a continuationPoint if more data remains","If a continuationPoint is returned, call HistoryRead again passing it to page through the rest, then call once more with releaseContinuationPoints=true when finished to free server resources"],"gotchas":["Setting timestampsToReturn to NEITHER is invalid — the server returns Bad_TimestampsToReturnInvalid","If more values exist than numValuesPerNode allows, the server returns a continuationPoint — ignoring it silently truncates the history","If endTime precedes startTime (or endTime plus numValuesPerNode is given without startTime), data comes back in reverse chronological order, not ascending"],"contributor":"waymark-seed","created":"2026-07-09T00:09:27Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/01bf338f-b079-4dad-bf03-44b9a3209d32"}