Strange situation: pyownet is talking to an owserver, all the handshakes go well, but owserver replies with error code 5.
A few handy commands to debug the problem. 1) identify the process with which pyownet is speaking from python: >>> from pyownet.protocol import proxy >>> owp = proxy(host="localhost") >>> print(owp) owserver at ('127.0.0.1', 4304) from the shell: $ sudo ss -lpt '( sport = :4304 )' State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:4304 0.0.0.0:* users:(("owserver",pid=318,fd=13)) 2) enable verbose logging from python: >>> owp.verbose = True >>> owp.dir('/nonexistent') ('127.0.0.1', 59204) -> ('127.0.0.1', 4304) -> _ToServerHeader(version=0, payload=13, type=9, flags=0, size=0, offset=0) .. b'/nonexistent\x00' <- _FromServerHeader(version=0, payload=0, ret=-1, flags=0, size=0, offset=0) ('127.0.0.1', 59204) xx ('127.0.0.1', 4304) ('127.0.0.1', 59204) XX ('127.0.0.1', 4304) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/tmp/pyownet/lib/python3.7/site-packages/pyownet/protocol.py", line 600, in dir raise OwnetError(-ret, self.errmess[-ret], path) pyownet.protocol.OwnetError: [Errno 1] Startup - command line parameters invalid: '/nonexistent' (here I demonstrate how my owserver replies with error code 1 to the attempt of listing a nonexistent node) from owserver from owserver: $ sudo systemctl stop owserver $ sudo /usr/bin/owserver —debug <your device here> … lots of debug messages … DEBUG: from_client.c:(65) FromClient payload=13 size=0 type=9 sg=0x0 offset=0 DEBUG: from_client.c:(73) FromClient (no servermessage) payload=13 size=0 type=9 controlflags=0x0 offset=0 DEBUG: ow_tcp_read.c:(63) attempt 13 bytes Time: 10.000000 seconds DEBUG: ow_tcp_read.c:(113) read: 13 - 0 = 13 DEBUG: handler.c:(152) START handler /nonexistent CALL: data.c:(103) DataHandler: parse path=/nonexistent DEBUG: ow_parseobject.c:(163) /nonexistent CALL: ow_parsename.c:(174) path=[/nonexistent] DEBUG: ow_regex.c:(53) Not found DEBUG: ow_regex.c:(53) Not found DEBUG: ow_cache.c:(1643) Lookup of nonexistent unsuccessful DEBUG: ow_cache.c:(1601) Finding nonexistent unsuccessful DEBUG: ow_remote_alias.c:(179) Remote alias for /nonexistent not found DEBUG: ow_parsename.c:(234) Set error to 27 <Path - bad path syntax> DEBUG: ow_parsename.c:(133) /nonexistent DEBUG: data.c:(106) DataHandler: OWQ_create failed cm.ret=-1 DEBUG: data.c:(207) DataHandler: cm.ret=-1 DEBUG: to_client.c:(75) payload=0 size=0, ret=-1, sg=0x0 offset=0 DEBUG: to_client.c:(84) No data DEBUG: data.c:(226) Finished with client request DEBUG: handler.c:(134) OWSERVER handler done DEBUG: ow_net_server.c:(259) Normal completion. Please note here that you can correlate the outgoing packet from pyownet, -> _ToServerHeader(version=0, payload=13, type=9, flags=0, size=0, offset=0) .. b'/nonexistent\x00’ with the incoming packet in owserver, and its subsequent preocessing: DEBUG: from_client.c:(65) FromClient payload=13 size=0 type=9 sg=0x0 offset=0 and the subsequent processing, DEBUG: handler.c:(152) START handler /nonexistent which end with error code -1 DEBUG: data.c:(207) DataHandler: cm.ret=-1 Similarly you can correlate the outgoing owserver packet to the incoming owserver packet DEBUG: to_client.c:(75) payload=0 size=0, ret=-1, sg=0x0 offset=0 DEBUG: to_client.c:(84) No data <- _FromServerHeader(version=0, payload=0, ret=-1, flags=0, size=0, offset=0) 3) try the obivous things: a mix of restart/reboot/voodo magic to see if the problem disappears ;-) By comparing the verbose pyownet log with the owserver one you should be able to pinpoint the problem. Good luck! Stefano > On 9 Nov 2019, at 15:44, Mick Sulley <m...@sulley.info> wrote: > > I am using pyownet on a few Raspberry Pi systems, but one has stopped > working. I have updated the OS, removed and reinstalled pyownet and it still > fails. This is what I see - > > pi@pi3ether:~ $ python3 > Python 3.7.3 (default, Apr 3 2019, 05:39:12) > [GCC 8.2.0] on linux > Type "help", "copyright", "credits" or "license" for more information. > >>> from pyownet.protocol import proxy > >>> owp = proxy(host='localhost') > >>> owp.dir() > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > File "/usr/local/lib/python3.7/dist-packages/pyownet/protocol.py", line > 600, in dir > raise OwnetError(-ret, self.errmess[-ret], path) > pyownet.protocol.OwnetError: [Errno 5] legacy - IO error: '/' > >>> > > If I run owdir from command line I get the sensor listing as expected. I > have tried with python 2.7 as well with the same result. Running the above > on another Pi works as expected. > > I could reinstall Raspbian and start again, but I would like to understand > what has gone wrong. Any ideas? > > Thanks > > Mick > > > > _______________________________________________ > 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