【问题标题】:owfs- read all sensors simultaneouslyowfs-同时读取所有传感器
【发布时间】:2017-08-11 20:21:30
【问题描述】:

OWFS 让我们通过其他接口读取 1-wire 设备,在我的例子中是 I2C (DS2484)。我可以通过http://localhost:4305/28.2F3915060000 的owhttpd 接口一次成功读取一个温度(DS18B20s)。我也可以使用 python 接口阅读它们:

import pyownet
ow = pyownet.protocol.proxy(host='localhost', port=4304)
for ts in ow.dir():
    print(ow.read(ts + 'temperature12'))

但是,我有 30 个传感器。此方法一次读取一个。每个需要 500-750ms,所以整个过程可能需要 17s。

1 线的一个巧妙之处在于,您可以请求所有传感器一次并行读取,这是一个缓慢的步骤,然后让它们按顺序报告,这非常快。 OWFS 是否支持以某种方式读取它们?

【问题讨论】:

    标签: 1wire


    【解决方案1】:

    我想出了一个非常不雅的解决方案,但它确实有效。 This old discussion board message 建议使用 OWFS 的 simultaneous/temperature 伪文件是正确的开始。该消息没有解决之后要做什么,似乎所有温度功能都需要新的温度读数。但您无需请求重新读取即可读取暂存器。

    这是我开始工作的代码:

    import pyownet
    from time import sleep
    
    
    ow = pyownet.protocol.proxy(host='localhost', port=4304)
    ow.write('simultaneous/temperature', data=b'1')    # begin conversions
    sleep(0.75)                                        # need to wait for conversion
    for ts in ow.dir():
        sp = ow.read(ts + 'scratchpad')
        b = sp[:2]                                     # first two bytes are temp
        if b[1] <= 0x01:
            t = ((b[1] << 8) + b[0]) * 0.0625          # positive temps
        else:
            t = 4096. - ((b[1] << 8) + b[0]) * 0.0625  # negative temps
        addr = ow.read(ts + 'address')
        print((addr, sp, t))
    

    我很想看看是否有人有不需要手动温度转换的解决方案。我仍然认为它可能,我只是找不到文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 2020-07-17
      相关资源
      最近更新 更多