1

这是一个奇怪的问题,因为通常您可以获得日志信息,更不用说 Openhab 的内部结构已经完成,但我只提取了 OpenHab Z-wave Bundle 和所有必需的库,以运行模拟多传感器Aeon Labs MultiSensor Model:DSB05-ZWUS

我正在使用的控制器是一个AEOTEC Z-Stick S2,我正在通过在本地机器上使用 Maven 设置的 OSGI 系统启动 OpenHab 包。我已经测试了一个二进制开关来关闭和打开灯,通过发送00或FF的OFF或ON消息非常简单,但是对于多级传感器,您必须向它发送消息以检索信息.

我似乎找不到工作流程,因为没有关于如何获取所有传感器读数的 GUI 示例。我深入研究了代码,据我了解,多级传感器具有包含数字和相应传感器类型的枚举类型。

我能够 getMessage(sensorType) 并返回给我类似这样的信息,例如:SendData (0x13), type = Request (0x00), playload = 0D 02 31 04 01。我怀疑播放负载是用于确定传感器读数的信息,但我找不到任何资源来解码它。

但是,我能够找到一个 Converter 类:ZWaveMultiLevelSensorConverter.java它有一个名为的方法,该方法public void handleEvent(ZWaveCommandClassValueEvent event, Item item, Map<String,String> arguments)对温度读数进行了一次转换,但我不确定参数中会包含什么。

所以我的具体问题是为每种传感器类型(例如:温度)提供读数的具体方法是什么,如果可能的话,代码的工作流程是什么?

资源:https ://github.com/openhab/openhab/tree/master/bundles/binding/org.openhab.binding.zwave

4

1 回答 1

1

配置

首先,您需要配置您的设备以发送您想要的信息。添加“Habmin”(HABmin)作为插件来配置传感器。要设置的关键事项:

  1. 插入电池后唤醒 10 分钟 - 打开此功能很有帮助
  2. 启用运动传感器 - 如果您想要运动检测,请打开
  3. 准时 - 当检测到运动时,设备将发送“开”通知。经过一定的秒数(此设置),它将发送“关闭”通知(参见下面的#7)。
  4. 第 1 组报告:将此设置为 225(十进制),即 11100001。位中的 1 表示发送该读数。Bit 0 是电池电量,5 是温度,6 是相对湿度,7 是亮度。
  5. 第 1 组间隔:发送报告的频率。
  6. 确保您为 Zstick 控制器的第 1 组到节点 1 设置了关联。
  7. 命令选项 - 我将其设置为“基本”,并添加另一个设备(开/关灯控制器)作为组 1 的关联。当检测到运动时,基本报告会导致灯控制器打开并且当运动周期到期时,它会发送另一个基本报告以关闭。这发生在没有在后台运行任何软件的设备中。您的 ZStick 还会获得触发事件通知的基本报告(见下文)。

轮询

由于该设备由电池供电,因此您无法随时轮询它的读数。它将按照您在配置中指定的时间间隔向第 1 组(您的 ZStick)发送带有传感器读数的报告。否则,它会休眠。但是,如果运动检测开启,它会立即响应运动。

编码

OpenHAB 使用 OpenZWave 库(请参阅Z-Wave 绑定)。一切都通过一个 Manager 类进行。基本上,您侦听诸如添加或删除节点或更新值之类的事件。下载 OpenZWave 控制面板(OpenZWave 控制面板)并查看“ozwcp.cpp”以了解您需要做什么。我已经用 C++ 完成了所有工作——我不确定 Java。

当多传感器发送带有读数的报告时,您会收到Notification::Type_ValueChanged。例如:

// this is the node number that triggered the event
uint8 const nid = notification->GetNodeId();

// this is the internal value that identifies what was changed
ValueID const vid = notification->GetValueID();

// this is the English version of what was changed
string vLabel = Manager::Get()->GetValueLabel(vid);

vLabel 将是“温度”、“相对湿度”、“亮度”、“电池电量”或“传感器”,用于运动周期的开/关。

检测到运动时的基本报告会触发Notification::Type_NodeEvent

于 2015-03-24T07:36:59.780 回答