Common module for JavaScript based gateways.
This module contains the gateway logic for communicating with the nRF Cloud platform and Bluetooth devices.
npm i @nrfcloud/gateway-common
You'll need to provide a class that inherits from bluetoothAdapter
. This will have to be specific for your system. See ExampleAdapter
for an example.
Create a gateway on your nRF Cloud account (make sure you have an account first!) using the following command:
npx @nrfcloud/gateway-registration
It will ask you for your login credentials. It will output three files in a ./result
directory. For MQTTS, you'll need the certificates and gateway ID. For WSS, you'll just need the gateway ID. WSS uses Cognito authentication to provide security.
In your code, create a new Gateway and pass in a configuration object.
It is suggested that you use environment variables and something like dotenv
.
(Note that this example is in Typescript, but plain JS works as well.)
import { Gateway, GatewayConfiguration, GatewayEvent } from 'gateway-common';
import { NobleAdapter } from './src/adapters/nobleAdapter';
const configuration: GatewayConfiguration = {
keyPath: process.env.PRIVATE_KEY_PATH,
certPath: process.env.CLIENT_CERT_PATH,
caPath: process.env.CA_CERT_PATH,
gatewayId: process.env.GATEWAY_ID,
host: process.env.HOST,
stage: process.env.ENVIRONMENT_STAGE,
tenantId: process.env.TENANT_ID,
bluetoothAdapter: new NobleAdapter(),
};
const gateway = new Gateway(configuration);
Upon instantiation, the gateway will try to connect to nRF Cloud.
The gateway will emit some events as things happen.
GATEWAY_DELETED
: The gateway has been deleted from nRF Cloud. You'll probably want to delete the certs since they're not useful any moreNAME_CHANGED
: Gateway name has been changedDEVICE_REMOVED
: Device has been removed from the gatewayCONNECTIONS_CHANGED
: The device connections have changed
To see an implementation of this project, see the Raspbery Pi gateway.