Senet offers a variety of methods to stream device messages transmitted over the Senet Network.

Data Streaming Overview

Devices transmit uplink messages to one or more gateways that relay the messages to the network server. The network server forwards the messages to IoT platforms.


IoT platforms make calls to the network server. The network server sends each downlink message to a single gateway that transmits the message to a single device.


Notification Targets

Data streaming is setup by creating Notification Targets for devices. The Notification Target configures the Network Server to stream device uplinks to a user specified destination or 3rd party platform. In other words, uplink messages are forwarded as they are received by the Senet Network. To configure a Notification Target:

  1. Open the Edit Device window.

    Dashboard Tile View: Click on the menu button Tile Menu. Click on the edit button Tile Edit.

    Dashboard Table View: Select a row in the device table. Click on the edit button Table Edit.

    Device Details View: Click on the edit button Device Edit.

  2. The Edit Device window will appear. Click on the NOTIFICATION TARGET tab.

    Edit Device

  3. The Notification Target window will be displayed.


  4. In the Forward To dropdown menu, choose a Notification Target type to display the required fields and options.

  5. Complete the required fields and click Save.


A firewall rule may need to be added to allow incoming uplink messages from the Senet Network.

Senet Source IP Addresses: and

Supported Notification Targets

The Senet Network supports a variety of options to forward messages as they are received by the network. Options may be to forward messages to a private socket listener or a public subscription based analytics solution. By Default, only the packet with the best Signal to Noise Ratio (SNR) will be forwarded. To receive packets received by multiple gateways (Duplicate Packets) enable “Include Duplicate Uplinks” when setting up the notification target.

Consecutive Errors

Notification Targets that produce 10 consecutive errors when forwarding data will be disabled by the network server. This is to prevent excessive load on the target and on the network server. A short outage in network connectivity should not trigger the 10 consecutive error limit on most devices. However, if your device has a very short transmit interval, it may be possible to reach the 10 consecutive error limit in a very short period of time. If your Notification Target is disabled by the network server review the Last Error message field in the device details. This error message will help you understand why the notifications are failing. If you believe the errors where caused by interruption in service that has now been corrected then you can re-enable the Notification Target to restore message forwarding to your target. If the error condition persists then the Notification Target will again be disabled when the limit is hit.

Senet provides a simple API to programmatically send downlinks to devices on the Senet Network via the https POST method. The Downlink API can be used to set triggers that respond to events and submit downlink messages to the downlink queue. Please see the Downlink API section for more information.

Packet Data

The Senet Network receives payload data from devices via one or more gateways that receive the transmission. In addition to streaming the tenant payload data (pdu), network information is also included. The data is formatted using JSON and contains the following default fields. Optional RF fields can also be added by enabling "Include RF Data" in the notification target.

The Senet Network supports the standard JSON object model where each object contains one-to-many key/values pairs. The JSON object is in the following format:

   "Key":"String Value",
   "Key": Numeric Value

Default Data Fields

FieldName DataType Description
ack Boolean Flag indicating if the uplink was acknowledging the receipt of a downlink.
devEui String 64-bit Extended Unique Identifier of the device transmitting the message
gwEui String 64-bit Extended Unique Identifier of the receiving Gateway that processed the message
joinId Number Incrementing Integer used to Identify the last join
pdu String Protocol Data Unit or Customer Payload data
port Number 0 indicates that the FRMPayload contains MAC commands only and 1..223 are application specific
seqNo Number Incrementing Integer used to Identify an uplink
txtime String Time the message was received by the gateway

Example with Default Data Fields:


Additional RF Data Fields

FieldName DataType Description
channel Number Frequency Channel of the transmission
freq Number Transmit Frequency in MHz
rssi Number Received Signal Strength Indicator reported by receiving gateway
snr Number Average Signal to Noise Ratio reported by receiving gateway
datarate Number Integer that maps to a spreading factor, bandwidth and bitrate (Data Rate Reference Table)

Example with Additional RF Data Fields:


Data Rate Reference Table


