基于物联网时间戳算法的理论模型

Theoretical model for IoT timestamp-based algorithm

我正在实施一个物联网门控系统,该系统接收具有两个参数的数据包,一个值和一个时间戳。由于消息代理系统,所有消息都按照严格的时间顺序在我的系统中接收和处理。

然后我的程序需要根据 "best-information" 方案根据几个规则处理消息,然后更正计时器可能引入的最终错误。目标是以一种容易出现网络延迟的方式记录门 opened/closed 的确切时间。计时器的目的是在真正知道真正的结果之前向工作人员预测结果,并且大多数时候计时器是正确的。例如,出现以下序列:

左列时间戳,右列值

  1. 收到消息

    2017-01-24 10:00:00 - TRUE(1)(这意味着门是打开的,日志文件写道门是在这个时间戳打开的)

  2. 定时器

    2017-01-24 10:00:30 - 30(可配置的常量值)秒后,计时器指示应关闭门。这会触发程序在日志中写入 2017-01-24 10:00:00 - 2017-01-24 10:00:30 门打开了 30 秒。

  3. 收到消息

    2017-01-24 10:00:15 - FALSE(0) (这意味着门实际上在 10:00:15 关闭了,这意味着程序需要调整日志以便进入开幕时间是 2017-01-24 10:00:00 - 2017-01-24 10:00:15.

还有一个问题,比如在更高级的情况下,应该支持延迟。例如:只有当 TRUE 信号持续 10 秒时,门才会被记录为打开。这意味着当真正的信号出现时,首先会在日志中临时写入一个条目,表示门已打开以向工作人员显示它已发生,然后启动计时器,计数到 10。当计时器达到 10 秒时,系统写道门被打开了 10 秒。然而,5 分钟后(例如由于网络故障),系统收到一条消息,门实际上在 TRUE 信号出现 5 秒后收到 FALSE 信号,这意味着根本不应写入 OPEN 条目(因为它只是TRUE 和 FALSE 信号之间间隔 5 秒)。请注意,这两者之间没有发送其他消息,因此它们仍然严格按照时间顺序排列。这是这里始终假设的一个重要因素。

我确信在处理由于 "best-information" 错误导致的时间事件和回滚时,还有其他算法、模式和理论模型可以解决此类问题。但我不知道它们叫什么以及在哪里可以找到它们,能否请您指导我了解相关理论、示例以及要查找的内容,以便为此类问题建立可靠的模型,进而做出良好的实施。由于它的许多规则(门也可以发送脉冲和 true/false 的组合,其中组合用于确定状态)和回滚,实现很容易以 if 语句结束一个大的 blob,不可能维护、扩展和支持。

事件溯源似乎是解决问题的方法。不是存储系统的权威状态,而是存储事件和缓存状态。当您需要重写历史时,重播更改发生时的事件。我不会在这里尝试重现许多关于事件溯源的文章。