我试图找出如何最好地存储(和建模)自动化系统的调度组件。我需要存储执行任务的时间表(灯、泵等)。我还没有试图管理时间表执行时的状态。目前,我对如何存储和让用户使用计划创建很感兴趣。
我还没有决定使用什么来存储数据(RDBMS、MongoDB、Cassandra等)。我想我更喜欢RDBMS,因为很多其他的数据关系型的,我想利用连接、事务,并且对数据弹性有信心。我知道RDBMS并不是镇上唯一一款能提供这些功能的游戏,但我的大部分经验都是使用SQL和最近的一个MongoDB项目。也就是说,我发现很难用表格和关系来描述模型。到目前为止,我所拥有的东西如下。
什么是最好的存储方法,其次,任何关于一个可行的模型的提示都是值得赞赏的。
一些需要
动作循环
执行令
交易有很大的好处
示例计划

1) [step1] [action] room 1 lights on
2) [step2] [loop] 5x
    2.1 [step2.1] [action] tv on  (ignoring duration of steps)
    2.2 [step2.2] [action] tv off
3) [step3] [action] pool pump on

最佳答案

在任何相当复杂的自动化系统中,我想你会发现你真的需要a state machinea way to store state
存储状态相当容易;存储状态机并执行它并不那么容易。一种方法是用代码定义状态机,让它计算下一次需要执行的时间,然后在数据库中为下一次执行时间放置一条记录。然后,您的主循环简单地从数据库中按顺序提取事件,等待它有一个要执行的事件,加载适当的状态机并执行它。在执行期间,状态机可以更改任何变量(包括外部设备开/关状态)的状态,并且可以在事件列表中重新调度自身以执行一次或多次。
我链接了几篇描述我的自动化系统工作方式的博文。我的需求比简单的计时循环复杂得多;它们涉及条件逻辑,基于以前发生过的事情的历史的逻辑等等,但我怀疑迟早你会想超越简单的循环。

关于sql - RDBMS或NoSQL用于带有循环和有序操作的复杂计划数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25188689/

10-10 16:34
查看更多