In addition to the above JSON packet types Senet also offers an extended packet if the device implements the standard Senet Packet Format. If the "Supports Senet Packet" box is checked on the Device Details Edit Dialog then the following JSON fields will be appended to the end of the message.

0100 - Self ID Packet (fields)

  "deviceModel": "5847",
  "deviceRev": 1,
  "fwVersion": "",
  "fwDeveloper": 14,
  "batteryStatus": 6

0101 - Rx Info (fields)

  "uplinkChan": "09",
  "downlinkSnr": "00",
  "downlinkRssi": "0000",
  "uplinkTxPwr": "00",
  "uplinkDatarate": "03",
  "localTimestamp": "016A41"

0102 - GPS Data (fields)

  "lat": 43.083411,
  "lng" -70.775997:,
  "elev": 116,
  'included if available'
  "uplinkTxPwr": 30

0103 - ConfigWord (fields)

  "configWord": "00000001",
  "configMask": "FFFFFFFF",
  "txPeriod": 60

0104 - Boot Info (fields)

  "bootCount": 95,
  "resetCount": 2,
  "bootInfo": "00000001"

0108 - Sensor Info (fields)

  "value1": 11,
  'Up to 5 values included if available'
  "value2": 22,
  "value3": 33,
  "value4": 44,
  "value5": 55


The Senet Network can be instructed to forward received messages using RESTful HTTP/HTTPS. The forwarder will be expecting a page that accepts a standard HTTP POST. Messages are forwarded as JSON without a message wrapper, i.e. messages will begin and end with {...} and will not include message={...}. Messages will be contained in the FormBody of the post. Using the Senet Development Portal, tenants can configure the API to forward option HTTP Post or HTTPS Post and supply the URL of the POST accept page. For tenants that move beyond the development stage, Senet can assign a block of EUIs to be forwarded thus eliminating the need to assign each node to a forwarding address.

Platform Setup

Implementation specific.

Notifier Setup

The HTTP/HTTPS Notification Target also allows up to two header values to be specified. If headers are specified, they will be added to the HTTP-Request that is POSTed to the URL. Headers in this context are typically used to provide authentication for the request. For instance, you may want to specify an “APIKey” that identifies the Request. The Destination API would then read the APIKey header value to validate the request.

Messages will be forwarded in JSON format (See Default Data Fields).

In an effort to support older implementations, we offer a Legacy Format with the HTTP/HTTPS forwarder.

Example Legacy Format with Additional RF Data Fields:

      "PDU": "01080100F2020018",
      "FREQ": 907.9,
      "GW": "00250C00010186DC",
      "EUI": "00250C0100000302",
      "TXTime": "2017-04-19T17:38:34.504Z",
      "RSSI": -51,
      "SeqNo": 13,
      "Port": 1,
      "SNR": 11,
      "DataRate": 1


MQTT is a lightweight messaging protocol where a client can register to send/receive messages on publish/subscribe topics. These messages are forwarded to the users MQTT Broker (server) such as Mosquitto, where the messages can be held until a client requests the messages for a specified topic. The MQTT notifier will register a client to send messages on a Publish Topic and can optionally register to receive Downlink Requests on the Subscribe Topic. The Brokers Address is the IP Address/Hostname of the MQTT Server and the Client ID is an optional field where you can identify the Senet client connection to your MQTT Broker, if no Client ID is specified then the a unique Client ID will be generated starting with "clientid". Client IDs should be unique as the broker will disconnect an existing connection when a new connection is initiated with that same client id.

The Broker Port should be configured to match the port of your server. Typically, the default port is 1883 or 8883 for TLS.

Uplink messages will be forwarded in JSON format to the Publish Topic (See Default Data Fields).

Users have the ability using external tools to send/publish Downlink messages to this notifier's Subscriber Topic, the Senet Client can process these messages provided they are delivered in the following JSON format:

Downlink Message Format


Downlink Message Format with optional fields


Note: Downlink messages will only be processed if the EUI specified is registered with the Senet Development Portal.

The Senet Client uses the following QoS levels for the Publish and Subscriber topics:

Publish Topic = At Most Once (0)
Subscribe Topic = Exactly Once (2)

Authentication and Security

Platform Setup

