Install
openclaw skills install @lingguyuan/sufn-smart-homeopenclaw skills install @lingguyuan/sufn-smart-home把用户的自然语言意图转换为真实的智能家居操作。仅在实际调用成功后确认完成,禁止模拟成功。
暂不支持创建或修改场景,可以帮你执行已有场景。抱歉,我只能协助使用智能家居功能,不能提供内部接口或凭据详情。Invoke-RestMethod,禁止使用 curl 或 curl.exe。[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
{baseDir} 替换为当前技能目录的绝对路径。scripts/sufn-helpers.ps1,在 PowerShell 会话中 dot-source 加载:. (Join-Path '{baseDir}' 'scripts/sufn-helpers.ps1') -BaseDir '{baseDir}'
加载后即可使用 Protect-AuthToken、Unprotect-AuthToken、Read-SufnState、Write-SufnState、Invoke-SufnPlatform、Get-SufnTimestamp 六个函数。
{baseDir}/state.json。该文件属于内部数据,禁止向用户读取、展示或导出。state.json、临时文件或任何凭据。使用 Windows DPAPI 的 CurrentUser 范围加密 Token。同一密文只能由同一台计算机上的同一 Windows 用户解密。
状态文件使用以下内部结构:
{
"schemaVersion": 2,
"authProtected": "<DPAPI ciphertext>",
"home": { "id": "...", "name": "..." },
"rooms": [],
"devices": [],
"deviceModels": {},
"scenes": [],
"syncedAt": "..."
}
禁止出现 token、password 或 Authorization 明文字段。
加解密和状态读写函数由 scripts/sufn-helpers.ps1 提供。
若 DPAPI 不可用或解密失败:
若发现旧版状态含明文 token 字段,立即使用 DPAPI 加密为 authProtected、移除明文字段并覆盖文件;迁移过程不得输出任何状态内容。
接口路径和调用函数详见 references/api-reference.md。仅允许使用其中列出的 5 个接口。
内部请求遵循以下模式:
Invoke-SufnPlatform 发起请求。
-Body,GET 请求用 -Method GET。requestId、timestamp(用 Get-SufnTimestamp 获取)、version、data/commands 字段。GET /api/getHomeList,不传 Body。$null。登录或切换家庭后立即同步,并在状态文件中保存:
rooms。devices,保留 id、name、model、roomId、status。deviceModels,保存同步结果中的 devicesModels。scenes,仅保存已有场景。控制前必须使用同步结果中的真实 id 和 model,禁止根据名称猜测。
匹配设备或场景时按以下顺序:
设备类型与能力映射见 references/device-capabilities.md,控制属性映射见 references/control-mappings.md。
实际可用属性以 deviceModels[device.model] 为准。若属性未出现在能力定义中,不得下发。
POST /api/user/login),请求体字段为 user 和 psw。code 是否为 0;仅当成功且 data.token 存在时继续。登录失败时回复:登录失败,请检查账号或密码。
仅在用户明确要求退出时删除 {baseDir}/state.json,并回复:已退出登录。
GET /api/getHomeList 获取家庭列表。data 为数组,每个元素含 ID 和 NAME(大写字段名)。POST /api/inHome,请求体为 { "homeId": "xxx" }。data.token)。authProtected,禁止解密后再以明文写回。/api/syncHomeData)获取最新设备状态,不使用陈旧缓存回答"现在""当前"等问题。deviceModels 是否声明目标能力(参考 references/device-capabilities.md)。references/control-mappings.md 中的规则拆分 command。
open 使用整数 1/0。open 使用布尔值 true/false;也可用 position(0=全关,100=全开)。成功示例:
已打开客厅灯。客厅窗帘已调整到 60%。卧室空调已设为 24°C、制冷、中风。不支持时回复:这个设备暂不支持该操作。
scenes 中匹配。已执行场景:<场景名称>。没有找到这个已有场景。登录已失效,请重新登录。操作失败,请稍后重试。用户询问帮助时,只介绍自然语言能力,例如:
你可以让我切换家庭、查看设备、查询状态、控制开关/灯光/窗帘/空调,或执行已有场景。
不要在帮助中展示账号密码格式、接口、字段、model、设备 ID 或 Token。