Re: [Owfs-developers] pyownet question

2019-11-10 Thread Mick Sulley

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 "", line 1, in 
  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 

… 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.00 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 
  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 > 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 "", line 1, in 
  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 

Re: [Owfs-developers] pyownet question

2019-11-10 Thread Stefano Miccoli via Owfs-developers
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 )'
StateRecv-Q   Send-Q Local Address:Port 
 Peer Address:Port   
LISTEN   0128  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 "", line 1, in 
  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 

… 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.00 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 
  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  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 "", line 1, in 
>   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
> 
> 
> 
>