xinghevss 发表于 2023-6-13 10:30:19

【求助】怎么让流程在每天固定时间段只触发一次

写了个流程,想让小爱在每个工作日的上午6:30-8:00播报一次天气预报,如果下雨提示带伞之类的,并且推送消息到tg。
但是有个问题,现在会多次触发,想让这个流程只触发一次。
现有的思路是设置一个全局变量默认为false,如果执行完毕将全局变量设为true, 然后再加一个定时器在每天凌晨将这个变量还原为false,但是感觉这样很繁琐,有没有简单一点的实现方式




fung1006 发表于 2023-6-13 11:28:55

你现在想法已经很简单了
做吧

lqf1206 发表于 2023-6-13 11:40:24


Valentine 发表于 2023-6-13 13:27:54

本帖最后由 Valentine 于 2023-6-13 13:30 编辑

个人觉得加一个计数器的思路更简单,在传感器检测到有人时用计数器判断一下是否是当天的第一次检测到有人,如果是,就执行,反之则不执行。
当然计数器要设置一个每天清零的自动化。

a_dongde 发表于 2023-6-13 13:49:59

Valentine 发表于 2023-6-13 13:27
个人觉得加一个计数器的思路更简单,在传感器检测到有人时用计数器判断一下是否是当天的第一次检测到有人, ...

我目前是这样做的,先辅助里新建一个计数器,然后在自动化执行中每执行一次给计数器+1,然后再单独新建一个初始化计数器的自动化,每天晚上定时给计数器初始化一下,第二天循环。

xinghevss 发表于 2023-6-13 14:24:23

lqf1206 发表于 2023-6-13 11:40


多谢大佬,还不知道这个inject模块有这个功能

xinghevss 发表于 2023-6-13 14:26:00

Valentine 发表于 2023-6-13 13:27
个人觉得加一个计数器的思路更简单,在传感器检测到有人时用计数器判断一下是否是当天的第一次检测到有人, ...

谢谢大佬的思路

DDDear 发表于 2023-6-13 17:13:30

在判断是否为工作日后面加一个filter过滤相同信息就行,这样最简单

kunxin 发表于 2023-6-15 21:58:03

分享一下呗

he674963336 发表于 2023-6-16 14:08:03

node-red-contrib-counter
node-red-contrib-time-range-switch
添加上面节点
[
    {
      "id": "69046ac987cc03cf",
      "type": "switch",
      "z": "5734632741bfa5d8",
      "name": "",
      "property": "count",
      "propertyType": "msg",
      "rules": [
            {
                "t": "eq",
                "v": "1",
                "vt": "str"
            }
      ],
      "checkall": "true",
      "repair": false,
      "outputs": 1,
      "x": 590,
      "y": 420,
      "wires": [
            []
      ]
    },
    {
      "id": "24a23932863897ff",
      "type": "inject",
      "z": "5734632741bfa5d8",
      "name": "每日6点归零",
      "props": [
            {
                "p": "payload"
            },
            {
                "p": "reset",
                "v": "count",
                "vt": "str"
            }
      ],
      "repeat": "",
      "crontab": "00 06 * * *",
      "once": false,
      "onceDelay": 0.1,
      "topic": "",
      "payload": "",
      "payloadType": "date",
      "x": 260,
      "y": 500,
      "wires": [
            [
                "44d215ba8f100c8a"
            ]
      ]
    },
    {
      "id": "6a9fc8233d23172c",
      "type": "comment",
      "z": "5734632741bfa5d8",
      "name": "每天早上6:30-8:30自动开启窗帘执行一次",
      "info": "限定自动化的执行并于次日自动归零\n    用counter节点计数,人体感应每触发一次,\n    数字加1,接着在后面添加一个switch节点,\n    限制为数字1才允许通过,也就是每天的第一\n    次触发\n",
      "x": 200,
      "y": 360,
      "wires": []
    },
    {
      "id": "5e9ae710d18ea542",
      "type": "comment",
      "z": "5734632741bfa5d8",
      "name": "限定自动化的执行并于次日自动归零",
      "info": "限定自动化的执行并于次日自动归零\n    用counter节点计数,人体感应每触发一次,\n    数字加1,接着在后面添加一个switch节点,\n    限制为数字1才允许通过,也就是每天的第一\n    次触发\n",
      "x": 480,
      "y": 460,
      "wires": []
    },
    {
      "id": "44d215ba8f100c8a",
      "type": "counter",
      "z": "5734632741bfa5d8",
      "name": "",
      "init": "0",
      "step": "1",
      "lower": null,
      "upper": null,
      "mode": "increment",
      "outputs": 1,
      "x": 440,
      "y": 420,
      "wires": [
            [
                "69046ac987cc03cf"
            ]
      ]
    },
    {
      "id": "4e92bd136f9d86b3",
      "type": "time-range-switch",
      "z": "5734632741bfa5d8",
      "name": "",
      "lat": "114.2835",
      "lon": "30.6151",
      "startTime": "6:30",
      "endTime": "8:30",
      "startOffset": 0,
      "endOffset": 0,
      "x": 270,
      "y": 420,
      "wires": [
            [
                "44d215ba8f100c8a"
            ],
            []
      ]
    }
]
页: [1] 2
查看完整版本: 【求助】怎么让流程在每天固定时间段只触发一次