Conductor - Data Platform | Python Utilities

A Python wrapper of the Conductor API - conductor.py

The Conductor Python library is now on pypi, the Python package repo:

This library wraps the Conductor APIs with Python classes. It is useful for scripting interactions with Conductor. For Python users, using conductor.py is probably easier than using raw HTTP endpoints.

Installing the Conductor Python library

It is easy to install the Conductor library to Python 2.7.x using a package manager.  For example, use pip to install the library from the command terminal by executing the following command:

pip install linklabs-conductor

Using conductor.py

The following sections describe implementation of conductor.py.

Basics

All four classes (accounts, app tokens, modules, and gateways) support querying. So you can do:

messages = gateway.get_recent_messages(mins_back=24*60)

to get all of the messages received in the last 24 hours. There is also the get_messages_time_range method to get messages for a more particular time range.

Retrieving Uplink Data

You start everything with a ConductorAccount object. From there you can get other types of objects (modules, gateways, app tokens) either by requesting an object in particular or requesting all objects of a certain type.

For example, this code snippet will store all of the gateways you own in a variable called gateways:

import conductor
account = conductor.ConductorAccount('myusername', 'mypassword')
gateways = account.get_gateways()

Alternatively, you could request a particular gateway:

gateway = account.get_gateway('$101$0-0-0-123456789')

The same can be done for modules and app tokens.

Getting uplink messages from a particular time range from a particular node

As an example, you could use the following code to pull a list of all uplink messages from a particular node in the time interval between start_time and stop_time:

import conductor
account = conductor.ConductorAccount('myusername', 'mypassword')
node = account.get_module('$301$0-0-0-123456789')
messages = node.get_messages_time_range(start_time, stop_time)

where start_time and stop_time are Python 'datetime.datetime' objects.

Getting most recent uplink messages from a particular node

Similarly, you could get a list of all messages received from that node in the last 'mins_back' minutes:

import conductor
account = conductor.ConductorAccount('myusername', 'mypassword')
node = account.get_module('$301$0-0-0-123456789')
messages = node.get_recent_messages(mins_back)

Getting uplink messages from a particular time range from an Application Token

Quite often it is appropriate to query the uplink messages from all nodes assigned to the same Application Token.  For example, let's say your Conductor Account includes the application token 0123456789abcdef0123. You could get a list of all messages received during the interval start_time to stop_time from all nodes registered to that application token by doing:

import conductor
account = conductor.ConductorAccount('myusername', 'mypassword')
application = account.get_application_token('0123456789abcdef0123')
messages = application.get_messages_time_range(start_time, stop_time)

Setting up an uplink subscription

conductor.py includes functionality to get uplink traffic using subscriptions (rather than Conductor's REST API). This can be useful if you want to stream uplink data in real time.

Uplink subscription for a particular node

The following example shows how to subscribe to the uplink coming from a particular node with the MAC address $301$0-0-0-012345678:

import conductor
account = conductor.ConductorAccount('myusername', 'mypassword')
subject = account.get_module('$301$0-0-0-012345678')
for message in subject.subscribe_iter():
    ## do whatever you want with message, for example write it to a log
    LOG.info(message)

Sending Downlink

The module class is special in that it supports downlink. Once you have a handle to a specific module, you can send downlink:

mod = account.get_module('$301$0-0-0-123456789')
message = mod.send_message('hello')

After you send the message, you can poll Conductor for the message's status:

status = message.get_status()

This will tell you if the message has been sent successfully, if it's pending, or if it expired (i.e., was never able to be sent or ACK'd).

Read More

Conductor - Data Platform | User Guide

Introduction

Welcome to Conductor, Link Labs' cloud-based data-services platform. Conductor exposes RESTful application program interfaces (APIs), which give account holders a simple interface to access their Symphony Link networks. The APIs make it easy to build web-based applications to monitor and control machine-to-machine (M2M) and internet-of-things (IoT) networks.

What is Conductor?

Conductor is a suite of cloud-based services with the purposes of managing the configuration of and data used by Symphony Link networks. The Conductor system is currently deployed inside Amazon Web Services ("the cloud"), though it could in principle be deployed in any server farm. The system has been developed using a multitude of tools, including:

Conductor contains several components, depicted in the following picture.

Components of Conductor

From the user's perspective, the most important component of Conductor is the ClientEdge. ClientEdge exposes an API to read data collected by a Symphony Link network and send data to Symphony Link modules. The components of Conductor perform the following jobs:

  • Access -- Manages the permissions and accounts of users of Symphony Link networks.
  • NetworkAsset -- Manages the groupings of entities (gateways, repeaters, modules) within Symphony Link networks. For example, NetworkAsset keeps track of which gateways are assigned to participate in a given Symphony Link network, and which modules can communicate with those gateways.
  • NetworkEdge -- The entry point from a gateway to Conductor. NetworkEdge manages registration of new gateways and modules, manages uplink data flowing up from gateways, and manages downlink data flowing down to modules.
  • DataBroker -- Manages dataflows within Conductor, and manages long-term storage and short-term caching of data.
  • DataConsumer -- Manages data subscriptions.
  • ClientEdge -- Provides an API to interact with Symphony Link networks. ClientEdge is used to query data collected by Symphony Link networks, create/issue commands to specific modules, and request subscriptions to monitor real-time dataflow.

