Example Embedded Applications
Several examples of applications built with the Nabto Edge Embedded SDK can be found in the SDK github repo under the examples directory.
All examples prefixed with simple_
are minimal examples of the specific subject, omitting all access control and other complexities. For a thorough example demonstrating access control, see the thermostat example or the full Nabto Edge Tunnel app.
Corresponding example clients for all of the above examples are available in the nabto-client-sdk-examples github repo. The embedded tunnel application can be used with the Nabto Edge Tunnel CLI client tool.
For the thermostat embedded device example, a full client app is also available for iOS and Android
Configuration of Example Projects
To allow remote access, all examples need configuration through the Nabto Cloud Console where you must sign up for a free account (no credit card required). The configuration of a device through the console is simple - you just need to obtain two ids (device and product ids) and set a value (public key fingerprint).
The configuration process is outlined below with screenshots for the “Hello, World” example. It is the same process for all examples - all devices just need this simple configuration for remote access, regardless of the use case: The actual application is only running on the client and device - so from a Nabto Basestation configuration point of view, they are all similar.
If you just want to test local only access to your example from a client application, you do not need to do any configuration at all through the Nabto Cloud Console, it will just work without further ado.
Hello, World! CoAP Service
This example is a simple Hello, World! style Nabto Edge Embedded SDK application. It is located in examples/simple_coap in the SDK repo. The other simple_
examples are built an run in a similar way.
The application is a simple CoAP service, that handles a GET
request at the path /hello-world
. It replies with a string payload that says “Hello, world!” back to the client.
Configuration
The unique device configuration values are supplied on the command line. Obtain these from the Nabto Cloud Console - start by signing up for a free developer account if not already done.
If you have not yet created an organization and an initial product and device, just follow the “Get started” wizard:
After completing the wizard, you have an organization, a product and a device. Your “Products” page will then look something as follows - click the “devices” link:
On the devices page click on an available device, ie one with no fingerprint set yet (you will have one such device after following the wizard):
For now note the product id (pr-v3hg947i
in the screenshots) and device id (de-ukmuqfkq
). The two ids have been shown in several places on your way here - on this page they may be handy to copy from the text on the right:
Remember that the pr-
and de-
prefixes are parts of the ids and must be included!
Keep this page in your browser as you will return shortly to register the device’s generated public key fingerprint.
Building and running
Follow the general build instructions on the Embedded SDK intro page to build the Hello, World CoAP service.
Run the embedded application where you specify the two ids noted above from the console:
$ ./examples/simple_coap/simple_coap_device pr-v3hg947i de-ukmuqfkq
When the device starts, it generates a unique private key and tries to register with the Nabto basestation using this. This will initially fail as the corresponding public key is not yet registered:
$ ./examples/simple_coap/simple_coap_device pr-v3hg947i de-ukmuqfkq
Nabto Embedded SDK Version 0.0.0-branch.master.commits.2539+201f1e87
Nabto Embedded SDK Version 0.0.0-branch.master.commits.2539+201f1e87
Device: pr-v3hg947i.de-ukmuqfkq with fingerprint: [83a6cb6803ad7c812e962c1acc35f9985dd800b8d559aea8b7766b4a94696a45]
2023-01-08 14:56:34.712 ...emb/src/core/nc_device.c(391)[_INFO] Starting Nabto Device
2023-01-08 14:56:35.049 ..._attacher_attach_start.c(102)[ERROR] The server does not recognize the fingerprint of the device. Check that the fingerprint is in sync with the server
The device fingerprint is not known by the basestation
Just leave the device running, it will work in a moment after the last configuration step is done:
The final configuration step is to register the device’s fingerprint through the Nabto Cloud Console. The public key fingerprint is the long string output in the 4th line of the above console output (83a6...a45
), just copy this and paste it into the fingerprint field in the Nabto Cloud console:
When the fingerprint is saved, the device comes online:
$ ./examples/simple_coap/simple_coap_device pr-v3hg947i de-ukmuqfkq
Nabto Embedded SDK Version 0.0.0-branch.master.commits.2539+201f1e87
Nabto Embedded SDK Version 0.0.0-branch.master.commits.2539+201f1e87
Device: pr-v3hg947i.de-ukmuqfkq with fingerprint: [83a6cb6803ad7c812e962c1acc35f9985dd800b8d559aea8b7766b4a94696a45]
2023-01-08 14:56:34.712 ...emb/src/core/nc_device.c(391)[_INFO] Starting Nabto Device
2023-01-08 14:56:35.049 ..._attacher_attach_start.c(102)[ERROR] The server does not recognize the fingerprint of the device. Check that the fingerprint is in sync with the server
The device fingerprint is not known by the basestation
2023-01-08 14:56:57.854 ...b/src/core/nc_attacher.c(747)[_INFO] Device attached to basestation
Attached to the basestation
Now the device is “Attached” - this means it is registered with the Nabto basestation and ready to be invoked from a remote client!
Invoking CoAP service from a Nabto Edge client
To invoke the simple “Hello, World!” CoAP service, use the corresponding CoAP commandline client.
Invoke the client as follows:
./simple_coap_client -p pr-v3hg947i -d de-ukmuqfkq -r /hello-world --force-remote
Nabto Client SDK Version: 5.12.0
connecting to pr-v3hg947i.de-ukmuqfkq
Connected to device with fingerprint: 83a6cb6803ad7c812e962c1acc35f998
Received CoAP get response data: Hello world
The --force-remote
option makes sure you test connecting using P2P (or relay) mediated by the Nabto basestation instead of using a local connection to the device. You could invoke the target device locally even if it was not correctly configured through the Nabto Cloud Console.
For more information about connecting and invoking devices, read the client development introduction.