SCript won't stop

Post Reply
pascalbianca
Posts: 37
Joined: Monday 18 December 2017 19:20
Target OS: Raspberry Pi
Domoticz version: V3.8153
Location: Susteren
Contact:

SCript won't stop

Post by pascalbianca » Sunday 04 February 2018 18:16

I made a script that starts my rgb leds with this code.:

Code: Select all

#!/bin/sh
sudo PYTHONPATH=".:build/lib.linux-armv7l-2.7" python /home/pi/rpi_ws281x/python/examples/Domoticstestring.py
Now i want a script that stopts the rgb leds but i don't know how.
If i run the script it can be stopt by pressing ctrl+c.

Can somebody help me?

User avatar
emme
Posts: 847
Joined: Monday 27 June 2016 11:02
Target OS: Raspberry Pi
Domoticz version: latest
Location: Milano, Italy
Contact:

Re: SCript won't stop

Post by emme » Sunday 04 February 2018 19:15

type the Domoticstestring.py file ;)
The most dangerous phrase in any language is:
"We always done this way"

pascalbianca
Posts: 37
Joined: Monday 18 December 2017 19:20
Target OS: Raspberry Pi
Domoticz version: V3.8153
Location: Susteren
Contact:

Re: SCript won't stop

Post by pascalbianca » Sunday 04 February 2018 20:41

i don't understand?

freijn
Posts: 378
Joined: Friday 23 December 2016 17:40
Target OS: Raspberry Pi
Domoticz version:
Location: Netherlands Purmerend
Contact:

Re: SCript won't stop

Post by freijn » Sunday 04 February 2018 20:46

dump/show the content of the py file to us please is that he asked for :-)

pascalbianca
Posts: 37
Joined: Monday 18 December 2017 19:20
Target OS: Raspberry Pi
Domoticz version: V3.8153
Location: Susteren
Contact:

Re: SCript won't stop

Post by pascalbianca » Sunday 04 February 2018 22:04

Code: Select all

# NeoPixel library strandtest example
# Author: Tony DiCola (tony@tonydicola.com)
#
# Direct port of the Arduino NeoPixel library strandtest example.  Showcases
# various animations on a strip of NeoPixels.
import time

from neopixel import *

import argparse
import signal
import sys
def signal_handler(signal, frame):
        colorWipe(strip, Color(0,0,0))
        sys.exit(0)

def opt_parse():
        parser = argparse.ArgumentParser()
        parser.add_argument('-c', action='store_true', help='clear the display on exit')
        args = parser.parse_args()
        if args.c:
                signal.signal(signal.SIGINT, signal_handler)

# LED strip configuration:
LED_COUNT      = 7      # Number of LED pixels.
LED_PIN        = 13      # GPIO pin connected to the pixels (18 uses PWM!).
#LED_PIN        = 10      # GPIO pin connected to the pixels (10 uses SPI /dev/spidev0.0).
LED_FREQ_HZ    = 800000  # LED signal frequency in hertz (usually 800khz)
LED_DMA        = 9      # DMA channel to use for generating signal (try 10)
LED_BRIGHTNESS = 20     # Set to 0 for darkest and 255 for brightest
LED_INVERT     = False   # True to invert the signal (when using NPN transistor level shift)
LED_CHANNEL    = 1       # set to '1' for GPIOs 13, 19, 41, 45 or 53  <<<staat op gpio 13
LED_STRIP      = ws.WS2811_STRIP_GRB   # Strip type and colour ordering



# Define functions which animate LEDs in various ways.
def colorWipe(strip, color, wait_ms=50):
	"""Wipe color across display a pixel at a time."""
	for i in range(strip.numPixels()):
		strip.setPixelColor(i, color)
		strip.show()
		time.sleep(wait_ms/1000.0)

def theaterChase(strip, color, wait_ms=50, iterations=10):
	"""Movie theater light style chaser animation."""
	for j in range(iterations):
		for q in range(3):
			for i in range(0, strip.numPixels(), 3):
				strip.setPixelColor(i+q, color)
			strip.show()
			time.sleep(wait_ms/1000.0)
			for i in range(0, strip.numPixels(), 3):
				strip.setPixelColor(i+q, 0)

def wheel(pos):
	"""Generate rainbow colors across 0-255 positions."""
	if pos < 85:
		return Color(pos * 3, 255 - pos * 3, 0)
	elif pos < 170:
		pos -= 85
		return Color(255 - pos * 3, 0, pos * 3)
	else:
		pos -= 170
		return Color(0, pos * 3, 255 - pos * 3)

def rainbow(strip, wait_ms=20, iterations=1):
	"""Draw rainbow that fades across all pixels at once."""
	for j in range(256*iterations):
		for i in range(strip.numPixels()):
			strip.setPixelColor(i, wheel((i+j) & 255))
		strip.show()
		time.sleep(wait_ms/1000.0)

