I've now had chance to do some more investigation and research since my
last posting and found the following. The reason that saving files in
Web2py causes RTS to be asserted and makes my application work is that my
file 'control.py', which contains all my serial functions, includes the
lines:
import serial
ser=serial.Serial('/dev/ttyUSB0', 57600, timeout=1, xonxoff=0, rtscts=0)
If I remove/comment out the line 'ser=serial.Serial... ' then the file save
has no effect. Presumably Wb2py must be executing this line somehow as part
of it's parsing process, and saving my other file 'utilities.py' has the
same effect because it contains 'import * from control.py'.
I have also been playing with the Pyserial functions ser.setRTS() and
ser.rts, which should force the state of RTS. I have been running these
from Python scripts in my user account and found that if reboot the
Pi, save one of the files in Web2py to force RTS low, then execute ser.rts
or ser.setRTS using my scripts, I can set RTS high or low and that state
persists. However, if I reboot the Pi and run my script *without* saving
the files in Web2py then run my scripts it only cause RTS to pulse low
momentarily, presumably while the script is running. I've tried including a
similar script within the Web2py 'modules' area, I've tried including the
set.rts commands within my serial functions, I've tried a separate function
just to include that command but nothing has done anything other than pulse
RTS until the script/function ends. I haven't tried running a routine once
at startup yet, but I'm not sure how this will be different from running
scripts 'by hand', except as far as I am aware I cannot run scripts as
the 'www-data' user as there is no login/password for that account, and I
have a strange feeling that there must be some sort of ownership issue
here. I have written/hacked scripts to run at startup to start the Web2py
Scheduler and GPIOSever but this is all a bit close to the limits of my
knowledge and ability!
In summary, I am further forward in the sense that I understand why, if not
how, Web2py file saves make my application work, although not why RTS gets
set permanently low by this mechanism and not when the serial port is
opened at any other time, and more information on what is happening here
would be useful. I also know that there is a mechanism for changing the
state of RTS, which it must be possible to do somehow, but have no real
idea how to do it. I also now believe that keeping the port permanently
open is not necessary, provided RTS can be forced low.
So, any clues as to how I might be able to set RTS at startup will be
gratefully received!
Richard
Richard
On Friday, November 25, 2016 at 11:10:26 PM UTC, Dave S wrote:
>
>
> On Friday, November 25, 2016 at 4:50:34 AM UTC-8, Richard Brown wrote:
>>
>> An update to this - I have done some more investigation and discovered
>> that in the 'Not Working' scenario the RTS output is mostly high but goes
>> low whilst the port is open, and in the 'Working' scenario the RTS output
>> has somehow been forced low and so stays low when the port is opened.
>> The Dongle gets reset by a high-to-low transition of RTS, so no falling
>> edge, no Reset and everything works. For reference my Dongle uses an FTDI
>> device (FT230X) and hence the FTDI driver supplied with the latest Raspbian
>> (Jessie) release.
>>
>> The question now, therefore, is how Web2py forces RTS low - either by the
>> saving of a file or when I access the index page of my Site, and How I can
>> replicate this in the Scheduler code! Using 'touch' to update the file does
>> not work, it has to be saved from within Web2py.
>>
>> Richard
>>
>
> I can't imagine how saving the file causes RTS to go low. Web2py should
> not have any reason to do anything to the serial port on its own, and
> probably doesn't even know the serial port exists (it's only concerned with
> the console). (I haven't done any serial port handling under Ubuntu, nor on
> the RaspberryPi, so I can't tell you about any special tricks such ports
> need.)
>
> You may want to investigate having a separate program that gets started on
> system startup, runs forever, and holds the serial port open all the time.
> It can check for a file existing, write the current value to the file, and
> snooze again. Your scheduled task would the create the file, wait briefly,
> and then read the file to get the current value.
>
> I do know someone with a RaspberryPi, and he's a bit of hacker, but it
> will be next week before I see him again.
>
> /dps
>
>
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.