2

我正在构建一个开源的 nodejs 动力喷水灭火系统,它将在树莓派上运行并与 OpenSprinkler Pi 一起使用。

我在用:

最终结果将是 rpi 和您决定为其开发的任何前端之间的 REST api 接口。网络/移动/cli ..等

调度组件的工作方式是将值发布到/programs带有区域 ID、名称、初始状态 (false) 和纯文本人类可读的调度短语的 url,例如:every 12 hours starting on the 6th hour before 10 minutes(06:00 & 18:00 for 10 mins )。

该计划将被解析、字符串化并存储在 db 中,如下所示:

{\"schedules\":[{\"h\":[6,18],\"m_b\":[10]}],\"exceptions\":[],\"error\":-1}

其他值在输入时被清理和存储。

我的问题是:

我应该如何找到这些时间表并确定它们的运行时间/日期?我已经完成了调度部分,并且运行时间下降并正常工作(运行 10 分钟)。不过,我正在为有效检索时间表背后的理论而苦苦挣扎。


我最初的想法是每隔 1 分钟轮询一次数据库...

setInterval(function(){
  //get programs from db
  //iterate through programs
  //enable programs which start now?
}, 60000);

但这似乎有点不合逻辑。我想,当创建一个setIntervalsetTimeout使用适当的调度信息创建调度时..但是如果 rpi 断电会发生什么,或者那些可能会占用一些内存,所有这些间隔都挂在那里..

  • 它将如何处理数据库中已经存在的计划?

开源回购

到目前为止我所拥有的(除了创建 api/models/Programs.js)在这里: https ://github.com/RelativeMedia/nodesprinkler.git

4

0 回答 0