对于OpenHab Zwave Bundle,MultiLevelSensor的底层代码在哪里显示其读数?

时间:2015-02-02 20:23:56

标签: java sensor openhab z-wave

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

我使用的控制器是AEOTEC Z-Stick S2,我在本地计算机上通过与Maven一起设置的OSGI系统启动OpenHab捆绑包。我已经测试了一个二进制开关来关闭和打开灯,通过发送OFF或ON的消息(00或FF)相当简单,但是对于多级传感器,你必须将它发送到检索信息。

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

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

然而,我能够找到一个转换器类: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

1 个答案:

答案 0 :(得分:1)

配置

首先,您需要配置设备以发送所需信息。添加&#34; Habmin&#34; (HABmin)作为配置传感器的插件。要设置的关键事项:

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

    由于设备是电池供电的,因此您无需随时轮询它以获取读数。它将按照您在配置中指定的时间间隔向组1(您的ZStick)发送报告,其中包含传感器读数。否则,它会睡觉。但是,如果启用了运动检测,它将立即响应运动。

    编码

    OpenHAB使用OpenZWave库(参见Z-Wave Binding)。所有内容都通过一个Manager类汇集。基本上,您可以监听添加或删除节点或更新值等事件。下载OpenZWave控制面板(OpenZWave Control Panel)并查看&#34; ozwcp.cpp&#34;看你需要做什么。我用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将是&#34;温度&#34;,&#34; relative_humidity&#34;,&#34; Luminance&#34;,&#34; battery_level&#34;或&#34;传感器&#34;运动期开/关。

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