arduino-iot-js

JS module providing Arduino Create IoT Cloud Connection

Usage no npm install needed!

<script type="module">
  import arduinoIotJs from 'https://cdn.skypack.dev/arduino-iot-js';
</script>

README

License: GPL v3 npm version

arduino-iot-js

Introduction

This NPM module provides interaction with the Arduino IoT Cloud MQTT broker. It can be used both from the browser and node.js

The main features of this module are:

  • Connection/disconnection to Arduino IoT Cloud Broker using WebSocket
  • Send IoT Cloud property updates
  • Listen for IoT Cloud property updates made by other clients and/or devices

If you are looking for a way to create, read, update, delete resources like

  • Devices
  • Things
  • Properties
  • Data Timeseries

please check the official Javascript Rest API client.

If you want to learn more about Arduino IoT Cloud architecture, check the official getting started documentation.

Installation

$ npm install arduino-iot-js

How to use

The MQTT connection over Websocket relies on Username / Password authentication. Under the hood, this module uses your user ID (plus a timestamp) as Username and needs a valid JWT Token as Password. You can use either a valid JWT token or just your API Credentials (clientId and clientSecret).

How to import arduino-iot-js in your project

Using a web application in the browser

import { ArduinoIoTCloud } from 'arduino-iot-js'

Using nodejs

const { ArduinoIoTCloud } = require('arduino-iot-js');

How to connect to Arduino IoT Cloud broker using API Credentials

const { ArduinoIoTCloud } = require('arduino-iot-js');

const options = {
    clientId: "YOUR_CLIENT_ID",
    clientSecret: "YOUR_CLIENT_SECRET",
    onDisconnect: message => {
        console.error(message);
    }
}

ArduinoIoTCloud.connect(options)
  .then(() => console.log("Connected to Arduino IoT Cloud broker"))
  .catch(error => console.error(error));

How to listen for property value updates

After a successful connection, you can listen for property updates. To do this you need:

const { ArduinoIoTCloud } = require('arduino-iot-js');
const thingId = "THING_ID"
const variableName = "PROPERTY_NAME"

const options = {
    clientId: "YOUR_CLIENT_ID",
    clientSecret: "YOUR_CLIENT_SECRET",
    onDisconnect: message => {
        console.error(message);
    }
}

ArduinoIoTCloud.connect(options)
  .then(() => {
    console.log("Connected to Arduino IoT Cloud broker");
    return ArduinoIoTCloud.onPropertyValue(thingId, variableName, showUpdates = value => console.log(value));
  })
  .then(() => console.log("Callback registered"))
  .catch(error => console.log(error));

Each time a new value is sent from the Device, the counterUpdates callback will be called.

How to disconnect from Arduino IoT Cloud Broker

ArduinoCloud.disconnect()
  .then(() => console.log("Successfully disconnected"));

How to send property values to the device

To do this you need:

  • The ID of the Thing the property belongs to. You can list all your things and properties using the Javascript Rest API client, calling the GET Things endpoint
  • The variable name of the property you want to set
  • Value can be either a string, a boolean or a number
const { ArduinoIoTCloud } = require('arduino-iot-js');
const thingId = "THING_ID"
const variableName = "PROPERTY_NAME"

const options = {
    clientId: "YOUR_CLIENT_ID",
    clientSecret: "YOUR_CLIENT_SECRET",
    onDisconnect: message => {
        console.error(message);
    }
}

ArduinoIoTCloud.connect(options).then(() => {
    console.log("Connected to Arduino IoT Cloud broker");
    ArduinoCloud.sendProperty(thingId, variableName, value).then(() => {
        console.log("Property value correctly sent");
    });    
});

How to listen to every user properties updates

const { ArduinoIoTCloud } = require('arduino-iot-js');
const ArduinoIoTApi = require('@arduino/arduino-iot-client');

const options = {
    clientId: "YOUR_CLIENT_ID",
    clientSecret: "YOUR_CLIENT_SECRET",
    onDisconnect:  message  => {
        console.error(message);
    }
}

// Connect to Arduino IoT Cloud MQTT Broker
ArduinoIoTCloud.connect(options)
  .then(() => {
    console.log("Connected to Arduino IoT Cloud MQTT broker");

    // Init Arduino API Client
    const ArduinoIoTClient = ArduinoIoTApi.ApiClient.instance;
    ArduinoIoTClient.authentications['oauth2'].accessToken = ArduinoIoTCloud.getToken();

    const thingsApi = new ArduinoIoTAPI.ThingsV2Api(ArduinoIoTClient);
    const propertiesAPI = new ArduinoIoTApi.PropertiesV2Api(ArduinoIoTClient);

    return thingsApi.thingsV2List()
      .then(things => {
        things.forEach(thing => {
          propertiesAPI.propertiesV2List(thing.id)
            .then(properties => {
              properties.forEach(property => {
                ArduinoIoTCloud.onPropertyValue(thing.id, property.variable_name,
                  showUpdates = value => console.log(property.variable_name + ": " + value))
                  .then(() => console.log("Callback registered for " + property.variable_name))
                  .catch(error => console.error(error));
              });
            })
            .catch(error => console.error(error));
        });
      });
  })
  .catch(error => console.error(error));