回答
脚本执行与定时运行指南
Hamibot 支持通过本地 engines 模块执行脚本并配置定时任务,也支持通过 HTTP API 远程触发脚本运行。以下是具体使用方法。
1. 本地脚本执行与定时 (engines 模块)
使用 engines 模块可以在当前脚本环境中启动新的脚本线程,并通过配置项实现延迟、循环和间隔运行。
核心函数
engines.execScript(name, code[, config]): 执行字符串代码。engines.execScriptFile(path[, config]): 执行脚本文件。
定时配置项 (config)
delay: 延迟执行的毫秒数。interval: 循环运行时两次运行之间的时间间隔(毫秒)。loopTimes: 循环运行次数。默认为 1,0 表示无限循环。
2. 代码示例
以下代码兼容 Hamibot 脚本环境(Rhino 引擎),请在脚本开头保留文档地址注释。
示例 1:循环运行字符串代码
每隔 3 秒运行一次,共运行 10 次。
// 文档地址 https://docs.hamibot.com/
engines.execScript('hello world', "toast('hello world');", {
loopTimes: 10,
interval: 3000
});
示例 2:运行脚本文件并设置延迟
延迟 5 秒后开始运行,每隔 10 秒循环一次,无限循环。
// 文档地址 https://docs.hamibot.com/
engines.execScriptFile('./myScript.js', {
delay: 5000,
interval: 10000,
loopTimes: 0
});
示例 3:传递变量执行函数
通过封装函数传递参数到新脚本环境。
// 文档地址 https://docs.hamibot.com/
function exec(action, args) {
args = args || {};
engines.execScript(action.name, action.name + "(" + JSON.stringify(args) + ");\n" + action.toString());
}
function add(args) {
toast(args.a + args.b);
}
// 在新的脚本环境中执行 1 + 2
exec(add, {a: 1, b: 2});
3. 远程 API 触发
如果你需要通过外部系统触发脚本运行,可以使用 Hamibot HTTP API。
运行脚本
发送 POST 请求到 /v1/scripts/脚本_id/run。
// 文档地址 https://docs.hamibot.com/
var res = http.request('https://api.hamibot.com/v1/scripts/脚本_id/run', {
method: 'POST',
contentType: 'application/json',
headers: {
authorization: '你的令牌(hmp 开头)',
},
body: JSON.stringify({
devices: [{ _id: '设备 ID', name: '设备名称' }],
}),
});
log(res.body.json());
停止脚本
发送 DELETE 请求到 /v1/scripts/脚本_id/run 可停止正在运行的任务。
4. 注意事项
- 变量隔离:
engines.execScript启动的新脚本环境与主脚本变量不共享,需通过参数传递。 - 脚本停止:
execScript和execScriptFile返回ScriptExecution对象,可调用getEngine()发送事件或管理脚本生命周期。 - 兼容性:编写脚本时避免使用箭头函数和默认参数值,确保兼容 Rhino 1.7.15 引擎。
- 路径问题:使用
execScriptFile时,确保路径正确,可通过getPath()查看模块寻找路径。
如需更多技术细节,参考官方文档:https://docs.hamibot.com/
ℹ️ 本回答由 AI 生成,内容仅供参考