我正在构建一个开源的 nodejs 动力喷水灭火系统,它将在树莓派上运行并与 OpenSprinkler Pi 一起使用。
我在用:
帆sjs 0.9.3
laterjs - 用于日程解释和数学
- 我不久前在 bunkats repo 上创建了一个问题,要求他向我解释这一点.. https://github.com/bunkat/later/issues/19
最终结果将是 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);
但这似乎有点不合逻辑。我想,当创建一个setInterval
或setTimeout
使用适当的调度信息创建调度时..但是如果 rpi 断电会发生什么,或者那些可能会占用一些内存,所有这些间隔都挂在那里..
- 它将如何处理数据库中已经存在的计划?
开源回购
到目前为止我所拥有的(除了创建 api/models/Programs.js)在这里: https ://github.com/RelativeMedia/nodesprinkler.git