Commit Graph
100 Commits
Author SHA1 Message Date
stswangzhiping 4cf0e4e948 feat: 重连时 MD5 校验模型列表,有变化才更新 openclaw.json
- 新增 computeModelsMd5():对模型 id 列表排序后取 MD5
- 新增 refreshModelsIfChanged():读现有 provider 配置拉新模型,MD5 不同才写盘
- client.js: 重连(active + 无完整 provider)时调用 refreshModelsIfChanged,而非直接跳过

Made-with: Cursor
2026-04-23 07:53:49 +08:00
stswangzhiping c64aeab3b2 feat: model 列表增加 input 字段
Made-with: Cursor
2026-04-14 09:04:58 +08:00
stswangzhiping 8f6e7c55e9 feat: frpc use frp.claw.cutos.ai:443 with TLS for new devices
Made-with: Cursor
2026-04-09 18:21:03 +08:00
stswangzhiping 3d2e5d477a revert: restore TCP 7000 frpc config (WebSocket via Nginx not working)
Made-with: Cursor
2026-04-09 17:40:14 +08:00
stswangzhiping d9f826f978 feat: frpc uses WebSocket over port 443 for firewall compatibility
Made-with: Cursor
2026-04-09 17:15:44 +08:00
stswangzhiping c1c51843c4 fix: remove redundant subtitle, update wifi label on setup page
Made-with: Cursor
2026-04-07 18:07:09 +08:00
stswangzhiping 43deb9afa0 fix: ttyd 改用 apt install,不再从 GitHub 下载
- install.sh: 改为 apt install -y ttyd,删除 GitHub 下载逻辑
- frpc.js: TTYD_BIN 改为 findTtydBin() 动态查找系统路径,删除 downloadTtyd()

Made-with: Cursor
2026-04-06 15:17:27 +08:00
stswangzhiping f6afcd5cc2 refactor: 移除 restartGateway,openclaw.json 单次写入
gateway 自动检测文件变更并重启,clawd 无需主动 kill。
同时去掉 applyFullProviderFromVps 的预清理写盘,
改为拉完模型后一次性写入,避免 gateway 读到中间状态。

Made-with: Cursor
2026-04-05 09:12:57 +08:00
stswangzhiping 4852ded7e5 fix: clawd 不再写 agents/main/agent/auth-profiles.json
clawd 以 root 身份运行,写该目录会导致 gateway(sts 用户)的 agents 目录被 root 创建。
clawd 只需修改 openclaw.json,gateway 重启后会自行读取,无需操作 gateway 内部目录。

Made-with: Cursor
2026-04-04 21:33:35 +08:00
stswangzhiping 3fe5586613 feat: install.sh 预装 ttyd,frpc.js 去掉运行时下载
install.sh:
- 移除系统自带 ttyd 包(避免与 clawd 托管的 ttyd 端口冲突)
- 安装阶段下载 ttyd 1.7.7 到 /etc/clawd/ttyd,自动检测 arch
- 下载失败时给出提示和手动下载地址

frpc.js:
- startTtyd() 不再尝试运行时下载,binary 不存在时报错提示重跑 install.sh
- pkill 改为杀所有 ttyd 进程(pkill -x ttyd),不限路径,
  避免系统自带 ttyd 占用 7681 端口导致 clawd 的 ttyd 启动失败

Made-with: Cursor
2026-04-04 18:16:07 +08:00
stswangzhiping 46dae37079 feat: 启动和连接时设置 hostname 为 claw-<claw_id>
- start(): 有 claw_id 时立即设置(重启恢复)
- _onConnected(): 每次连上 VPS 后设置(首次注册或重连确认)
- 用 exec 异步执行,不阻塞启动流程

Made-with: Cursor
2026-04-03 22:58:14 +08:00
stswangzhiping fb8a408f93 fix(led): VFD 管道用 O_NONBLOCK 防止事件循环阻塞
FIFO 写入改为 O_WRONLY | O_NONBLOCK:
- 无读端(vfdservice 关闭读端后)openSync 立即抛 ENXIO 而非永久阻塞
- showPin blink timer 每 500-1000ms 自动重试,vfdservice 恢复读后
  即可成功显示 PIN,彻底解决"长时间激活后解绑 PIN 不闪"问题

