You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 11 Next »

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)
      • Username (e.g. piwebapiuser)
      • Password (e.g. piwebapipassword)
      • Topic(s) Name
    • After registering to export client, it would be appropriate to verify connectivity/authentication
  • 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:







  • 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

  • No labels