How does Conductor talk to a Gateway?

The connection between a Symphony Link gateway and Conductor is made between the Gateway Management Applications (which runs locally on the gateway) and the NetworkEdge (which runs in Conductor). The gateway uses the NetworkEdge RESTful API to send uplink data and to poll for downlink data.

Dataflow inside Conductor

The dataflow within Conductor is pictured above. Users can implement the ClientEdge API to query/send data or to establish a subscription for "real-time" data exchange. Conductor uses Apache Kafka to broker publish-subscribe messaging.

Read More

Software Downloads | Network Tester downloads

A script to update network tester firmware - network_tester_bootloader.py

This Python script automatically updates the firmware running on the network tester's external host microcontroller (Silicon Labs EFM32). Please refer to the Upgrading network tester firmware article for instructions to use the script.

network_tester_bootloader.py
Read More

Software Downloads | Prelude downloads

Download the Prelude Windows Installer

Start here for installing the PC application for using the LL-RLP-20 and LL-RXR-27 evaluation boards.

Prelude Windows Installer v 1.5.0

The following link is to download an installer for a deprecated version of Prelude, which is compatible with LL-RLP-20 and LL-RXR-27 firmware version 1.3.2:

Prelude Windows Installer v 1.3.4
Read More

Software Downloads | Conductor downloads

A Python wrapper of the Conductor API - conductor.py

The Conductor Python library is now on pypi, the Python package repo:

https://pypi.python.org/pypi/linklabs-conductor

This library wraps the Conductor APIs with Python classes. It is useful for scripting interactions with Conductor. For Python users, using conductor.py is probably easier than using raw HTTP endpoints.

Installing the Conductor Python library

It is easy to install the Conductor library to Python 2.7.x using a package manager.  For example, use pip to install the library from the command terminal by executing the following command:

pip install linklabs-conductor

Using conductor.py

The following sections describe implementation of conductor.py.

Basics

All four classes (accounts, app tokens, modules, and gateways) support querying. So you can do:

messages = gateway.get_recent_messages(mins_back=24*60)

to get all of the messages received in the last 24 hours. There is also the get_messages_time_range method to get messages for a more particular time range.

Retrieving Uplink Data

You start everything with a ConductorAccount object. From there you can get other types of objects (modules, gateways, app tokens) either by requesting an object in particular or requesting all objects of a certain type.

For example, this code snippet will store all of the gateways you own in a variable called gateways:

import conductor
account = conductor.ConductorAccount('myusername', 'mypassword')
gateways = account.get_gateways()

Alternatively, you could request a particular gateway:

gateway = account.get_gateway('$101$0-0-0-123456789')

The same can be done for modules and app tokens.

Getting uplink messages from a particular time range from a particular node

As an example, you could use the following code to pull a list of all uplink messages from a particular node in the time interval between start_time and stop_time:

import conductor
account = conductor.ConductorAccount('myusername', 'mypassword')
node = account.get_module('$301$0-0-0-123456789')
messages = node.get_messages_time_range(start_time, stop_time)

where start_time and stop_time are Python 'datetime.datetime' objects.

Getting most recent uplink messages from a particular node

Similarly, you could get a list of all messages received from that node in the last 'mins_back' minutes:

import conductor
account = conductor.ConductorAccount('myusername', 'mypassword')
node = account.get_module('$301$0-0-0-123456789')
messages = node.get_recent_messages(mins_back)

Getting uplink messages from a particular time range from an Application Token

Quite often it is appropriate to query the uplink messages from all nodes assigned to the same Application Token.  For example, let's say your Conductor Account includes the application token 0123456789abcdef0123. You could get a list of all messages received during the interval start_time to stop_time from all nodes registered to that application token by doing:

import conductor
account = conductor.ConductorAccount('myusername', 'mypassword')
application = account.get_application_token('0123456789abcdef0123')
messages = application.get_messages_time_range(start_time, stop_time)

Setting up an uplink subscription

conductor.py includes functionality to get uplink traffic using subscriptions (rather than Conductor's REST API). This can be useful if you want to stream uplink data in real time.

Uplink subscription for a particular node

The following example shows how to subscribe to the uplink coming from a particular node with the MAC address $301$0-0-0-012345678:

import conductor
account = conductor.ConductorAccount('myusername', 'mypassword')
subject = account.get_module('$301$0-0-0-012345678')
for message in subject.subscribe_iter():
    ## do whatever you want with message, for example write it to a log
    LOG.info(message)

Sending Downlink

The module class is special in that it supports downlink. Once you have a handle to a specific module, you can send downlink:

mod = account.get_module('$301$0-0-0-123456789')
message = mod.send_message('hello')

After you send the message, you can poll Conductor for the message's status:

status = message.get_status()

This will tell you if the message has been sent successfully, if it's pending, or if it expired (i.e., was never able to be sent or ACK'd).

