jps Posted November 7, 2017 Share Posted November 7, 2017 Hi. I have made a system with O Pi Lite and Armbian to automate an aquarium from where to control the light, the bubbles and with a webcam I can see the system through the web, everything automated from Cron. From a web page I can turn on and off the lights and bubbles from web buttons. Everything is fine. The problem arises when I want to put some phisical buttons for 3 things: turn off the system, change the state of light and bubbles. I have used a code in Python and the PYA20 library. This is the code. It works very well, but when I start it with the system, the program stop working soon and the buttons stop to work. #!/usr/bin/env python from pyA20.gpio import gpio from pyA20.gpio import port import subprocess import time import os # PIN 29 - IN Light (luz) onoff = port.PA7 # PIN 7 - IN Bubbles (burbujas) luzboton = port.PA6 # PIN 8 - IN Shutdown burbujasboton = port.PA13 # OUT Pins luzvivo = port.PA8 burbujasvivo = port.PA9 gpio.init() #Button ON-OFF gpio.setcfg(onoff, gpio.INPUT) gpio.pullup(onoff, gpio.PULLUP) #Button light gpio.setcfg(luzboton, gpio.INPUT) gpio.pullup(luzboton, gpio.PULLUP) #Button bubbles gpio.setcfg(burbujasboton, gpio.INPUT) gpio.pullup(burbujasboton, gpio.PULLUP) # OUT gpio.setcfg(luzvivo, gpio.OUTPUT) gpio.setcfg(burbujasvivo, gpio.OUTPUT) while True: # PROCESS ON-OFF need 5 seconds to avoid mistaken shutdowns if gpio.input(onoff) == 0: #start counting pressed time print ("pulsado") time.sleep(5) if gpio.input(onoff) == 0 : os.system("shutdown now -h") # PROCESS LIGHT if gpio.input(luzboton) == 0: print ("pulsado luz") estadoluz = gpio.input(luzvivo) gpio.output(luzvivo, not estadoluz) time.sleep(1) # PROCESS bubbles if gpio.input(burbujasboton) == 0: print ("pulsado bubbles") estadoburbujas = gpio.input(burbujasvivo) gpio.output(burbujasvivo, not estadoburbujas) # To avoid bounce time.sleep(1) If i check the procces, i can see it, but i can also see that consumes a lot of CPU: ps aux | grep botones root 652 95.1 0.6 8552 3412 ? Rs 10:53 2:36 python /etc/init.d/botones.py start What i am doing wrong? Thank you in advance. Link to comment Share on other sites More sharing options...
martinayotte Posted November 7, 2017 Share Posted November 7, 2017 You need to add a "time.sleep(0.1)" in your "while" loop ... Link to comment Share on other sites More sharing options...
jps Posted November 7, 2017 Author Share Posted November 7, 2017 Well, now the consume of CPU lower to 0,1%... thank you very much. BUT... still dying. The file is in /etc/init.d/ and have +x permission. The file starts but after a while dies.... The Python file is called "botones.py". In syslog: Nov 7 16:31:03 localhost systemd[1]: botones.py.service start operation timed out. Terminating. Nov 7 16:31:03 localhost rsyslogd-2007: action 'action 17' suspended, next retry is Tue Nov 7 16:31:33 2017 [try http://www.rsyslog.com/e/2007 ] Nov 7 16:31:03 localhost systemd[1]: Failed to start (null). Nov 7 16:31:03 localhost systemd[1]: Unit botones.py.service entered failed state. If i run from the monitor, never dies.... Link to comment Share on other sites More sharing options...
zador.blood.stained Posted November 7, 2017 Share Posted November 7, 2017 Scripts in /etc/init.d should double fork, for launching long running processes like this start-stop-daemon, rc.local or systemd "simple" service type should be used. Link to comment Share on other sites More sharing options...
jps Posted November 7, 2017 Author Share Posted November 7, 2017 I can not make it work from rc.local... i tried to launch with: nohup python /home/orangepi/scripts/botones.py & and with and without sudo but nothing never runs. I tried too to run from /etc/init.d/.... What am i lossing? Link to comment Share on other sites More sharing options...
martinayotte Posted November 7, 2017 Share Posted November 7, 2017 If it is running fine at the command line, I don't see why it is not running in /etc/rc.local ... try adding " > /tmp/botones.log 2>&1" before the ampersand, maybe this log will provide you hints ! Link to comment Share on other sites More sharing options...
jps Posted November 7, 2017 Author Share Posted November 7, 2017 With: nohup python /home/orangepi/scripts/botones.py > /tmp/botones.log 2>&1 in rc.local, nothing in /tmp folder..... And the script does not run at boot. Link to comment Share on other sites More sharing options...
jps Posted November 7, 2017 Author Share Posted November 7, 2017 By the way, in my rc.local i have other scripts that runs normally: #!/bin/sh -e # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. /etc/init.d/entrehoras.sh # CÁMARA HP /etc/init.d/runmjpg.sh # Cámara GEMBIRD #/etc/init.d/runmjpgGEMBIRD.sh nohup python /home/orangepi/scripts/botones.py > /tmp/botones.log 2>&1 #/etc/init.d/botones.sh exit 0 Link to comment Share on other sites More sharing options...
martinayotte Posted November 7, 2017 Share Posted November 7, 2017 BTW, you have an ampersand missing : nohup python /home/orangepi/scripts/botones.py > /tmp/botones.log 2>&1 & And you don't have any /tmp/botones.log created ? Strange ! Add some print() in the python script ... Try also to change the first line from " #!/usr/bin/env python" to " #!/usr/bin/python" 1 Link to comment Share on other sites More sharing options...
zador.blood.stained Posted November 8, 2017 Share Posted November 8, 2017 If previous scripts in /etc/rc.local don't return execution (they have no ampersands either and no "start" parameter that suggests that they are a proper LSB init.d scripts) then the 3rd script simply won't be executed. Link to comment Share on other sites More sharing options...
jps Posted November 8, 2017 Author Share Posted November 8, 2017 Yes!. It was the "&" at the end of the calls to the scripts. The 3 of them... Now i have too a "/tmp/botones.log". With that and the "sleep.time(0.1)" at the end of the while, all works fine. Thank you both!!! 1 Link to comment Share on other sites More sharing options...
Recommended Posts