同时移除 66b94d8 加的 showTime keepalive:
- keepalive 用的也是阻塞 openSync,vfdservice 关闭读端时反而会
  在 setTimeout 回调里阻塞整个事件循环,比不加更危险

Made-with: Cursor
2026-04-03 19:01:14 +08:00
stswangzhiping 66b94d828f fix: 还原 inactive 路径 restartGateway + showTime keepalive
1. 还原 7737e08:removeProviderByName 重新调用 restartGateway(),
   inactive/active 状态变化均重启 gateway 使 openclaw.json 生效

2. led.js showTime() 加 30s keepalive 定时器:持续向 vfdservice
   管道写入,防止长时间无写入后管道"冷却",导致随后 showPin()
   调用 openSync(FIFO, 'w') 因无读端而阻塞、blink timer 无法触发

Made-with: Cursor
2026-04-03 18:40:08 +08:00
stswangzhiping 7737e08464 fix: inactive 路径不重启 gateway,修复 PIN 不闪问题
removeProviderByName 中移除 restartGateway() 调用。

原因:inactive 时 kill openclaw-gateway 会破坏 vfdservice
(gateway 的子进程或共享 VFD 管道的进程),导致后续 showPin
写管道失败或被 gateway 重启后的时钟命令覆盖,数码管无法显示
PIN 闪烁。

inactive 期间设备 frp 隧道已断开,无人访问 gateway,无需立即
重启。下次 active 时 applyFullProviderFromVps 会写完整 provider
config 并重启 gateway。

Made-with: Cursor
2026-04-03 18:20:09 +08:00
stswangzhiping c28bf53217 fix: WS 多次失败时统一显示 AP,移除 Err0 分支
WS 失败 ≥ 3 次无论是否有网络均显示 showAP,
不再区分"有网但 VPS 不可达"时显示 showErr0。

Made-with: Cursor
2026-04-03 16:06:34 +08:00
stswangzhiping f4efb13612 fix: restartGateway 改异步,修复 inactive 时 PIN 不闪问题
原来 removeProviderByName 内用 execSync 调 pkill,在 showPin 前
阻塞事件循环约 100ms+;若 vfdservice 是 gateway 子进程则管道无
读端,导致 showPin 写入失败或 blink setTimeout 无法触发。

改为 exec(异步):pkill 在后台执行,不阻塞事件循环,LED/VFD
操作(showPin blink)可正常调度。

Made-with: Cursor
2026-04-03 11:41:59 +08:00
stswangzhiping 7c9a6e913e fix: 确保 origin 更新后再重启 gateway
active+full provider 路径:
  addProviderSync → onDone(写 origin) → restartGateway 一次
之前顺序错误导致 gateway 用旧 origin 重启后再重启一次。

_updateOpenClawOrigin 只负责写盘,不再调 pkill。
移除 client.js 中已无用的 execSync 引入。

Made-with: Cursor
2026-04-03 10:53:05 +08:00
stswangzhiping 701251f19b fix: 写盘 openclaw.json 后自动重启 gateway
- openclaw-provider.js: 新增 restartGateway(),在 removeProviderByName
  和 applyFullProviderFromVps 写盘成功后均调用,确保 inactive/active
  两路都能触发重启
- client.js: _updateOpenClawOrigin 去掉 CLAWD_OPENCLAW_GATEWAY_PKILL
  env var 门控,origin 变更后默认重启

Made-with: Cursor
2026-04-03 10:50:29 +08:00
stswangzhiping 12aedaaf85 feat(net): late uplink poll + faster provision monitor (15s)
- client: while !_connectionStarted, poll every 3s for hasInternet or
  hasWiredInternetProbe (e.g. Ethernet after AP); start _proceedWithConnection
  once; clear poll on network-ready/stop. Avoids provision-level emit spam.
- provisioning: MONITOR_INTERVAL_MS 30s -> 15s for quicker WiFi/AP UI.

