Skip to main content
Lager is a CLI and Python library allowing users to control electronic benchtop instruments from their local computer. It provides firmware developers with a unified, intuitive interface to automate testing, debugging, and validation of embedded systems using real lab equipment. Lager replaces manual probing, vendor-specific UIs, and handwritten test procedures with scriptable, reproducible workflows that integrate directly into your development cycle.

Architecture Overview

The Lager platform consists of two key components: the Client and the Lager Box. Together, they form a flexible, end-to-end system for embedded hardware testing and automation.

Client

The Client includes:
  • A Command-Line Interface (CLI)
  • A Python Library for test automation
These tools allow users to directly control test equipment and interact with embedded hardware. Common use cases include:
  • Flashing firmware to a DUT from the CLI
  • Automating full-system regression tests using Python scripts connected to real instruments
  • Controlling power supplies, battery simulators, and solar simulators
  • Running BLE scans and WiFi provisioning
  • Capturing oscilloscope waveforms and logic analyzer traces
Whether you’re debugging a board on your bench or orchestrating nightly tests, the Client gives you fast, flexible access to your lab equipment.

Lager Box

The Lager Box is a Linux (Ubuntu 24.04+) x86 machine configured to control lab instruments. It runs as a set of Docker containers with automatic restart policies and acts as the physical interface between your development tools and real-world test equipment. Users can connect supported devices directly to a Lager Box via USB. Once connected, the Lager Box automatically detects and exposes each device to the Client, making remote and scriptable access seamless.

Supported Hardware Categories

Debug Probes:
  • Segger J-Link
Power Supplies:
  • Rigol DP800 series
  • Keysight E36200/E36300 series
  • Keithley 2200/2280 series
  • Elektro-Automatik PSB series
Battery & Solar Simulators:
  • Keithley 2281S battery simulator
  • EA PSI/EL series solar simulator
Oscilloscopes & Logic Analyzers:
  • Rigol MSO5000 series
  • PicoScope
Electronic Loads:
  • Rigol DL3000 series
Data Acquisition & I/O:
  • LabJack T7 (ADC, DAC, GPIO)
  • Phidget thermocouples
  • Yoctowatt power meters
Programmable USB Hubs:
  • Acroname USB hubs
  • YKUSH USB hubs
USB-to-Serial Adapters
  • FTDI
  • CP2102
Robot Arm Actuation:
  • Rotrics Dexarm

Secure Network Access

Lager Boxes are accessed via private network IPs to ensure secure communication between the Client and Lager Box services. By default, Lager uses Tailscale VPN to provide secure remote access, but users are welcome to configure their own enterprise VPN solution (such as Cisco AnyConnect, OpenVPN, or WireGuard) as an alternative. Lager Box services bind to all network interfaces (0.0.0.0) to support flexible network configurations, including:
  • VPN access (Tailscale or enterprise VPN)
  • Direct local network access when on the same LAN
  • Docker bridge networking for inter-container communication
This architecture allows seamless connectivity regardless of your organization’s preferred VPN infrastructure.

Security

Lager Boxes are secured with UFW (Uncomplicated Firewall):
  • Default DENY policy for incoming connections
  • Lager ports (5000, 8301, 8765) restricted to VPN interfaces only
  • SSH access allowed for management
  • Automatic firewall configuration during deployment