| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Migrate devices from other LoRaWAN Network Servers to The Things Stack.
IMPORTANT: ttn-lw-migrate is compatible with The Things Stack versions 3.12.0 or newer. Trying to import the devices into earlier versions of The Things Stack will fail, due to breaking API changes.
Binaries are available on GitHub.
Support for different sources is done by creating Source plugins. List available sources with:
$ ttn-lw-migrate sourcesThe ttn-lw-migrate examples below export the devices in a devices.json file. You will need to import the devices to The Things Stack using this file.
Navigate to your application, click Import End Devices, select The Things Stack (JSON) from the list of available formats, upload the devices.json file and click Create end devices.
$ ttn-lw-cli end-devices create --application-id test-app < devices.jsonConfigure with environment variables, or command-line arguments. See --help for more details:
$ export TTNV2_APP_ID="my-ttn-app" # TTN App ID
$ export TTNV2_APP_ACCESS_KEY="ttn-account-v2.a..." # TTN App Access Key (needs `devices` permissions)
$ export FREQUENCY_PLAN_ID="EU_863_870_TTN" # Frequency Plan for exported devicesSee Frequency Plans for the list of frequency plans available on The Things Stack. For example, to use United States 902-928 MHz, FSB 1, you need to specify the US_902_928_FSB_1 frequency plan ID.
Private The Things Network Stack V2 deployments are also supported, and require extra configuration. See ttn-lw-migrate device --help for more details. For example, to override the discovery server address:
$ export TTNV2_DISCOVERY_SERVER_ADDRESS="discovery.thethings.network:1900"To export a single device using its Device ID (e.g. mydevice):
# dry run first, verify that no errors occur
$ ttn-lw-migrate ttnv2 device 'mydevice' --dry-run --verbose > devices.json
# export device
$ ttn-lw-migrate ttnv2 device 'mydevice' > devices.jsonIn order to export a large number of devices, create a file named device_ids.txt with one device ID per line:
mydevice otherdevice device3 device4 device5
And then export with:
# dry run first, verify that no errors occur
$ ttn-lw-migrate ttnv2 devices 'mydevice' --dry-run --verbose < device_ids.txt > devices.json
# export devices
$ ttn-lw-migrate ttnv2 devices < device_ids.txt > devices.jsonSimilarly, to export all devices of application my-app-id:
# dry run first, verify that no errors occur
$ ttn-lw-migrate ttnv2 application 'my-app-id' --dry-run --verbose > devices.json
# export devices
$ ttn-lw-migrate ttnv2 application 'my-app-id' > devices.jsonNote: ChirpStack v3 support is removed from versions v0.12.0 onwards. Use v0.11.x for ChirpStack v3.
Configure with environment variables, or command-line arguments. See --help for more details:
$ export CHIRPSTACK_API_URL="localhost:8080" # ChirpStack Application Server URL
$ export CHIRPSTACK_API_TOKEN="7F0as987e61..." # Generate from ChirpStack GUI
$ export JOIN_EUI="0101010102020203" # JoinEUI for exported devices
$ export FREQUENCY_PLAN_ID="EU_863_870" # Frequency Plan for exported devicesSee Frequency Plans for the list of frequency plans available on The Things Stack. For example, to use United States 902-928 MHz, FSB 1, you need to specify the US_902_928_FSB_1 frequency plan ID.
NOTE: JoinEUI and FrequencyPlanID are required because ChirpStack does not store these fields.
To export a single device using its DevEUI (e.g. 0102030405060708):
$ ttn-lw-migrate chirpstack device '0102030405060708' > devices.json
In order to export a large number of devices, create a file named device_euis.txt with one DevEUI per line:
0102030405060701 0102030405060702 0102030405060703 0102030405060704 0102030405060705 0102030405060706
And then export with:
$ ttn-lw-migrate chirpstack device < device_euis.txt > devices.jsonSimilarly, to export all devices of application chirpstack-app-1:
$ ttn-lw-migrate chirpstack application 'chirpstack-app-1' > devices.jsonIn order to export multiple applications, create a file named application_names.txt with one Application name per line:
chirpstack-app-1 chirpstack-app-2 chirpstack-app-3
And export with:
$ ttn-lw-migrate chirpstack application < application_names.txt > devices.jsonMinimum supported version: v0.12.0
Configure with environment variables, or command-line arguments. See --help for more details:
$ export CHIRPSTACK_API_URL="localhost:8080" # ChirpStack Application Server URL
$ export CHIRPSTACK_API_KEY="eyJ0eX........" # Generate from ChirpStack GUI
$ export JOIN_EUI="0101010102020203" # JoinEUI for exported devices
$ export FREQUENCY_PLAN_ID="EU_863_870" # Frequency Plan for exported devices
$ export CHIRPSTACK_EXPORT_SESSION="true" # Set to true for session migrationSee Frequency Plans for the list of frequency plans available on The Things Stack. For example, to use United States 902-928 MHz, FSB 1, you need to specify the US_902_928_FSB_1 frequency plan ID.
NOTE: JoinEUI and FrequencyPlanID are required because ChirpStack does not store these fields.
To export a single device using its DevEUI (e.g. 0102030405060708):
$ ttn-lw-migrate chirpstack device '0102030405060708' > devices.jsonIn order to export a large number of devices, create a file named device_euis.txt with one DevEUI per line:
0102030405060701 0102030405060702 0102030405060703 0102030405060704 0102030405060705 0102030405060706
And then export with:
$ ttn-lw-migrate chirpstack device < device_euis.txt > devices.jsonSimilarly, to export all devices of application chirpstack-app-1:
$ ttn-lw-migrate chirpstack application 'chirpstack-app-1' > devices.jsonIn order to export multiple applications, create a file named application_names.txt with one Application name per line:
chirpstack-app-1 chirpstack-app-2 chirpstack-app-3
And export with:
$ ttn-lw-migrate chirpstack application < application_names.txt > devices.jsonConfigure with environment variables, or command-line arguments. See --help for more details:
$ export TTS_APP_ID="my-tts-app" # TTS App ID
$ export TTS_APP_API_KEY="NNSXS.U..." # TTS App API Key (needs `device` permissions)
$ export TTS_APPLICATION_SERVER_GRPC_ADDRESS="eu1.cloud.thethings.network:8884" # TTS Application Server URL Address
$ export TTS_IDENTITY_SERVER_GRPC_ADDRESS="eu1.cloud.thethings.network:8884" # TTS Identity Server URL Address
$ export TTS_JOIN_SERVER_GRPC_ADDRESS="eu1.cloud.thethings.network:8884" # TTS Join Server URL Address
$ export TTS_NETWORK_SERVER_GRPC_ADDRESS="eu1.cloud.thethings.network:8884" # TTS Network Server URL Address
$ export TTS_CA_FILE="/path/to/ca.file" # Path to a CA file (optional)To export a single device using its Device ID (e.g. mydevice):
# dry run first, verify that no errors occur
$ ttn-lw-migrate tts device 'mydevice' --dry-run --verbose > devices.json
# export device
$ ttn-lw-migrate tts device 'mydevice' > devices.jsonIn order to export a large number of devices, create a file named device_ids.txt with one device ID per line:
mydevice otherdevice device3 device4 device5
And then export with:
# dry run first, verify that no errors occur
$ ttn-lw-migrate tts devices 'mydevice' --dry-run --verbose < device_ids.txt > devices.json
# export devices
$ ttn-lw-migrate tts devices < device_ids.txt > devices.jsonSimilarly, to export all devices of application my-app-id:
# dry run first, verify that no errors occur
$ ttn-lw-migrate tts application 'my-app-id' --dry-run --verbose > devices.json
# export devices
$ ttn-lw-migrate tts application 'my-app-id' > devices.jsonConfigure with environment variables, or command-line arguments.
See ttn-lw-migrate firefly {device|application} --help for more details.
The following example shows how to set options via environment variables.
$ export FIREFLY_HOST=example.com # Host of the Firefly API
$ export FIREFLY_API_KEY=abcdefgh # Firefly API Key
$ export APP_ID=my-test-app # Application ID for the exported devices
$ export JOIN_EUI=1111111111111111 # JoinEUI for the exported devices
$ export FREQUENCY_PLAN_ID=EU_863_870 # Frequency Plan ID for the exported devices
$ export MAC_VERSION=1.0.2b # LoRaWAN MAC version for the exported devicesTo export a single device using its Device EUI (e.g. 1111111111111112):
# dry run first, verify that no errors occur
$ ttn-lw-migrate firefly device 1111111111111112 --verbose > devices.json
# export device
$ ttn-lw-migrate firefly device 1111111111111112 --invalidate-keys > devices.jsonIn order to export a large number of devices, create a file named device_euis.txt with one device EUI per line:
1111111111111112
FF11111111111134
ABCD111111111100And then export with:
# dry run first, verify that no errors occur
$ ttn-lw-migrate firefly device --verbose < device_ids.txt > devices.json
# export devices
$ ttn-lw-migrate firefly device --invalidate-keys < device_ids.txt > devices.jsonThe Firefly LNS does not strictly enforce device to application relationships.
Setting the --all flag will export all devices that are accessible by the API key. The application command without the --all flag does nothing.
Note: Please be cautious while using this command as this might invalidate all the keys of all the devices.
To export all devices accessible by the API Key,
# dry run first, verify that no errors occur
$ ttn-lw-migrate firefly application --all --verbose > devices.json
# export all devices
$ ttn-lw-migrate firefly application --all --invalidate-keys > devices.jsonMigration from Kerlink's Wanesy requires exporting the device data into a CSV file and feeding it into this tool. Please reach out to Kerlink to get an export of the devices that need to be migrated.
Configure with environment variables, or command-line arguments.
See ttn-lw-migrate wanesy {device|application} --help for more details.
The following example shows how to set options via environment variables.
$ export APP_ID=my-test-app # Application ID for the exported devices
$ export FREQUENCY_PLAN_ID=EU_863_870 # Frequency Plan ID for the exported devices
$ export CSV_PATH=<path> # Local path to the exported CSV file.To export a single device using its Device EUI (e.g. 1111111111111112):
# Export a device from the CSV to TTS format.
$ ttn-lw-migrate wanesy device 1111111111111112 > devices.jsonIn order to export all devices from the CSV file, use the application command.
# Export all devices from the CSV.
$ ttn-lw-migrate wanesy application --allNote: awsiot source uses the Shared AWS Configuration (~/.aws/config) file. To setup this configuration file please check out the AWS SDK documentation
Configure with environment variables, or command-line arguments. See --help for more details:
$ export APP_ID="my-app" # Application ID for the exported devices
$ export FREQUENCY_PLAN_ID="EU_863_870" # Frequency Plan ID for the exported devicesImportant: AWS IoT does not provide a way to export session information. Therefore OTAA devices needs to rejoin after the import. For ABP devices is not possible to import the session counters (FCntUp and FCntDown). For more details please check the AWS IoT API documentation
To export a single device using its Device ID (e.g. f198fd57-e52d-49fd-bcec-5b5494748469):
# dry run first, verify that no errors occur
$ ttn-lw-migrate awsiot device 'f198fd57-e52d-49fd-bcec-5b5494748469' --dry-run --verbose > devices.json
# export device
$ ttn-lw-migrate awsiot device 'f198fd57-e52d-49fd-bcec-5b5494748469' > devices.jsonIn order to export a large number of devices, create a file named device_ids.txt with one device ID per line:
f198fd57-e52d-49fd-bcec-5b5494748469 3b4c29ea-6c2f-4d2a-a2b4-494a6c0fc33b 393306e1-73f8-42c5-b593-21eb64a3bf0b bed4284c-ebaf-4a34-970b-2ff1d0008daf c5b08612-af8b-41cf-80fa-da3d861ed81c
And then export with:
# dry run first, verify that no errors occur
$ ttn-lw-migrate awsiot device --dry-run --verbose < device_ids.txt > devices.json
# export devices
$ ttn-lw-migrate awsiot device < device_ids.txt > devices.jsonRequires Go version 1.23 or higher. Download Go.
$ git clone https://github.com/TheThingsNetwork/lorawan-stack-migrate.git
$ cd lorawan-stack-migrate/
$ go install go.thethings.network/lorawan-stack-migrate/cmd/ttn-lw-migrate
$ $(go env GOPATH)/bin/ttn-lw-migrate --helpInitialize the development environment using make:
$ make initFor development/testing purposes, the binary can be executed directly using go run:
$ go run ./cmd/ttn-lw-migrateIt is also possible to use go build.
Releases are created using goreleaser. First, install GoReleaser:
$ go install github.com/goreleaser/goreleaser@v1.2.5The command to build a release snapshot from your branch is:
$ goreleaser --snapshot --rm-distNote: You will at least need to have rpm and snapcraft in your PATH.
This will compile binaries for all supported platforms, deb, rpm, Snapcraft packages, as well as release archives in dist.
Note: The operating system and architecture represent the name of the directory in dist in which the binaries are placed. For example, the binaries for Darwin x64 (macOS) will be located at dist/darwin_amd64.
$ git checkout master
$ git checkout -b release/${version}Change the Unreleased section to the new version and add date obtained via date +%Y-%m-%d (e.g. ## [1.0.0] - 2020-10-18)
Check if we didn't forget anything important
Remove empty subsections
Update the list of links in the bottom of the file
Add new Unreleased section:
## [Unreleased]
### Added
### Changed
### Deprecated
### Removed
### Fixed
### Security$ git tag -s -a "v${version}" -m "ttn-lw-migrate v${version}"
$ git push origin "v${version}"| Back | FazBrowse Home | New Git URL |