owfs-同时读取所有传感器

问题描述:

OWFS让我们通过其他接口I2C(DS2484)读取1线设备。我可以通过位于http://localhost:4305/28.2F3915060000的owhttpd界面一次成功读取一个温度(DS18B20 s)。我也可以使用Python界面阅读它们:owfs-同时读取所有传感器

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支持是否以某种方式读取它们?

我想出了一个非常不雅的解决方案,但它确实有效。 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)) 

我很感兴趣,那么任何人有不需要手动温度转换的解决方案。我仍然认为它是可能的,我只是找不到文档。