In this post I will be leveraging OSISoft's PI Web API to extract PI System Data to a flat file.
To keep things simple and easy to reproduce, this post will focus how to extract data with this technology.
Remote PI System:
PI Data Archive 2018
PI AF Server 2018
For simplicity 7 days of data of solely the PIPoint "Sinusoid" will be queried and written to a .txt file.
In order to retrieve data for a certain PI Point we need the WebID as reference. It can be retrieved by the built-in search of PI Web API.
In this case the WebID can be found here:
Given the WebID of the PI Point "Sinusoid", the following code will request historical data for the previous 7 days. It will parse the response JSON package, and write "Timestamp, Value, isGood" to the datafile specified.
import requests import json url = "https://<piwebapi_endpoint>/piwebapi/streams/<WebID_of_Sinusoid>/recorded?startTime=*-7d&endTime=*&boundaryType=Inside&maxCount=150000" #maxCount will set upper limit of values to be returned filepath = "<filepath>" response = requests.get(str(url), auth=('<user>', '<password>'), verify=False) #verify=False will disable the certificate verification check json_data = response.json() timestamp =  value =  isGood =  #Parsing Json response for j_object in json_data["Items"]: timestamp.append(j_object["Timestamp"]) value.append(j_object["Value"]) isGood.append(j_object["Good"]) event_array = zip(timestamp, value, isGood) #Writing to file with open(str(filepath), "w") as f: for item in event_array: try: writestring = "Timestamp: " + str(item) + " , Value: " + str(item) + " , isGood: " + str(item) + " \n" except: try: writestring = "" + str(item) + " \n" except: writestring = "" + " \n" f.write(writestring) f.close()
(*intendation not correctly displayed)
Timestamp, value and the quality for this time range were successfully written to the file.