fix(led): swap WiFi(play)/LAN(wifi+eth), LAN carrier via CLAWD_ETH_IFACE, faster alarm

- WifiLed drives play; LanLed drives wifi+eth pair (matches panel silkscreen)
- hasLanCableCarrier(): CLAWD_ETH_IFACE-only carrier when set (reliable unplug)
- LAN poll 1s; config.activated persisted for immediate setApps on boot/reconnect
- setApps double vfdOn alarm after 50ms for slow OpenVFD
- Clear activated + setSetup on credential errors
- install.sh env comment for CLAWD_ETH_IFACE

Made-with: Cursor
This commit is contained in:
stswangzhiping
2026-03-28 21:50:56 +08:00
parent 347b19a0c9
commit 8f5a8ec896
5 changed files with 50 additions and 12 deletions

View File

@@ -2,15 +2,15 @@
const fs = require('fs');
const log = require('./logger');
const { hasWiredCarrier } = require('./network');
const { hasLanCableCarrier } = require('./network');
/**
* OpenVFD 图标:/sys/class/leds/openvfd/led_on|led_off写入图标名
*
* 映射:
* wifi + eth 同亮/同灭 → 产品 WiFi 灯
* 映射与面板丝印一致play=WiFi 状态wifi+eth=有线链路)
* play → 产品 WiFi 灯(配网逻辑 on/off/blink
* wifi + eth 同亮/同灭 → LAN有线插拔见 hasLanCableCarrier / CLAWD_ETH_IFACE
* alarm → pwrSETUP=灭 / APPS=亮)
* play → lan有线 carrier
* BT → 无 sysfs仅日志
*
* 数码管AP/Conn/时间等):仍仅 debug 输出,不接 sysfs。
@@ -19,7 +19,7 @@ const { hasWiredCarrier } = require('./network');
*/
const BLINK_INTERVAL_MS = 500;
const LAN_POLL_MS = 3000;
const LAN_POLL_MS = 1000;
const VFD_BASE = process.env.CLAWD_OPENVFD_PATH || '/sys/class/leds/openvfd';
@@ -100,8 +100,9 @@ class WifiLed {
_write(val) {
const on = !!val;
log.debug('led', `[vfd] WiFiwifi+eth<= ${on ? 1 : 0}`);
vfdWifiPair(on);
log.debug('led', `[vfd] WiFiplay<= ${on ? 1 : 0}`);
if (on) vfdOn('play');
else vfdOff('play');
}
}
@@ -231,6 +232,8 @@ class StatusLed {
setApps() {
vfdOn('alarm');
// 部分 OpenVFD 驱动单次写入生效慢,短延迟再写一次
setTimeout(() => vfdOn('alarm'), 50);
log.debug('led', '[vfd] alarmpwr<= 1');
log.info('led', '状态灯 → APPS已激活');
}
@@ -257,20 +260,20 @@ class LanLed {
clearInterval(this._timer);
this._timer = null;
}
vfdOff('play');
vfdWifiPair(false);
this._current = null;
}
_sync() {
const up = hasWiredCarrier();
const up = hasLanCableCarrier();
if (up) {
if (this._current !== 'on') {
vfdOn('play');
vfdWifiPair(true);
this._current = 'on';
log.info('led', 'LAN有线 carrier→ 亮');
}
} else if (this._current !== 'off') {
vfdOff('play');
vfdWifiPair(false);
this._current = 'off';
log.info('led', 'LAN有线 carrier→ 灭');
}