首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >节点红色:如何在每分钟给定的秒内注入火

节点红色:如何在每分钟给定的秒内注入火
EN

Stack Overflow用户
提问于 2017-05-22 09:31:07
回答 3查看 3.2K关注 0票数 0

是否可以使注入节点每5秒触发一次,但不取决于部署,而是在固定的时间网格中进行。

例如,在hh:mm:03部署时,间隔为5秒的注入节点将在hh:mm:08、hh:mm:13、hh:mm:18等处触发。

是否有一种方法来延迟它,以便在hh:mm:05、hh:mm:10、hh:mm:15准确地发送消息?

一种可能的解决方案是将重复间隔设置为1秒,并使用函数节点只传递适当的消息(即在多个5秒时间戳之后到达的第一条消息),但也许有更好的方法来存档。

(*)当然是在机器的范围内

编辑:根据请求描述流的实际操作。此定时器用于环境监测(空气质量、水质、气象学)的数据记录器中。为了使此数据集与旧系统兼容,我们必须应用相同的时间限制。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-24 22:43:33

编辑:请使用汉尼斯答案中引用的节点-红色-控制间隔-多点计时器节点。-它是基于我的代码,所以没有理由从这里复制粘贴代码,当你只需点击几下就可以安装npm软件包。我只是把代码留在这里供参考,或者作为你自己实验的起点。

最后,我创建了一个节点.稍后我可能会创建一个NPM包,现在这里是将它作为本地节点安装的源代码。

要安装它,请使用下面提供的内容创建两个文件interval-timer.jsinterval-timer.html,然后将它们复制到节点红色安装的nodes目录中;例如,在带有Raspbian的Raspberry Pi上,这些文件转到/root/.node-red/nodes/。重新启动Node-RED之后,新的interval timer节点将出现在节点调色板的输入部分。

区间-timer.js:

代码语言:javascript
运行
复制
module.exports = function(RED) {
    function IntervalTimerNode(config) {
        RED.nodes.createNode(this,config);
        var node = this;
        var interval = config.interval;
        var timer;

        var timeHandler = function() {
            node.send({payload: config.payload || Date.now()});
            timer = setTimeout(timeHandler, interval - (Date.now() %interval));  // setInterval apparently has a considerable drift, so we use setTimeout to stay within the time grid as much as possible
        };

        timer = setTimeout(timeHandler, interval - (Date.now() %interval));        

        node.on('close', function() {
            clearTimeout(timer);
        });
    }

    RED.nodes.registerType("interval-timer", IntervalTimerNode);
}

interval-timer.html:

代码语言:javascript
运行
复制
<script type="text/javascript">
    RED.nodes.registerType('interval-timer',{
        category: 'input',
        color: '#a6bbcf',
        defaults: {
            interval: {value:5000},
            payload: {value: ""},
            name: {value:""}
        },
        inputs:0,
        outputs:1,
        icon: "timer.png",
        label: function() {
            return this.name||"interval-timer";
        }
    });
</script>

<script type="text/x-red" data-template-name="interval-timer">
    <div class="form-row">
        <label for="node-input-interval"><i class="icon-repeat"></i> Interval [ms]</label>
        <input type="number" id="node-input-interval">
    </div>
    <div class="form-row">
        <label for="node-input-payload"><i class="icon-envelope"></i> Payload (defaults to current timestamp)</label>
        <input type="text" id="node-input-payload" placeholder="Payload">
    </div>
    <div class="form-row">
        <label for="node-input-name"><i class="icon-tag"></i> Name</label>
        <input type="text" id="node-input-name" placeholder="Name">
    </div>
</script>

<script type="text/x-red" data-help-name="interval-timer">
    <p>A interval timer that fires at multiples of the given interval, measured from Jan 1 1970</p>
</script>
票数 1
EN

Stack Overflow用户

发布于 2020-06-02 05:45:14

节点-红色-控制-间隔-倍数-计时器做你想做的。它在可配置的间隔内注入消息。这个间隔是固定在所述的时间网格上的,因此它总是在每分钟的第一秒启动。https://flows.nodered.org/node/node-red-contrib-interval-multiples-timer

票数 2
EN

Stack Overflow用户

发布于 2017-05-22 09:51:55

现在不行。

注入节点使用掩护下的cron调度引擎作为“时间间隔”模式,但cron只有极小的级别粒度。

1秒的注射速率和过滤器可能是唯一的选择。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44109445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档