All commands support -o/--output for format selection (json, csv, table) and -q/--quiet to suppress non-essential output. Controls can be referenced by name (fuzzy matched), UUID, or alias.
When multiple controls share the same name, disambiguate with -r/--room or bracket syntax:
lox get "Temperatur" -r "Schlafzimmer"
lox get "Temperatur [OG Schlafzimmer]"Global flags: -o/--output json|csv|table, -q/--quiet, --no-color (also respects NO_COLOR env var), --no-header, -v/--verbose (request logging), --dry-run, --non-interactive, --trace-id, --ctx <name> (use a specific context)
lox -v ls # show HTTP requests
lox -vv get "Temperatur" # show requests + response bodies
lox --dry-run on "Licht Wohnzimmer" # preview without executing
lox --dry-run on "Licht" -o json # dry-run returns JSON envelope
lox --non-interactive reboot # fail instead of prompting (implied by -o json)
lox --trace-id "abc-123" on "Licht" # correlation ID for agent tracing--dry-run validates and resolves inputs without sending commands. With -o json, it returns a structured envelope:
{
"ok": true,
"dry_run": true,
"would_execute": {
"uuid": "1d8af56e-...",
"command": "on",
"control": "Licht Wohnzimmer",
"room": "Wohnzimmer"
}
}lox setup set --host https://192.168.1.100 --user admin --pass secret
lox setup set --serial YOUR_SERIAL # enables correct TLS hostname
lox setup set --verify-ssl # enable cert verification
lox setup set --no-verify-ssl # disable (default, self-signed)
lox setup show # show config (password redacted)All config fields also support env vars: LOX_HOST, LOX_USER, LOX_PASS, LOX_SERIAL
LOX_HOST=https://192.168.1.100 LOX_USER=admin LOX_PASS=secret lox statuslox alias add wz "1d8af56e-036e-e9ad-ffffed57184a04d2"
lox alias remove wz
lox alias lsThen use directly: lox on wz
lox ls # all controls
lox ls -t Jalousie # filter by type
lox ls -r "Wohnzimmer" # filter by room
lox ls -c "Beleuchtung" # filter by category
lox ls -f # only favorites
lox ls -v # include live values (slower)
lox get "Licht Wohnzimmer" # full state of one control
lox info "Licht Wohnzimmer" # detailed: sub-controls, states, moods
lox rooms # list all rooms
lox categories # list all categories
lox globals # global states (operating mode, sunrise, etc.)
lox modes # operating modes
lox extensions # connected extensions and devices
lox discover # find Miniservers on local network (UDP)
lox discover --timeout 5
lox health # device health dashboard (battery, signal, offline)
lox health --type tree # filter by device type (tree or air)
lox health --problems # show only devices with issues
lox schema # list all commands with metadata (for AI agents)
lox schema blind # show schema for a specific commandlox on "Licht Wohnzimmer"
lox off "Licht Wohnzimmer"
lox on --all-in-room "Wohnzimmer" # turn on all controls in a room
lox off --all-in-room "Schlafzimmer" # turn off all controls in a room
lox light mood "Licht Wohnzimmer" plus # next mood
lox light mood "Licht Wohnzimmer" minus # previous mood
lox light mood "Licht Wohnzimmer" off # turn off (mood 778)
lox light mood "Licht Wohnzimmer" 704 # set by mood ID
lox light moods "Licht Wohnzimmer" # list available moods (via WebSocket)
lox light moods "Licht" -o json # moods as JSON with control metadata
lox light dim "Stehlampe" 75 # set dimmer 0-100%
lox light color "LED Strip" "#FF0000" # hex RGB
lox light color "LED Strip" "hsv(120,100,100)" # HSVlox blind "Beschattung Süd" up
lox blind "Beschattung Süd" down
lox blind "Beschattung Süd" stop
lox blind "Beschattung Süd" pos 50 # position 0-100%
lox blind "Beschattung Süd" full-up
lox blind "Beschattung Süd" full-down
lox blind "Beschattung Süd" shade # automatic shadinglox gate "Garagentor" open
lox gate "Garagentor" close
lox gate "Garagentor" stoplox thermostat "Heizung" temp 22.5 # set comfort temp
lox thermostat "Heizung" mode auto # auto|manual|comfort|eco
lox thermostat "Heizung" override 24 120 # override 24°C for 120 min
lox thermostat "Heizung" # show current state
lox weather # current weather data
lox weather --forecast # 7-day forecastlox alarm "Alarmanlage" arm # arm alarm
lox alarm "Alarmanlage" arm --no-motion # arm without motion detection
lox alarm "Alarmanlage" disarm
lox alarm "Alarmanlage" quit # acknowledge/silence
lox door "Haustür" lock # lock a door lock
lox door "Haustür" unlock # unlock
lox door "Haustür" open # open (e.g. electric strike)
lox lock "Heizung" --reason "Wartung" # lock a control (admin)
lox unlock "Heizung"lox stats # controls with statistics enabled
lox history "Temperatur" --month 2025-01
lox history "Temperatur" --day 2025-01-15
lox history "Temperatur" -o csv # CSV outputlox if "Temperatur Außen" gt 25 # exit 0=true, 1=false
lox if "Schalter" eq 1 && lox on "Licht"Operators: eq, ne, gt, ge, lt, le
lox input set "Sollwert Heizung" 21.5
lox input set "Sollwert Heizung" 21.5 -r "Wohnzimmer" # disambiguate with room
lox input pulse "Taster"lox music play # play zone 1
lox music pause 2 # pause zone 2
lox music stop
lox music volume 50 # volume 0-100lox run abend # run a scene
lox run abend --dry-run # preview without executing
lox scene ls # list all scenes
lox scene show abend # print YAML definition
lox scene new abend # create empty scene fileScenes are YAML files in ~/.lox/scenes/:
name: Abend
steps:
- control: "Licht Wohnzimmer"
cmd: on
- control: "Beschattung Süd"
cmd: "pos 70"
delay_ms: 500lox autopilot ls # list all automatic rules
lox autopilot state "Rule Name" # show when a rule last firedlox config download # download latest config ZIP via FTP
lox config download --extract # download + decompress to .Loxone XML
lox config download --save-as config.zip # custom output filename
lox config ls # list all configs on the Miniserver
lox config extract config.zip # decompress LoxCC → .Loxone XML
lox config extract config.zip --save-as out.Loxone
lox config upload config.zip --force # upload to Miniserver (dangerous)
lox config users file.Loxone # list user accounts from config XML
lox config devices file.Loxone # list hardware devices (Tree/Air/Network)
lox config diff old.Loxone new.Loxone # compare two configs (accepts .zip or .Loxone)
# Git-based config versioning
lox config init ~/loxone-config # initialize a git repo for config tracking
lox config pull # download, decompress, diff & git-commit
lox config pull --quiet # cron-friendly (no output unless error)
lox config log # show config change history
lox config log -n 5 # last 5 entries
lox config restore abc123 --force # restore config from git history & uploadThe pull workflow: FTP download → LoxCC decompress → semantic diff → git commit with meaningful message.
Multi-Miniserver: each serial gets its own subdirectory in the repo.
lox status # firmware, PLC state, memory
lox status --diag # CPU, tasks, interrupts, SD card health
lox status --net # network config (IP, MAC, DNS1/2, DHCP, NTP)
lox status --bus # CAN bus statistics (incl. parity errors)
lox status --lan # LAN statistics (incl. exhaustion, no-buffer)
lox status --all # all diagnostic sections
lox time # Miniserver system date/time
lox log # system log (admin only)
lox log -n 100 # custom line countlox health # device health dashboard
lox health --type tree # filter: tree or air devices only
lox health --problems # show only devices with warnings/offline
lox health -o json # JSON outputShows battery levels, signal strength, online/offline status, and bus errors for Tree and Air devices.
lox schema # list all commands with metadata
lox schema blind # schema for a specific command
lox schema -o json # JSON output for programmatic useReturns command structure, arguments, subcommands, control type hints, and valid actions. Designed for AI agent discovery — agents can introspect what commands exist and what parameters they accept.
When using -o json, errors return structured envelopes instead of plain text:
{
"ok": false,
"error": "control_not_found",
"message": "No control matching 'Nonexistent'"
}Error codes: control_not_found, ambiguous_control, config_not_found, confirmation_required, unauthorized, forbidden, not_found, http_error, connection_error, error.
lox files ls / # browse Miniserver filesystem
lox files get /log/def.log # download a file
lox files get /log/def.log --save-as local.loglox cache info # show cache age and path
lox cache check # check if cache is current
lox cache refresh # force re-fetch
lox cache clear # delete local cacheMore secure than Basic Auth. Token is valid ~20 days.
lox token fetch # fetch & save token
lox token info # show token status
lox token check # verify token on Miniserver
lox token refresh # extend validity
lox token revoke # revoke on Miniserver
lox token clear # delete local token filelox send <uuid> <command> # send raw command to a control
lox send <uuid> <command> --secured <hash> # secured command
lox watch "Temperatur" # poll state and print changes (Ctrl+C to stop)
lox watch "Temperatur" -i 5 # custom poll interval in secondslox stream # stream all state changes via WebSocket (NDJSON with --json)
lox stream --room "Kitchen" # filter by room
lox stream --type LightControllerV2 # filter by control type
lox stream --control "Kitchen Light" # filter by control name
lox stream --initial # include initial state snapshot
lox stream --json # output as NDJSON (one JSON object per line)Pushes metrics, logs, and traces to any OTLP-compatible backend (Dynatrace, Datadog, Grafana Cloud, etc.).
Metrics: control state gauges, system diagnostics (CPU, heap, tasks), network counters (CAN/LAN), weather data.
Logs: state change events, text-state messages, Miniserver system log (def.log).
Traces: synthetic automation traces — correlates autopilot rule fires with temporally-close state changes.
# Continuous daemon — push metrics + logs + traces via OTLP every 30s
lox otel serve --endpoint http://localhost:4318 --interval 30s
# With auth header (Dynatrace, Datadog, etc.)
lox otel serve --endpoint https://otlp.example.com:4318 \
--header "Authorization=Bearer xxx" --interval 1m
# Filter by room or control type
lox otel serve --endpoint ... --room "Kitchen" --type LightControllerV2
# Metrics only (disable logs and traces)
lox otel serve --endpoint ... --no-logs --no-traces
# Metrics + logs only (disable traces)
lox otel serve --endpoint ... --no-traces
# One-shot push (for cron jobs)
lox otel push --endpoint http://localhost:4318
# One-shot push, metrics only
lox otel push --endpoint http://localhost:4318 --no-logsManage multiple Miniserver connections, similar to kubectl config use-context:
lox ctx add home --host https://192.168.1.100 --user admin --pass secret
lox ctx add office --host https://10.0.0.50 --user admin --pass secret
lox ctx use home # switch active context
lox ctx home # shortcut for `lox ctx use home`
lox ctx list # list contexts (* = active)
lox ctx current # show active context
lox ctx remove office # remove a context
lox ctx rename home house # rename a contextlox --ctx office status # run against 'office' without switching
lox --ctx home ls -o json # query 'home' contextlox ctx init # create .lox/ in current directory
lox ctx init --host ... --user ... --pass ... # with connection detailsProject-local .lox/config.yaml is auto-discovered by walking up from cwd (like .git). Secrets are excluded via .lox/.gitignore.
lox ctx migrate # convert flat config to 'default' contextExisting flat ~/.lox/config.yaml files continue to work unchanged. Multi-context format:
active_context: home
contexts:
home:
host: https://192.168.1.100
user: admin
pass: secret
office:
host: https://10.0.0.50
user: admin
pass: secretLOX_CONFIGenv var (absolute priority)- Project-local
.lox/config.yaml(walk up from cwd) - Global
~/.lox/config.yaml(flat or multi-context) --ctxflag overrides context selection within global config
lox update check # check for updates
lox update install --yes # install update
lox reboot --yes # reboot Miniserverlox completions bash # generate bash completions
lox completions zsh # generate zsh completions
lox completions fish # generate fish completions
# Install (bash):
lox completions bash > /etc/bash_completion.d/lox
# Install (zsh):
lox completions zsh > ~/.zfunc/_lox
# Install (fish):
lox completions fish > ~/.config/fish/completions/lox.fish