DEV Community 👩‍💻👨‍💻

DEV Community 👩‍💻👨‍💻 is a community of 963,274 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

Create account Log in
I'm Luis! \^-^/
I'm Luis! \^-^/

Posted on

How to Use Toku's Illumass SDK to Query Pressure Data

Toku Systems is an IoT company that specializes in devices to measure pressure. These devices can be placed inside tanks, pipelines, wells, etc., and they collect data at a specific interval which goes to their servers.

Typically, you can access this information by accessing their plataform, which includes a user interface presenting you the pressure, temperature and battery of each device, and charts of how those things changed over time.

The other way to access this data is through code. For this, they use the @illumass/illumass-sdk, an npm package, for which I did not find a lot of documentation online. The goal of this article is to give a lucky reader an overview of how to use it, and save them time.

I'm going to use a Node.js function to replicate how the communication would look, so you can copy-paste it and see what happens!

Set up

Their SDK is an npm package called @illumass/illumass-sdk, so you can install it by hitting:

npm install @illumass/illumass-sdk
Enter fullscreen mode Exit fullscreen mode

You can then import it in your code like this:

import { Illumass } from "@illumass/illumass-sdk";

const illumass = new Illumass();

async function main() {
  // ... code
}

main();

Enter fullscreen mode Exit fullscreen mode

Logging in

At the time of writing, it appears that the only way to log in is with a user and a password, just like you log in into their platform. There seems to be code to create API keys but no way to use them. So we'll go ahead and log in with our user and password.

import { Illumass } from "@illumass/illumass-sdk";

const EMAIL = '';
const PASSWORD = '';
const SESSION_EXPIRATION = '5m'; // this parameter is optional

const illumass = new Illumass();

async function main() {
  try {
    await illumass.connect();
    await illumass.auth.login(EMAIL, PASSWORD, SESSION_EXPIRATION);
    console.log('Successfully connected.');
  } catch (e) {
    console.log(e);
  } finally {
    illumass.disconnect();
    console.log('Disconnected.');
  }
}

main();
Enter fullscreen mode Exit fullscreen mode

This will FAIL if the user and password are incorrect.

Now that you're logged in, you can start querying! Keep in mind that in order to query data, we need to have a serial number, which usually looks like this: TIPXXXXXX.

Getting the latest pressure, signal strength, battery or temperature

To get the latest measurement, we need to list all measurements for the given serial number.

Here's an example to get all 4 measurements:

import { Illumass } from "@illumass/illumass-sdk";

const EMAIL = '';
const PASSWORD = '';
const SESSION_EXPIRATION = '5m'; // this parameter is optional
const SERIAL_NUMBER = 'TIPXXXXXX';

const illumass = new Illumass();

async function main() {
  try {
    await illumass.connect();
    await illumass.auth.login(EMAIL, PASSWORD, SESSION_EXPIRATION);
    console.log('Successfully connected.');

    const result = await illumass.signal.listByHolderKey(`/devices/${SERIAL_NUMBER}`);
    const pressure = result.items.find(item => item.data.signalTypeKey === '/signalTypes/processStaticPressure');
    const signalStrength = result.items.find(item => item.data.signalTypeKey === '/signalTypes/signalStrength');
    const temperature = result.items.find(item => item.data.signalTypeKey === '/signalTypes/deviceTemperature');
    const battery = result.items.find(item => item.data.signalTypeKey === '/signalTypes/batteryVoltage');

    if (pressure) {
      console.log(`Last pressure reading ${pressure.data.status.reading}kPa at ${pressure.data.status.timestamp}`);      
    }

    if (signalStrength) {
      console.log(`Last signal strength reading ${signalStrength.data.status.reading}dBa at ${signalStrength.data.status.timestamp}`);      
    }

    if (temperature) {
      console.log(`Last temperature reading ${temperature.data.status.reading}°C at ${temperature.data.status.timestamp}`);      
    }

    if (battery) {
      console.log(`Last battery reading ${battery.data.status.reading}V at ${battery.data.status.timestamp}`);      
    }

  } catch (e) {
    console.log(e);
  } finally {
    illumass.disconnect();
    console.log('Disconnected.');
  }
}

main();
Enter fullscreen mode Exit fullscreen mode

This should always give you the information you need and it should match the platform's data!

Top comments (0)

Update Your DEV Experience Level:

Settings

Go to your customization settings to nudge your home feed to show content more relevant to your developer experience level. 🛠