Case studies used to evaluate the ember multi-agent framework on embedded devices. Each case study is implemented in two variants — agent-based (using ember) and standard (idiomatic baseline without agents) — and in two target languages: Rust and Arduino (C++). This structure is intended to support direct comparison between agent-based and conventional approaches to the same problem.
A composite smart home system integrating door lock control, plant monitoring, and a central HTTP control interface. This is the main case study for the paper. It is evaluated in two deployment configurations:
- Non-distributed — all subsystems running on a single device
- Distributed — subsystems split across multiple ESP32 devices communicating over ESP-NOW, with a dedicated center-control node exposing an HTTP server
Each configuration has agent-based and standard variants for both Rust and Arduino.
A PIR-triggered door lock. Two agents (PirAgent, LockAgent) handle sensing and actuation.
Included as a standalone subsystem; in the smart home study it becomes one of the distributed
nodes.
A multi-sensor plant monitoring system with agents for moisture, light, temperature/humidity, pump control, and notifications. Likewise a standalone subsystem and a distributed node in the smart home study.
A single-device HTTP server. Included as a building block for the center-control node.
smart-home/ # Primary case study (non-distributed and distributed)
door-lock/ # Standalone door lock subsystem
plant-monitoring/ # Standalone plant monitoring subsystem
http-server/ # Standalone HTTP server
metrics/ # Metric collection scripts and study data
analysis/ # Study analysis notes
xtask/ # Build and run automation (see below)
Within each case study, the structure follows a consistent pattern:
<case-study>/
rust/
agent-based/
standard/
arduino/
agent-based/
standard/
For the smart home, distributed/ and non-distributed/ sit above the agent-based/ /
standard/ split.
Case studies are managed via a cargo xtask binary.
cargo xtask <COMMAND>Available commands: build, check, run, metrics.
cargo xtask run <NAME> [OPTIONS]| Option | Description | Default |
|---|---|---|
--variant |
agent-based or standard |
standard |
--targets |
rust or arduino |
— |
--all-targets |
Run on both targets | — |
Examples:
# Run the smart home case study, agent-based variant, Rust only
cargo xtask run smart-home --variant agent-based --targets rust
# Run plant monitoring, agent-based, Arduino
cargo xtask run plant-monitoring --variant agent-based --targets arduinocargo xtask metricsMetric results and analysis scripts are in metrics/distributing-smart-home-study/. The
analyze-metrics.py script processes the collected data; metrics.conf and metrics.txt
record the configuration and raw output from a prior run.
- Rust (see
rust-toolchain.toml) - For Arduino targets: Arduino CLI with ESP32 board support
- For distributed targets: multiple ESP32 devices or a Wokwi simulation setup
To be determined. Please contact the authors before reuse or redistribution.