def rainbowCycle(strip, wait_ms=20, iterations=5):
	"""Draw rainbow that uniformly distributes itself across all pixels."""
	for j in range(256*iterations):
		for i in range(strip.numPixels()):
			strip.setPixelColor(i, wheel((int(i * 256 / strip.numPixels()) + j) & 255))
		strip.show()
		time.sleep(wait_ms/1000.0)

def theaterChaseRainbow(strip, wait_ms=50):
	"""Rainbow movie theater light style chaser animation."""
	for j in range(256):
		for q in range(3):
			for i in range(0, strip.numPixels(), 3):
				strip.setPixelColor(i+q, wheel((i+j) % 255))
			strip.show()
			time.sleep(wait_ms/1000.0)
			for i in range(0, strip.numPixels(), 3):
				strip.setPixelColor(i+q, 0)

# Main program logic follows:
if __name__ == '__main__':
        # Process arguments
        opt_parse()

	# Create NeoPixel object with appropriate configuration.
	strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL, LED_STRIP)
	# Intialize the library (must be called once before other functions).
	strip.begin()

	print ('Press Ctrl-C to quit.')
	while True:
		print ('Color wipe animations.')
		colorWipe(strip, Color(255, 0, 0))  # Red wipe
		colorWipe(strip, Color(0, 255, 0))  # Blue wipe
		colorWipe(strip, Color(0, 0, 255))  # Green wipe
		#print ('Theater chase animations.')
		#theaterChase(strip, Color(127, 127, 127))  # White theater chase
		#theaterChase(strip, Color(127,   0,   0))  # Red theater chase
		#theaterChase(strip, Color(  0,   0, 127))  # Blue theater chase
		print ('Rainbow animations.')
		rainbow(strip)
		#rainbowCycle(strip)
		#theaterChaseRainbow(strip)

pascalbianca
Posts: 37
Joined: Monday 18 December 2017 19:20
Target OS: Raspberry Pi
Domoticz version: V3.8153
Location: Susteren
Contact:

Re: SCript won't stop

Post by pascalbianca » Monday 05 February 2018 20:58

I'm just found a command that kill the script in the terminal screen.

Code: Select all

sudo pkill -9 -f Domoticstestring.py
I just only need to find it to work in domoticz.

BTW in both scripts i see in the log file this.:
2018-02-05 20:16:59.414 Error: Error executing script command (/home/pi/domoticz/scripts/startledring.sh). returned: 35072
2018-02-05 20:16:59.537 Error: Error executing script command (/home/pi/domoticz/scripts/Stopledring.sh). returned: 35072

pascalbianca
Posts: 37
Joined: Monday 18 December 2017 19:20
Target OS: Raspberry Pi
Domoticz version: V3.8153
Location: Susteren
Contact:

Re: SCript won't stop

Post by pascalbianca » Thursday 08 February 2018 17:53

Because nobody seems to think with me, I will continue to do this. What I understand is that Domoticz executes script under root and it seems that the stop script is not done under the root. When I do this in the terminal under root I do not get any message that the script is leased while under the pi user you get to see this, So I suspect that this should be looked for.

freijn
Posts: 378
Joined: Friday 23 December 2016 17:40
Target OS: Raspberry Pi
Domoticz version:
Location: Netherlands Purmerend
Contact:

Re: SCript won't stop

Post by freijn » Tuesday 13 February 2018 10:51

if you just want to run this once you remove the

while True:

shift all under it 1 tab to the left and you are done :

i.e.

# Create NeoPixel object with appropriate configuration.
strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL, LED_STRIP)
# Intialize the library (must be called once before other functions).
strip.begin()

print ('Press Ctrl-C to quit.')

print ('Color wipe animations.')
colorWipe(strip, Color(255, 0, 0)) # Red wipe
colorWipe(strip, Color(0, 255, 0)) # Blue wipe
colorWipe(strip, Color(0, 0, 255)) # Green wipe
#print ('Theater chase animations.')
#theaterChase(strip, Color(127, 127, 127)) # White theater chase
#theaterChase(strip, Color(127, 0, 0)) # Red theater chase
#theaterChase(strip, Color( 0, 0, 127)) # Blue theater chase
print ('Rainbow animations.')
rainbow(strip)
#rainbowCycle(strip)
#theaterChaseRainbow(strip)

pascalbianca
Posts: 37
Joined: Monday 18 December 2017 19:20
Target OS: Raspberry Pi
Domoticz version: V3.8153
Location: Susteren
Contact:

Re: SCript won't stop

Post by pascalbianca » Friday 16 February 2018 18:29

Well thx for thinking but i don't want to run it once.
I want that the script runs when i push the button on and when i push the button off then the script stopts.
Running is no problem but stopping the script.

