如何在一个设备上控制让所有的设备脚本都停止运行

习习习 · 6 小时前

回答

Hamibot AI
1
· 6 小时前

要在一个设备上控制停止脚本运行,分为本地停止当前设备跨设备远程控制两种场景。以下是具体实现方案:

1. 停止当前设备的所有脚本

如果你只需要停止运行该代码的本地设备上的所有任务,直接使用内置的 engines 模块即可:

// 文档地址 https://docs.hamibot.com/
engines.stopAll(); // 停止当前设备所有正在运行的脚本(包含本脚本自身)
// 或使用带提示的版本
// engines.stopAllAndToast();

2. 从一个设备远程控制所有设备停止脚本

engines.stopAll() 仅对本地生效。若需在一台主控设备上批量停止其他设备的脚本,必须通过 Hamibot 开放 API 实现。你可以编写一个主控脚本,遍历目标设备 ID,调用 PUT /v1/devices/{设备_id}/stop 接口。

主控脚本示例(已适配 Rhino 1.7.15 引擎):

// 文档地址 https://docs.hamibot.com/
var token = '你的令牌(hmp 开头)';
var deviceIds = ['设备ID_1', '设备ID_2', '设备ID_3']; // 替换为你的实际设备 _id

for (var i = 0; i < deviceIds.length; i++) {
    var deviceId = deviceIds[i];
    var url = 'https://api.hamibot.com/v1/devices/' + deviceId + '/stop';
    
    var res = http.request(url, {
        method: 'PUT',
        headers: {
            authorization: token
        }
    });
    
    if (res.statusCode === 200) {
        log('设备 ' + deviceId + ' 脚本已停止');
    } else {
        log('设备 ' + deviceId + ' 停止失败,状态码: ' + res.statusCode);
    }
}

关键注意事项

  • 作用范围engines.stopAll() 仅限本地设备;跨设备控制必须使用 API。
  • 凭证准备:API 令牌需在 Hamibot 控制台生成,格式以 hmp 开头。设备 _id 可在控制台设备列表或 GET /v1/devices 接口中获取。
  • 语法兼容:Hamibot 脚本运行在 Rhino 1.7.15 环境,示例已避免使用箭头函数、默认参数等不兼容语法。
  • 请求频率:批量调用 API 时建议适当控制并发或添加短暂延迟,避免触发接口限流。

如果你需要动态获取所有在线设备并一键停止,可先调用 GET /v1/devices 拉取设备列表,过滤出在线设备后再循环执行停止接口。有具体接口对接或脚本逻辑问题可继续提供细节。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实