Edgehog Device Runtime is a portable middleware written in Rust, that enables remote device management using Edgehog.
At the moment only Linux-based systems are supported.
See also OS requirements for further information.
The following information are sent to remote Edgehog instance:
- OS info (data is read from
/etc/os-release) - Hardware info
- System status (data is read from proc filesystem)
- Runtime info and compiler version
- OTA update using RAUC
Edgehog Device Runtimestatus changes via systemd.- Network interface info
- Base image (data is read from
/etc/os-release) - Battery status data
- Remote Terminal
- Container service
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.
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.
Edgehog Device Runtime supports the following libraries to communicate with the remote Edgehog instance:
astarte-device-sdkastarte-message-hub
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 = 60A 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 = 60Edgehog Device Runtime sends telemetry data from interfaces defined in the edgehog-astarte-interfaces repository. Here's how to configure some key values.
The device runtime extracts the image name and version from the /etc/os-release file. Example:
# /etc/os-release
IMAGE_ID="..."
IMAGE_VERSION="..."Set the model and part number as environment variables:
EDGEHOG_SYSTEM_SERIAL_NUMBEREDGEHOG_SYSTEM_PART_NUMBER
For example, in a systemd service file, refer to this buildroot package.
Edgehog Device Runtime can manage containerized applications when compiled with the features
containers.
The container service can be configured in the main config.toml, by adding the following map:
[containers]
# If the container service cannot be initialized it will exit the device runtime with an error
required = false
# Maximum number of retries if the service is require.
max_retires = 10We are open to any contribution: pull requests, bug reports and feature requests are welcome.
Edgehog Device Runtime source code is released under the Apache 2.0 License.
Check the LICENSE file for more information.