Read More

Software Downloads | LL-RLP-20 and LL-RXR-27 downloads

Host interface source code - release.tar

The latest release of source code to implement the module's host interface.

release_1_5_0.tar.gz - host interface source code

For a high-level explanation of the host interface, checkout this "Host Interface Description."  For usage and documentation of the command set, checkout the "Link Labs Host Interface Library" documentation.

This release of the host interface source code is compatible with the 1.5.0 release of the LL-RLP-20 and LL-RXR-27 firmware, which includes new features:

Minimum required Gateway Software version is 1.5.2:

  • A Gateway Software update can be performed using the gateway's local webpage.
  • For help or questions about upgrading Gateway Software, please contact support@link-labs.com

Deprecated source code to implement the module's host interface.

release_1_3_2.tar.gz - old host interface source code

The 1.3.2 release does not support file transfers and/or use of Repeaters. Link Labs recommends updating to the 1.5.0 release, if possible.

Read More

LL-RPT Repeaters

What is the LL-RPT Repeater and what comes in the box?

What is the LL-RPT Symphony Link Repeater?

The LL-RPT Symphony Link Repeater is a simple plug in device that can be used to extend the bidirectional communication range of your Symphony Link system.  If placed appropriately into a Symphony Link system, the LL-RPT Symphony Link Repeater will act as a store and forward relay.  The LL-RPT Symphony Link Repeater will receive data from Symphony Link Modules, and then forward that data to your Symphony Link Gateway, where it will finally be forwarded to the Conductor data management platform.  The LL-RPT Symphony Link Repeater will also forward data received from your Symphony Link Gateway to the appropriate Symphony Link Module.

Key Features

  • Greatly extends the range of a Symphony Link system
  • Simple and fast system synchronization
  • Just needs power!

Your Symphony Link Repeater purchase will include:

1x LL-RPT-915-SYM-I-USB Symphony Link Repeater

1x Mini-USB to USB-A cable

1x 120 VAC to USB wall plug

1x 900 MHz Symphony Link antenna

1x Mounting bracket

Read More

LL-LTE-M Modules | Module Utilities

Host Interface Controller

Detailed Description

External host library which simplifies communication with an LTE Cat-M1 network using a Link Labs module.

This library runs on an external host processor which can be nearly any microcontroller or PC with a UART interface. The library is written in C and contains two categories of functions:

  1. lte_ifc_common These are portable functions, which are meant to run on any platform. These should be compiled as is with no modifications. These functions are the API which you should call from your application.
  2. lte_ifc_hal A set of function prototypes for platform-specific and low-level operations. These are prototypes only - you must implement your own version of these and link them in. Usually these are extremely simple operations, like setting an I/O line high or low, or queueing some bytes for transmission through a UART, etc.

A block diagram of how the two categories fit into an integrated system is shown below.

Read More

LL-LTE-M Modules | Data Sheet

Hardware Specifications

RF Specifications Value
Maximum Transmit Power 23 dBm
Receive Sensitivity -103 dBm
Technology LTE CAT-M1, 3GPP Release 13 Compliant
Modulation QPSK, 16QAM
Supported LTE Bands* B4 (AWS1700)/ B13 (700)
Security Verizon VPN
Downlink Data Rate 300 kbps DL
Uplink Data Rate 375 kbps UL in HD-FDD, and 1 Mbps in FD-DD
   
Regulatory Value
Regulatory Approvals FCC (2AAGMVZM20Q), IC
Carrier Pre-Certification Verizon
Market North America
   
Electrical Specifications Value
Supply Voltage 3.1-4.5 VDC
Peak Transmit Current 560 mA
Receive Current 330 mA
Idle Current/Sleep Mode 10 uA
Serial Data Interface UART
Chipset Link Labs / Sequans
   
Physical Specifications Value
Dimensions 30 mm x 30 mm
Operating Temperature (RF Compliant) -30 C to 60 C (Ambient Temperature)
Storage/Operating Temperature -40 C to 85 C (Board)
Operating Humidity 10% to 85% (Non-condensing)
Read More

LL-LTE-M Modules | User Guide

Overview

This document details the interface to the Link Labs LTE-M Module. This interface consists of a point-to-point serial communications protocol, intended to be used over a UART and GPIO connection to the Link Labs LTE-M modules. This connection is referred to as the “Host Interface”. A simplified block diagram is shown below.

The UART connection utilizes a Master/Slave protocol, with the Link Labs LTE-M module always running in slave mode. The protocol allows for data exchanges to be initiated by both master and slave devices, although the initiation mechanism is different.

Read More