From 08fa4eefaad805848ebe59bf3cc42e6dfc18b8a5 Mon Sep 17 00:00:00 2001 From: stswangzhiping <59632378+stswangzhiping@users.noreply.github.com> Date: Fri, 20 Mar 2026 07:43:51 +0800 Subject: [PATCH] feat: skip WS in AP+no-internet, poll every 5s until network available Made-with: Cursor --- lib/client.js | 10 ++++++++++ lib/provisioning.js | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/client.js b/lib/client.js index c8da8f5..571d60e 100644 --- a/lib/client.js +++ b/lib/client.js @@ -127,6 +127,16 @@ class ClawClient { _connect() { if (this._stopped) return; + // AP 模式 + 无网:不建立 WS,5s 后重新检查网络 + if (this._provisionMgr && this._provisionMgr.isApMode() && !hasInternet()) { + led.display.showAP(); + log.info('clawd', 'AP 模式无网络,5s 后重新检查...'); + this._backoff = 1_000; // 有网时立即快速重连 + this._wsFailCount = 0; // 不计入失败 + setTimeout(() => this._connect(), 5_000); + return; + } + if (!this._hasEverConnected || this._wsFailCount < 3) led.display.showConn(); log.info('clawd', `正在连接 ${this._cfg.server} ...`); const ws = new WebSocket(this._cfg.server, { diff --git a/lib/provisioning.js b/lib/provisioning.js index e3ab333..7a527d0 100644 --- a/lib/provisioning.js +++ b/lib/provisioning.js @@ -112,7 +112,7 @@ class ProvisionManager extends EventEmitter { if (this._state === 'ap') return; led.off(); // AP 模式:WiFi 未连接,灭灯 - led.display.showAP(); // AP 模式:VFD 显示 AP + if (!hasInternet()) led.display.showAP(); // 无网时立即显示 AP,有线时等 WS 连接后再定 try { // AP 模式下无法扫描 WiFi,必须在开 AP 之前扫描并缓存