From: Mick S. <mi...@su...> - 2019-11-11 00:02:52
|
Hi Stefano, Thanks for your reply, I have saved a copy of your notes for future reference. I fixed my problem, or rather problems, I had messed up the link to my alias file and also lost power to my adaptor, and the combination of the two had me struggling all day. All fixed and working again now :) Mick On 10/11/2019 18:46, Stefano Miccoli via Owfs-developers wrote: > 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 <mi...@su... >> <mailto:mi...@su...>> 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 >> Owf...@li... >> <mailto:Owf...@li...> >> https://lists.sourceforge.net/lists/listinfo/owfs-developers > > > > _______________________________________________ > Owfs-developers mailing list > Owf...@li... > https://lists.sourceforge.net/lists/listinfo/owfs-developers |