#!/bin/bash # lux_test.sh — LPC 照度闭环回归(LUX/LXT 帧 + API 回读校验) # 前提:BRT 链路已通(loop_test.sh 全 PASS),触发器 #8/#9 已上传 # 用法: bash lux_test.sh 全量回归 # 依赖: /home/tonycao/rs485-lpc_test_rs485.py, curl TTY=/dev/ttyUSB0 API=http://192.168.58.109/api/group PASS=0; FAIL=0 send() { python3 /home/tonycao/rs485-lpc_test_rs485.py -p $TTY -b 9600 -s "$1" -w 0.5 > /dev/null; } level() { curl -s $API | grep -o '"level":[0-9]*' | grep -o '[0-9]*'; } check() { # $1=用例名 $2=期望level $3=容差 local lv=$(level) local d=$((lv > $2 ? lv - $2 : $2 - lv)) if [ $d -le ${3:-2} ]; then echo "PASS $1 -> level=$lv (expect $2±${3:-2})"; PASS=$((PASS+1)); else echo "FAIL $1 -> level=$lv (expect $2±${3:-2})"; FAIL=$((FAIL+1)); fi } echo "== 初始化:BRT=050, LXT=000500 ==" send 'BRT=050\n'; sleep 2 send 'LXT=000500\n'; sleep 1 check "init BRT=050" 50 echo "== 死区:LUX=000520(偏差20<50,不应变化)==" send 'LUX=000520\n'; sleep 3 check "deadband 520" 50 echo "== 超目标降光:LUX=002000(50→30,-20%步进)==" send 'LUX=002000\n'; sleep 3 check "dim 2000" 30 echo "== 欠目标升光:LUX=000000(30→50,+20%步进上限)==" send 'LUX=000000\n'; sleep 3 check "raise 0" 50 echo "== 上限限幅:LUX=000000 ×8(收敛100)==" for i in $(seq 8); do send 'LUX=000000\n'; sleep 2; done check "clamp max" 100 echo "== 下限限幅:LUX=200000 ×8(收敛5)==" for i in $(seq 8); do send 'LUX=200000\n'; sleep 2; done check "clamp min" 5 echo "== 恢复:BRT=050 ==" send 'BRT=050\n'; sleep 2 check "restore 50" 50 echo "RESULT: PASS=$PASS FAIL=$FAIL"