Tag Archives: restful

Rotronic Monitoring System integration. Pulling data into your systems

Data Integration is Key

Data integration is one of the primary requirements for many of our customers. I have previously discussed how RMS easily supports the integration of external data, but this posts takes a look at how RMS allows you the export data.

https___www.rotronic.com_media_events_images_1495454818_RMS_ML_GW

Of course RMS provides excellent graphing, statics and reporting as part of its core functionality, however here we are discussing the tools that will more likely be used for Machine to Machine (M2M) integration.

m2m

Machine to Machine (M2M) integration is absolutely key as data is increasingly being used for different purposes through businesses. So whilst RMS provides a highly secure and configurable platform for monitoring and alarming there are many weird and wonderful functions that it cannot provide. In this case we need to pull the data out and use it elsewhere.

Getting Data out of RMS

RMS is an SQL based system so we could of course query the SQL directly however there are many limitations with this approach especially security. Also via our RMS cloud platform absolutely no direct SQL access is available to end users.

Instead RMS supports a RESTful API, we’ll use a simple example to go through the basic steps.

RMS GET API

As before I’ll use some Python scripts in this example but if you prefer, POSTMAN is a great tool for testing these types of APIs.

Let’s breakdown the steps.

  1. Request API token using your username and password
  2. Use Token to request specific data
  3. Use data as required

Step 1 – Request a Token.

For security reasons you cannot simply send a request and get whatever data you desire. First you must request a token from RMS. The token is linked to a user account and will only allow the data that is visible by that user to be accessed. When requesting a token you can also specify how long it is valid for. The maximum length is 30 days.

import json
import requests

url = ‘https://rms.rotronic.com/RMS/API/RequestToken.ashx’
headers = {‘Content-Type’ : ‘Application/json’, ‘Expect’ : ‘100-continue’, ‘Connnection’ : ‘Close’, ‘Host’ : ‘rms.rotronic.com’}

UsrID = “1”
User= “Jeremy”
PW = “########”
Exp = “30”

get_payload = {‘UserId’:UsrID,’Username’:User,’Password’:PW,’RequestType’:’ DataHistory’,’ExpirationDays’: Exp}
api_get = requests.post(url, headers=headers, data =json.dumps (get_payload))
token = json.loads(api_get.content)
token = token.get(‘Token’)

The above request with suitable credentials will return something along these lines.

{‘UserId’: 1, ‘RequestType’: ‘DataHistory’, ‘Token’: ‘jUsTaNeXaMpLe_HRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjM5MzEsIlJlcXVlc3RUeXBlIjoiRGF0YUhpc3RvcnkiLCJFeHBpcmF0aW9uIjoiMjAxOS0wNC0wM1QxNToyMzoyMC44MTgwODM4WiJ9.rtHHKvrE-7jnMNHUGazso_jUsTaNeXaMpLe’, ‘Status’: ‘OK’}

The API token being the jumble of text above. With the token in hand we can proceed with requesting our data.

Step 2 – Request Data

To request data we need the measuring point ID for the data we need which can be obtained from the RMS interface (every measured parameter has a unique ID within RMS that will not change and cannot be reused). We also define the From and To ranges as well as the number of values we wish to obtain (Count).

import json
import requests

url = ‘https://rms.rotronic.com/RMS/API/DataHistory.ashx’
headers = {‘Content-Type’ : ‘Application/json’, ‘Expect’ : ‘100-continue’, ‘Connnection’ : ‘Close’, ‘Host’ : ‘rms.rotronic.com’}

MPTID = “20”
From = “2019-03-04T08:00:00”
To = “2019-03-04T09:00:00”
Count = “10”
Token = “token from step 1”

post_payload = {‘ID’: MPTID,’From’: From,’To’:To,’Count’:Count,’Order’:’Asc’,’Token’: Token}
api_get = requests.post(url, headers=headers, data =json.dumps (post_payload))
data = json.loads(api_get.content)
print (data)

The above request with suitable details will return something along these lines.

{‘Status’: ‘OK’, ‘ID’: 20, ‘Name’: ‘Humidity-18071604′, ‘Parameter’: ‘Humidity‘, ‘Unit’: ‘%rh‘, ‘Data’: [{‘Time’: ‘2019-03-04T08:00:14+01:00′, ‘Value’: ‘29.45%rh‘}, {‘Time’: ‘2019-03-04T08:05:14+01:00’, ‘Value’: ‘29.80%rh’}, {‘Time’: ‘2019-03-04T08:10:14+01:00’, ‘Value’: ‘29.61%rh’}, {‘Time’: ‘2019-03-04T08:15:14+01:00’, ‘Value’: ‘29.29%rh’}, {‘Time’: ‘2019-03-04T08:20:14+01:00’, ‘Value’: ‘29.80%rh’}]}

Step 3 – Use the data

So we have our data in JSON format from here it’s an easy step to chopping out the specific values and handing them over to some other code, machine or simply displaying them for yourself.

The flexibility of RMS is an important requirement for our customers especially those with existing systems. Using RMS as the central platform ensures precision measurements, secure and reliable data collection and easy access to data. Using our  APIs then allows this data to be utilised in wider business operations.

integration examples

Customer examples using the API include

  • Live temperature data included in packaging labels
  • Automated calibration certificate generation using reference values from RMS
  • Visualisation of RMS data on 3rd party software for building efficiency displays

Conclusion

