QUICK START

Braincube API Sample Notebook - Quick start

This notebook outlines how to use the Braincube API in order to start using it using a basic example.

In this notebook, we'll check :

  • How to set up your python environment
  • How to authenticate using a personal access token
  • How to start querying the data into a dataframe

Set Up

Install necessary packages as follows if not already installed:

In [ ]:

%%capture
#!pip install py_client-0.0.0/py_client-0.0.0-py3-none-any.whl
!pip install braincube_connector
!pip install braincube-token-getter

Check what packages are installed on the current environnement

In [ ]:

%%capture
!pip freeze

Setting up python environnement

In [ ]:

from braincube_connector import client
from braincube_connector import braincube

In [ ]:

import json 
import pandas as pd

Authentication

Since version 2.2.0, the authentication uses a personal access token (PAT).

In order to create a PAT, you need to go in your braincube personal menu > Account > Access tokens > +/Add

The scopes of the token should include BRAINCUBE and SSO_READ.

Then two options exist to pass the PAT to the braincube_connector:

Using a configuration dictionary when creating a client:

from braincube_connector import client

client.get_instance(config_dict={"api_key":"", "domain":"mybraincube.com"})

Using a configuration file:

from braincube_connector import client

client.get_instance("config_file"="myfile.json")

myfile.json content :

{"api_key":"<my_personal_access_token>","domain":"mybraincube.com"}
client.get_instance(config_file="{{PATH_OF_CONFIG}}/config_api.json")
client.request_ws()

Out [ ]:

/content

Client(domain=mybraincube.com) at 0x7f8fbbffb780

GET Requests - Get Braincube data and put them in a pandas DataFrame

Use the Braincube connector to get information about your server (name, memory base, etc) for use in your code.

Information on functions available is found here: https://pypi.org/project/braincube-connector/

For this example, we assume you know the server name but need to lookup the base ID for future use.

In [ ]:

bc = braincube.get_braincube("demo")
bc.get_memory_base_list()

In [ ]:

# You want to work on Boiler House Memory base which is id 20 
mb = bc.get_memory_base("20")
print(mb)
MemoryBase(name=Boiler House)

All variables have their own metadata filled with the Dataproperties

In [ ]:

var= list_variables[0]
var.get_metadata()

Out [ ]:

{'bcId': 2000077,
 'id': 2000077,
 'local': 'AAA_TEST_REG_LIN',
 'owner': {'bcId': 0,
  'email': 'no-reply@braincube.com',
  'fullName': 'iplwadmin',
  'id': 0,
  'uuid': '877be3ec-06a0-44e7-9921-26a80ba6429e'},
 'referenceDate': {'bcId': 2000001,
  'id': 2000001,
  'local': 'DATE',
  'standard': 'DATE',
  'tag': 'DATE'},
 'standard': 'AAA_TEST_REG_LIN',
 'tag': 'AAA_TEST_REG_LIN',
 'type': 'NUMERICAL'}

In [ ]:

# We get all variables id in a list and we create the header of our dataframe 
# based on the id and each name

list_variables = mb.get_variable_list()
list_variables_id = list(map(lambda x: x.get_bcid(), list_variables))

In [ ]:

# To have multiple headers that uses local / tag / standard names of each variables

list_variables_local = list(map(lambda x: x.get_metadata()["local"], list_variables))
list_variables_tag = list(map(lambda x: x.get_metadata()["tag"], list_variables))
list_variables_std = list(map(lambda x: x.get_metadata()["standard"], list_variables))

list_of_lists = [list_variables_id,list_variables_local,list_variables_tag,list_variables_std]

header = pd.MultiIndex.from_arrays(list_of_lists, names=['id','local','tag','standard'])

Filter the data for your dataset in order to filter them, you have to put the braincube long id usually : mb{memory base id}/d{id of variable}

In [ ]:

# for example between 2 dates : Format is yyyyMMdd_HHmmss
filters = [
  {
    "BETWEEN": [ "mb20/d2000001", "20201001_000000", "20201010_000000"]
  }
]

In [ ]:

# Getting data
try:
  data = mb.get_data(list_variables_id,filters=filters)
except Exception as e:
  print(e)

In [ ]:

# Transform into a dataframe with the good headers
df = pd.DataFrame(data)
df.columns=header

