Node-RED nodes for OSIsoft PI Web API with OMF support and real-time subscriptions
npm install node-red-contrib-piwebapiNode-RED nodes for OSIsoft PI Web API with OMF support and real-time subscriptions.
``bash`
npm install node-red-contrib-piwebapi
Or install directly from Node-RED palette manager.
#### PI Web API Config
Configuration node for PI Web API connection settings.
- Base URL: PI Web API endpoint (e.g., https://piserver/piwebapi)
- Username/Password: Basic authentication credentials
- Verify SSL: Enable/disable SSL certificate verification
#### PI Point List
List PI Points from a PI Data Archive server.
- Filter by name pattern (e.g., sin, temperature*)
- Store results in global context for use by other nodes
- Returns WebId, name, and path for each point
#### PI Point Read
Read values from PI Points.
- Current Value: Get the latest value
- Recorded Values: Get historical data with time range
- Interpolated Values: Get evenly spaced interpolated data
- Plot Values: Get values optimized for plotting
Output format:
`javascript`
{
topic: "PointName",
payload: 42.5,
time: "2024-01-18T12:00:00.000Z",
quality: "Good",
web_id: "F1DP...",
read_mode: "value"
}
#### Asset Read
Read attribute values from AF elements.
#### Attribute List
List attributes from AF elements.
#### PI Point Write
Write values to existing PI Points.
Numeric values:
`javascript`
msg.payload = 42.5;
msg.timestamp = new Date().toISOString();
msg.webId = "F1DP...";
Digital state values:
`javascript`
msg.payload = {
Name: "Active",
Value: 1,
IsSystem: false
};
msg.timestamp = new Date().toISOString();
msg.webId = "F1DP...";
System digital states (Bad, Comm Fail, etc.):
`javascript`
msg.payload = {
Name: "Comm Fail",
Value: 313,
IsSystem: true
};
Use OMF to create new data streams in PI. Requires three steps:
1. Create Type (schema definition)
2. Create Container (stream/point)
3. Send Data
#### OMF Type Builder
Visual interface to define OMF type schemas.
- Set Type ID and classification (dynamic/static)
- Define properties with types and formats
- Mark index property (usually Timestamp)
#### OMF Container Builder
Create OMF containers (streams) that use defined types.
- Single container mode
- Multiple containers mode (batch creation)
- Select types from global context
#### OMF Writer
Send OMF messages to PI Web API.
- Message types: type, container, datacreate
- Actions: , update, delete
- Supports gzip compression
#### Subscribe
WebSocket subscription to PI Point value changes.
For OMF support, configure these in PI Web API Admin:
| Setting | Value |
|---------|-------|
| CorsMethods | GET,OPTIONS,POST,PUT |False
| DisableWrites | |Insert
| OmfCreateMode | |
If EnableCSRFDefense is True, the nodes automatically include the X-Requested-With: XMLHttpRequest header.
[Inject] -> [PI Point Read] -> [Debug]
`$3
`
[Inject] -> [Function: Set Value] -> [PI Point Write] -> [Debug]
`$3
`
[Inject] -> [OMF Type Builder] -> [OMF Writer] -> [Debug]
[Inject] -> [OMF Container Builder] -> [OMF Writer] -> [Debug]
[Inject] -> [Function: Build Data] -> [OMF Writer] -> [Debug]
`$3
`javascript
msg.payload = [{
containerid: 'Sensor001',
values: [{
Timestamp: new Date().toISOString(),
Value: 23.5
}]
}];
msg.omfMessageType = 'data';
`Global Context Integration
PI Point List can store discovered points in global context, making them available to other nodes via dropdown selection:
1. Configure PI Point List with a global context key (e.g.,
piPoints`)MIT
Holger Amort
https://github.com/ErnstHolger/node-red-contrib-piwebapi