Made-with: Cursor
2026-04-02 12:40:41 +08:00
stswangzhiping fe62b9febe Revert "fix(provision): emit network-ready when AP mode gains internet (e.g. Ethernet)"
This reverts commit af03410528.
2026-04-02 12:07:40 +08:00
stswangzhiping af03410528 fix(provision): emit network-ready when AP mode gains internet (e.g. Ethernet)
Monitor previously only closed AP on external WiFi STA; late wired uplink
while in AP never fired network-ready, so WS stayed down and AP display
kept flashing. Poll hasInternet() in AP state and call _emitNetworkReady().

Made-with: Cursor
2026-04-02 11:44:05 +08:00
stswangzhiping 389b2b09ae fix(openclaw): seed gateway.controlUi when no claw.cutos.ai URL in config
If openclaw.json has no https://*.claw.cutos.ai string, set controlUi
allowedOrigins (loopback + newOrigin), allowInsecureAuth, and
dangerouslyDisableDeviceAuth so factory images need no manual edit.
Otherwise keep replaceOriginStrings behavior.

Made-with: Cursor
2026-04-01 17:42:32 +08:00
stswangzhiping 4cfdaa46e5 feat: apply VPS provider to OpenClaw on status_update (fetch models, merge config)
- Add openclaw-provider: fetch /v1/models, merge provider/auth, remove by name
- Wire client _applyStatus: inactive removes provider; active applies full provider then origin
- Single-flight _busy to ignore concurrent apply/remove; isFullProvider uses base-url key

Made-with: Cursor
2026-03-31 14:32:50 +08:00
stswangzhiping 5a56e0015c chore(openclaw): skip gateway pkill by default; opt-in CLAWD_OPENCLAW_GATEWAY_PKILL=1 2026-03-31 14:09:10 +08:00
stswangzhiping fcee9ca709 fix(led): blink AP on VFD like Conn/PIN for provisioning visibility 2026-03-29 13:49:48 +08:00
stswangzhiping 23afd24f4d feat(led): drive VFD digits via vfdservice pipe (TITLE/CLOCK), keep display API 2026-03-29 13:40:56 +08:00
stswangzhiping a6e2f7ab8f fix(client): default off BtMonitor unless CLAWD_ENABLE_BT (no env line needed) 2026-03-29 08:20:08 +08:00
stswangzhiping aa9561f946 chore(install): default CLAWD_DISABLE_BT=1 in new env file template 2026-03-29 08:18:34 +08:00
stswangzhiping b25bc58a3b fix(client): honor CLAWD_DISABLE_BT and skip BtMonitor without hci 2026-03-29 08:16:13 +08:00
stswangzhiping e3e9580e46 fix(network): async connectWifi so systemd watchdog can fire during nmcli wait 2026-03-29 08:14:24 +08:00
stswangzhiping 4c16483ee7 fix(network): robust AP->STA connect (nmcli argv, device show state, wifi iface for DNS) 2026-03-29 07:46:22 +08:00
stswangzhiping 012ad90335 fix(provision): treat WiFi join success by STA state, not internet ping 2026-03-29 07:10:43 +08:00
stswangzhiping 2ec02d71bb fix(client): start LAN carrier polling (led.lan was never started) 2026-03-28 22:53:11 +08:00
stswangzhiping f7c462220e fix(led): map LAN to play icon and WiFi status to wifi+eth pair 2026-03-28 22:39:26 +08:00
stswangzhiping ea502fc26a refactor(network): unify sysfs carrier reads and LAN vs wired iface logic 2026-03-28 22:33:29 +08:00
stswangzhiping 1910a2fb9f fix(led,provision): AP forces WiFi(play) off; LAN uses carrier+operstate
- Monitor: every tick in ap state led.off() so play never stays on with hotspot
- hasLanCableCarrier: _ifacePhysicalLinkUp (carrier=1 and operstate not down)
- When end0/eth0 exist but link down, return false (no fallback to hasWiredCarrier)
- LAN poll 500ms

Made-with: Cursor
2026-03-28 22:15:48 +08:00
stswangzhiping 9800e712e5 fix(network): LAN LED use end0/eth0 carrier only, decouple from WiFi
hasLanCableCarrier no longer locks first scanned iface (NM/WiFi could change
which iface had carrier). Prefer sysfs end0 then eth0 each poll; fallback
hasWiredCarrier only if neither exists.

