Maybe you read Part 1, maybe you skipped it 🙁
Either way Part 2 is going to cover creating a new effect for Nagios. I wont say it’s the best bit of python programming I’ve done (Yes I copied and changed another effect as a starting point). The main thing I wanted was an alert status (yes Star Trek does come into it).
There’s 4 files to this effect:
- alert.py – The actual python program
- alert-green.json – etting a green colour (yes it’s spelt COLOUR not color!!!!!)
- alert-yellow.json
- alert-red.json
My hyperion is installed to ‘/opt/hyperion’ so first thing is to go to the effects directory
cd /opt/hyperion/effects
Then create the alert.py file
nano alert.py
Paste the following into it and save the file
import hyperion import time import colorsys import numpy as np # Get the rotation time colorfrom = hyperion.args.get('colorfrom', (0,0,0)) colorto = hyperion.args.get('colorto', (0,255,0)) speed = float(hyperion.args.get('speed', 0.05)) freq = float(hyperion.args.get('frequency', 2.5)) step = float(hyperion.args.get('step', 30.0)) ledCount = hyperion.ledCount # Setup the colors colorfromnp = np.array(colorfrom) colortonp = np.array(colorto) #define the lerp calc def lerp(a, b, t): x = a*(1 - t) + b*t x = np.around(x) x = x.tolist() return x # Start the write data loop while not hyperion.abort(): for i in range(0,int(step)): n = i / step thiscolor = lerp(colorfromnp, colortonp, n) colorLedsData = ledCount * bytearray((int(thiscolor[0]), int(thiscolor[1]), int(thiscolor[2]))) hyperion.setColor(colorLedsData) time.sleep(speed) time.sleep(speed*10) for i in range(1,int(step)): n = i / step thiscolor = lerp(colortonp, colorfromnp, n) colorLedsData = ledCount * bytearray((int(thiscolor[0]), int(thiscolor[1]), int(thiscolor[2]))) hyperion.setColor(colorLedsData) time.sleep(speed) colorLedsData = ledCount * bytearray(colorfrom) hyperion.setColor(colorLedsData) time.sleep(freq)
I do use a numpy array, I can’t remember installing it but may have done. You can test if you have it installed
python import numpy as np
Then we create the alert-green.json
nano alert-green.json
And Paste
{ "name" : "Green Alert", "script" : "alert.py", "args" : { "colorfrom" : [0,0,0], "colorto" : [0,255,0], "speed" : 0.05, "freq" : 2.5, "step" : 30.0 } }
alert-yellow.json
{ "name" : "Yellow Alert", "script" : "alert.py", "args" : { "colorfrom" : [0,0,0], "colorto" : [255,255,0], "speed" : 0.05, "freq" : 2.5, "step" : 30.0 } }
alert-red.json
{ "name" : "Red Alert", "script" : "alert.py", "args" : { "colorfrom" : [0,0,0], "colorto" : [255,0,0], "speed" : 0.05, "freq" : 2.5, "step" : 30.0 } }
Finally restart hyperion to pickup the new effects
service hyperion restart
That’s it, you should now be able to run these effects. From the terminal:
hyperion-remote -e "Red Alert"
Should start the led’s glowing Red. If not I’d start with ‘hyperion-remote -l’ to check the effects are listed, then move on to working out what’s missing (see above about numpy array).
A few notes on this effect:
- Originally I programmed it forced to black, but it made sense to change this to a colorfrom value for future (if you want it green and fading to red for example).
- The speed is how quickly to progress through the fade.
- The step is how many colours it goes through to get from the colorfrom to the colorto
- Working out the speed and the step together are important for a nice fade (not jerky).
- The Freq in how long it stays on black before running the fade again.
This completes the hyperion side of the setup. I now have this effect installed and running on 3 PI’s and yes when there’s a problem they ALL go to yellow/red alert