This repository contains the implementation scaffold for ESLAB Task 3. The system is built as distributed C++ services that communicate via message queues and are deployed across a Raspberry Pi cluster.
Two fan-control loops run in parallel:
- control_service <-> fan_service
- control_service1 <-> fan_service1
A central server service provides HTTP endpoints for runtime control, parameter updates, and status monitoring.
Important runtime note: The full system cannot be run meaningfully without the required fan hardware and the Raspberry Pi cluster. For students working on this repository locally, supported execution is local testing only. Actual runtime/deployment must be performed via Cascade in the lab environment.
- Service-oriented distributed architecture for embedded control.
- Two independent control/fan service pairs.
- ZeroMQ-based communication through shared queue abstractions.
- HTTP server for runtime control and monitoring.
- Static and unit test workflow through Docker.
- Docker TBD
Most dependencies are already provisioned in docker/Dockerfile.servers for the test image.
Building the project for the first time can take a while on most hardware, since Docker needs to download and install various dependencies. Once completed, these dependencies are cached, so future builds will be significantly faster.
From the repository root, run:
./run_docker_tests.shThe script will:
- Build the container image with: docker build -f docker/Dockerfile.servers -t eslab-task3-tests .
- Start a container from that image.
- Execute run_tests.sh inside the running container.
- Format the test output in a more readable way.
- Clean up the temporary container.
TBD
For most students, usage is:
- Implement the required TODOs in control and fan services.
- Run local tests via Docker.
- Validate your report outputs and behavior using the provided test pipeline.
Runtime clarification:
- Local machine: testing/validation only.
- Full runtime with physical fans and distributed Raspberry Pi services: done through Cascade.
- Without the required fans and RPi cluster, hardware-level behavior cannot be reproduced locally.
Task and code documentation can be found at ESLAB Task 3 Documentation.