2017-08-11 5 views
0

OWFS私のケースでは、他のインターフェース、I2C(DS2484)経由で1線式デバイスを読み取ることができます。私は正常に1つの温度(DS18B20秒)を読むことができますhttp://localhost:4305/28.2F3915060000でowhttpdインターフェイスを介して一度に。owfs-すべてのセンサーを同時に読み取る

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

しかし、私は30のセンサーを持っています。このメソッドは一度に1つずつ読み込みます。それぞれ500-750msかかるので、プロセス全体は17秒かかります。

1本の線のすっきりしたことの1つは、すべてのセンサーに一度に並列に読み取りを要求できるということです。これは遅いステップです。 OWFSはこれを何らかの方法で読んでいますか?

答えて

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)) 

誰でも手動温度変換を必要としない解決策を持っている場合、私は見ることに興味があると思います。私はまだそれが可能だと思う、私はドキュメントを見つけることができません。

関連する問題