ledring.png
ledring.png (14.1 KiB) Viewed 1338 times

User avatar
waaren
Posts: 910
Joined: Tuesday 03 January 2017 15:18
Target OS: Raspberry Pi
Domoticz version: Beta
Location: Netherlands
Contact:

Re: SCript won't stop

Post by waaren » Friday 16 February 2018 23:22

pascalbianca wrote:
Friday 16 February 2018 18:29
Well thx for thinking but i don't want to run it once.
I want that the script runs when i push the button on and when i push the button off then the script stopts.
Running is no problem but stopping the script.


ledring.png
Killing a process is not a very elegant way to stop a script. Why not create a temp file before you enter the while true loop and within the loop build in a check if this file stil exist. If not --> exit the loop and script.
The stop command than simply have to trigger a script that removes the temp file created by the first script.
Raspberry (debian stretch via berryboot on Synology DS916+) , Domoticz (almost) latest Beta, , dzVents 2.6, RFLink, RFXtrx433e, P1, Youless, Harmony, Hue, Yeelight, Xiaomi, HomeWizard, Zwave, Amazon echo

pascalbianca
Posts: 37
Joined: Monday 18 December 2017 19:20
Target OS: Raspberry Pi
Domoticz version: V3.8153
Location: Susteren
Contact:

Re: SCript won't stop

Post by pascalbianca » Saturday 17 February 2018 8:27

Hello @Waaren,

And how do i do that?

User avatar
waaren
Posts: 910
Joined: Tuesday 03 January 2017 15:18
Target OS: Raspberry Pi
Domoticz version: Beta
Location: Netherlands
Contact:

Re: SCript won't stop

Post by waaren » Saturday 17 February 2018 11:01

https://stackoverflow.com/questions/828 ... ile-exists

explains in quite a lot of detail howto check for the existence of a file
Raspberry (debian stretch via berryboot on Synology DS916+) , Domoticz (almost) latest Beta, , dzVents 2.6, RFLink, RFXtrx433e, P1, Youless, Harmony, Hue, Yeelight, Xiaomi, HomeWizard, Zwave, Amazon echo

pascalbianca
Posts: 37
Joined: Monday 18 December 2017 19:20
Target OS: Raspberry Pi
Domoticz version: V3.8153
Location: Susteren
Contact:

Re: SCript won't stop

Post by pascalbianca » Saturday 17 February 2018 17:25

I'm sorry @waaren but i did read that link but still i don't know how to make it work in my code.
Can you help me please?
How do i make a temperyfile that contains my code?

User avatar
waaren
Posts: 910
Joined: Tuesday 03 January 2017 15:18
Target OS: Raspberry Pi
Domoticz version: Beta
Location: Netherlands
Contact:

Re: SCript won't stop

Post by waaren » Sunday 18 February 2018 9:23

pascalbianca wrote:
Saturday 17 February 2018 17:25
I'm sorry @waaren but i did read that link but still i don't know how to make it work in my code.
Can you help me please?
How do i make a temperyfile that contains my code?
Change script that starts the python to

Code: Select all

#!/bin/sh
touch /tmp/AllowDomoticstestring
sudo PYTHONPATH=".:build/lib.linux-armv7l-2.7" python /home/pi/rpi_ws281x/python/examples/Domoticstestring.py
Change Domoticstestring.py to:

Code: Select all

# NeoPixel library strandtest example
# Author: Tony DiCola (tony@tonydicola.com)
#
# Direct port of the Arduino NeoPixel library strandtest example.  Showcases
# various animations on a strip of NeoPixels.
import time

from neopixel import *

import argparse
import signal
import sys
import os.path

def signal_handler(signal, frame):
        colorWipe(strip, Color(0,0,0))
        sys.exit(0)

def opt_parse():
        parser = argparse.ArgumentParser()
        parser.add_argument('-c', action='store_true', help='clear the display on exit')
        args = parser.parse_args()
        if args.c:
                signal.signal(signal.SIGINT, signal_handler)

# LED strip configuration:
LED_COUNT      = 7      # Number of LED pixels.
LED_PIN        = 13      # GPIO pin connected to the pixels (18 uses PWM!).
#LED_PIN        = 10      # GPIO pin connected to the pixels (10 uses SPI /dev/spidev0.0).
LED_FREQ_HZ    = 800000  # LED signal frequency in hertz (usually 800khz)
LED_DMA        = 9      # DMA channel to use for generating signal (try 10)
LED_BRIGHTNESS = 20     # Set to 0 for darkest and 255 for brightest
LED_INVERT     = False   # True to invert the signal (when using NPN transistor level shift)
LED_CHANNEL    = 1       # set to '1' for GPIOs 13, 19, 41, 45 or 53  <<<staat op gpio 13
LED_STRIP      = ws.WS2811_STRIP_GRB   # Strip type and colour ordering



