I agree that using the “persistent” network object for the present use case 
could speed up things, see 
<https://pyownet.readthedocs.io/en/latest/protocol.html#persistent-vs-non-persistent-proxy-objects
 
<https://pyownet.readthedocs.io/en/latest/protocol.html#persistent-vs-non-persistent-proxy-objects>>

However the correct call to obtain a persistent object is

    owp = pyownet.protocol.proxy(persistent=True)

Stefano


PS

In the example code provided there is no need to close the connection, but the 
typical usage pattern is

        with owp:
                # loop reading sensors, persistent connection is open
        # do some work, persistent connection is closed

which ensures that the persistent connection is closed upon exit of the `with` 
block and does not remain open when the program is not querying owserver.

E.g.

def main():
    sen_lst = [
        "Solar_Pnl_1A",
        "Solar_Pnl_2A",
        "Solar_Pnl_1B",
        "Pool_Sol_X",
        "Pool_CH_X",
        "DHW_Mid_Top",
        "DHW_Mid_Btm",
        "DHW_Top",
        "Temp5",
        "Temp19",
        "Temp20",
        "Temp21",
        "Temp22",
        "Temp23",
        "Temp25",
        "Temp26",
        "Temp27",
        "Temp29",
        "Temp30",
    ]
    prop_lst = ["/type", "/power", "/latesttemp"]
    owp = pyownet.protocol.proxy(persistent=True)
    while True:
        start = time.time()
        with owp:
            # persistent socket is open!
            owp.write("/simultaneous/temperature", b"1")
            time.sleep(1)
            print("start of sensor_read.py")
            for p in prop_lst:
                print("%s  " % p, end="")
            print("")
            for sen in sen_lst:
                print("\n%s " % sen, end="")
                for prop in prop_lst:
                    try:
                        print(
                            "%s  " % (owp.read("/uncached/" + sen + 
prop).decode()), end=""
                        )
                    except:
                        print("failed! ", end="")
            endt = time.time() - start
            print("\nTime = %f" % endt)
        # out of with block persistent socket is closed
        sleep(30) # do some other work, and then start again


> On 6 Aug 2020, at 13:31, Martin Patzak <martin.pat...@gmx.de> wrote:
> 
> I read the CRC16 attribute from /statistics
> 
>     CRC16_error = op.read('/statistics/errors/CRC16_errors')
> 
> where op is the persistent(!)  pyownet object, created like this:
> 
>     from pyownet import protocol
> 
>     op = protocol.proxy(server,port=port)
> 
> On 06.08.20 11:23, Mick Sulley wrote:
>> OK I will log read times and see what that shows.
>> 
>> You say 'I also log if the error of the 1wire bus changes.' how do you do 
>> that?
>> 
>> No I don't really need to read that fast, this is just a test setup to get a 
>> better understanding so I can hopefully fine tune my main system.
>> 
>> There should not be anything else running.  I just tried running top at the 
>> same time, I monitored it at the point of the slow scan and didn't see 
>> anything else significant.
>> 
>> Mick
>> 
>> On 06/08/2020 09:06, Martin Patzak wrote:
>>> It looks like your timing has improved after all!
>>> 
>>> in your original Python-code you could time every read for each sensor.
>>> I have also powered sensors and a read is usually faster than 0.1 seconds.
>>> I log in a file if the read took longer than 0.3 seconds, which is almost 
>>> never the case.
>>> I also log in the file if the whole reading loop took longer than 3 
>>> seconds, which again is almost never the case.
>>> 
>>> I also log if the error of the 1wire bus changes.
>>> 
>>> I read 25 sensors every full and every half minute, so maybe you could 
>>> implement a delay as well and see if things get more consistent.
>>> Do you need to read so fast in a loop for you application?
>>> 
>>> What else is running on your machine? You could run top in parallel to your 
>>> python loop.
>>> 
>>> 
>> 
>> 
>> 
>> _______________________________________________
>> Owfs-developers mailing list
>> Owfs-developers@lists.sourceforge.net 
>> <mailto:Owfs-developers@lists.sourceforge.net>
>> https://lists.sourceforge.net/lists/listinfo/owfs-developers 
>> <https://lists.sourceforge.net/lists/listinfo/owfs-developers>
> 
> _______________________________________________
> Owfs-developers mailing list
> Owfs-developers@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/owfs-developers

_______________________________________________
Owfs-developers mailing list
Owfs-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/owfs-developers

Reply via email to