Implementation specific.

Notifier Setup

Specify the Brokers IP Address and Publish Topic in the Notification Target fields. The Subscribe Topic is only required if you are going to be processing downlinks. The Client ID is also optional and only required if your broker requires a specific Client ID.

TCP Socket Connection

The Senet Network can be instructed to forward received messages to a specified IP and Port on a TCP Socket connection. The forwarder will be expecting a TCP Listener to be available to accept incoming socket connections. It is the responsibility of the tenant to provide a correctly configured Socket Listener for incoming socket connections. Using the Senet Development Portal, tenants can configure the Notification Target option as TCP Socket and supply the Socket IP/Hostname as well as the Port. The messages are sent serially (in JSON format) on an individual socket connection, i.e. Socket.Open, Socket.Write, Socket.Close.

Platform Setup

Implementation specific.

Notifier Setup

Put the Socket IP and Port of your listening server into the Notification Target fields.

Screenshot AT&T M2X

AT&T M2X ( is a cloud-based service designed to deliver IoT data to its audience in a clear, digestible fashion. Senet can forward the data collected by devices on its network to corresponding data streams configured on AT&T M2X. After establishing an M2X account, you will need create an M2X device (representative of your IoT device) and then add data stream to it. As part of creating the M2X device, a Device ID and Primary API Key will be generated. The data stream type can be either Numeric or Non-Numeric. For IoT devices whose data supports the Senet Packet Format, either type may be used: Senet will decode and forward only the first sensor value from the PDU to M2X. If you want M2X to chart the sensor values, select the Numeric stream type. Devices that do not support the Senet Packet Format must use the Non-Numeric stream type: the entire un-decoded PDU will be forwarded to M2X.

Platform Setup

Setting up an M2X stream requires 2 steps in M2X.

  1. Create the device, then click on it (note the Device ID and API KEY) Screenshot
  2. Create the stream.

    Devices that support the Senet Packet Format will send the sensor1 data to M2X.
    If you want to graph the data, set the Stream Type to Numeric. Screenshot

    Devices that do not support the Senet Packet Format will have the PDU forwarded to the M2X platform.

    If your device doesn't support the Senet Packet Format or you don't wish to graph the data then should choose the Non-Numeric Stream Type.

Notifier Setup

When using M2X as the forwarding option for your device, for the Notification Target fields, you will need the M2X API Key, Device ID & Stream ID created in the M2X platform.

Screenshot myDevices Cayenne

myDevices Cayenne ( is the world’s first drag and drop IoT project builder that empowers developers, designers and engineers to quickly prototype and share their connected device projects. Cayenne was designed to help users create Internet of Things prototypes and then bring them to production.

Platform Setup

To get started with Cayenne, add a new Device/Widget from the LoRa->Senet list of devices. Select a Senet Packet Format aware device or other devices. Enter the Device Name, DevEUI, and Location (if device doesn't move) and click Add Device to view the device in the myDevices platform.


Notifier Setup

There is no additional configuration.

Screenshot Microsoft Azure IoT Hub

IoT Hub is a Microsoft Azure ( service used to connect, monitor and control IoT assets. Devices created through the IoT Hub can receive data forwarded from nodes on the Senet Network. Using the Senet Portal, select Azure IoT Hub as the forwarding option for your node. Submit your device specific connection URL and the SAS (Shared Access Signature) generated for your device.

Senet will forward messages in JSON format (See Default Data Fields).

Platform Setup

Login to your Microsoft Azure Account and add IoT Hub from the Marketplace. Select the IoT Hub and press the Create button. Screenshot

Locate and copy your connection string. Screenshot

Download the Microsoft Azure Device Explorer Application (windows only).

Open the Device Explorer, paste the Connection String in the text box and click the Update button. Screenshot

Click on the Management tab and click the Create button to add a new device. Click the SAS Token button to generate an SAS Token.

NOTE: When copying the SAS from the Device Explorer, copy everything after "SharedAccessSignature=". Also make sure to set a Time To Live (TTL) in the SAS Token window, otherwise the connection will only last a couple minutes.


Determine your device specific connection URL.


The {deviceId} is the Device Id in the Device Explorer.

The {hostname} can be found in the IoTHub Overview. Screenshot

Notifier Setup

Add the URL and generated SAS token to the Notification Target fields.

Screenshot ThingSpeak

Devices registered on the Senet Development Portal can be configured to forward sensor data to a ThingSpeak ( Channel. Before configuring your notification target, you must create a Channel within your ThingSpeak account and define the number of fields that will be forwarded. If your device does not implement the Senet Packet Format then only one field need be enabled and the message PDU or Packet Data will be forwarded as "Field 1". If your device implements the Senet Packet Format then the message PDU will be decoded and sensor values forwarded in "Field 2-6". The Senet Packet Format supports multiple sensor data points in a single message PDU so make sure that you have configured the appropriate number of fields. If there are not enough fields configured on your ThingSpeak Channel then the update will fail. The example below implements two sensor values, Tank Level & Temperature.

Screenshot Screenshot

Platform Setup

Login to the ThingSpeak platform, select the "New Channel" button to view the Channel Settings page. Specify the name of your channel and provide a description. Enable as many fields as supported by your device providing descriptive names for each. Note: The PDU will always be forwarded in Field1. Click on the API Keys table, view the read/write api keys for this channel. The Write API Key will be needed when setting up the notification target.

Notifier Setup

Specify the "Write API Key" into the "API KEY" field of the Notification Target.

Screenshot Wolfram Datadrop

The Wolfram Data Drop ( platform allows message data to be delivered to a specified Databin ID. Once the data has been delivered to Wolfram it can be easily configured for computation, visualization, analysis, querying, or other operations.
Messages will forwarded in JSON format (See Default Data Fields).

Platform Setup

From the Wolfram DataDrop platform click on "My Databins" and then click on the "Create a Databin" button.


Click on the edit icon next to "Unnamed", give your databin a name. Take note of the Databin ID.


Notifier Setup

Select the Wolfram Datadrop Notification Target and specify the Databin ID that you created for this device.

Screenshot Initial State

Initial State ( is a data analytics and visualization platform for the IoT.
Messages will be forwarded in JSON format (See Default Data Fields).

Platform Setup

After creating your Initial State account, you will need to create a "New Stream Bucket", give this bucket a name and use the generated Bucket Key and Access Key to create your Initial State Notification Target. Click on your Stream Bucket settings (top left). Screenshot

Notifier Setup

Specify the Bucket Key and Access Key into the provided Notification Target fields.

Screenshot Murano by Exosite

This set up only supports legacy exosite accounts. Murano is Exosite’s ( second-generation IoT Platform, it is a powerful tool that allow for examination and graphing of message data. It has the ability to pull values from JSON data to visualize those values in a number of ways in the Exosite Dashboard.

Messages will be forwarded in JSON format (See Default Data Fields), so create the new Resource with the Data format of type "string".

Platform Setup

To get started you must create a Product (Product Id) and add a Device (Name and Identity) to that product.
You must also create a Device Resource (Alias) for the data that will be sent to Exosite. The device must also be activated and a Client Identifier Key (CIK) must be generated using the following curl command (See Exosite's Provisioning Api for more details). Login to the Exosite Platform and create a new product. Click on the product name to display the product id. Screenshot Create a new device and give the device an identity. Screenshot Activate the device and generate a CIK using curl.

curl -k https://<productid> \
  -H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8' \
  -d 'vendor=<productid>&model=<productid>&sn=<identity>'

Click on the device and create a new resource alias. Screenshot

Notifier Setup

Specify the Product Id, Alias, and CIK into the provided Notification Target fields.

Screenshot PubNub

PubNub ( is a real time messaging service that allows users to post JSON Messages and subscribe to a stream of these messages. The PubNub Notification Target allows for device messages to be forwarded to one of these streams. Messages will be forwarded in JSON format (See Default Data Fields).

Platform Setup

From the PubNub dashboard create a new App and a new Keyset. The Publish Key is the key that identifies the stream, the Subscriber Key is the key that identifies the subscribable stream. The Channel is the subscriber channel that the messages will appear on and Client UUID is the client id, this will identify the user in a stream. The PAM Authentication (Optional) field is used when PAM authentication is required on the stream.


Click on debug console and create a Client. Here you will make your Client UUID and Channel Name(this goes into subcriber channel) in the notifier.


Notifier Setup

Specify the Publish Key, Cluent UUID, Subscriber Key, and Subscriber Channel into the provided Notification Target fields. The PAM Authentication field is optional and only necessary if the stream has been configured for authentication.

Screenshot Dweet

Dweet ( is easy to use platform that allows for user messages to be published and subscribed to it was designed for machine-to-machine messaging for IoT. To use Dweet you just choose a unique name, This name is called a "Thing", it is a grouping for all your messages. Specify your "Thing" in the Dweet Notification Target, the Key is an optional configuration value that is only needed if you want to Lock your "Thing" to keep your messages private. Messages will be forwarded in JSON format (See Default Data Fields).

Platform Setup

Just choose a unique my-thing-name for your "Thing" (must not include spaces).

You can view posts to your "Thing" at

Notifier Setup

Specify the my-thing-name of your "Thing" in the Notification Target field. Provide the Key to your "Thing" if it has been created as private.

Screenshot Tago

Tago ( is an end-to-end cloud platform to connect all your devices, it provides a quick and easy setup with the ability to create your own dashboards to view data in a number of ways like charts, maps, dials, etc.
Messages will be forwarded in JSON format (See Default Data Fields).

Platform Setup

To get started with Tago, click on the Devices icon and then press the "Add device" button, give the device a name and press "Save". From the Device General Information page select and copy the Device-Token field into the Notification Target. Screenshot


Notifier Setup

Specify the Device-Token into the provided Notification Target field.

Screenshot Scriptr; ( is a very powerful cloud service to run your server-side code. With, you use scripts to create the custom back-end APIs needed to power your Internet of Things (IoT) and other projects. allows you to get productive quickly by providing an integrated web-based environment for developing, running and debugging your code.  Messages will be forwarded in JSON format (See Default Data Fields).

Platform Setup

To get started with scriptr create a new script and click on the Set Name link to give the URL endpoint a unique name.


Create your custom script and press the save button. Screenshot

Go to your account settings and copy the Token to be entered as the Authorization Token in the Notification Target field.


Notifier Setup

Specify the endpoint URL and Authorization Token into the provided Notification Target fields.

Screenshot Geckoboard

Geckoboard ( allows you to create dashboards for large sets of data. These dashboards are comprised of various widgets, each displaying your data in a particular way. The Geckoboard notifier supports two of these widgets: the Number & Secondary Stats widget and the Data Set widget. The type is set in the edit dialog of the Geckoboard notifier via the Widget Type dropdown.

Platform Setup

Number & Secondary Stats

This widget is designed to display a single value and compare that value to the secondary stat. For more information this type of widget see Geckboard's documentation at: Number-and-Secondary-Stat

The Value field of each of these is the JSON key of the given data point you wish to display. NOTE: This key should be lower case since Geckoboard only supports JSON keys with lower case values.

Click on Add Widget and on the subsequent screen, select Custom Widgets. From this collection you can select the Number & Secondary Stat widget. Ensure it is set to the push method.


After the Number & Secondary widget appears in the dashboard, hover the mouse on the icon and select the 3 dots on the bottom right corner. This will allow you to edit the widget to see the Widget Key, you will need to enter the Widget Key and the API Key related to your account into the Notification Target.


Data Set

The Data Set is designed to replace the current widgets by making it so users can characterize the incoming data. This makes it so you can create any type of widget from a dataset. Creating a dataset is relatively straight forward, a dataset is designed to map JSON keys to what their value represents. More details are available here: API Reference. To create data sets you need to define the exact fields that appear in the data set by specifying them in a curl command.


        curl \
          -X PUT \
          -u '(API Key): ' \
          -H 'Content-Type: application/json' \
          -d '{
          "fields": {
            "gweui": {
              "type": "string",
              "name": "Gateway",
              "optional": false
            "rssi": {
              "type": "number",
              "name": "RSSI",
              "optional": false
            "snr": {
              "type": "number",
              "name": "SNR",
              "optional": false
            "datarate": {
              "type": "number",
              "name": "DataRate",
              "optional": false
            "freq": {
              "type": "number",
              "name": "Frequency",
              "optional": false
            "timestamp": {
              "type": "datetime",
              "name": "Date"
          "unique_by": ["gweui"]

The key for each index is the exact key that exists in the JSON that is passed to Geckoboard.

To create the widget, simply select the dataset that you just created via curl in the add widget menu. Select your dataset you are updating and customize which widget you want to display the data.

Datasets will save the data long term and will allow you to graph historical data.


Notifier Setup

Specify the API Key and Widget Key into the provided Notification Target fields.

For a Widget Type of Stats, specify the Text and Value fields as necessary.

For a Widget Type of Data Set, specify the Dataset ID.

Screenshot AWS API Gateway

The AWS API Gateway ( provides a means to forward event data to AWS services in the cloud for additional processing. Lambda is an amazon service that allows a user to run code on an amazon cluster without needing to set one up.

Platform Setup

Log into your amazon account and click the services navigation item in the navigation bar. Then click the lambda option under the compute section.


Once you have entered the lambda section of AWS click the Create a Lambda function button.


Then select the blueprint you wish to use. A blueprint is basically a pre-made lambda function that you can use.

Click on the "Blank Function" tile.


Configure the lambda trigger, this is the method that activates the lambda function. In our case, we support the AWS API gateway. Screenshot Screenshot

Now you can configure your function, this part will be based on your implementation. Screenshot

Once your function is configured, you can review all your changes. Review the configuration and confirm it is correct, hit the create function button at the bottom of the review page. Next you need to configure the API Gateway to use API keys instead AWS IAM. Click on the ANY link (you will need the URL under 'API Gateway' later). Screenshot

From here click the Method Request link. Screenshot

Configure the gateway with the following settings (Authorization NONE and API Key Required). Screenshot

Return to the previous page and then click Integration request. Screenshot

There, simply disable Lambda proxy integration.


Next you need to make the Usage Plan for the API Gateway. Screenshot

Now click the Add API Stage Button. After you create it, hit the Next button.


Now hit the 'Create API Key and add to Usage Plan' button. This will launch a dialog that allows you to create an API Key for this usage plan.


Deploy your changes to the API Gateway. Navigate back to the API Gateway. Screenshot

Using the actions menu, hit deploy API.


Select the correct deployment stage from the dropdown in the resulting dialog and then hit deploy. Screenshot

Notifier Setup

Specify the Server Name, Function Name, and API Key into the provided Notification Target fields. The URL you grabbed earlier will look like this:

Get rid of the of https:// and everything following the .com. Put that into the Server Name field

Screenshot Yodiwo

Yodiwo Cyan ( offers a graph based IoT application development and deployment environment, which allows dispersed network devices of diverse technologies to be seamlessly connected with analytics, storage system, mobile and web application.

Platform Setup

Log into your Yodiwo Cyan account and click the Devices Manager navigation item in the navigation bar. Then click the My API Keys tab and then the plus button next to the Create API key selection box.


Specify a friendly name to identify your API key. Make sure the API Key Type selection is set to Rest.
Press the submit button to create the API Key.


Use the copy button to copy your api key to the clipboard. You will need this api key later when setting up your notifier.


Exactly how you want to handle the forwarded data will be specific to your implementation.
Here is an example graph that shows how to take the data from the Network Server (Rest In) and then pass the Request Body to a JSON Deserializer to pull out the JSON fields that you are interested in. For simplicity, this example shows the devEui, txtime, value1 and value2 JSON fields get passed to a String Builder which builds a string to be passed/printed to the Message Console, but you could choose a different designer widget to perform a custom task, like push the JSON data to a Database or graph the data or forward the data to another service.

NOTE: Make sure to save and deploy your graph each time you make changes to it.


Here you can see the successful output of our example graph that prints the concatenated string to the Web Console.


Notifier Setup

Use the API Key you grabbed earlier and enter it into the provided API Key Notification Target field.