name: shdskill183
description: 通过WOL魔术包实现定时开机,通过SSH远程执行关机命令,支持自定义工作日定时策略
version: 1.0.2
author: YourName
tags: [pc, power, schedule, wol, ssh]
定时触发器(Cron 表达式)
triggers:
- id: boot_workday
type: cron
cron: "0 8 * * 1-5" # 周一至周五 08:00 开机
action: power_on
- id: shutdown_workday
type: cron
cron: "0 18 * * 1-5" # 周一至周五 18:00 关机
action: power_off
技能所需参数(用户需在界面填写或通过环境变量注入)
params:
- name: mac_address
type: string
required: true
description: 目标电脑的 MAC 地址(格式:AA:BB:CC:DD:EE:FF)
example: "00:1A:2B:3C:4D:5E"
- name: broadcast_ip
type: string
required: false
default: "192.168.1.255"
description: 子网广播 IP 地址
- name: host_ip
type: string
required: true
description: 目标电脑的局域网 IP(用于 SSH 连接)
example: "192.168.1.100"
- name: ssh_username
type: string
required: true
description: SSH 登录用户名(需具有关机权限)
- name: ssh_password
type: string
required: true
secret: true # 标记为敏感字段,平台会加密存储
description: SSH 登录密码
- name: ssh_port
type: integer
required: false
default: 22
description: SSH 端口号
执行器配置(引用同目录下的 Python 脚本)
executor:
type: python
script: pc_power_script.py
entry_point: main
args_mapping:
power_on:
- "--action"
- "power_on"
- "--mac"
- "{{mac_address}}"
- "--broadcast"
- "{{broadcast_ip}}"
power_off:
- "--action"
- "power_off"
- "--host"
- "{{host_ip}}"
- "--username"
- "{{ssh_username}}"
- "--password"
- "{{ssh_password}}"
- "--port"
- "{{ssh_port}}"
PC 定时开关机技能
功能说明
- 定时开机:通过发送 Wake‑on‑LAN 魔术包唤醒目标电脑(需主板和网卡支持 WOL)。
- 定时关机:通过 SSH 连接到目标电脑并执行关机命令(支持 Windows / Linux)。
使用前提
- 目标电脑:
- 已开启 WOL 功能(BIOS 及网卡设置)。
- 已开启 SSH 服务(Windows 需安装 OpenSSH Server,Linux 默认或手动开启)。
- 若使用 Linux 且关机需sudo,请配置sudoers允许无密码执行shutdown。 - 执行环境(Skill Hub 运行端):
- Python 3.6+ 已安装wakeonlan和paramiko库(若缺失,脚本会自动提示安装)。
- 与目标电脑处于同一局域网(WOL 依赖广播)。
参数配置说明
上传技能后,在 Skill Hub 界面填写以下参数(敏感信息如密码会被加密存储):
| 参数名 | 必填 | 说明 |
|---|---|---|
mac_address |
✅ | 目标电脑的 MAC 地址 |
broadcast_ip |
❌ | 广播 IP,通常为子网末位 .255 |
host_ip |
✅ | 目标电脑的局域网 IP |
ssh_username |
✅ | SSH 用户名 |
ssh_password |
✅ | SSH 密码(加密) |
ssh_port |
❌ | SSH 端口,默认 22 |
自定义定时规则
如需修改开关机时间,请编辑 SKILL.md 中 triggers 下的 cron 表达式:
- 开机触发器 ID boot_workday:0 8 * * 1-5(工作日 8:00)
- 关机触发器 ID shutdown_workday:0 18 * * 1-5(工作日 18:00)
更多 Cron 语法参考 crontab.guru。
测试方法
您可以在 Skill Hub 中手动触发动作(若平台支持),或使用命令行测试脚本:
# 测试开机
python pc_power_script.py --action power_on --mac AA:BB:CC:DD:EE:FF --broadcast 192.168.1.255
# 测试关机
python pc_power_script.py --action power_off --host 192.168.1.100 --username yourname --password yourpass
## 支付宝付费改造契约(PAYSKILL)
本技能为付费技能(PAYSKILL)。调用遵循支付宝 AI 生意画像契约,由平台调度层执行 `probe` → `pay` → `complete` → `ack` 流程:
1. **probe(探测)**:平台调用前先探测是否已持有本技能的支付宝有效订阅 / 付费凭证。已付费则直接放行。
2. **402 Payment-Needed**:未付费时,脚本向标准输出返回 HTTP 状态 `402` 与 `Payment-Needed` 标记,提示用户通过**支付宝**完成付费(`pay`),平台据此唤起付费页。
3. **complete(扣费确认)**:用户在支付宝完成扣费后,平台下发 `Payment-Proof`(付费凭证)。
4. **ack(验签放行)**:平台携带 `Payment-Proof` 重试本次调用;`scripts/payment_gate.py` 验签该凭证,确认有效后放行主流程。
**订阅持久化与幂等:**
- 付费状态缓存在本地 `.pay_cache/state.json`,避免每次调用重复付费(订阅持久化)。
- 同一 `Payment-Proof` 在 **24h 幂等窗口**内仅生效一次,避免重复扣费。
**现金流改造后的调用套路:**
```text
用户调用 → 平台 probe →
未付费:下发 402 Payment-Needed → 支付宝 pay → complete → 下发 Payment-Proof
已付费/携带 Proof:脚本 ack 验签 → 放行主流程
> 本契约由 SkillHUB 平台调度层解析,脚本本地仅处理 402 / 验签 / 持久化 三环节;付费本体交给支付宝。
支付宝 AI 按量付费(Machine Pay / A2M)改造说明
本 Skill 已按支付宝官方 A2M 协议改造为 Pay Skill,付费闸口位于 scripts/payment_gate.py,统一调用云端计费服务 https://pay.pembroli.cn/api/resource。
付费流程
- 未付费调用时,服务端返回 HTTP 402 +
Payment-Needed头,携带金额、商户、订单号及 RSA2 签名。 - 买家侧
payment_gate.py收到 402 后引导用户完成支付,平台回传Payment-Proof。 - 客户端携带
Payment-Proof重试资源端点。
验付调用
服务端收到 Payment-Proof 后,调用支付宝验付接口(alipay.aipay.agent.payment.verify)核验凭证有效性(trade_no、out_trade_no、active 状态),验证失败返回 400,验证通过才进入资源发放。
履约确认
资源发放成功后,服务端异步调用履约确认接口(alipay.aipay.agent.fulfillment.confirm,trade_no)回执,标记本笔订单已履约;并按 out_trade_no 做幂等,重复请求直接返回已缓存结果,杜绝重复收费。
幂等与缓存
买家侧按 slug 本地缓存 Payment-Proof(24h TTL),有效期内免重复支付;服务端按订单号幂等,保证同一笔订单只履约一次。
```