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