Made-with: Cursor
2026-03-28 22:07:20 +08:00
stswangzhiping 23a1f8aad8 docs(install): CLAWD_ETH_IFACE optional with auto LAN iface cache
Made-with: Cursor
2026-03-28 21:53:44 +08:00
stswangzhiping a186857126 fix(network): auto-cache LAN iface for carrier when CLAWD_ETH_IFACE unset
First getWiredIfaceWithCarrier() result locks _lanMonitoredIface; subsequent
hasLanCableCarrier only reads that sysfs carrier so unplug reliably turns LAN off.
CLAWD_ETH_IFACE still overrides.

Made-with: Cursor
2026-03-28 21:53:21 +08:00
stswangzhiping 8f5a8ec896 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
2026-03-28 21:50:56 +08:00
stswangzhiping 347b19a0c9 feat(led): OpenVFD sysfs (wifi+eth, alarm, play/lan), skip BT without hci
- Write /sys/class/leds/openvfd led_on/led_off (CLAWD_OPENVFD_PATH)
- WiFi product LED: wifi+eth together; SETUP/APPS -> alarm off/on
- LanLed polls hasWiredCarrier -> play; export led.lan, start/stop from client
- BT monitor only if CLAWD_DISABLE_BT unset and hci* exists (RK3528)
- Display strings remain debug-only (数码管暂不驱动)
- install.sh env template: CLAWD_DISABLE_BT, CLAWD_OPENVFD_PATH comments

Made-with: Cursor
2026-03-28 21:35:38 +08:00
stswangzhiping abd123b3dd fix(client): remove AP net monitor WS terminate (scheme A)
AP mode no longer periodically terminates WebSocket when hasInternet and
hasWiredInternetProbe both fail; avoids false positives with hotspot + wired
uplink. Reconnect and offline detection rely on Pong, peer close, and TCP.

_connect() still defers new WS when AP and no uplink; close handler UI unchanged.

Made-with: Cursor
2026-03-28 17:18:36 +08:00
stswangzhiping 06d06fdd1e fix(systemd): use systemd-notify + NotifyAccess=all for watchdog
unix_dgram to NOTIFY_SOCKET failed on rk3528 (embedded Node), so WATCHDOG=1 never
reached systemd despite WATCHDOG_USEC fallback. Switch to exec systemd-notify with
NOTIFY_SOCKET in child env; unit sets NotifyAccess=all so cgroup may notify.

Users must reload unit (re-run install.sh or add NotifyAccess=all manually).

Made-with: Cursor
2026-03-28 14:54:56 +08:00
stswangzhiping fdc1e9fbd3 fix(systemd): pet watchdog when WATCHDOG_USEC missing; StartLimitInterval for old systemd
Embedded units may set WatchdogSec but omit WATCHDOG_USEC; SD_NOTIFY_INTERVAL was 0 so no
WATCHDOG=1 was sent and systemd killed the main process after ~60s.

Replace StartLimitIntervalSec with StartLimitInterval= for older systemd (journal warning).

Made-with: Cursor
2026-03-28 14:49:07 +08:00
stswangzhiping 04dd1017bb fix(network): wired ping probe, AP/WS and systemd notify hardening
- Add hasWiredInternetProbe and export; AP mode uses it with hasInternet
- systemd-env: strip NOTIFY_SOCKET from env early; client uses unix_dgram
- Strip NOTIFY_SOCKET from frpc/ttyd spawn env in watchdog and frpc
- WS: pong miss debounce; AP net monitor consecutive-fail debounce

Made-with: Cursor
2026-03-28 14:37:56 +08:00
stswangzhiping 402440aadc refactor(led): drop openvfd sysfs writes, log [vfd] at debug
- WiFi/BT/status/display: no fs/tee; preserve info-level state messages
- install: remove ExecStartPre openvfd init

