# OpcClient.ReadNodesHistory Method

> Reference: Reads the historical values of the nodes identified by the nodeIds specified using the details specified to select the values.

<dl class="api-definition">
<dt>Type</dt>
<dd><a href="./">OpcClient</a></dd>
<dt>Namespace</dt>
<dd><a href="../namespaces/opc.uafx.client">Opc.UaFx.Client</a></dd>
<dt>Assembly</dt>
<dd>Opc.UaFx.Advanced.dll</dd>
<dt>Package</dt>
<dd>Opc.UaFx.Advanced v2.59.0</dd>
<dt>Members</dt>
<dd><a href="./members">OpcClient Members</a></dd>
<dt>Also in</dt>
<dd>Opc.UaFx.Client</dd>
</dl>

<span class="api-meta">17 overloads</span>

| Overload | Description |
|---|---|
| [ReadNodesHistory(IEnumerable&lt;OpcNodeId&gt;, OpcReadHistoryDetails)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcclient/readnodeshistory#readnodeshistory-system-collections-generic-ienumerable-of-opc-uafx-opcnodeid-opc-uafx-opcreadhistorydetails)<span class="api-meta">since v2.23</span> | Reads the historical values of the nodes identified by the `nodeIds` specified using the `details` specified to select the values. |
| [ReadNodesHistory(int, IEnumerable&lt;OpcNodeId&gt;)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcclient/readnodeshistory#readnodeshistory-system-int32-system-collections-generic-ienumerable-of-opc-uafx-opcnodeid) | Reads the raw historical values of the nodes identified by the `nodeIds` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node. |
| [ReadNodesHistory(DateTime?, int, IEnumerable&lt;OpcNodeId&gt;)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcclient/readnodeshistory#readnodeshistory-system-nullable-of-system-datetime-system-int32-system-collections-generic-ienumerable-of-opc-uafx-opcnodeid) | Reads the raw historical values of the nodes identified by the `nodeIds` specified beginning at the `startTime` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node. |
| [ReadNodesHistory(DateTime?, DateTime?, int, IEnumerable&lt;OpcNodeId&gt;)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcclient/readnodeshistory#readnodeshistory-system-nullable-of-system-datetime-system-nullable-of-system-datetime-system-int32-system-collections-generic-ienumerable-of-opc-uafx-opcnodeid) | Reads the raw historical values of the nodes identified by the `nodeIds` specified within the period defined by the `startTime` and `endTime` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node. |
| [ReadNodesHistory(DateTime?, DateTime?, IEnumerable&lt;OpcNodeId&gt;)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcclient/readnodeshistory#readnodeshistory-system-nullable-of-system-datetime-system-nullable-of-system-datetime-system-collections-generic-ienumerable-of-opc-uafx-opcnodeid) | Reads the raw historical values of the nodes identified by the `nodeIds` specified within the period defined by the `startTime` and `endTime` specified. |
| [ReadNodesHistory(int, params OpcNodeId\[\])](#readnodeshistory-system-int32-opc-uafx-opcnodeid-array) | Reads the raw historical values of the nodes identified by the `nodeIds` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node. |
| [ReadNodesHistory(DateTime?, int, params OpcNodeId\[\])](#readnodeshistory-system-nullable-of-system-datetime-system-int32-opc-uafx-opcnodeid-array) | Reads the raw historical values of the nodes identified by the `nodeIds` specified beginning at the `startTime` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node. |
| [ReadNodesHistory(DateTime?, DateTime?, int, params OpcNodeId\[\])](#readnodeshistory-system-nullable-of-system-datetime-system-nullable-of-system-datetime-system-int32-opc-uafx-opcnodeid-array) | Reads the raw historical values of the nodes identified by the `nodeIds` specified within the period defined by the `startTime` and `endTime` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node. |
| [ReadNodesHistory(DateTime?, DateTime?, params OpcNodeId\[\])](#readnodeshistory-system-nullable-of-system-datetime-system-nullable-of-system-datetime-opc-uafx-opcnodeid-array) | Reads the raw historical values of the nodes identified by the `nodeIds` specified within the period defined by the `startTime` and `endTime` specified. |
| [ReadNodesHistory(int, IEnumerable&lt;OpcReadNodeHistory&gt;)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcclient/readnodeshistory#readnodeshistory-system-int32-system-collections-generic-ienumerable-of-opc-uafx-client-opcreadnodehistory) | Reads the raw historical values of the nodes as defined by the `commands` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node. |
| [ReadNodesHistory(DateTime?, int, IEnumerable&lt;OpcReadNodeHistory&gt;)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcclient/readnodeshistory#readnodeshistory-system-nullable-of-system-datetime-system-int32-system-collections-generic-ienumerable-of-opc-uafx-client-opcreadnodehistory) | Reads the raw historical values of the nodes as defined by the `commands` specified beginning at the `startTime` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node. |
| [ReadNodesHistory(DateTime?, DateTime?, int, IEnumerable&lt;OpcReadNodeHistory&gt;)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcclient/readnodeshistory#readnodeshistory-system-nullable-of-system-datetime-system-nullable-of-system-datetime-system-int32-system-collections-generic-ienumerable-of-opc-uafx-client-opcreadnodehistory) | Reads the raw historical values of the nodes as defined by the `commands` specified within the period defined by the `startTime` and `endTime` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node. |
| [ReadNodesHistory(DateTime?, DateTime?, IEnumerable&lt;OpcReadNodeHistory&gt;)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcclient/readnodeshistory#readnodeshistory-system-nullable-of-system-datetime-system-nullable-of-system-datetime-system-collections-generic-ienumerable-of-opc-uafx-client-opcreadnodehistory) | Reads the raw historical values of the nodes as defined by the `commands` specified within the period defined by the `startTime` and `endTime` specified. |
| [ReadNodesHistory(int, params OpcReadNodeHistory\[\])](#readnodeshistory-system-int32-opc-uafx-client-opcreadnodehistory-array) | Reads the raw historical values of the nodes as defined by the `commands` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node. |
| [ReadNodesHistory(DateTime?, int, params OpcReadNodeHistory\[\])](#readnodeshistory-system-nullable-of-system-datetime-system-int32-opc-uafx-client-opcreadnodehistory-array) | Reads the raw historical values of the nodes as defined by the `commands` specified beginning at the `startTime` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node. |
| [ReadNodesHistory(DateTime?, DateTime?, int, params OpcReadNodeHistory\[\])](#readnodeshistory-system-nullable-of-system-datetime-system-nullable-of-system-datetime-system-int32-opc-uafx-client-opcreadnodehistory-array) | Reads the raw historical values of the nodes as defined by the `commands` specified within the period defined by the `startTime` and `endTime` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node. |
| [ReadNodesHistory(DateTime?, DateTime?, params OpcReadNodeHistory\[\])](#readnodeshistory-system-nullable-of-system-datetime-system-nullable-of-system-datetime-opc-uafx-client-opcreadnodehistory-array) | Reads the raw historical values of the nodes as defined by the `commands` specified within the period defined by the `startTime` and `endTime` specified. |

**Exceptions (all overloads)**

| Exception | Condition |
|---|---|
| [OpcException](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcexception/) | The client is not connected to the server or the service execution failed upon different circumstances; for more details see exception details. |
| [ObjectDisposedException](https://learn.microsoft.com/dotnet/api/system.objectdisposedexception) | The object has been disposed of. |

## ReadNodesHistory(IEnumerable&lt;OpcNodeId&gt;, OpcReadHistoryDetails)

<span class="api-meta">since v2.23</span>

Reads the historical values of the nodes identified by the `nodeIds` specified using the `details` specified to select the values.

<div class="api-signature" data-lang="csharp">

```csharp
public IOpcNodeHistoryNavigator<OpcHistoryValue> ReadNodesHistory(
    IEnumerable<OpcNodeId> nodeIds,
    OpcReadHistoryDetails details)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function ReadNodesHistory(
    nodeIds As IEnumerable(Of OpcNodeId),
    details As OpcReadHistoryDetails) As IOpcNodeHistoryNavigator(Of OpcHistoryValue)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `nodeIds` | [IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/)&gt; | A sequence of the [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) instances of the nodes whose history is to be read. |
| `details` | [OpcReadHistoryDetails](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreadhistorydetails/) | The [OpcReadHistoryDetails](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreadhistorydetails/) which define the criteria to use to select the historical values. |

**Returns**

[IOpcNodeHistoryNavigator](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/)&lt;[OpcHistoryValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistoryvalue/)&gt;

An instance implementing the [IOpcNodeHistoryNavigator&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/) interface which provides the first page of the historical values read for the nodes, the values of a specific node using its [Item](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#item) indexer and further pages using its [MoveNextPage](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#movenextpage) method.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | One of the items of the `nodeIds` is a null identifier (see [IsNull](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/members#isnull)) or the `details` is an instance of the [OpcReadNodeHistoryModifiedDetails](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreadnodehistorymodifieddetails/) class; to read modified values use [ReadNodeHistoryModified](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcclient/readnodehistorymodified#readnodehistorymodified-opc-uafx-opcnodeid-opc-uafx-opcreadhistorydetails). |
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `nodeIds` sequence or one of its items or the `details` is a null reference (Nothing in Visual Basic). |

**Remarks**

In case there the server reports a bad status code for a node, the navigator provides no values for that node instead of throwing an exception.

## ReadNodesHistory(int, IEnumerable&lt;OpcNodeId&gt;)

Reads the raw historical values of the nodes identified by the `nodeIds` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node.

<div class="api-signature" data-lang="csharp">

```csharp
public IOpcNodeHistoryNavigator<OpcHistoryValue> ReadNodesHistory(
    int numberOfValues,
    IEnumerable<OpcNodeId> nodeIds)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function ReadNodesHistory(
    numberOfValues As Integer,
    nodeIds As IEnumerable(Of OpcNodeId)) As IOpcNodeHistoryNavigator(Of OpcHistoryValue)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `numberOfValues` | [Int32](https://learn.microsoft.com/dotnet/api/system.int32) | The maximum number of values returned for each node per page. |
| `nodeIds` | [IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/)&gt; | A sequence of the [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) instances of the nodes whose history is to be read. |

**Returns**

[IOpcNodeHistoryNavigator](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/)&lt;[OpcHistoryValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistoryvalue/)&gt;

An instance implementing the [IOpcNodeHistoryNavigator&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/) interface which provides the first page of the historical values read for the nodes, the values of a specific node using its [Item](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#item) indexer and further pages using its [MoveNextPage](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#movenextpage) method.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | One of the items of the `nodeIds` is a null identifier (see [IsNull](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/members#isnull)). |
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `nodeIds` sequence or one of its items is a null reference (Nothing in Visual Basic). |
| [ArgumentOutOfRangeException](https://learn.microsoft.com/dotnet/api/system.argumentoutofrangeexception) | The `numberOfValues` is lower or equals zero. |

**Remarks**

In case there the server reports a bad status code for a node, the navigator provides no values for that node instead of throwing an exception.

## ReadNodesHistory(DateTime?, int, IEnumerable&lt;OpcNodeId&gt;)

Reads the raw historical values of the nodes identified by the `nodeIds` specified beginning at the `startTime` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node.

<div class="api-signature" data-lang="csharp">

```csharp
public IOpcNodeHistoryNavigator<OpcHistoryValue> ReadNodesHistory(
    DateTime? startTime,
    int numberOfValues,
    IEnumerable<OpcNodeId> nodeIds)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function ReadNodesHistory(
    startTime As Date?,
    numberOfValues As Integer,
    nodeIds As IEnumerable(Of OpcNodeId)) As IOpcNodeHistoryNavigator(Of OpcHistoryValue)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `startTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The beginning of the period to read. |
| `numberOfValues` | [Int32](https://learn.microsoft.com/dotnet/api/system.int32) | The maximum number of values returned for each node per page. If only one time is specified, the time range shall extend to return this number of values. |
| `nodeIds` | [IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/)&gt; | A sequence of the [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) instances of the nodes whose history is to be read. |

**Returns**

[IOpcNodeHistoryNavigator](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/)&lt;[OpcHistoryValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistoryvalue/)&gt;

An instance implementing the [IOpcNodeHistoryNavigator&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/) interface which provides the first page of the historical values read for the nodes, the values of a specific node using its [Item](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#item) indexer and further pages using its [MoveNextPage](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#movenextpage) method.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | One of the items of the `nodeIds` is a null identifier (see [IsNull](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/members#isnull)) or the `startTime` is a null reference (Nothing in Visual Basic) or equals [MinValue](https://learn.microsoft.com/dotnet/api/system.datetime.minvalue). |
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `nodeIds` sequence or one of its items is a null reference (Nothing in Visual Basic). |
| [ArgumentOutOfRangeException](https://learn.microsoft.com/dotnet/api/system.argumentoutofrangeexception) | The `numberOfValues` is lower or equals zero. |

**Remarks**

In case there the server reports a bad status code for a node, the navigator provides no values for that node instead of throwing an exception.

## ReadNodesHistory(DateTime?, DateTime?, int, IEnumerable&lt;OpcNodeId&gt;)

Reads the raw historical values of the nodes identified by the `nodeIds` specified within the period defined by the `startTime` and `endTime` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node.

<div class="api-signature" data-lang="csharp">

```csharp
public IOpcNodeHistoryNavigator<OpcHistoryValue> ReadNodesHistory(
    DateTime? startTime,
    DateTime? endTime,
    int numberOfValues,
    IEnumerable<OpcNodeId> nodeIds)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function ReadNodesHistory(
    startTime As Date?,
    endTime As Date?,
    numberOfValues As Integer,
    nodeIds As IEnumerable(Of OpcNodeId)) As IOpcNodeHistoryNavigator(Of OpcHistoryValue)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `startTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The beginning of the period to read or a null reference (Nothing in Visual Basic) if no specific start time is specified. If `startTime` is not specified and the `numberOfValues` is equals zero the `endTime` needs to be specified. |
| `endTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The end of the period to read or a null reference (Nothing in Visual Basic) if no specific end time is specified. If `endTime` is not specified and the `numberOfValues` is equals zero the `startTime` needs to be specified. |
| `numberOfValues` | [Int32](https://learn.microsoft.com/dotnet/api/system.int32) | The maximum number of values returned for each node per page. If only one time is specified, the time range shall extend to return this number of values. |
| `nodeIds` | [IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/)&gt; | A sequence of the [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) instances of the nodes whose history is to be read. |

**Returns**

[IOpcNodeHistoryNavigator](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/)&lt;[OpcHistoryValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistoryvalue/)&gt;

An instance implementing the [IOpcNodeHistoryNavigator&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/) interface which provides the first page of the historical values read for the nodes, the values of a specific node using its [Item](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#item) indexer and further pages using its [MoveNextPage](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#movenextpage) method.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | One of the items of the `nodeIds` is a null identifier (see [IsNull](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/members#isnull)) or the `startTime` and `endTime` are a null reference (Nothing in Visual Basic) or are equals [MinValue](https://learn.microsoft.com/dotnet/api/system.datetime.minvalue) and `numberOfValues` is lower or equals zero. |
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `nodeIds` sequence or one of its items is a null reference (Nothing in Visual Basic). |

**Remarks**

In case there the server reports a bad status code for a node, the navigator provides no values for that node instead of throwing an exception.

## ReadNodesHistory(DateTime?, DateTime?, IEnumerable&lt;OpcNodeId&gt;)

Reads the raw historical values of the nodes identified by the `nodeIds` specified within the period defined by the `startTime` and `endTime` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public IDictionary<OpcNodeId, IEnumerable<OpcHistoryValue>> ReadNodesHistory(
    DateTime? startTime,
    DateTime? endTime,
    IEnumerable<OpcNodeId> nodeIds)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function ReadNodesHistory(
    startTime As Date?,
    endTime As Date?,
    nodeIds As IEnumerable(Of OpcNodeId)) As IDictionary(Of OpcNodeId, IEnumerable(Of OpcHistoryValue))
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `startTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The beginning of the period to read or a null reference (Nothing in Visual Basic) if no specific start time is specified. If `startTime` is not specified the `endTime` needs to be specified. |
| `endTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The end of the period to read or a null reference (Nothing in Visual Basic) if no specific end time is specified. If `endTime` is not specified the `startTime` needs to be specified. |
| `nodeIds` | [IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/)&gt; | A sequence of the [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) instances of the nodes whose history is to be read. |

**Returns**

[IDictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.idictionary-2)&lt;[OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/), [IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[OpcHistoryValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistoryvalue/)&gt;&gt;

A dictionary which provides for each node, identified by the [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) specified, the sequence of the [OpcHistoryValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistoryvalue/) instances read for the node.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | One of the items of the `nodeIds` is a null identifier (see [IsNull](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/members#isnull)) or the `startTime` and `endTime` are a null reference (Nothing in Visual Basic) or are equals [MinValue](https://learn.microsoft.com/dotnet/api/system.datetime.minvalue). |
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `nodeIds` sequence or one of its items is a null reference (Nothing in Visual Basic). |

**Remarks**

All values within the period are read, also if the server provides them using multiple responses. A node for which no values have been read, also because the server reports a bad status code for it, is not contained in the dictionary.

## ReadNodesHistory(int, params OpcNodeId\[\])

Reads the raw historical values of the nodes identified by the `nodeIds` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node.

<div class="api-signature" data-lang="csharp">

```csharp
public IOpcNodeHistoryNavigator<OpcHistoryValue> ReadNodesHistory(
    int numberOfValues,
    params OpcNodeId[] nodeIds)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function ReadNodesHistory(
    numberOfValues As Integer,
    ParamArray nodeIds As OpcNodeId()) As IOpcNodeHistoryNavigator(Of OpcHistoryValue)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `numberOfValues` | [Int32](https://learn.microsoft.com/dotnet/api/system.int32) | The maximum number of values returned for each node per page. |
| `nodeIds` | params [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/)[] | An array of the [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) instances of the nodes whose history is to be read. |

**Returns**

[IOpcNodeHistoryNavigator](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/)&lt;[OpcHistoryValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistoryvalue/)&gt;

An instance implementing the [IOpcNodeHistoryNavigator&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/) interface which provides the first page of the historical values read for the nodes, the values of a specific node using its [Item](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#item) indexer and further pages using its [MoveNextPage](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#movenextpage) method.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | One of the items of the `nodeIds` is a null identifier (see [IsNull](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/members#isnull)). |
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `nodeIds` array or one of its items is a null reference (Nothing in Visual Basic). |
| [ArgumentOutOfRangeException](https://learn.microsoft.com/dotnet/api/system.argumentoutofrangeexception) | The `numberOfValues` is lower or equals zero. |

**Remarks**

In case there the server reports a bad status code for a node, the navigator provides no values for that node instead of throwing an exception.

## ReadNodesHistory(DateTime?, int, params OpcNodeId\[\])

Reads the raw historical values of the nodes identified by the `nodeIds` specified beginning at the `startTime` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node.

<div class="api-signature" data-lang="csharp">

```csharp
public IOpcNodeHistoryNavigator<OpcHistoryValue> ReadNodesHistory(
    DateTime? startTime,
    int numberOfValues,
    params OpcNodeId[] nodeIds)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function ReadNodesHistory(
    startTime As Date?,
    numberOfValues As Integer,
    ParamArray nodeIds As OpcNodeId()) As IOpcNodeHistoryNavigator(Of OpcHistoryValue)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `startTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The beginning of the period to read. |
| `numberOfValues` | [Int32](https://learn.microsoft.com/dotnet/api/system.int32) | The maximum number of values returned for each node per page. If only one time is specified, the time range shall extend to return this number of values. |
| `nodeIds` | params [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/)[] | An array of the [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) instances of the nodes whose history is to be read. |

**Returns**

[IOpcNodeHistoryNavigator](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/)&lt;[OpcHistoryValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistoryvalue/)&gt;

An instance implementing the [IOpcNodeHistoryNavigator&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/) interface which provides the first page of the historical values read for the nodes, the values of a specific node using its [Item](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#item) indexer and further pages using its [MoveNextPage](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#movenextpage) method.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | One of the items of the `nodeIds` is a null identifier (see [IsNull](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/members#isnull)) or the `startTime` is a null reference (Nothing in Visual Basic) or equals [MinValue](https://learn.microsoft.com/dotnet/api/system.datetime.minvalue). |
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `nodeIds` array or one of its items is a null reference (Nothing in Visual Basic). |
| [ArgumentOutOfRangeException](https://learn.microsoft.com/dotnet/api/system.argumentoutofrangeexception) | The `numberOfValues` is lower or equals zero. |

**Remarks**

In case there the server reports a bad status code for a node, the navigator provides no values for that node instead of throwing an exception.

## ReadNodesHistory(DateTime?, DateTime?, int, params OpcNodeId\[\])

Reads the raw historical values of the nodes identified by the `nodeIds` specified within the period defined by the `startTime` and `endTime` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node.

<div class="api-signature" data-lang="csharp">

```csharp
public IOpcNodeHistoryNavigator<OpcHistoryValue> ReadNodesHistory(
    DateTime? startTime,
    DateTime? endTime,
    int numberOfValues,
    params OpcNodeId[] nodeIds)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function ReadNodesHistory(
    startTime As Date?,
    endTime As Date?,
    numberOfValues As Integer,
    ParamArray nodeIds As OpcNodeId()) As IOpcNodeHistoryNavigator(Of OpcHistoryValue)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `startTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The beginning of the period to read or a null reference (Nothing in Visual Basic) if no specific start time is specified. If `startTime` is not specified and the `numberOfValues` is equals zero the `endTime` needs to be specified. |
| `endTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The end of the period to read or a null reference (Nothing in Visual Basic) if no specific end time is specified. If `endTime` is not specified and the `numberOfValues` is equals zero the `startTime` needs to be specified. |
| `numberOfValues` | [Int32](https://learn.microsoft.com/dotnet/api/system.int32) | The maximum number of values returned for each node per page. If only one time is specified, the time range shall extend to return this number of values. |
| `nodeIds` | params [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/)[] | An array of the [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) instances of the nodes whose history is to be read. |

**Returns**

[IOpcNodeHistoryNavigator](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/)&lt;[OpcHistoryValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistoryvalue/)&gt;

An instance implementing the [IOpcNodeHistoryNavigator&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/) interface which provides the first page of the historical values read for the nodes, the values of a specific node using its [Item](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#item) indexer and further pages using its [MoveNextPage](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#movenextpage) method.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | One of the items of the `nodeIds` is a null identifier (see [IsNull](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/members#isnull)) or the `startTime` and `endTime` are a null reference (Nothing in Visual Basic) or are equals [MinValue](https://learn.microsoft.com/dotnet/api/system.datetime.minvalue) and `numberOfValues` is lower or equals zero. |
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `nodeIds` array or one of its items is a null reference (Nothing in Visual Basic). |

**Remarks**

In case there the server reports a bad status code for a node, the navigator provides no values for that node instead of throwing an exception.

## ReadNodesHistory(DateTime?, DateTime?, params OpcNodeId\[\])

Reads the raw historical values of the nodes identified by the `nodeIds` specified within the period defined by the `startTime` and `endTime` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public IDictionary<OpcNodeId, IEnumerable<OpcHistoryValue>> ReadNodesHistory(
    DateTime? startTime,
    DateTime? endTime,
    params OpcNodeId[] nodeIds)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function ReadNodesHistory(
    startTime As Date?,
    endTime As Date?,
    ParamArray nodeIds As OpcNodeId()) As IDictionary(Of OpcNodeId, IEnumerable(Of OpcHistoryValue))
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `startTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The beginning of the period to read or a null reference (Nothing in Visual Basic) if no specific start time is specified. If `startTime` is not specified the `endTime` needs to be specified. |
| `endTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The end of the period to read or a null reference (Nothing in Visual Basic) if no specific end time is specified. If `endTime` is not specified the `startTime` needs to be specified. |
| `nodeIds` | params [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/)[] | An array of the [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) instances of the nodes whose history is to be read. |

**Returns**

[IDictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.idictionary-2)&lt;[OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/), [IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[OpcHistoryValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistoryvalue/)&gt;&gt;

A dictionary which provides for each node, identified by the [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) specified, the sequence of the [OpcHistoryValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistoryvalue/) instances read for the node.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | One of the items of the `nodeIds` is a null identifier (see [IsNull](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/members#isnull)) or the `startTime` and `endTime` are a null reference (Nothing in Visual Basic) or are equals [MinValue](https://learn.microsoft.com/dotnet/api/system.datetime.minvalue). |
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `nodeIds` array or one of its items is a null reference (Nothing in Visual Basic). |

**Remarks**

All values within the period are read, also if the server provides them using multiple responses. A node for which no values have been read, also because the server reports a bad status code for it, is not contained in the dictionary.

## ReadNodesHistory(int, IEnumerable&lt;OpcReadNodeHistory&gt;)

Reads the raw historical values of the nodes as defined by the `commands` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node.

<div class="api-signature" data-lang="csharp">

```csharp
public IOpcNodeHistoryNavigator<OpcHistoryValue> ReadNodesHistory(
    int numberOfValues,
    IEnumerable<OpcReadNodeHistory> commands)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function ReadNodesHistory(
    numberOfValues As Integer,
    commands As IEnumerable(Of OpcReadNodeHistory)) As IOpcNodeHistoryNavigator(Of OpcHistoryValue)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `numberOfValues` | [Int32](https://learn.microsoft.com/dotnet/api/system.int32) | The maximum number of values returned for each node per page. |
| `commands` | [IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[OpcReadNodeHistory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcreadnodehistory/)&gt; | A sequence of [OpcReadNodeHistory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcreadnodehistory/) commands, each defining a node whose history is to be read. |

**Returns**

[IOpcNodeHistoryNavigator](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/)&lt;[OpcHistoryValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistoryvalue/)&gt;

An instance implementing the [IOpcNodeHistoryNavigator&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/) interface which provides the first page of the historical values read for the nodes, the values of a specific node using its [Item](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#item) indexer and further pages using its [MoveNextPage](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#movenextpage) method.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `commands` sequence or one of its items is a null reference (Nothing in Visual Basic). |
| [ArgumentOutOfRangeException](https://learn.microsoft.com/dotnet/api/system.argumentoutofrangeexception) | The `numberOfValues` is lower or equals zero. |

**Remarks**

In case there the server reports a bad status code for a node, the navigator provides no values for that node instead of throwing an exception.

## ReadNodesHistory(DateTime?, int, IEnumerable&lt;OpcReadNodeHistory&gt;)

Reads the raw historical values of the nodes as defined by the `commands` specified beginning at the `startTime` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node.

<div class="api-signature" data-lang="csharp">

```csharp
public IOpcNodeHistoryNavigator<OpcHistoryValue> ReadNodesHistory(
    DateTime? startTime,
    int numberOfValues,
    IEnumerable<OpcReadNodeHistory> commands)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function ReadNodesHistory(
    startTime As Date?,
    numberOfValues As Integer,
    commands As IEnumerable(Of OpcReadNodeHistory)) As IOpcNodeHistoryNavigator(Of OpcHistoryValue)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `startTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The beginning of the period to read. |
| `numberOfValues` | [Int32](https://learn.microsoft.com/dotnet/api/system.int32) | The maximum number of values returned for each node per page. If only one time is specified, the time range shall extend to return this number of values. |
| `commands` | [IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[OpcReadNodeHistory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcreadnodehistory/)&gt; | A sequence of [OpcReadNodeHistory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcreadnodehistory/) commands, each defining a node whose history is to be read. |

**Returns**

[IOpcNodeHistoryNavigator](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/)&lt;[OpcHistoryValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistoryvalue/)&gt;

An instance implementing the [IOpcNodeHistoryNavigator&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/) interface which provides the first page of the historical values read for the nodes, the values of a specific node using its [Item](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#item) indexer and further pages using its [MoveNextPage](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#movenextpage) method.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | The `startTime` is a null reference (Nothing in Visual Basic) or equals [MinValue](https://learn.microsoft.com/dotnet/api/system.datetime.minvalue). |
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `commands` sequence or one of its items is a null reference (Nothing in Visual Basic). |
| [ArgumentOutOfRangeException](https://learn.microsoft.com/dotnet/api/system.argumentoutofrangeexception) | The `numberOfValues` is lower or equals zero. |

**Remarks**

In case there the server reports a bad status code for a node, the navigator provides no values for that node instead of throwing an exception.

## ReadNodesHistory(DateTime?, DateTime?, int, IEnumerable&lt;OpcReadNodeHistory&gt;)

Reads the raw historical values of the nodes as defined by the `commands` specified within the period defined by the `startTime` and `endTime` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node.

<div class="api-signature" data-lang="csharp">

```csharp
public IOpcNodeHistoryNavigator<OpcHistoryValue> ReadNodesHistory(
    DateTime? startTime,
    DateTime? endTime,
    int numberOfValues,
    IEnumerable<OpcReadNodeHistory> commands)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function ReadNodesHistory(
    startTime As Date?,
    endTime As Date?,
    numberOfValues As Integer,
    commands As IEnumerable(Of OpcReadNodeHistory)) As IOpcNodeHistoryNavigator(Of OpcHistoryValue)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `startTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The beginning of the period to read or a null reference (Nothing in Visual Basic) if no specific start time is specified. If `startTime` is not specified and the `numberOfValues` is equals zero the `endTime` needs to be specified. |
| `endTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The end of the period to read or a null reference (Nothing in Visual Basic) if no specific end time is specified. If `endTime` is not specified and the `numberOfValues` is equals zero the `startTime` needs to be specified. |
| `numberOfValues` | [Int32](https://learn.microsoft.com/dotnet/api/system.int32) | The maximum number of values returned for each node per page. If only one time is specified, the time range shall extend to return this number of values. |
| `commands` | [IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[OpcReadNodeHistory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcreadnodehistory/)&gt; | A sequence of [OpcReadNodeHistory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcreadnodehistory/) commands, each defining a node whose history is to be read. |

**Returns**

[IOpcNodeHistoryNavigator](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/)&lt;[OpcHistoryValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistoryvalue/)&gt;

An instance implementing the [IOpcNodeHistoryNavigator&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/) interface which provides the first page of the historical values read for the nodes, the values of a specific node using its [Item](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#item) indexer and further pages using its [MoveNextPage](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#movenextpage) method.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | The `startTime` and `endTime` are a null reference (Nothing in Visual Basic) or are equals [MinValue](https://learn.microsoft.com/dotnet/api/system.datetime.minvalue) and `numberOfValues` is lower or equals zero. |
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `commands` sequence or one of its items is a null reference (Nothing in Visual Basic). |

**Remarks**

In case there the server reports a bad status code for a node, the navigator provides no values for that node instead of throwing an exception.

## ReadNodesHistory(DateTime?, DateTime?, IEnumerable&lt;OpcReadNodeHistory&gt;)

Reads the raw historical values of the nodes as defined by the `commands` specified within the period defined by the `startTime` and `endTime` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public IDictionary<OpcNodeId, IEnumerable<OpcHistoryValue>> ReadNodesHistory(
    DateTime? startTime,
    DateTime? endTime,
    IEnumerable<OpcReadNodeHistory> commands)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function ReadNodesHistory(
    startTime As Date?,
    endTime As Date?,
    commands As IEnumerable(Of OpcReadNodeHistory)) As IDictionary(Of OpcNodeId, IEnumerable(Of OpcHistoryValue))
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `startTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The beginning of the period to read or a null reference (Nothing in Visual Basic) if no specific start time is specified. If `startTime` is not specified the `endTime` needs to be specified. |
| `endTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The end of the period to read or a null reference (Nothing in Visual Basic) if no specific end time is specified. If `endTime` is not specified the `startTime` needs to be specified. |
| `commands` | [IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[OpcReadNodeHistory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcreadnodehistory/)&gt; | A sequence of [OpcReadNodeHistory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcreadnodehistory/) commands, each defining a node whose history is to be read. |

**Returns**

[IDictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.idictionary-2)&lt;[OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/), [IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[OpcHistoryValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistoryvalue/)&gt;&gt;

A dictionary which provides for each node, identified by the [NodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.services.opcnodeservicecommand/members#nodeid) of its command, the sequence of the [OpcHistoryValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistoryvalue/) instances read for the node.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | The `startTime` and `endTime` are a null reference (Nothing in Visual Basic) or are equals [MinValue](https://learn.microsoft.com/dotnet/api/system.datetime.minvalue). |
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `commands` sequence or one of its items is a null reference (Nothing in Visual Basic). |

**Remarks**

All values within the period are read, also if the server provides them using multiple responses. A node for which no values have been read, also because the server reports a bad status code for it, is not contained in the dictionary.

## ReadNodesHistory(int, params OpcReadNodeHistory\[\])

Reads the raw historical values of the nodes as defined by the `commands` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node.

<div class="api-signature" data-lang="csharp">

```csharp
public IOpcNodeHistoryNavigator<OpcHistoryValue> ReadNodesHistory(
    int numberOfValues,
    params OpcReadNodeHistory[] commands)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function ReadNodesHistory(
    numberOfValues As Integer,
    ParamArray commands As OpcReadNodeHistory()) As IOpcNodeHistoryNavigator(Of OpcHistoryValue)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `numberOfValues` | [Int32](https://learn.microsoft.com/dotnet/api/system.int32) | The maximum number of values returned for each node per page. |
| `commands` | params [OpcReadNodeHistory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcreadnodehistory/)[] | An array of [OpcReadNodeHistory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcreadnodehistory/) commands, each defining a node whose history is to be read. |

**Returns**

[IOpcNodeHistoryNavigator](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/)&lt;[OpcHistoryValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistoryvalue/)&gt;

An instance implementing the [IOpcNodeHistoryNavigator&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/) interface which provides the first page of the historical values read for the nodes, the values of a specific node using its [Item](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#item) indexer and further pages using its [MoveNextPage](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#movenextpage) method.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `commands` array or one of its items is a null reference (Nothing in Visual Basic). |
| [ArgumentOutOfRangeException](https://learn.microsoft.com/dotnet/api/system.argumentoutofrangeexception) | The `numberOfValues` is lower or equals zero. |

**Remarks**

In case there the server reports a bad status code for a node, the navigator provides no values for that node instead of throwing an exception.

## ReadNodesHistory(DateTime?, int, params OpcReadNodeHistory\[\])

Reads the raw historical values of the nodes as defined by the `commands` specified beginning at the `startTime` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node.

<div class="api-signature" data-lang="csharp">

```csharp
public IOpcNodeHistoryNavigator<OpcHistoryValue> ReadNodesHistory(
    DateTime? startTime,
    int numberOfValues,
    params OpcReadNodeHistory[] commands)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function ReadNodesHistory(
    startTime As Date?,
    numberOfValues As Integer,
    ParamArray commands As OpcReadNodeHistory()) As IOpcNodeHistoryNavigator(Of OpcHistoryValue)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `startTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The beginning of the period to read. |
| `numberOfValues` | [Int32](https://learn.microsoft.com/dotnet/api/system.int32) | The maximum number of values returned for each node per page. If only one time is specified, the time range shall extend to return this number of values. |
| `commands` | params [OpcReadNodeHistory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcreadnodehistory/)[] | An array of [OpcReadNodeHistory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcreadnodehistory/) commands, each defining a node whose history is to be read. |

**Returns**

[IOpcNodeHistoryNavigator](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/)&lt;[OpcHistoryValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistoryvalue/)&gt;

An instance implementing the [IOpcNodeHistoryNavigator&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/) interface which provides the first page of the historical values read for the nodes, the values of a specific node using its [Item](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#item) indexer and further pages using its [MoveNextPage](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#movenextpage) method.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | The `startTime` is a null reference (Nothing in Visual Basic) or equals [MinValue](https://learn.microsoft.com/dotnet/api/system.datetime.minvalue). |
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `commands` array or one of its items is a null reference (Nothing in Visual Basic). |
| [ArgumentOutOfRangeException](https://learn.microsoft.com/dotnet/api/system.argumentoutofrangeexception) | The `numberOfValues` is lower or equals zero. |

**Remarks**

In case there the server reports a bad status code for a node, the navigator provides no values for that node instead of throwing an exception.

## ReadNodesHistory(DateTime?, DateTime?, int, params OpcReadNodeHistory\[\])

Reads the raw historical values of the nodes as defined by the `commands` specified within the period defined by the `startTime` and `endTime` specified page by page using the `numberOfValues` specified as the maximum number of values per page and node.

<div class="api-signature" data-lang="csharp">

```csharp
public IOpcNodeHistoryNavigator<OpcHistoryValue> ReadNodesHistory(
    DateTime? startTime,
    DateTime? endTime,
    int numberOfValues,
    params OpcReadNodeHistory[] commands)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function ReadNodesHistory(
    startTime As Date?,
    endTime As Date?,
    numberOfValues As Integer,
    ParamArray commands As OpcReadNodeHistory()) As IOpcNodeHistoryNavigator(Of OpcHistoryValue)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `startTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The beginning of the period to read or a null reference (Nothing in Visual Basic) if no specific start time is specified. If `startTime` is not specified and the `numberOfValues` is equals zero the `endTime` needs to be specified. |
| `endTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The end of the period to read or a null reference (Nothing in Visual Basic) if no specific end time is specified. If `endTime` is not specified and the `numberOfValues` is equals zero the `startTime` needs to be specified. |
| `numberOfValues` | [Int32](https://learn.microsoft.com/dotnet/api/system.int32) | The maximum number of values returned for each node per page. If only one time is specified, the time range shall extend to return this number of values. |
| `commands` | params [OpcReadNodeHistory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcreadnodehistory/)[] | An array of [OpcReadNodeHistory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcreadnodehistory/) commands, each defining a node whose history is to be read. |

**Returns**

[IOpcNodeHistoryNavigator](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/)&lt;[OpcHistoryValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistoryvalue/)&gt;

An instance implementing the [IOpcNodeHistoryNavigator&lt;T&gt;](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/) interface which provides the first page of the historical values read for the nodes, the values of a specific node using its [Item](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#item) indexer and further pages using its [MoveNextPage](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.iopcnodehistorynavigator-1/members#movenextpage) method.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | The `startTime` and `endTime` are a null reference (Nothing in Visual Basic) or are equals [MinValue](https://learn.microsoft.com/dotnet/api/system.datetime.minvalue) and `numberOfValues` is lower or equals zero. |
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `commands` array or one of its items is a null reference (Nothing in Visual Basic). |

**Remarks**

In case there the server reports a bad status code for a node, the navigator provides no values for that node instead of throwing an exception.

## ReadNodesHistory(DateTime?, DateTime?, params OpcReadNodeHistory\[\])

Reads the raw historical values of the nodes as defined by the `commands` specified within the period defined by the `startTime` and `endTime` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public IDictionary<OpcNodeId, IEnumerable<OpcHistoryValue>> ReadNodesHistory(
    DateTime? startTime,
    DateTime? endTime,
    params OpcReadNodeHistory[] commands)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function ReadNodesHistory(
    startTime As Date?,
    endTime As Date?,
    ParamArray commands As OpcReadNodeHistory()) As IDictionary(Of OpcNodeId, IEnumerable(Of OpcHistoryValue))
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `startTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The beginning of the period to read or a null reference (Nothing in Visual Basic) if no specific start time is specified. If `startTime` is not specified the `endTime` needs to be specified. |
| `endTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The end of the period to read or a null reference (Nothing in Visual Basic) if no specific end time is specified. If `endTime` is not specified the `startTime` needs to be specified. |
| `commands` | params [OpcReadNodeHistory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcreadnodehistory/)[] | An array of [OpcReadNodeHistory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.client.opcreadnodehistory/) commands, each defining a node whose history is to be read. |

**Returns**

[IDictionary](https://learn.microsoft.com/dotnet/api/system.collections.generic.idictionary-2)&lt;[OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/), [IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[OpcHistoryValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistoryvalue/)&gt;&gt;

A dictionary which provides for each node, identified by the [NodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.services.opcnodeservicecommand/members#nodeid) of its command, the sequence of the [OpcHistoryValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistoryvalue/) instances read for the node.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | The `startTime` and `endTime` are a null reference (Nothing in Visual Basic) or are equals [MinValue](https://learn.microsoft.com/dotnet/api/system.datetime.minvalue). |
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `commands` array or one of its items is a null reference (Nothing in Visual Basic). |

**Remarks**

All values within the period are read, also if the server provides them using multiple responses. A node for which no values have been read, also because the server reports a bad status code for it, is not contained in the dictionary.