# Show the first lines
df.head()
id 2000077 2000002 2000042 2000082 2000083 2000034 2000061 2000001 2000040 2000041 2000078 2000079 2000051 2000074 2000058 2000081 2000030 2000003 2000004 2000005 2000006 2000049 2000008 2000009 2000010 2000011 2000012 2000014 2000016 2000017 2000019 2000020 2000021 2000022 2000023 2000024 2000025 2000026 2000027 2000028 2000029 2000046 2000007 2000031 2000018 2000015 2000013 2000073 2000037 2000039 2000036 2000038 2000044 2000053 2000071 2000065 2000080 2000066 2000076 2000050 2000043 2000033 2000032 2000052 2000062 2000075 2000054 2000047
local AAA_TEST_REG_LIN BOILER OPERATIONAL BOILER_OPNL BOILER STATUS BOILER_STAT Briana test - calc var with cat Briana test - calc var with cat to num Boiler Performance PURGE AIR COMPRESSOR / FUEL FEEDING SCREW 1 CALC INPUT01-copy DATE DATE - Weekday DATE WEEKDAY DEMO_VAR_CALC DEMO_VAR_CALC-copy EVENTS EVAPORATORS Empty Discrete Value FLOW OVERHEATED STEAM NOT BETWEEN 25 AND 35 IDMX INPUT 26 FUEL FEEDING SCREW 1 INPUT01 PURGE AIR-COMPRESSOR INPUT02 FLOW OVERHEATED STEAM INPUT03 FLOW SECONDARY AIR INPUT04 FLOW SECONDARY AIRx3600 INPUT04x3600 FLOW NATURAL GAS INPUT06 FLOW CONTINUOUS BLOWDOWN INPUT07 PRESSURE DIFFRENCE NATURAL GAS FILTER INPUT08 PRESSURE EXHAUST INPUT09 O2 INPUT10 SOLIDS INPUT12 TEMP COOLER INPUT13 TEMP FURNACE INPUT14 TEMP SAND BED CENTER INPUT15 TEMP 1 INPUT16 TEMP 3 INPUT17 TEMP AIR INPUT18 TEMP AIR INTAKE SECONDARY FAN INPUT19 TEMP FLUE GAS BEFORE ECONOMISER RIGHT INPUT20 TEMP FLUE GAS BAGHOUSE FILTER RIGHT INPUT21 TEMP 2 INPUT22 TEMP MES CONDENSATE SOOT BLOWER SYSTEM INPUT23 FLOW FILTRATE INPUT24
tag AAA_TEST_REG_LIN BOILER_OPNL BOILER_STAT BOILER_STAT-copy BOILER_STAT-copy-copy Boiler Performance CALC INPUT DATE DATE - Weekday DATE WEEKDAY DEMO_VAR_CALC DEMO_VAR_CALC-copy EVENTS EVAPORATORS Empty Discrete Value FLOW OVERHEATED STEAM NOT BETWEEN 25 AND 35 IDMX INPUT 26 INPUT01 INPUT02 INPUT03 INPUT04 INPUT04x3600 INPUT06 INPUT07 INPUT08 INPUT09 INPUT10 INPUT12 INPUT13 INPUT14 INPUT15 INPUT16 INPUT17 INPUT18 INPUT19 INPUT20 INPUT21 INPUT22 INPUT23 INPUT24 INPUT25 INPUT26 INPUT31 Month OUTPUT01 OUTPUT02 OUTPUT03 OUTPUT03-copy Output 1-copy Output 2-copy Output 3-copy Overfire Air System ON/OFF PAC_STATUS RATIO CO / NOx RATIO CO / NOx CAV Ratio NOx CO Rendement - Test SAND BED TEMP STABILITY COMPLIANCE % (X<35 = 100%) TEST_Demo - Régression linéaire - 17/03/20 10:41 TRIAL BIOCIDE VXD TRIAL CHELANT XYZ
standard AAA_TEST_REG_LIN BOILER OPERATIONAL BOILER STATUS BOILER STATUS-copy BOILER STATUS-copy-copy Boiler Performance PURGE AIR COMPRESSOR / FUEL FEEDING SCREW 1 DATE DATE - Weekday DATE - WEEKDAY DEMO_VAR_CALC DEMO_VAR_CALC-copy EVENTS EVAPORATORS Empty Discrete Value FLOW OVERHEATED STEAM NOT BETWEEN 25 AND 35 IDMX FLOW WOOD FUEL FEEDING SCREW 1 PURGE AIR COMPRESSOR FLOW OVERHEATED STEAM FLOW SECONDARY AIR FLOW SECONDARY AIRx3600 FLOW NATURAL GAS FLOW CONTINUOUS BLOWDOWN PRESSURE DIFFRENCE NATURAL GAS FILTER PRESSURE EXHAUST O2 SOLIDS TEMP COOLER TEMP FURNACE TEMP SAND BED CENTER TEMP 1 TEMP 3 TEMP AIR TEMP AIR INTAKE SECONDARY FAN TEMP FLUE GAS BEFORE ECONOMISER RIGHT TEMP FLUE GAS BAGHOUSE FILTER RIGHT TEMP 2 TEMP MES CONDENSATE SOOT BLOWER SYSTEM FLOW FILTRATE TEMP DRY SLUDGE OPERATING SPECIFICATION FLOW AMMONIA GAS Month SAND BED TEMP STABILITY CO NOx NOx-copy STABILITY TEMP SAND BED PERFORMANCE <30 CO PERFORMANCE <1.3 NOx PERFORMANCE <160 Overfire Air System ON/OFF PURGE AIR COMPRESSOR HI/LO RATIO CO / NOx RATIO CO / NOx CAV Ratio NOx CO Rendement - Test SAND BED TEMP STABILITY COMPLIANCE % (X<35 = 100%) TEST_Demo - Régression linéaire - 17/03/20 10:41 TRIAL BIOCIDE VXD TRIAL - CHELANT XYZ Weekday Year Week
0 1203.064576 1.0 Steady None 0.08 0.0 1.458418 20201001_000000 NaN THURSDAY 203.558 5.93 01 ORIGINAL STATE 35.6 245292 NaN 49.3 71.9 35.6 1.55 5580 1399 7.52 0 1017 5.93 NaN 348 1167 815 790 830 34.3 16.5 384 157.0 868 277.0 6592.0 56.5 COND E 73.8 NaN 35 0.08 148.2 131.887671 0.0 1.0 1.0 ON 02 HIGH 0.000540 0.000540 1852.500000 0.025447 100 NaN 00 NULL None NaN 202040 NaN 1083.211385 0.172604
1 1179.709353 1.0 Steady None 0.07 0.0 1.549356 20201001_001000 NaN THURSDAY 204.206 7.01 01 ORIGINAL STATE NaN 245293 NaN 46.6 72.2 28.0 1.59 5724 1401 5.43 0 1017 7.01 NaN 343 1104 816 793 830 34.2 16.4 378 158.0 840 367.0 6816.0 56.6 COND E 74.9 NaN 34 0.07 127.5 131.872603 0.0 1.0 1.0 ON 02 HIGH 0.000549 0.000549 1821.428571 0.019986 100 NaN 00 NULL None NaN 202040 NaN 1073.079305 0.135562
2 1132.774106 1.0 Steady None 0.07 0.0 1.537313 20201001_002000 NaN THURSDAY 204.170 6.95 01 ORIGINAL STATE NaN 245294 NaN 46.9 72.1 26.1 1.55 5580 1397 19.10 0 1017 6.95 NaN 343 1061 817 797 829 34.1 16.4 361 159.0 812 399.0 6821.0 56.6 COND E 73.7 NaN 32 0.07 92.1 131.220548 0.0 1.0 1.0 ON 02 HIGH 0.000760 0.000760 1315.714286 0.018683 100 NaN 00 NULL None NaN 202040 NaN 1052.258565 0.126725
3 1179.821754 1.0 Steady None 0.07 0.0 1.598670 20201001_003000 NaN THURSDAY 204.578 7.63 01 ORIGINAL STATE 24.1 245295 NaN 45.1 72.1 24.1 1.57 5652 1399 7.57 0 1017 7.63 NaN 339 1028 819 803 832 34.0 16.4 346 158.0 791 398.0 6803.0 56.7 COND E 62.3 NaN 34 0.07 84.9 130.563014 0.0 1.0 1.0 ON 02 HIGH 0.000824 0.000824 1212.857143 0.017227 100 NaN 00 NULL None NaN 202040 NaN 1053.079665 0.116847
4 1203.401778 1.0 Steady None 0.06 0.0 1.593819 20201001_004000 NaN THURSDAY 205.520 9.20 01 ORIGINAL STATE 24.4 245296 NaN 45.3 72.2 24.4 1.56 5616 1401 6.87 0 1017 9.20 NaN 341 1022 821 813 836 33.9 16.4 345 157.0 779 400.0 6788.0 56.8 COND E 39.4 NaN 35 0.06 75.9 129.926027 0.0 1.0 1.0 ON 02 HIGH 0.000791 0.000791 1265.000000 0.017416 100 NaN 00 NULL None NaN 202040 NaN 978.012766 0.118133

Was this article helpful?

Powered by Zendesk