Made-with: Cursor
2026-03-27 16:31:17 +08:00
stswangzhiping 6ad573e272 Revert "fix(openclaw): always set gateway.origin when updating claw subdomain"
This reverts commit 69ac075e8c.
2026-03-27 14:42:53 +08:00
stswangzhiping 69ac075e8c fix(openclaw): always set gateway.origin when updating claw subdomain
- Regex-only replace missed empty/new JSON without existing *.claw.cutos.ai URL
- Also replace wss://*.claw.cutos.ai in string fields

Made-with: Cursor
2026-03-27 14:42:05 +08:00
stswangzhiping 12366790d2 fix(network): auto-detect wired iface and ping via -I for hasInternet
- Scan sysfs for carrier when CLAWD_ETH_IFACE unset (end0/enp* etc.)
- Explicit CLAWD_ETH_IFACE still pins a single interface
- Ping fallback uses -I wired iface when default route fails (e.g. AP on wlan)
- Exclude can/docker/veth/wl* and similar from auto scan
- Clarify client log when waiting for WAN

Made-with: Cursor
2026-03-27 14:30:23 +08:00
stswangzhiping 88283ad6b6 chore(tools): box-install-from-tar runs bundled install.sh (no curl/CDN)
Made-with: Cursor
2026-03-27 14:02:34 +08:00
stswangzhiping 7823edc7b3 fix(install): skip git/tarball when package.json already present (offline BOX)
Made-with: Cursor
2026-03-27 13:59:54 +08:00
stswangzhiping 884b0dc50a feat(openclaw): persist config as ~/.openclaw/openclaw.json
- Read gateway token/port via JSON.parse (same structure as former YAML)
- Update claw.cutos.ai origin by replacing URLs in JSON string fields
- Export resolveOpenclawConfigFile() for frpc + client
- Drop js-yaml dependency
- install: ExecStartPre touches openvfd only if nodes exist (3528-friendly)
- Add tools/deploy-rsync.sh for syncing /opt/clawd over SSH

Made-with: Cursor
2026-03-27 13:49:23 +08:00
stswangzhiping 85026cdf47 docs: add repo paths and module overview table to README
Made-with: Cursor
2026-03-27 10:16:18 +08:00
stswangzhiping 837cb8865f feat: BtMonitor 监控 bluetoothctl 状态驱动 BT 指示灯
新增 lib/bt-monitor.js:
- 每 3 秒轮询 bluetoothctl show + hcitool con
- connected(ACL 连接存在)→ 常亮
- scanning/connecting(Discovering: yes)→ 闪烁
- 无 adapter / Powered: no / 静止 → 熄灭

client.js:启动时开启 BtMonitor,stop() 时清理
provisioning.js:移除所有 led.bt 调用,BT 灯统一由 BtMonitor 管理

Made-with: Cursor
2026-03-24 23:14:02 +08:00
stswangzhiping dcc20e2cad fix: BT 灯仅在搜索热点和连接热点时闪烁
等待 NM 自动重连已保存 WiFi 不属于 BLE 搜索/连接阶段,
该阶段 BT 灯保持熄灭,不再闪烁。

Made-with: Cursor
2026-03-24 23:00:07 +08:00
stswangzhiping 37e93c66eb feat: 添加蓝牙指示灯(b6)控制
led.js: 新增 BtLed 类,路径 /sys/devices/platform/openvfd/attr/b6
  - blink() AP 配网进行中
  - on()    配网成功 / WiFi 已连接
  - off()   蓝牙不工作 / 初始/停止状态

provisioning.js: 各配网状态同步驱动 BT 灯
  - AP 模式 / 等待自动重连 → 闪烁
  - WiFi 连接成功 → 常亮
  - stop() → 熄灭

Made-with: Cursor
2026-03-24 22:58:10 +08:00
stswangzhiping 935d5ba176 fix: 用 js-yaml 正确解析 config.yaml 获取 dashboard token
替换正则提取方式,使用 js-yaml 解析 YAML 文件,
通过 config.gateway.auth.token 和 config.gateway.port 读取字段。

Made-with: Cursor
2026-03-24 17:00:33 +08:00
stswangzhiping cdb2ddc688 fix: getDashboardInfo 改为读取 config.yaml
openclaw 配置文件路径从 openclaw.json 迁移到
config/config.yaml,用正则提取 token 和 port 字段。

