edgehog-device-manager / edgehog-device-runtime

Edgehog Device Runtime is a portable middleware written in Rust, that enables remote device management on Linux-based systems.
Apache License 2.0
11 stars 10 forks source link
device-management edge edgehog edgehog-device hacktoberfest iot iot-device linux ota-update rust

Edgehog Device Runtime

CI codecov

Edgehog Device Runtime is a portable middleware written in Rust, that enables remote device management using Edgehog.

Supported Operating System

At the moment only Linux-based systems are supported.

See also OS requirements for further information.

Implemented Features

The following information are sent to remote Edgehog instance:

How it Works

Edgehog Device Runtime relies on Astarte in order to communicate with the remote Edgehog instance.

Edgehog Device Runtime is a reference implementation of Edgehog Astarte Interfaces. Astarte interfaces describe how data are exchanged with the remote instance, and what kind of features are implemented.

Configuration

Edgehog Device Runtime can be configured using a TOML file located either in $PWD/edgehog-config.toml or /etc/edgehog/config.toml, or in a custom path, run cargo run -- --help for more information.

Supported Astarte transport libraries

Edgehog Device Runtime supports the following libraries to communicate with the remote Edgehog instance:

  1. astarte-device-sdk
  2. astarte-message-hub

1. Astarte Device SDK Rust

The Astarte Device SDK for Rust is a ready to use library that provides communication and pairing primitives to an Astarte Cluster.

Example configuration:

astarte_library = "astarte-device-sdk"
interfaces_directory = "/usr/share/edgehog/astarte-interfaces/"
store_directory = "/var/lib/edgehog/"
download_directory = "/var/tmp/edgehog-updates/"
[astarte_device_sdk]
credentials_secret = "YOUR_CREDENTIAL_SECRET"
device_id = "YOUR_UNIQUE_DEVICE_ID"
pairing_url = "https://api.astarte.EXAMPLE.COM/pairing"
realm = "examplerealm"
[[telemetry_config]]
interface_name = "io.edgehog.devicemanager.SystemStatus"
enabled = true
period = 60

Astarte Message Hub

A central service that runs on (Linux) devices for collecting and delivering messages from N apps using 1 MQTT connection to Astarte.

N.B. When using this option, the Astarte Message Hub should already be installed and running on your system.

Example configuration:

astarte_library = "astarte-message-hub"
interfaces_directory = "/usr/share/edgehog/astarte-interfaces/"
store_directory = "/var/lib/edgehog/"
download_directory = "/var/tmp/edgehog-updates/"
[astarte_message_hub]
endpoint = "http://[::1]:50051"
[[telemetry_config]]
interface_name = "io.edgehog.devicemanager.SystemStatus"
enabled = true
period = 60

Telemetry

Edgehog Device Runtime sends telemetry data from interfaces defined in the edgehog-astarte-interfaces repository. Here's how to configure some key values.

Image ID and Version

The device runtime extracts the image name and version from the /etc/os-release file. Example:

# /etc/os-release
IMAGE_ID="..."
IMAGE_VERSION="..."

Serial and Part Number

Set the model and part number as environment variables:

For example, in a systemd service file, refer to this buildroot package.

Contributing

We are open to any contribution: pull requests, bug reports and feature requests are welcome.

License

Edgehog Device Runtime source code is released under the Apache 2.0 License.

Check the LICENSE file for more information.