One of the most pressing topics for data administrators is "what can I do with my real-time production data?". With the advent of science pads and a move to digitization in the oilfield, streaming data has become one of the most valuable assets. But it can take some practice and getting used to.I enjoyed tinkering around with the Petro.ai platform and while we have simulated wells: it's much more fun to have some real data. Ruths.ai doesn't own any wells but when the office got cold brew, I saw the opportunity.
We would connect a Raspberry Pi with a sensor for temperature to the cold brew keg and pipe temperature readings directly into the Petro.ai database. The data would come in as "casing temperature" and we'd be able to watch our coffee machine in real-time using Petro.ai!
The Plan
The over diagram would look like this:
The keg would be connected to the sensor and pass real-time information to the Raspberry Pi. Then it would shape it into the real-time schema and publish to the REST API endpoint.
Build out
The first step was to acquire the Raspberry Pi. I picked up a relatively inexpensive one off Amazon and then separately purchased two temperature sensors by Adafruit. It read temperature and humidity, but for the moment we'd just use the former.
There's enough information online to confirm that these would be compatible. After unpacking it, I setup an Ubuntu image and booted it up.
The Script
The script was easy enough, the Adafruit came with a code snippet and then for the Petro.ai endpoint, it was a matter of picking the right collection to POST to.
[code language="python"] import time from multiprocessing import Pool import os import datetime import requests import csv from pprint import pprint import argparse from functions import get_well_identifier, post_new_well, post_live_production, get_well_identifier import sys import Adafruit_DHT while True: PETRO_URL = 'https://<YOUR PETRO.AI SERVER>/api/' freq_seconds = 3 wellId = 'COFFEE 001' endpoint = 'RealTimeProduction' pwi = '5ce813c9f384f2057c983601' # Try to grab a sensor reading. Use the read_retry method which will retry up # to 15 times to get a sensor reading (waiting 2 seconds between each retry). humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 4) # Un-comment the line below to convert the temperature to Fahrenheit. temperature = temperature * 9/5.0 + 32 if temperature is not None: casingtemp = temperature else: casingtemp = 0 sys.exit(1) try: post_live_production(endpoint, pwi, 0, casingtemp, 0, 0, 0, 0, 0, 0, PETRO_URL) except: pass print((wellId + " Tag sent to " + PETRO_URL + endpoint + " at "+ datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))) time.sleep(freq_seconds) [/code]
Results
Once connected, we were extremely pleased with the results. With the frequency of readings set to 3 seconds, we could watch the rising and falling of the temperature inside the keg. The well was affectionately named "COFFEE 001"