This document gives a quick introduction to ttnctl
.
Installation #
-
Download the latest version of
ttnctl
using the following links:- Mac (64 bit, zip)
- Linux (64 bit, zip)
- Linux (32 bit, zip)
- Linux (arm, zip)
- Windows (64 bit, zip)
- Windows (32 bit, zip)
Downloads are also available as
.tar.gz
archives, just change the extension in the links above.SHA256 checksums for the uncompressed binaries are listed in the
checksums
file. Thechecksums
file is signed using our GPG key with fingerprint2F06 2CD1 5425 47AF 71BD 9B81 8FC5 CD2B 9DFB 1B4B
. The signature is stored aschecksums.sig
. -
Decompress the file and make the executable globally available.
On Mac and Linux create an alias or copy the executable as
ttnctl
to/usr/local/bin
(use⇧⌘G
in Mac OS Finder) or any other value that is in your path. Make it executable withchmod +x ttnctl
. On Windows use any other folder you use for global executables and make sure that folder is part of your path.
Updates #
To update the CLI run ttnctl selfupdate
.
Configuration #
If you don’t like the default configuration options of ttnctl
, you can configure them with environment variables or with a configuration file. In most cases the default options should be fine. Later in this guide we’ll add our application ID to the config file to save us some typing.
Register and Login #
-
To register as a new user, use the command
ttnctl user register
:❯ ttnctl user register yourname your@email.org Password: <entering password> INFO Registered user
-
Now go to account.thethingsnetwork.org and click ttnctl access code.
-
You now have 5 minutes to use this code to login with
ttnctl user login
:❯ ttnctl user login LzWtldT-VGvN56I3u3oJiU8apRJGaWJAJKbYvALJoP3 Password: <enter password> INFO Successfully logged in as yourname (your@email.org)
Application Management #
Now create a new application with ttnctl applications add
. In this example we will create an application with the ID hello-world
and title Hello World App
.
❯ ttnctl applications add hello-world "Hello World App"
INFO Added Application
INFO Selected Current Application
Show your applications with ttnctl applications list
command:
❯ ttnctl applications list
INFO Found 1 application(s)
ID Description EUIs Access Keys Collaborators
1 hello-world Hello World App 1 1 1
After an application is created, you’ll need to register it on a handler before you can start registering devices:
❯ ttnctl applications register
INFO Discovering Handler... Handler=ttn-handler-eu
INFO Connecting with Handler... Handler=eu.thethings.network:1904
INFO Registered application AppID=hello-world
By default, your application is registered on the
ttn-handler-eu
handler. This means that every LoRaWAN packet will be transmitted to theeu
region of The Things Network. You can indicate another handler with the--handler-id
flag. To show the list of available handlers, you can use thettnctl discover handler
command.
Selecting an application #
The newly added application has been selected for further commands automatically. To select a different app call ttnctl applications select
:
❯ ttnctl applications select
INFO Found 2 applications:
ID Description
1 hello-world Hello World App
2 bye-world Bye World App
Which one do you want to use?
Enter the number (1 - 2) > 2
INFO Found one EUI "70B3D57EF000002E", selecting that one.
INFO Updated configuration
If you know the Application ID (and EUI), then you can also pass those as arguments. If only one application or EUI is available it will be selected automatically.
Device Management #
To register a device you can use the ttnctl devices register
command. In the following example we register a device with ID my-device
. A Device EUI and AppKey will be generated by ttnctl
:
❯ ttnctl devices register my-device
INFO Using Application AppEUI=70B3D57EF000002E AppID=bye-world
INFO Generating random DevEUI...
INFO Generating random AppKey...
INFO Discovering Handler... Handler=ttn-handler-eu
INFO Connecting with Handler... Handler=eu.thethings.network:1904
INFO Registered device AppEUI=70B3D57EF000002E AppID=bye-world AppKey=2593946DADA09D86E36E4A4DD3AC632D DevEUI=00995D884BEBBAB9 DevID=my-device
To personalize a device for Activation-by-Personalization (ABP) we have the command ttnctl devices personalize
. In the following example we personalize the just registered device. The AppSKey and NwkSKey will be generated by ttnctl
:
❯ ttnctl devices personalize my-device
INFO Using Application AppEUI=70B3D57EF000002E AppID=bye-world
INFO Generating random NwkSKey...
INFO Generating random AppSKey...
INFO Discovering Handler... Handler=ttn-handler-eu
INFO Connecting with Handler... Handler=eu.thethings.network:1904
INFO Requesting DevAddr for device...
INFO Personalized device AppID=bye-world AppSKey=48F41F0491B23C804AEB9826162EB9AD DevAddr=160115EB DevID=my-device NwkSKey=D7A883537558946974B8DE31D4671617
You can see a list of registered devices with ttnctl devices list
:
❯ ttnctl devices list
INFO Using Application AppEUI=70B3D57EF000002E AppID=bye-world
INFO Discovering Handler... Handler=ttn-handler-eu
INFO Connecting with Handler... Handler=eu.thethings.network:1904
DevID AppEUI DevEUI DevAddr
my-device 70B3D57EF000002E 00995D884BEBBAB9 160115EB
INFO Listed 1 device bye-world
You can also get information about a specific device with ttnctl devices info
, for example for the personalized device:
❯ ttnctl devices info my-device
INFO Using Application AppEUI=70B3D57EF000002E AppID=bye-world
INFO Discovering Handler... Handler=ttn-handler-eu
INFO Connecting with Handler... Handler=eu.thethings.network:1904
INFO Found device
Application ID: bye-world
Device ID: my-device
Last Seen: never
LoRaWAN Info:
AppEUI: 70B3D57EF000002E
DevEUI: 00995D884BEBBAB9
DevAddr: 160115EB
AppKey: <nil>
AppSKey: 48F41F0491B23C804AEB9826162EB9AD
NwkSKey: D7A883537558946974B8DE31D4671617
FCntUp: 0
FCntDown: 0
Options: FCntCheckEnabled, 32BitFCnt
Receiving Uplink Messages #
The ttnctl subscribe
command subscribes to all uplink messages that are sent to your application:
❯ ttnctl subscribe
INFO Connecting to MQTT... MQTT Broker=tcp://eu.thethings.network:1883 Username=fokkezb-playground
INFO Connected to MQTT
INFO Subscribed to activations
INFO Subscribed to uplink
You can also subscribe to uplink messages using MQTT.
Scheduling Downlink Messages #
Scheduling downlink messages is done with the ttnctl downlink
command. In the following example we plan a downlink message of 3 bytes for the device we just registered:
❯ ttnctl downlink my-device 010203
INFO Connecting to MQTT... MQTT Broker=tcp://eu.thethings.network:1883 Username=bye-world
INFO Connected to MQTT
INFO Enqueued downlink AppID=bye-world DevID=my-device
Or if you have configured an encoder for JSON payloads:
$ ttnctl downlink my-device --json '{"led":"on"}'
INFO Connecting to MQTT... MQTT Broker=tcp://eu.thethings.network:1883 Username=bye-world
INFO Connected to MQTT
INFO Enqueued downlink AppID=bye-world DevID=my-device