This article focuses on our RESTful API however we have many other options for integration of data including relay output modules, analogue output modules, direct SQL connection. In addition our RMS-Integrator hardware offers direct communication with devices via MODBUS, SNMP and MySQL.

So the message is simple; if you have requirements RMS can usually deliver what you need. Please contact us and we will be happy to discuss your project be it large or small.

Dr Jeremy Wingate
Rotronic UK

RMS integration with Met Office DataPoint. An experiment with APIs…

The latest Rotronic Monitoring System software has been designed specifically for the IoT and IIoT world. We have a wide and growing range of sensors, loggers as well as input and output modules but we will never keep up with the unique demands of our customers. That’s where integration is key for any successful continuous monitoring system!

iot

Hardware can already be integrated via analogue input modules such as our 8ADC and digital devices can be integrated via our RMS-Convertor that can be programmed with custom protocols and functions operate with virtually any device.

Want to cut out the waffle… login and see the live data now using the details below:

https://rms.rotronic.com/rms/
Company Name: rms demo cloud
User: guest
Password: guest1234

In addition to hardware, software integration is a must, and not easy when we consider RMS is a fully Gamp6 compliant system and therefore security and traceability is key.

Why not access the SQL DB?

All data on RMS is stored within an SQL database which with suitable rights can be queried easily to pull data out. However injecting data whilst possible triggers our system to report data manipulation. Also direct access to the database presents a security risk and uncontrolled changes to the system, and of course its not possible on shared systems.

That is why we also offer a Restful API through which data can be posted only when configured by users with appropriate permissions and each data stream is securely linked to a onetime token, by no means the best security but suitable for many applications (and of course the whole API function can be disabled if preferred). We of course have software wizards at our HQ that can develop professional integration solutions but as a hobbyist I wanted to see what I could achieve.

Example API Report

So my plan was to use Python and pull data from the Met Office DataPoint service and inject it directly into our RMS server software so it could visualised, reported and analysed accordingly. Just a few simple steps…

  • Step 1 Get the data from Met Office API
  • Step 2 Create API device in RMS and send your data
  • Step 3 Enjoy graphs, reports and custom alarms

Step 1 – Get the data from Met Office API.

The Met Office API is great you simply need to register to get an api key then get your head around the commands. Once you have that you can request the data you need via a simple url and the information is returned in xml or json format.

API Example
Met Office Datapoint API Response in XML

In Python requesting the last 24 hours of hourly data from location 3212 (Keswick) looks something like this…

Import json, requests
url = ‘http://datapoint.metoffice.gov.uk/public/data/val/wxobs/all/json/3212?res=hourly&key=YOURKEY’ #replace with your Met Office API key!
r = requests.get(url)
metoffice_data = json.loads(r.text)

This gives a Python dictionary with all the json data from which we can request specific values easily for example the latest conditions (no doubt there are more elegant solutions but this works for me).

Hum = (metoffice_data[‘SiteRep’][‘DV’][‘Location’][‘Period’][1][‘Rep’][-1][‘H’])
Temp = (metoffice_data[‘SiteRep’][‘DV’][‘Location’][‘Period’][1][‘Rep’][-1][‘T’])
Pres = (metoffice_data[‘SiteRep’][‘DV’][‘Location’][‘Period’][1][‘Rep’][-1][‘P’])
DewP = (metoffice_data[‘SiteRep’][‘DV’][‘Location’][‘Period’][1][‘Rep’][-1][‘Dp’])

Next we need to create our API device within RMS so it will accept our data

Step 2 – Create API device in RMS

Adding new API device in RMS is simple process, we create the device and define the Name and Serial number.

At this point RMS awaits an Post command in which the additional details are included. Using the Python code below I am able to create a device with 4 measurement points (measured values); Humidity, Temp; Pressure and Dew Point.

import json, requests

url = ‘http://rms.rotronic.com/wService/wService3.DeviceService.svc/UpdateDataJson’
headers = {‘Content-Type’ : ‘Application/json’, ‘Expect’ : ‘100-continue’, ‘Connnection’ : ‘Close’, ‘Host’ : ‘rms.rotronic.com’}

payload = {‘Name’:’API_Test’,’Serial’:’12345′,’Values’:[{‘Index’:’1′,’Typ’:’1′,’Value’:’50’},{‘Index’:’2′,’Typ’:’2′,’Value’:’23’},\
{‘Index’:’3′,’Typ’:’16’,’Value’:’5′},{‘Index’:’4′,’Typ’:’48’,’Value’:’1000′}]}
print (payload)
r = requests.post(url, headers=headers, data =json.dumps (payload))

Finally RMS gives us the device ID and API token which must be included in any future post commands.

Combining Step 1 and Step 2 allows us to simply replace my example values above with the real Met Office API data! Run the script hourly or permanently with an hour delay and we have a simple tool proving live data weather data!

Step 3 – Enjoy graphs, reports and custom alarms

With the data in RMS we can easily graph values and create email, sms or phone alarms. Taking the API further I it is possible download live satellite imagery and dynamically update the layouts in RMS!

Example Report

So it turns-out getting data into RMS via the API is simple with a bit of basic code. Of course Met Office data is just an example in modern industrial applications there is so much unique data from devices or software that might be of use and RMS aims to offer a complete monitoring solution not simply for our products!

Be sure to get in touch if you have any questions on the above or have any monitoring requirements. Use the demo login above or visit out RMS website for more details.

Dr Jeremy Wingate
Rotronic UK