怎么监听设备上线,然后自动执行特定脚本

ernypk0ddc · 11 小时前

回答

Hamibot AI
1
· 11 小时前

在 Hamibot 中,脚本运行在设备本地,因此无法在脚本内部直接监听“设备上线”事件(设备离线时脚本进程本身无法运行)。要实现“设备上线后自动执行特定脚本”,推荐通过以下标准方案实现:

方案一:使用控制台任务调度(官方推荐)

Hamibot 控制台的任务调度模块已内置设备状态判断逻辑。

  1. 登录 Hamibot 控制台,进入 任务调度 页面。
  2. 创建新任务,选择目标脚本与目标设备。
  3. 在执行策略中,选择 设备在线时执行 或设置固定周期(如每 5 分钟检查一次)。
  4. 保存后,当设备恢复在线,控制台会自动将任务下发至设备执行。
    此方案无需编写代码,由服务端统一调度,稳定性与成功率最高。

方案二:通过外部服务 + Hamibot API 触发

适合需要与自有系统、CI/CD 或第三方平台联动的场景。

  1. 外部服务定期调用 Hamibot 开放 API GET /api/v1/devices 查询设备状态。
  2. 当返回的 status 字段变为 online 时,调用 POST /api/v1/scripts/{scriptId}/run 触发目标脚本。
  3. 可在请求头中携带你的 API Token 进行鉴权。
    此方案完全由外部逻辑控制,支持复杂的触发条件(如结合时间、网络类型、电量等)。

方案三:脚本内轮询网络状态(本地替代方案)

如果必须在设备端实现,可编写一个常驻脚本监听网络连通性。示例代码如下(已适配 Rhino 1.7.15 引擎):

// 文档地址 https://docs.hamibot.com/
auto.waitFor();

// 保持脚本常驻运行
setInterval(function() {}, 1000);

// 轮询检查网络连通性
var checkTimer = setInterval(function() {
    try {
        var res = http.get("https://www.baidu.com", {timeout: 3000});
        if (res.statusCode == 200) {
            log("网络已恢复,准备执行目标脚本");
            engines.execScriptFile("target_script.js");
            clearInterval(checkTimer); // 执行后停止轮询
        }
    } catch(e) {
        // 网络未通或请求失败,继续等待下一轮检查
    }
}, 10000);

注意:此方案会增加设备耗电,且受 Android 后台管理策略影响较大,仅作为无服务端调度时的备选方案。

关键前置条件:确保设备稳定在线

无论采用哪种方案,都必须先解决 Android 系统杀后台的问题。请按以下顺序配置:

  1. 在系统设置中开启 Hamibot 的 自启动 权限。
  2. 将 Hamibot 的电池优化策略设置为 无限制(或“不优化”)。
  3. 在多任务界面将 Hamibot 应用 锁定(通常下拉或点击锁图标)。
  4. 部分机型(小米、华为、OPPO、vivo 等)需在“应用管理”中允许后台活动。若权限已开启但仍掉线,尝试关闭通知/后台权限后重新开启一次,以强制激活系统服务。

根据你的实际架构选择方案。若需控制台调度配置细节或 API 调用示例,可提供你的具体使用场景,我将为你补充对应步骤。

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