You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在规则引擎中用节点实现电池电量衰减与充电模拟?

使用Rule Node实现电池模拟(生成10组数据)

结论:完全可以通过Rule Node实现

你遇到的setInterval is not defined报错,是因为规则引擎的Script Node是单次执行环境,不支持浏览器/Node.js中的定时循环函数。但我们可以通过状态持久化+Generator Node触发的方式,实现电池状态的连续更新,生成符合要求的10组数据。

实现思路

  1. 用Generator Node按1分钟间隔触发Script Node执行
  2. 通过metadata存储电池的当前状态(电量、充放电状态、已生成数据计数)
  3. 每次执行时根据当前状态计算新电量,生成数据直到满10组后停止

完整Script Node代码

// 初始化状态:首次执行时设置初始参数
if (!metadata.batteryState) {
    metadata.batteryState = {
        level: 100,
        isCharging: false,
        dataCount: 0
    };
}

const state = metadata.batteryState;

// 生成10组数据后终止流程
if (state.dataCount >= 10) {
    return null;
}

// 计算新电量
if (!state.isCharging) {
    // 放电阶段:每分钟衰减10%
    state.level -= 10;
    // 电量降至10%时切换为充电状态
    if (state.level <= 10) {
        state.isCharging = true;
    }
} else {
    // 充电阶段:直接充至100%,然后切回放电
    state.level = 100;
    state.isCharging = false;
}

// 确保电量在合理区间
state.level = Math.max(10, Math.min(100, state.level));

// 更新数据计数
state.dataCount += 1;

// 构造输出消息
const msg = { batterylevel: state.level };
const msgType = "POST_TELEMETRY_REQUEST";

// 保存状态到metadata,供下次执行使用
metadata.batteryState = state;

return { msg: msg, metadata: metadata, msgType: msgType };

配套Generator Node配置

  1. 在规则链中添加Generator Node,置于Script Node之前
  2. 设置触发间隔为60000毫秒(1分钟)
  3. 可设置触发次数为10次,或依赖Script Node内部计数自动终止

代码说明

  • 依赖metadata持久化状态,确保每次执行能读取上一轮的电池状态
  • 严格遵循需求:放电每分钟减10%,到10%时充电至100%
  • 内部计数dataCount精准控制生成10组数据后停止
  • 完全适配规则引擎Script Node的单次执行特性,规避了定时函数的限制

内容的提问来源于stack exchange,提问作者Andrew Antony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:12:23