Skip to content

ZeroTrace AirLeak

Settings Reference

Every persistent firmware setting, its default, and its effect

This page documents the persistent settings in the AirLeak firmware. They live in a JSON document on the unit's LittleFS filesystem (/config.json) and are read / written over Bluetooth with the config.get / config.set RPCs (see RPC Reference). All keys and defaults below are from src/handlers/config.cpp.

Set from the app

You don't edit these by hand. The app's Settings tab maps the user-facing controls onto these keys; config.set rejects any key that isn't in the table below.


Device

KeyDefaultMeaning
device_name(empty)Friendly name shown for the unit

LED

KeyDefaultMeaning
startup_led_colorblueLED color at boot
led_brightness50LED brightness, 0–255 (non-numeric or out-of-range values are rejected)
led_mode_indicatefalseTint the LED by current mode
led_threat_indicatefalseDrive the LED from the threat indicator (alerts)

Threat indicator

These tune the on-device threat-indicator LED that reacts to alerts (src/controllers/threat_indicator.*).

KeyDefaultMeaning
threat_window_sec30Rolling window for counting alerts
threat_yellow_count1Alerts in the window to go yellow
threat_red_count3Alerts in the window to go red
threat_red_rulesunknown_tracker_nearRules that force red immediately
threat_red_severity2Severity that forces red immediately
threat_ignore_rules(empty)Rules the indicator ignores
threat_flash_ms500Flash period (ms)

Capture emit policy

These gate when a device change is "worth" pushing as a delta on the capture stream (spec §7.2). See Throttle & emit policy.

KeyDefaultMeaning
rssi_delta_emit6Minimum RSSI-EMA move (dBm) to emit a delta
sev_delta_emit5Minimum leakage-score move to emit a delta

Recon

KeyDefaultMeaning
always_reconfalseBias the unit toward recon (stream-paused) behaviour

TraceNet (swarm)

Off by default so a hub not running a swarm keeps its WiFi modem off, zero cost to BLE scan duty.

KeyDefaultMeaning
swarm_enabledfalseEnable ESP-NOW swarm node support
swarm_channel1ESP-NOW / WiFi channel shared by every node

Read-only fields

config.get also returns fields you can't write, derived at read time:

FieldMeaning
product_nameAirLeak (or AirLeak Custom on custom-board builds)
firmware_versionFirmware version string
serial_numberZT-<efuse MAC>
storage / space_leftFilesystem capacity / free space

What's NOT a setting

The BLE scan window/interval are fixed in sdkconfig.defaults, not runtime-tunable settings. There are no WiFi channel / dwell / USB-throttle settings (those were WiFi-era controls and were removed). The capture mode is persisted separately via mode.set (NVS), not in /config.json.


Crash-safe writes

config.set writes to a sibling file and atomically renames it over the live config, so a power loss mid-write leaves the previous config intact.