Description
Osisoft PI is the most used historian in the Oil&Gas industry. EdgeX needs to be capable to export data to such a platform.
Requirements
- Authenticate the edge node through Basic Authentication
- Create new tags in PI Archive
- Export throughput up to 1,000 events/second from each EdgeX node
- Local buffering and retry mechanism with resilience to network downtime
- Local logging of error messages & events through EdgeX Log service
Design
This capability can be implemented by cloning the current EdgeX HTTPS REST export feature and modifying it accordingly to send messages in a format accepted by PI Web API. This is an approach that has been adopted by other IIoT platforms as well.
- Step 1 - Configuration
- Parameters that define the configuration of the export service and are managed through Export Client API calls:
- PI Web API Endpoint (e.g. https://mypiwebapi.domain.com/piwebapi)
- PI Archive Name (e.g. mypiarchive)
- Export interval in milliseconds (e.g. 1000) - as an alternative this could be batch size
- Username (e.g. piwebapiuser)
- Password (e.g. piwebapipassword)
- Datapoint(s) that will be exported to corresponding PI tag(s)
- After registering to export client, it would be appropriate to verify connectivity/authentication
- Parameters that define the configuration of the export service and are managed through Export Client API calls:
- Step 2 - Initialization
- The following steps need to be executed after the client registration through export client:
- Verify if the tags are already existing in the PI Archive.
- For each configured tag, the following query must be executed.
- https://mypiwebapi.domain.com/piwebapi/search/query?q=name:tagname&scope=pi:mypiarchive
If the tag already exists, the reply will look like:
{ "TotalHits": 1, "Links": { "Next": "https://mypiwebapi.domain.com/piwebapi/search/query?q=name%3Atagname&scope=pi%3Amypiarchive&count=10&start=10", "First": "https://mypiwebapi.domain.com/piwebapi/search/query?q=name%3Atagname&scope=pi%3Amypiarchive&count=10", "Last": "https://mypiwebapi.domain.com/piwebapi/search/query?q=name%3Atagname&scope=pi%3Amypiarchive&count=10&start=0" }, "Errors": [], "Items": [ { "Name": "tagname", "Description": "Some Description", "MatchedFields": [ { "Field": "name" } ], "ItemType": "pipoint", "AFCategories": [], "UniqueID": "\\\\{044de274-8d72-4cb6-839b-9e415e793dd8}\\?3", "WebId": "P0dOJNBHKNtkyDm55BXnk92AAwAAAAU1JWR0RZUExNT1NJRDAzXENEVDE1OA", "UoM": "deg. c", "DataType": "float32", "Links": { "Self": "https://mypiwebapi.domain.com:443/piwebapi/points/P0dOJNBHKNtkyDm55BXnk92AAwAAAAU1JWR0RZUExNT1NJRDAzXENEVDE1OA" }, "Score": 13.62607 } ] }
In this case the WebId of the tag must be obtained in order to be used in further iterations. If the tag does not exist, the reply will look something like:
- Verify if the tags are already existing in the PI Archive.
- The following steps need to be executed after the client registration through export client:
- Step 3 - Data Export
- TBD
Possible improvements for a later version:
- Support Kerberos authentication
- Ability to send data to multiple PI Nodes concurrently (up to 3)
- High throughput up to 100,000 events/second from each EdgeX node by using an ad-hoc OMF connector to send messages to PI Connector Relay with OMF
Code
To be updated.
Current status
Waiting for Go Export Client & Distribution to support HTTPS REST