openHAB 中的 postUpdate 和 sendCommand 有什么区别

What is the difference between postUpdate and sendCommand in openHAB

在 openHAB 的规则文件中,我可以执行 postUpdatesendCommand。有什么区别?

我注意到,当我使用 postUpdate(zwaveLamp1, ON) 时,只改变了它的值,没有执行任何操作 - 灯保持黑暗。 sendCommand(zwaveLamp1, ON) 将执行绑定操作并打开灯并更新项目。

postUpdate 的用例是什么?它有什么用?

是的,从我的角度来看是正确的。 postUpdate 对项目 "internally" 起作用,sendCommand 对 peripheral/interface 起作用 'command'。 马可

你可以让一个switch item不绑定任何东西;假设您要创建一个切换项 EmailToggle。如果你把开关放在你的站点地图上,你就可以打开和关闭电子邮件;然后,在启动时,您可以对它进行 postUpdate 并将其从未初始化设置为 OFF 或 ON。然后可以使用切换来确定您是否希望根据规则发送电子邮件。

我见过这项工作,也见过它不起作用。似乎有问题。

命令是离散的,而状态似乎更短暂。也就是说,如果您 运行 由 "Item X received command" 触发的规则,您可以在规则中使用变量 "receivedCommand" 来执行某些操作,并且每个命令都会触发该规则。但是,您必须从 Item 中读取当前状态或使用 previousState 来获取前一个状态。

我发现对于经常更新其状态的项目,一次更改会触发 ,但是当您阅读该项目的状态时,它可能已经再次更改;它始终是返回的当前值。这正是它应该如何。但是,如果您将状态用作来自 MQTT 或某些外部源的伪传入队列,您将丢失消息。如果他们作为命令进来,你不会。

查看更新后的 openHab 文档 here:现在更清楚了: 一个table显示了操作物品的效果:

Command \ Rule Trigger    received update     received command    changed
--------------------------------------------------------------------------
postUpdate                  ⚡ rule fires        ❌               (depends)
sendCommand                   ❌              ⚡ rule fires       (depends)
Change through Binding      ⚡ rule fires      ⚡ rule fires       (depends)

如果你想更新界面或设备的任何元素的当前状态(例如温度),那么你可以使用 postUpdate() 并且如果你想执行任何动作事件(例如灯 on/off) 然后你可以使用 sendCommand().