目录
-
- 摘要
- [1. 引言 - 节点管理的意义](#1. 引言 - 节点管理的意义)
-
- [1.1 什么是节点?](#1.1 什么是节点?)
- [1.2 节点管理的核心价值](#1.2 节点管理的核心价值)
- [1.3 节点与 Gateway 网关的关系](#1.3 节点与 Gateway 网关的关系)
- [2. Nodes 工具详解](#2. Nodes 工具详解)
-
- [2.1 Nodes Action 类型概览](#2.1 Nodes Action 类型概览)
- [2.2 status - 查看节点状态](#2.2 status - 查看节点状态)
- [2.3 describe - 获取节点详情](#2.3 describe - 获取节点详情)
- [2.4 pairing - 配对管理](#2.4 pairing - 配对管理)
- [2.5 notify - 发送通知](#2.5 notify - 发送通知)
- [3. 设备配对与认证](#3. 设备配对与认证)
-
- [3.1 配对流程详解](#3.1 配对流程详解)
- [3.2 令牌管理](#3.2 令牌管理)
- [3.3 远程节点主机配置](#3.3 远程节点主机配置)
- [4. 远程控制功能](#4. 远程控制功能)
-
- [4.1 相机控制(camera)](#4.1 相机控制(camera))
- [4.2 屏幕录制(screen)](#4.2 屏幕录制(screen))
- [4.3 位置追踪(location)](#4.3 位置追踪(location))
- [4.4 Canvas 控制(画布功能)](#4.4 Canvas 控制(画布功能))
- [4.5 系统命令执行(system.run)](#4.5 系统命令执行(system.run))
- [5. 实战案例](#5. 实战案例)
-
- [5.1 案例一:远程拍照监控系统](#5.1 案例一:远程拍照监控系统)
- [5.2 案例二:多节点位置追踪](#5.2 案例二:多节点位置追踪)
- [5.3 案例三:自动化屏幕录制](#5.3 案例三:自动化屏幕录制)
- [6. 安全与隐私保护](#6. 安全与隐私保护)
-
- [6.1 多层安全架构](#6.1 多层安全架构)
- [6.2 权限管理最佳实践](#6.2 权限管理最佳实践)
- [6.3 数据保护措施](#6.3 数据保护措施)
- [7. 总结](#7. 总结)
- [8. 参考资料](#8. 参考资料)
摘要
OpenClaw 节点管理系统是一个创新的设备互联与远程控制框架,通过 WebSocket 协议实现 Gateway 网关与多种设备(iOS、Android、macOS、无头节点)的安全连接。本文深入探讨节点的配对认证机制、远程控制能力(相机捕获、屏幕录制、位置追踪)以及安全权限模型。通过详细的代码示例和实战案例,读者将掌握如何利用 OpenClaw 构建智能化的设备管理和远程监控解决方案。文章涵盖节点工具的核心功能、配对流程、命令调用方式以及隐私保护策略,为开发者提供全面的技术参考。🔐
1. 引言 - 节点管理的意义
1.1 什么是节点?
在 OpenClaw 生态系统中,**节点(Node)**是一个核心概念,它代表了一个可以与 Gateway 网关建立连接的配套设备。这些设备可以是 iOS 手机、Android 设备、macOS 电脑,甚至是无头服务器。节点通过 WebSocket 协议以 role: "node" 的身份连接到 Gateway 网关,并暴露丰富的命令接口供智能体调用。📱💻
节点的出现解决了现代智能系统中的一个关键问题:如何统一管理不同类型的设备,并实现跨平台的远程控制。传统的设备管理方案往往需要为每种设备类型开发独立的管理工具,而 OpenClaw 通过统一的节点协议,实现了"一次接入,处处可控"的愿景。
1.2 节点管理的核心价值
节点管理系统的设计理念体现了现代分布式系统的几个重要原则:
🌐 统一协议:无论设备类型如何,所有节点都通过相同的 WebSocket 协议与 Gateway 网关通信,大大降低了开发和维护成本。
🔒 安全优先:每个节点在连接时都需要经过设备配对认证,确保只有授权设备才能接入系统。同时,敏感操作(如相机访问、位置获取)都需要用户明确授权。
⚡ 实时响应:基于 WebSocket 的长连接机制,节点可以实时响应来自 Gateway 网关的命令,实现毫秒级的远程控制体验。
🔧 可扩展性 :节点可以暴露多种命令接口,如 canvas.*、camera.*、system.* 等,开发者可以根据需求灵活扩展功能。
1.3 节点与 Gateway 网关的关系
理解节点与 Gateway 网关的关系是掌握 OpenClaw 架构的关键。Gateway 网关是整个系统的核心枢纽,负责接收消息、运行模型、路由工具调用。而节点则是外围设备,它们不运行 Gateway 网关服务,而是作为命令执行端存在。
节点集群
Gateway 网关
WebSocket
WebSocket
WebSocket
WebSocket
消息接收
Telegram/WhatsApp/飞书
模型运行
AI 智能体
工具路由
命令分发
iOS 节点
camera/canvas
Android 节点
camera/sms
macOS 节点
system.run
无头节点
exec 主机
从上图可以看出,所有消息(来自 Telegram、WhatsApp、飞书等渠道)都首先到达 Gateway 网关,由智能体处理后决定是否需要调用节点命令。这种架构确保了系统的安全性和可管理性。
2. Nodes 工具详解
OpenClaw 提供了强大的 nodes 工具,用于管理和控制已配对的节点设备。本节将详细介绍该工具支持的各种操作类型及其使用方法。
2.1 Nodes Action 类型概览
nodes 工具支持多种操作类型(action),每种类型对应不同的功能需求:
| Action 类型 | 功能描述 | 使用场景 |
|---|---|---|
status |
列出所有已配对节点的状态 | 查看设备在线情况、检查连接状态 |
describe |
获取指定节点的详细信息 | 了解设备能力、权限状态 |
pending |
列出待批准的配对请求 | 管理新设备的接入申请 |
approve |
批准配对请求 | 允许新设备加入系统 |
reject |
拒绝配对请求 | 阻止未授权设备接入 |
notify |
向节点发送通知 | 远程提醒、消息推送 |
camera_snap |
拍照 | 远程监控、视觉感知 |
camera_clip |
录制视频 | 远程监控、事件记录 |
screen_record |
屏幕录制 | 远程协助、操作演示 |
location_get |
获取位置 | 设备追踪、地理感知 |
run |
执行系统命令 | 远程运维、自动化任务 |
invoke |
调用节点命令 | 低级 RPC 调用 |
2.2 status - 查看节点状态
status 操作是最常用的节点管理命令,用于获取所有已配对节点的当前状态信息。
bash
# 查看所有节点状态
openclaw nodes status
# 输出示例
# Node ID: node-abc123
# Name: iPhone 15 Pro
# Type: iOS
# Status: online
# Last seen: 2024-01-15T10:30:00Z
# Capabilities: camera, canvas, location
状态信息包括节点 ID、设备名称、类型、在线状态、最后活跃时间以及支持的能力列表。这些信息对于判断设备是否可用至关重要。
2.3 describe - 获取节点详情
当需要了解某个节点的详细配置和能力时,使用 describe 操作:
bash
# 获取节点详细信息
openclaw nodes describe --node "iPhone 15 Pro"
# 输出将包含:
# - 设备型号和系统版本
# - 已授权的权限列表
# - 支持的命令接口
# - 当前配置参数
describe 命令返回的信息比 status 更加详细,包括权限映射(permissions map),显示各项系统权限的授权状态,如屏幕录制、辅助功能、位置访问等。
2.4 pairing - 配对管理
设备配对是节点管理的核心环节。当新设备尝试连接到 Gateway 网关时,会创建一个配对请求,需要管理员审批。
管理员 Gateway 网关 新设备 管理员 Gateway 网关 新设备 alt [批准] [拒绝] 发起 WebSocket 连接 role: node 创建配对请求 生成 requestId 通知待审批请求 approve(requestId) 配对成功 分配节点令牌 正常通信 reject(requestId) 配对被拒绝 连接关闭
配对流程确保了只有经过授权的设备才能接入系统,这是 OpenClaw 安全模型的第一道防线。
2.5 notify - 发送通知
notify 操作允许向节点设备发送系统通知,支持多种优先级和投递方式:
bash
# 发送普通通知
openclaw nodes notify --node "Build Node" \
--title "构建完成" \
--body "项目已成功部署到生产环境"
# 发送时效性通知(iOS 支持)
openclaw nodes notify --node "iPhone 15 Pro" \
--title "紧急提醒" \
--body "检测到异常访问" \
--priority timeSensitive
# 使用覆盖层显示(Android 支持)
openclaw nodes notify --node "Pixel 8" \
--title "系统消息" \
--body "这是一条覆盖层通知" \
--delivery overlay
通知优先级选项包括:
passive:静默通知,不打扰用户active:正常通知,显示横幅timeSensitive:时效性通知,可突破专注模式
3. 设备配对与认证
3.1 配对流程详解
OpenClaw 的设备配对采用基于令牌的双向认证机制,确保通信双方的身份可信。整个流程分为设备注册、请求审批、令牌分配三个阶段。
第一阶段:设备注册
当节点设备首次启动并尝试连接 Gateway 网关时,它会发送一个包含设备身份信息的连接请求:
json
{
"role": "node",
"deviceInfo": {
"name": "iPhone 15 Pro",
"model": "iPhone15,3",
"osVersion": "17.2",
"platform": "ios"
},
"capabilities": ["camera", "canvas", "location"]
}
Gateway 网关收到请求后,会创建一个待审批的配对请求,并生成唯一的 requestId。
第二阶段:请求审批
管理员通过 CLI 或 UI 查看待审批请求并做出决定:
bash
# 列出待审批请求
openclaw nodes pending
# 输出示例:
# Request ID: req-xyz789
# Device: iPhone 15 Pro
# Platform: iOS 17.2
# Requested at: 2024-01-15T10:25:00Z
# Capabilities: camera, canvas, location
# 批准请求
openclaw nodes approve req-xyz789
# 或拒绝请求
openclaw nodes reject req-xyz789
第三阶段:令牌分配
批准后,Gateway 网关为节点生成一个唯一的认证令牌,节点将此令牌安全存储,用于后续连接的身份验证:
json
{
"nodeId": "node-abc123",
"token": "ntok_xxxxxxxxxxxxx",
"expiresAt": null
}
3.2 令牌管理
节点令牌是设备身份的核心凭证,需要妥善管理。令牌存储在节点的本地配置文件中:
bash
# 节点配置文件位置
~/.openclaw/node.json
# 配置文件内容示例
{
"nodeId": "node-abc123",
"token": "ntok_xxxxxxxxxxxxx",
"displayName": "iPhone 15 Pro",
"gatewayHost": "192.168.1.100",
"gatewayPort": 18789
}
令牌管理的最佳实践:
| 实践 | 说明 |
|---|---|
| 定期轮换 | 建议每 90 天重新配对一次 |
| 安全存储 | 不要将令牌提交到版本控制系统 |
| 及时撤销 | 设备丢失时立即撤销其访问权限 |
| 最小权限 | 只授予必要的命令执行权限 |
3.3 远程节点主机配置
对于需要远程执行命令的场景,OpenClaw 支持节点主机模式。这种模式下,Gateway 网关在一台机器上运行,而命令在另一台机器上执行。
bash
# 在节点机器上启动节点主机(前台模式)
openclaw node run --host 192.168.1.100 --port 18789 \
--display-name "Build Node"
# 通过 SSH 隧道访问远程 Gateway(当 Gateway 绑定 loopback 时)
# 终端 A:创建 SSH 隧道
ssh -N -L 18790:127.0.0.1:18789 user@gateway-host
# 终端 B:通过隧道连接
export OPENCLAW_GATEWAY_TOKEN="<gateway-token>"
openclaw node run --host 127.0.0.1 --port 18790 \
--display-name "Build Node"
节点主机模式特别适合以下场景:
- CI/CD 构建:将构建任务分发到专用的构建节点
- 远程运维:在服务器集群中执行管理命令
- 跨平台测试:在不同操作系统上运行测试脚本
4. 远程控制功能
OpenClaw 节点提供了丰富的远程控制能力,包括相机捕获、屏幕录制、位置追踪等。这些功能为智能体提供了感知物理世界的能力。
4.1 相机控制(camera)
相机控制是节点最强大的功能之一,支持拍照和视频录制两种模式。
拍照功能(camera.snap)
bash
# 列出可用相机
openclaw nodes camera list --node "iPhone 15 Pro"
# 拍摄照片(默认前后摄像头各一张)
openclaw nodes camera snap --node "iPhone 15 Pro"
# 只拍摄前置摄像头
openclaw nodes camera snap --node "iPhone 15 Pro" --facing front
# 指定分辨率和质量
openclaw nodes camera snap --node "iPhone 15 Pro" \
--max-width 1280 \
--quality 0.8
# 延迟拍摄(给相机预热时间)
openclaw nodes camera snap --node "iPhone 15 Pro" \
--delay-ms 2000
视频录制(camera.clip)
bash
# 录制 10 秒视频
openclaw nodes camera clip --node "iPhone 15 Pro" --duration 10s
# 录制 30 秒视频,不含音频
openclaw nodes camera clip --node "iPhone 15 Pro" \
--duration 30s \
--no-audio
# 使用指定摄像头
openclaw nodes camera clip --node "iPhone 15 Pro" \
--facing back \
--duration 15s
相机功能的参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
facing |
string | front | 摄像头方向:front/back |
maxWidth |
number | 1600 | 最大宽度(像素) |
quality |
number | 0.9 | JPEG 质量(0-1) |
durationMs |
number | 3000 | 视频时长(毫秒) |
includeAudio |
boolean | true | 是否包含音频 |
delayMs |
number | 0 | 拍照延迟(毫秒) |
4.2 屏幕录制(screen)
屏幕录制功能允许远程捕获节点设备的屏幕内容,非常适合远程协助和操作演示。
bash
# 录制 10 秒屏幕视频
openclaw nodes screen record --node "MacBook Pro" \
--duration 10s \
--fps 15
# 录制指定显示器(多屏环境)
openclaw nodes screen record --node "MacBook Pro" \
--duration 20s \
--fps 10 \
--screen 1
# 无音频录制
openclaw nodes screen record --node "MacBook Pro" \
--duration 15s \
--fps 12 \
--no-audio
屏幕录制的限制:
- 单次录制时长不超过 60 秒
- 需要节点应用处于前台
- Android 设备会显示系统屏幕捕获提示
- macOS 需要屏幕录制权限(TCC)
4.3 位置追踪(location)
位置功能允许获取节点设备的地理位置信息,支持多种精度模式。这是一个非常强大的功能,可以用于设备追踪、地理围栏、位置感知等多种应用场景。
基本使用方法
bash
# 获取设备位置
openclaw nodes location get --node "iPhone 15 Pro"
# 指定精度和超时
openclaw nodes location get --node "iPhone 15 Pro" \
--accuracy precise \
--max-age 15000 \
--location-timeout 10000
位置响应的数据结构:
json
{
"lat": 48.20849,
"lon": 16.37208,
"accuracyMeters": 12.5,
"altitudeMeters": 182.0,
"speedMps": 0.0,
"headingDeg": 270.0,
"timestamp": "2024-01-15T10:30:00.000Z",
"isPrecise": true,
"source": "gps"
}
位置精度选项详解
OpenClaw 支持三种位置精度模式,用户可以根据实际需求选择:
| 精度模式 | 精度范围 | 功耗影响 | 适用场景 |
|---|---|---|---|
coarse |
1-3 公里 | 低 | 城市级定位、天气查询 |
balanced |
100-500 米 | 中 | 附近搜索、出行规划 |
precise |
10-50 米 | 高 | 导航、精确定位 |
位置权限配置
位置功能默认关闭,需要在设备设置中启用。OpenClaw 提供了灵活的权限选择器:
- 关闭 :完全禁用位置共享,所有位置请求返回
LOCATION_DISABLED错误 - 使用时:仅当应用在前台时允许获取位置,适合大多数场景
- 始终:允许后台获取位置,需要系统授权后台位置权限
位置数据来源
位置数据可能来自多种来源,响应中的 source 字段指示数据来源:
gps:GPS 卫星定位,精度最高wifi:WiFi 基站定位,室内效果较好cell:蜂窝基站定位,精度较低但覆盖广unknown:未知来源
4.4 Canvas 控制(画布功能)
Canvas 是 OpenClaw 节点的另一个重要功能,它允许在节点设备上显示网页内容,并支持远程控制和交互。
Canvas 基本操作
bash
# 在节点上显示网页
openclaw nodes canvas present --node "iPhone 15 Pro" \
--target https://example.com
# 隐藏 Canvas
openclaw nodes canvas hide --node "iPhone 15 Pro"
# 导航到新页面
openclaw nodes canvas navigate https://github.com \
--node "iPhone 15 Pro"
# 执行 JavaScript
openclaw nodes canvas eval --node "iPhone 15 Pro" \
--js "document.title"
Canvas 截图功能
Canvas 支持截图功能,可以捕获当前显示的网页内容:
bash
# 获取 Canvas 截图
openclaw nodes canvas snapshot --node "iPhone 15 Pro" --format png
# 指定最大宽度和质量
openclaw nodes canvas snapshot --node "iPhone 15 Pro" \
--format jpg \
--max-width 1200 \
--quality 0.9
Canvas 定位选项
Canvas 支持精确的位置和尺寸控制:
bash
# 在指定位置显示 Canvas
openclaw nodes canvas present --node "iPhone 15 Pro" \
--target https://example.com \
--x 100 \
--y 200 \
--width 800 \
--height 600
4.5 系统命令执行(system.run)
对于 macOS 节点和无头节点主机,OpenClaw 支持远程执行系统命令,这为远程运维提供了强大能力。
基本命令执行
bash
# 在节点上执行命令
openclaw nodes run --node "Build Node" -- echo "Hello from remote"
# 指定工作目录
openclaw nodes run --node "Build Node" \
--cwd /home/user/project \
-- git status
# 设置环境变量
openclaw nodes run --node "Build Node" \
--env NODE_ENV=production \
--env DEBUG=false \
-- npm run build
命令超时和权限
bash
# 设置命令超时
openclaw nodes run --node "Build Node" \
--command-timeout 60000 \
-- ./long-running-script.sh
# 需要屏幕录制权限的命令
openclaw nodes run --node "MacBook Pro" \
--needs-screen-recording \
-- screencapture -x screenshot.png
命令执行响应
命令执行的结果以 JSON 格式返回,包含标准输出、标准错误和退出码:
json
{
"stdout": "Build completed successfully\n",
"stderr": "",
"exitCode": 0,
"duration": 45.2
}
5. 实战案例
5.1 案例一:远程拍照监控系统
本案例演示如何构建一个简单的远程拍照监控系统,定期获取节点设备的相机画面。
python
#!/usr/bin/env python3
"""
OpenClaw 远程拍照监控系统
功能:定期从指定节点拍照并保存到本地
"""
import subprocess
import json
import os
from datetime import datetime
from pathlib import Path
class RemoteCameraMonitor:
def __init__(self, node_name: str, output_dir: str = "./captures"):
"""
初始化监控器
Args:
node_name: 节点名称或 ID
output_dir: 照片保存目录
"""
self.node_name = node_name
self.output_dir = Path(output_dir)
self.output_dir.mkdir(parents=True, exist_ok=True)
def check_node_status(self) -> bool:
"""检查节点是否在线"""
try:
result = subprocess.run(
["openclaw", "nodes", "status", "--node", self.node_name],
capture_output=True,
text=True,
timeout=10
)
return "online" in result.stdout
except subprocess.TimeoutExpired:
print(f"⚠️ 检查节点状态超时")
return False
def capture_photo(self, facing: str = "back") -> str | None:
"""
拍摄照片并保存
Args:
facing: 摄像头方向 (front/back)
Returns:
保存的文件路径,失败返回 None
"""
if not self.check_node_status():
print(f"❌ 节点 {self.node_name} 不在线")
return None
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
output_file = self.output_dir / f"capture_{timestamp}.jpg"
try:
result = subprocess.run(
[
"openclaw", "nodes", "camera", "snap",
"--node", self.node_name,
"--facing", facing,
"--max-width", "1920",
"--quality", "0.9"
],
capture_output=True,
text=True,
timeout=30
)
# 解析输出中的 MEDIA 路径
for line in result.stdout.split("\n"):
if line.startswith("MEDIA:"):
media_path = line.replace("MEDIA:", "").strip()
# 复制到目标位置
os.rename(media_path, output_file)
print(f"✅ 照片已保存: {output_file}")
return str(output_file)
print(f"❌ 未找到媒体输出")
return None
except subprocess.TimeoutExpired:
print(f"⚠️ 拍照超时")
return None
except Exception as e:
print(f"❌ 拍照失败: {e}")
return None
# 使用示例
if __name__ == "__main__":
monitor = RemoteCameraMonitor("iPhone 15 Pro")
# 拍摄单张照片
monitor.capture_photo("back")
# 也可以设置定时任务
# import schedule
# schedule.every(5).minutes.do(monitor.capture_photo, "back")
代码解释:
上述代码实现了一个完整的远程拍照监控类 RemoteCameraMonitor。首先,__init__ 方法初始化监控器,接收节点名称和输出目录参数,并自动创建保存目录。check_node_status 方法通过调用 openclaw nodes status 命令检查目标节点是否在线,这是执行任何远程操作前的必要检查。核心方法 capture_photo 负责实际的拍照操作,它首先验证节点状态,然后调用 openclaw nodes camera snap 命令拍摄照片。命令输出中的 MEDIA: 前缀行包含临时文件路径,代码解析该路径并将文件移动到指定位置。整个流程包含完善的错误处理和超时机制,确保在网络不稳定时也能优雅降级。
5.2 案例二:多节点位置追踪
本案例展示如何同时追踪多个设备的位置,适用于家庭或团队管理场景。
python
#!/usr/bin/env python3
"""
OpenClaw 多节点位置追踪系统
功能:追踪多个设备的位置并生成报告
"""
import subprocess
import json
from datetime import datetime
from dataclasses import dataclass
from typing import Optional
@dataclass
class LocationData:
"""位置数据结构"""
lat: float
lon: float
accuracy: float
altitude: Optional[float]
speed: Optional[float]
timestamp: str
source: str
class LocationTracker:
def __init__(self, nodes: list[str]):
"""
初始化位置追踪器
Args:
nodes: 要追踪的节点名称列表
"""
self.nodes = nodes
self.locations: dict[str, LocationData] = {}
def fetch_location(self, node: str) -> LocationData | None:
"""
获取单个节点的位置
Args:
node: 节点名称
Returns:
LocationData 对象,失败返回 None
"""
try:
result = subprocess.run(
[
"openclaw", "nodes", "location", "get",
"--node", node,
"--accuracy", "balanced",
"--max-age", "30000"
],
capture_output=True,
text=True,
timeout=15
)
# 解析 JSON 输出
data = json.loads(result.stdout)
return LocationData(
lat=data.get("lat", 0),
lon=data.get("lon", 0),
accuracy=data.get("accuracyMeters", 0),
altitude=data.get("altitudeMeters"),
speed=data.get("speedMps"),
timestamp=data.get("timestamp", ""),
source=data.get("source", "unknown")
)
except subprocess.TimeoutExpired:
print(f"⚠️ {node}: 获取位置超时")
return None
except json.JSONDecodeError:
print(f"❌ {node}: 解析响应失败")
return None
except Exception as e:
print(f"❌ {node}: {e}")
return None
def track_all(self) -> dict[str, LocationData]:
"""追踪所有节点的位置"""
print(f"📍 开始追踪 {len(self.nodes)} 个设备...")
for node in self.nodes:
location = self.fetch_location(node)
if location:
self.locations[node] = location
print(f" ✅ {node}: ({location.lat:.4f}, {location.lon:.4f})")
else:
print(f" ❌ {node}: 位置获取失败")
return self.locations
def generate_report(self) -> str:
"""生成位置报告"""
report_lines = [
"# 📍 位置追踪报告",
f"生成时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}",
"",
"| 设备 | 纬度 | 经度 | 精度(m) | 更新时间 |",
"|------|------|------|---------|----------|"
]
for node, loc in self.locations.items():
report_lines.append(
f"| {node} | {loc.lat:.4f} | {loc.lon:.4f} | "
f"{loc.accuracy:.1f} | {loc.timestamp} |"
)
return "\n".join(report_lines)
# 使用示例
if __name__ == "__main__":
tracker = LocationTracker([
"iPhone 15 Pro",
"Pixel 8",
"MacBook Pro"
])
tracker.track_all()
print("\n" + tracker.generate_report())
代码解释:
这个案例实现了一个多节点位置追踪系统。首先定义了 LocationData 数据类,使用 Python 的 @dataclass 装饰器简化了数据结构的定义,包含纬度、经度、精度、海拔、速度等位置信息。LocationTracker 类是核心追踪器,fetch_location 方法调用 openclaw nodes location get 命令获取单个节点的位置,使用 --accuracy balanced 参数在精度和响应速度之间取得平衡。track_all 方法遍历所有配置的节点,逐一获取位置并存储结果。最后,generate_report 方法生成 Markdown 格式的位置报告,包含表格形式的设备位置汇总,方便在文档或消息中展示。整个实现采用了类型注解和数据类,代码清晰易维护。
5.3 案例三:自动化屏幕录制
本案例演示如何自动化执行屏幕录制任务,适用于远程协助和操作审计场景。
bash
#!/bin/bash
#
# OpenClaw 自动化屏幕录制脚本
# 功能:定期录制指定节点的屏幕并归档
#
set -e
# 配置参数
NODE_NAME="${1:-MacBook Pro}"
DURATION="${2:-30}"
OUTPUT_DIR="./recordings"
RETENTION_DAYS=7
# 创建输出目录
mkdir -p "$OUTPUT_DIR"
# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}
# 检查节点状态
check_node() {
local status
status=$(openclaw nodes status --node "$NODE_NAME" 2>/dev/null | grep -o "online\|offline" || echo "unknown")
echo "$status"
}
# 执行录制
record_screen() {
local timestamp
timestamp=$(date '+%Y%m%d_%H%M%S')
local output_file="${OUTPUT_DIR}/screen_${timestamp}.mp4"
log "🎬 开始录制: $NODE_NAME (时长: ${DURATION}s)"
if openclaw nodes screen record \
--node "$NODE_NAME" \
--duration "${DURATION}s" \
--fps 15 \
--no-audio \
> "$output_file" 2>&1; then
log "✅ 录制完成: $output_file"
return 0
else
log "❌ 录制失败"
rm -f "$output_file"
return 1
fi
}
# 清理过期文件
cleanup_old_files() {
log "🧹 清理 ${RETENTION_DAYS} 天前的录制文件..."
find "$OUTPUT_DIR" -name "*.mp4" -type f -mtime +$RETENTION_DAYS -delete
log "✅ 清理完成"
}
# 主流程
main() {
log "🚀 启动屏幕录制任务"
log "节点: $NODE_NAME"
log "时长: ${DURATION}秒"
# 检查节点状态
local node_status
node_status=$(check_node)
if [ "$node_status" != "online" ]; then
log "❌ 节点 $NODE_NAME 不在线 (状态: $node_status)"
exit 1
fi
log "✅ 节点在线,开始录制..."
# 执行录制
record_screen
# 清理旧文件
cleanup_old_files
log "🎉 任务完成"
}
# 执行主流程
main "$@"
代码解释:
这是一个完整的 Bash 脚本,实现了自动化屏幕录制功能。脚本首先定义了配置变量,包括节点名称、录制时长、输出目录和文件保留天数。check_node 函数通过调用 openclaw nodes status 检查目标节点是否在线,这是执行录制的前提条件。核心的 record_screen 函数生成带时间戳的文件名,调用 openclaw nodes screen record 命令执行录制,使用 --fps 15 参数控制帧率以平衡文件大小和流畅度,--no-audio 参数跳过音频捕获以减少隐私顾虑。cleanup_old_files 函数使用 find 命令删除超过保留天数的旧文件,实现自动化的存储管理。整个脚本采用 set -e 确保错误时立即退出,配合详细的日志输出,便于问题排查。
6. 安全与隐私保护
6.1 多层安全架构
OpenClaw 的节点管理系统采用多层安全架构,从网络传输到命令执行都有完善的安全机制。
第四层:隐私保护
系统权限控制
前台限制
数据最小化
第三层:操作审批
Exec 审批机制
允许列表
用户确认提示
第二层:认证授权
设备配对认证
令牌验证
角色权限控制
第一层:网络安全
TLS 加密传输
WebSocket 安全连接
第一层:网络安全
所有节点与 Gateway 网关之间的通信都通过 WebSocket 进行,支持 TLS 加密。当 Gateway 网关配置了 TLS 时,节点连接需要使用 wss:// 协议,并可选择验证服务器证书指纹:
bash
openclaw node run --host gateway.example.com --port 18789 \
--tls \
--tls-fingerprint "SHA256:xxxx"
第二层:认证授权
每个节点在首次连接时都需要经过配对流程,获得唯一的认证令牌。令牌存储在节点的本地配置中,每次连接都会验证。管理员可以随时撤销节点的访问权限。
第三层:操作审批
对于敏感操作(如执行系统命令),OpenClaw 提供了灵活的审批机制:
bash
# 添加命令到允许列表
openclaw approvals allowlist add --node "Build Node" "/usr/bin/git"
openclaw approvals allowlist add --node "Build Node" "/usr/bin/docker"
# 查看当前允许列表
openclaw approvals list --node "Build Node"
# 配置安全模式
# ask: 每次都需要用户确认
# allowlist: 只允许列表中的命令
# full: 允许所有命令(不推荐)
openclaw config set tools.exec.security allowlist
第四层:隐私保护
相机、位置等敏感功能都受系统权限控制,用户可以在设备设置中随时关闭。此外,大多数敏感操作要求节点应用处于前台,防止后台静默采集。
6.2 权限管理最佳实践
| 权限类型 | 默认状态 | 授权方式 | 安全建议 |
|---|---|---|---|
| 相机访问 | 开启(iOS/Android) 关闭(macOS) | 系统权限弹窗 | 仅在需要时启用 |
| 位置访问 | 关闭 | 设置中选择器 | 使用"使用时"模式 |
| 屏幕录制 | 关闭 | 系统权限设置 | 定期审计授权 |
| 系统命令 | 禁止 | Exec 审批列表 | 使用 allowlist 模式 |
| 短信发送 | 关闭 | 运行时权限 | 谨慎授权 |
6.3 数据保护措施
OpenClaw 在设计上遵循数据最小化原则:
- 临时文件:媒体文件(照片、视频)存储在系统临时目录,不会持久化
- 载荷限制:视频片段限制在 60 秒以内,照片会自动压缩到 5MB 以下
- 传输加密:所有数据通过 TLS 加密传输
- 本地处理:敏感数据在本地处理,不上传到云端
7. 总结
OpenClaw 节点管理系统是一个功能强大、安全可靠的设备互联与远程控制平台。通过本文的详细介绍,我们深入了解了节点的核心概念、配对认证机制、远程控制能力以及安全隐私保护措施。
核心价值回顾 🎯
OpenClaw 节点系统的最大价值在于其统一性和安全性。无论是 iOS、Android 还是 macOS 设备,都通过相同的 WebSocket 协议接入,使用相同的命令接口,大大降低了开发和维护的复杂度。同时,多层安全架构确保了只有授权设备才能接入,只有授权操作才能执行,有效保护了用户隐私。
技术亮点总结 ✨
从技术角度看,OpenClaw 节点系统有几个值得称道的设计:首先是设备配对机制 ,通过双向认证确保通信双方身份可信;其次是灵活的权限模型 ,支持从系统权限到命令审批的多层控制;第三是丰富的远程控制能力 ,相机、屏幕、位置等功能的组合为智能体提供了强大的感知能力;最后是完善的前台限制,防止敏感操作在后台静默执行。
应用场景展望 🚀
OpenClaw 节点系统可以应用于多种场景:家庭自动化中,可以通过节点控制智能设备、监控家庭安全;企业环境中,可以实现远程运维、设备管理;个人使用中,可以构建跨设备的智能助手。随着物联网和边缘计算的发展,节点管理的价值将进一步凸显。
未来发展方向 🔮
从文档中可以看出,OpenClaw 团队正在规划后台位置获取、推送触发等高级功能。这些功能将进一步扩展节点的应用场景,使其能够在更多情况下实现真正的"无人值守"操作。同时,我们也期待看到更多设备类型的支持,以及更细粒度的权限控制能力。
总之,OpenClaw 节点管理系统为开发者提供了一个强大而安全的设备管理平台。通过合理配置和使用,我们可以构建出各种智能化的远程控制和监控应用,为用户提供便捷、安全的跨设备体验。希望本文能够帮助读者深入理解 OpenClaw 节点系统的设计和使用,在实际项目中发挥其最大价值。
8. 参考资料
-
OpenClaw 官方文档 - 节点管理
https://docs.openclaw.ai/zh-CN/nodes/节点配对、能力、权限以及 canvas/camera/screen/system 的 CLI 辅助工具
-
OpenClaw 官方文档 - Gateway 网关协议
https://docs.openclaw.ai/zh-CN/gateway/protocolWebSocket 协议详情和节点通信规范
-
OpenClaw 官方文档 - Exec 批准
https://docs.openclaw.ai/zh-CN/tools/exec-approvals命令执行审批机制和允许列表配置