# Define functions which animate LEDs in various ways.
def colorWipe(strip, color, wait_ms=50):
	"""Wipe color across display a pixel at a time."""
	for i in range(strip.numPixels()):
		strip.setPixelColor(i, color)
		strip.show()
		time.sleep(wait_ms/1000.0)

def theaterChase(strip, color, wait_ms=50, iterations=10):
	"""Movie theater light style chaser animation."""
	for j in range(iterations):
		for q in range(3):
			for i in range(0, strip.numPixels(), 3):
				strip.setPixelColor(i+q, color)
			strip.show()
			time.sleep(wait_ms/1000.0)
			for i in range(0, strip.numPixels(), 3):
				strip.setPixelColor(i+q, 0)

def wheel(pos):
	"""Generate rainbow colors across 0-255 positions."""
	if pos < 85:
		return Color(pos * 3, 255 - pos * 3, 0)
	elif pos < 170:
		pos -= 85
		return Color(255 - pos * 3, 0, pos * 3)
	else:
		pos -= 170
		return Color(0, pos * 3, 255 - pos * 3)

def rainbow(strip, wait_ms=20, iterations=1):
	"""Draw rainbow that fades across all pixels at once."""
	for j in range(256*iterations):
		for i in range(strip.numPixels()):
			strip.setPixelColor(i, wheel((i+j) & 255))
		strip.show()
		time.sleep(wait_ms/1000.0)

def rainbowCycle(strip, wait_ms=20, iterations=5):
	"""Draw rainbow that uniformly distributes itself across all pixels."""
	for j in range(256*iterations):
		for i in range(strip.numPixels()):
			strip.setPixelColor(i, wheel((int(i * 256 / strip.numPixels()) + j) & 255))
		strip.show()
		time.sleep(wait_ms/1000.0)

def theaterChaseRainbow(strip, wait_ms=50):
	"""Rainbow movie theater light style chaser animation."""
	for j in range(256):
		for q in range(3):
			for i in range(0, strip.numPixels(), 3):
				strip.setPixelColor(i+q, wheel((i+j) % 255))
			strip.show()
			time.sleep(wait_ms/1000.0)
			for i in range(0, strip.numPixels(), 3):
				strip.setPixelColor(i+q, 0)

# Main program logic follows:
if __name__ == '__main__':
        # Process arguments
        opt_parse()

	# Create NeoPixel object with appropriate configuration.
	strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL, LED_STRIP)
	# Intialize the library (must be called once before other functions).
	strip.begin()

	
	#print ('Press Ctrl-C to quit.')
	
	while os.path.isfile("/tmp/AllowDomoticstestring"):
		print ('Color wipe animations.')
		colorWipe(strip, Color(255, 0, 0))  # Red wipe
		colorWipe(strip, Color(0, 255, 0))  # Blue wipe
		colorWipe(strip, Color(0, 0, 255))  # Green wipe
		#print ('Theater chase animations.')
		#theaterChase(strip, Color(127, 127, 127))  # White theater chase
		#theaterChase(strip, Color(127,   0,   0))  # Red theater chase
		#theaterChase(strip, Color(  0,   0, 127))  # Blue theater chase
		print ('Rainbow animations.')
		rainbow(strip)
		#rainbowCycle(strip)
		#theaterChaseRainbow(strip)
Now if you want to stop Domoticstestring.py, you delete /tmp/AllowDomoticstestring
this can be done by a script or manually
Raspberry (debian stretch via berryboot on Synology DS916+) , Domoticz (almost) latest Beta, , dzVents 2.6, RFLink, RFXtrx433e, P1, Youless, Harmony, Hue, Yeelight, Xiaomi, HomeWizard, Zwave, Amazon echo

pascalbianca
Posts: 37
Joined: Monday 18 December 2017 19:20
Target OS: Raspberry Pi
Domoticz version: V3.8153
Location: Susteren
Contact:

Re: SCript won't stop

Post by pascalbianca » Sunday 18 February 2018 17:32

I get this error in your second code.:

Code: Select all

Traceback (most recent call last):
  File "/home/pi/rpi_ws281x/python/examples/Domoticstestring.py", line 121, in <module>
    while os.path.isfile("/tmp/AllowDomoticstestring"):
NameError: name 'os' is not defined
Forgot import os.

pascalbianca
Posts: 37
Joined: Monday 18 December 2017 19:20
Target OS: Raspberry Pi
Domoticz version: V3.8153
Location: Susteren
Contact:

Re: SCript won't stop

Post by pascalbianca » Sunday 18 February 2018 17:45

Thank you so mutch @waaren it works.

Post Reply

Who is online

Users browsing this forum: No registered users and 0 guests