Made-with: Cursor
2026-03-24 16:47:35 +08:00
stswangzhiping 7c03a59c57 refactor: 重构 OpenClaw config.yaml 更新逻辑
- _configureOpenClaw 改名为 _updateOpenClawOrigin(targetId)
- active 时传真实 claw_id,inactive 时传 '0000'
- 每次 _applyStatus(含 status_update)都调用,文件无变化则幂等跳过
- 有变化时 pkill -9 -x openclaw-gateway,不再依赖 openclaw CLI 或 systemctl --user
- 移除 _openClawConfigured 标志位

Made-with: Cursor
2026-03-24 16:22:05 +08:00
stswangzhiping 4a1a2de300 fix: only run configureOpenClaw once per clawId, not on every WS reconnect
Made-with: Cursor
2026-03-24 14:31:31 +08:00
stswangzhiping 029f7fe0a9 fix: edit openclaw config.yaml directly and restart as sts user
Made-with: Cursor
2026-03-24 14:07:22 +08:00
stswangzhiping 1a63e90055 fix: use full path to find openclaw binary for root service
Made-with: Cursor
2026-03-24 13:13:00 +08:00
stswangzhiping cefbab28b7 feat: configure openclaw allowedOrigins on activation
Made-with: Cursor
2026-03-24 11:38:58 +08:00
stswangzhiping ffa13b7c81 fix: captive portal 改用 IP 地址 10.42.0.1 替代域名
Made-with: Cursor
2026-03-22 08:04:20 +08:00
stswangzhiping 4716cc9820 fix: replace unstable disk serial with wired MAC for hardware fingerprint
Made-with: Cursor
2026-03-22 07:38:05 +08:00
stswangzhiping 86859a5e0d fix: 过滤AP热点IP,改用checkip.amazonaws.com获取外网IP,新增ipplus360地理位置
Made-with: Cursor
2026-03-21 09:20:00 +08:00
stswangzhiping 878f3592bf feat: connect 消息上报 local_ip 和 external_ip
Made-with: Cursor
2026-03-21 08:18:27 +08:00
stswangzhiping af5248f2a6 fix: emit network-ready immediately when wired internet available, setup AP async
Made-with: Cursor
2026-03-20 08:41:39 +08:00
stswangzhiping 108bea4ed7 fix: use fixed 5s retry on cert-not-yet-valid to avoid 70s exponential backoff before NTP sync
Made-with: Cursor
2026-03-20 08:34:53 +08:00
stswangzhiping d3bd5ca3e7 fix: replace network-online.target with NetworkManager.service to avoid 60s+ startup delay
Made-with: Cursor
2026-03-20 08:28:55 +08:00
stswangzhiping e94e2bb10c fix: add AP net monitor to detect cable unplug within 5s, reduce ping interval to 10s
Made-with: Cursor
2026-03-20 08:14:31 +08:00
stswangzhiping 5ba8b7bffa fix: fast-path hasInternet() via carrier check to avoid nmcli cache delay
Made-with: Cursor
2026-03-20 08:00:25 +08:00
stswangzhiping 08fa4eefaa feat: skip WS in AP+no-internet, poll every 5s until network available
Made-with: Cursor
2026-03-20 07:43:51 +08:00
stswangzhiping c13ed3ba6d fix(vfd): use isApMode() instead of hasInternet() to decide AP vs Err0
Made-with: Cursor
2026-03-19 23:45:16 +08:00
stswangzhiping 8f158eeeb2 fix: turn off LEDs on service start, suppress Err0 before first WS success
Made-with: Cursor
2026-03-19 23:27:42 +08:00
stswangzhiping 9b4287db1d feat(vfd): showConn blink on WS connecting, showErr0 on VPS unreachable
Made-with: Cursor
2026-03-19 23:17:08 +08:00
stswangzhiping 53b9804c72 feat(led): showErr(code) + WS fail>=3 shows ERRa or AP on VFD
Made-with: Cursor
2026-03-19 22:44:56 +08:00
stswangzhiping e36bec8660 refactor(led): startup all-off, AP shows VFD, WS close no VFD change
Made-with: Cursor
2026-03-19 22:08:47 +08:00
stswangzhiping d68d673cdc perf(heartbeat): 10s interval, collect metrics every 3rd beat (30s)
Made-with: Cursor
2026-03-19 09:58:48 +08:00
stswangzhiping 5824cf089a feat(ws): unified status_update handler, extract _applyStatus()
Made-with: Cursor
2026-03-19 09:43:29 +08:00
stswangzhiping 16f82d6ab8 feat(ws): handle activated message from server, switch to APPS+time
Made-with: Cursor
2026-03-19 09:24:10 +08:00
stswangzhiping fba9d401c2 feat(display): PIN 显示时加闪烁效果(亮1s灭0.5s)
Made-with: Cursor
2026-03-19 09:13:07 +08:00
stswangzhiping b4fa850445 feat(display): PIN 改为 4 位,showPinMiddle4 → showPin
Made-with: Cursor
2026-03-19 08:57:44 +08:00
stswangzhiping ce7f9f028e fix(display): 改用 #m2 模式显示 PIN 数字,修复 #m3 不支持数字导致的显示错误
Made-with: Cursor
2026-03-19 08:52:52 +08:00
stswangzhiping 33046948b9 fix(display): 用 printf 代替 echo,修复 VFD 写入失败及数字显示偏移问题
Made-with: Cursor
2026-03-19 08:37:00 +08:00
stswangzhiping e887f5b8e2 fix(display): 不在 ws.open 时 showTime,避免覆盖未激活时的 PIN 显示
Made-with: Cursor
2026-03-19 07:44:28 +08:00
stswangzhiping 57c0a1b6f8 feat(display): 未激活+连网时 VFD 显示 PIN 码中间4位
Made-with: Cursor
2026-03-19 07:37:57 +08:00
stswangzhiping cf2973946f fix(captive): 密码默认隐藏,眼睛图标初始为半透明
Made-with: Cursor
2026-03-18 21:54:40 +08:00
stswangzhiping 7d3477454c feat(captive): 密码框增加眼睛图标切换可见性
Made-with: Cursor
2026-03-18 21:35:28 +08:00
stswangzhiping 9e7dcada05 feat(captive): 将WiFi 网络改为请选择下列WiFi 网络
Made-with: Cursor
2026-03-18 21:26:58 +08:00
stswangzhiping 959a2b67f2 refactor(display): tie VFD display to WS connection state only
Made-with: Cursor
2026-03-18 21:17:36 +08:00
stswangzhiping a737101c2e fix(display): use execSync shell pipe instead of fs.writeFileSync to avoid EINVAL
Made-with: Cursor
2026-03-18 21:11:22 +08:00
stswangzhiping 9da4cd0aa1 feat: VFD display shows AP when disconnected, time when connected
Made-with: Cursor
2026-03-18 21:10:14 +08:00
stswangzhiping a0f767f267 fix(led): swap SETUP/APPS paths, WiFi LED off in AP mode
Made-with: Cursor
2026-03-18 20:56:49 +08:00
stswangzhiping 90bba5f348 feat: add SETUP/APPS status LEDs (b2/b1), toggle on activation
Made-with: Cursor
2026-03-18 20:25:54 +08:00
stswangzhiping 06b670d5ec docs: add update instructions using /opt/clawd
Made-with: Cursor
2026-03-18 20:09:44 +08:00
stswangzhiping b95e909d48 fix(led): use log.info for LED state, show write errors and hasInternet failures
Made-with: Cursor
2026-03-18 20:07:31 +08:00
stswangzhiping 875e69a454 feat: add WiFi LED indicator (openvfd b5)
Made-with: Cursor
2026-03-18 19:47:20 +08:00
stswangzhiping d66558c9de fix: read dashboard token from ~/.openclaw/openclaw.json instead of running openclaw dashboard command
Made-with: Cursor
2026-03-18 14:00:57 +08:00
stswangzhiping 5f5b976f5b fix: split su command into separate args for ttyd
Made-with: Cursor
2026-03-16 16:21:11 +08:00