lox — Loxone Miniserver를 위한 AI 에이전트 도구링
CI
crates.io
License: AGPL-3.0
Eval
AI 에이전트에게 원하는 것을 말하세요. 그것이 Loxone Miniserver를 구성합니다.
"어두워지면 불이 켜지고, 강풍에는 블라인드가 올라가며, 바람이 없을 때는 햇빛을 받은 후 5분 뒤에 블라인드를 닫아주는 주방 환경을 설정해줘." → 에이전트는 블록 유형을 검색하고, 로직 블록 5개를 추가하며, 회로 3개를 배선하고, 시뮬레이션 피드백 후 펄스 지속 시간 오류를 수정하며, 모든 7가지 테스트 시나리오를 5분 이내에 검증합니다.
<p align="center">
<img src="https://raw.githubusercontent.com/eisber/lox-cli/HEAD/docs/assets/demo.gif" alt="데모: AI 에이전트가 주방 자동화를 구성하는 모습" width="662">
<br><sub >▶ 재생을 클릭하세요 — Copilot CLI가 자연어 프롬프트로부터 주방 회로 3개를 구축합니다</sub>
</p>
왜 필요한가 (Why)
Loxone Config는 Windows 전용 데스크톱 애플리케이션이며 용량이 400MB에 달합니다. 사용자는 블록을 캔버스 위에 끌어다 놓고, 수동으로 배선하며, 연결을 놓치지 않았는지 걱정해야 합니다. 조명, 블라인드, 기후 제어가 포함된 단일 방만 하더라도 15개 이상의 블록과 30개 이상의 와이어를 배치해야 할 수 있습니다.
이 CLI는 그러한 과정을 AI 에이전트가 호출할 수 있는 셸 명령어(shell commands)로 대체합니다. 에이전트는 스킬 참조(skill reference) (블록 유형, 커넥터, 일반적인 실수)를 읽고 회로를 구축한 다음, 오프라인 SPS 시뮬레이터를 사용하여 자체 테스트를 수행합니다. 이를 통해 실제 시스템에 어떤 것이 연결되기 전에 배선 오류를 잡아낼 수 있습니다.
GitHub Copilot CLI, Claude Code, OpenCode 또는 셸 명령을 실행할 수 있는 모든 에이전트와 함께 작동합니다.
설치 (Install)
Homebrew (macOS/Linux):
brew install eisber/tap/lox-cli
미리 빌드된 바이너리 (Linux, macOS, Windows) — Releases 참조:
curl -LO https://github.com/eisber/lox-cli/releases/latest/download/lox-cli-linux-x86_64
chmod +x lox-cli-linux-x86_64 && sudo mv lox-cli-linux-x86_64 /usr/local/bin/lox
crates.io에서 가져오기:
소스 코드로부터 빌드하기:
git clone https://github.com/eisber/lox-cli && cd lox-cli
cargo build --release
요구 사항: Loxone Miniserver Gen 1 또는 2 (펌웨어 12.0 이상), 로컬 네트워크 접근.
빠른 시작 (Quick Start)
lox setup set --host https://192.168.1.100 --user admin --pass secret
...
사용자: "햇볕이 쨍하고 온도가 25°C를 넘을 때 거실 블라인드를 닫아줘"
↓
에이전트가 스킬 참조(.github/skills/loxone-config/) 읽기
↓
에이전트가 CLI 명령어 실행:
lox blocks search "threshold" → GreaterEqual
lox config add --type GreaterEqual ... → 블록 추가, 커넥터 UUID 반환
lox config wire-connector ... → 센서 → 로직 → 액추에이터 연결
lox sim run config.Loxone --sim '...' → ✅ 신호가 올바르게 전파됨
↓
배포 준비 완료: lox config push config.Loxone --reboot
CLI는 LoxCC 압축, CRC32 체크섬, UUID 생성, 221개 블록 유형에 대한 커넥터 맵, 배선 유효성 검사를 처리합니다. 모든 명령어는 에이전트 사용을 위해 `--json` (또는 `-o json`)을 지원합니다.
...
```bash
# 로직 블록 추가 및 배선하기
lox config add --type GreaterEqual --title "Temp über 25" config.Loxone -o json
# {"ok":true,"uuid":"...","type":"GreaterEqual","connectors":[{"key":"Input1","uuid":"...","direction":"I"},...]
lox config set-param config.Loxone "Temp über 25" Input2 25
lox config wire-connector config.Loxone "Temp über 25.Input1" "Außentemperatur.AQ"
lox config wire-connector config.Loxone "Jalousie 1 [Wohnzimmer].InputTriggerDown" "Temp über 25.Q"
# 검증 및 테스트
lox config check config.Loxone -o json # 구조화된 경고/오류 확인
lox sim run config.Loxone --sim '{"inputs":{"Außentemperatur":30},...}'
# 배포
lox config push config.Loxone --reboot --force # 업로드 + SPS 재시작(~4초)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
일반적인 설정을 위한 룸(Room) 템플릿:
lox config template config.Loxone bedroom --room "DG Schlafzimmer"
GitOps 버전 관리:
lox config pull
lox config log
SPS 시뮬레이터
...
lox sim run config.Loxone --sim '{
"inputs": {"Außentemperatur": 30, "Sonnenschein": 1},
"ticks": 10, "dt": 0.1,
"expected_outputs": {"Jalousie 1 [Wohnzimmer].InputTriggerDown": {">": 0.5}}
}'
...
{
"id": "s01-piano-protection",
"utterance": "Lower blinds in the living room when it's sunny and the temperature is over 25 degrees",
"expected": {
"simulation": [
{
"name": "blinds close when hot+sunny",
"inputs": {"Außentemperatur": 30, "Sonnenschein": 1},
"ticks": 10, "dt": 0.1,
"expected_outputs": {"Jalousie 1 [Wohnzimmer].InputTriggerDown": {">": 0.5}}
},
{
"name": "blinds stay when cold",
"inputs": {"Außentemperatur": 15, "Sonnenschein": 0},
"ticks": 10, "dt": 0.1,
"expected_outputs": {"Jalousie 1 [Wohnzimmer].InputTriggerDown": {"<": 0.5}}
}
]
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
파이프라인:
- **에이전트(Agent)**가 발화(utterance) + 장치 구성(fixture config) (센서 및 액추에이터 포함) + 스킬 참조를 수신합니다.
...
lox blocks search "greater equal threshold"
lox blocks search "off delay timer"
lox config add --type GreaterEqual --title "Feuchte hoch" --room Bad config.Loxone
lox config add --type OffDelay --title "Lüfter Nachlauf" --room Bad config.Loxone
lox config set-param config.Loxone "Feuchte hoch" Input2 70
lox config set-param config.Loxone "Lüfter Nachlauf" Time 300
lox config wire-connector config.Loxone "Feuchte hoch.Input1" "Raumfeuchtigkeit Bad.AQ"
lox config wire-connector config.Loxone "Lüfter Nachlauf.InputTrigger" "Feuchte hoch.Q"
lox config wire-connector config.Loxone "Lüfter Bad.I1" "Lüfter Nachlauf.Q"
lox config check config.Loxone
lox sim run config.Loxone --sim '{"inputs":{"Raumfeuchtigkeit Bad":80},
"ticks":10,"dt":0.1,"expected_outputs":{"Lüfter Bad.I1":{">":0.5}}}'
lox sim run config.Loxone --sim '{"inputs":{"Raumfeuchtigkeit Bad":50},
"ticks":10,"dt":0.1,"expected_outputs":{"Lüfter Bad.I1":{"==":0}}}'
**결과:** 습도 80% → 팬 작동 ✅ · 습도 50% → 팬 정지 ✅ · 총 시간: 94초, 프리미엄 요청 6회.
...
```bash
python3 tests/eval/scripts/eval-agent.py --case s01-piano-protection --agent copilot
python3 tests/eval/scripts/eval-agent.py --all --parallel 2 --agent copilot
lox sim run saved-config.Loxone --sim '[...]'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
...
오류: 블록 'Threshold'를 찾을 수 없습니다.
다음 중 하나를 의미하셨습니까?: GreaterEqual, LessEqual, AnalogThresholdTrigger?
다중 미니 서버
아키텍처 (Architecture)
단일 정적 Rust 바이너리(~14MB)입니다. 런타임 종속성이 없습니다. Linux, macOS 및 Windows에서 작동합니다.
전체 명령어 참조는 **COMMANDS.md**를, 아키텍처 세부 정보는 **DESIGN.md**를, 그리고 AI 에이전트 통합 가이드는 **AGENTS.md**를 참고하십시오.
라이선스 (License)
이중 라이선스(Dual-licensed)입니다: 공개 사용을 위한 AGPL-3.0, 독점 재배포를 위한 상업용 라이선스 (Commercial License).
Christoph Neumüller가 개발한 lox를 기반으로 합니다 (GPL-3.0). 출처 정보는 NOTICE를 참조하십시오.
저작권 © 2025-2026 Markus Cozowicz