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
stswangzhiping
9dc559a43a
fix: run ttyd shell as normal user (sts) instead of root
...
Made-with: Cursor
2026-03-16 16:15:13 +08:00
stswangzhiping
17d0711f67
ui: redesign WiFi list with signal bars and cleaner layout
...
- Replace <select> with scrollable list of clickable items
- Show signal strength as 4-bar icon instead of percentage text
- Remove security info from parentheses, show lock icon only
- Smaller font size for compact mobile display
Made-with: Cursor
2026-03-16 13:11:23 +08:00
stswangzhiping
c6f55c8c15
fix: pre-scan WiFi before entering AP mode
...
wlan0 cannot scan while in AP mode (hardware limitation).
Now scan nearby networks before starting hotspot and cache
the results for the captive portal page.
Made-with: Cursor
2026-03-16 13:04:00 +08:00