Security

Reply
Aruba Employee
Posts: 2
Registered: ‎11-22-2013

How to: ClearPass Exchange with Raspberry Pi 2/3 LED matrix signage display

Based on authentication or event for displaying user or device information with the LED matrix display using Raspberry Pi 2/3
 
User Experience
 
2016-10-31 18.30.45.gif
 
Preparation Steps
 
1. Wire up the matrix to your Pi and install Install rpi-rgb-led-matrix
 
Please refer to
 
 
 
2. Install Flask
 
 
3. Write up python code
 
#!/usr/bin/env python
# Display a runtext with double-buffering.
from samplebase import SampleBase
from rgbmatrix import RGBMatrix,graphics
from flask import request,json,Flask
import time

app = Flask(__name__)

@app.route('/messages', methods = ['POST'])
def api_message():

    if request.headers['Content-Type'] == 'application/json':
	myjson = json.loads(json.dumps(request.json)) # Process json request from CPPM
	
	runText = RunText()
        runText.matrix = RGBMatrix(16, 2, 1) # Setting up for rows/led-chains
        runText.myTextColorRed = myjson["ColorRed"] # Set the Red Colour from json
        runText.myTextColorGreen = myjson["ColorGreen"] # Set the Green Colour from json
        runText.myTextColorBlue = myjson["ColorBlue"] # Set the Blue Colour from json
        runText.myTextSpeed = myjson["speed"] # Set the Text Speed from json
        runText.myText = myjson["message"] # Set the Message from json
        try:
            # Start loop
            print("Press CTRL-C to stop sample")
            runText.Run()
        except KeyboardInterrupt:
            print "Exiting\n"
            sys.exit(0)
	return  json.dumps(request.json)
    else:
        return "415 Unsupported Media Type ;)"

class RunText(SampleBase):
    
    myTextColorRed = 255
    myTextColorGreen = 255
    myTextColorBlue = 255
    myText = ""
    myTextSpeed = 0.05

    def __init__(self, *args, **kwargs):
        super(RunText, self).__init__(*args, **kwargs)
    def Run(self):
        offscreenCanvas = self.matrix.CreateFrameCanvas()
        font = graphics.Font()
        font.LoadFont("../../fonts/7x13.bdf")
        textColor = graphics.Color(self.myTextColorRed, self.myTextColorGreen, self.myTextColorBlue)
        pos = offscreenCanvas.width

        while True:
            offscreenCanvas.Clear()
            len = graphics.DrawText(offscreenCanvas, font, pos, 10, textColor, self.myText)

            pos -= 1
            if (pos + len < 0):
                pos = offscreenCanvas.width
		break

            time.sleep(self.myTextSpeed)
            offscreenCanvas = self.matrix.SwapOnVSync(offscreenCanvas)


# Main function
if __name__ == "__main__":
	app.run(host='0.0.0.0', port=80, debug=True)

Place your code in the path below

 

pi@raspberrypi:~/rpi-rgb-led-matrix/python/samples $ 

4. Run the code in the background

 

pi@raspberrypi:~/rpi-rgb-led-matrix/python/samples $ sudo ./my_app.py &

5. Configuration on CPPM

 

Administration -> External Servers -> Enpiont Context Servers

Screen Shot 2016-11-01 at 3.07.04 PM.png

In Server Tab:

 

Server Name: <Your integration name>

Server Base URL: http://<Raspberry Pi IP address>

 

Administration -> Dictionaries -> Context Server Actions

1.png

In Action tab:

 

Action Name: <Action Name>

Descritpion: <Description>

HTTP Method: POST

URL: /messages

2.png

In Header Tab:

 

Content-type =  application/json

3.png

In Content Tab: 

 

{"message":"User %{HKSE-AD-User} logged in from SSID %{HKSE-SSID} (%{HKSE-AP-Name}), MAC address: %{HKSE-MAC-Address} and Hostname: %{HKSE-Hostname} - (%{HKSE-Category} / %{HKSE-OS-Family} / %{HKSE-Device-Name})", "ColorRed":248, "ColorGreen":152, "ColorBlue":30, "speed":0.05}

4.png

In Attributes Tab:

 

 

HKSE-AD-User = %{Authorization:01 - HKSE-AD:Name}
HKSE-AP-Name = %{Connection:AP-Name}
HKSE-MAC-Address = %{Connection:Client-Mac-Address-Colon}
HKSE-SSID = %{Connection:SSID}
HKSE-Category = %{Authorization:[Enpoints Repository]:Category}
HKSE-OS-Family = %{Authorization:[Enpoints Repository]:OS Family}
HKSE-Device-Name = %{Authorization:[Enpoints Repository]:Device Name}
HKSE-Hostname = %{Authorization:[Enpoints Repository]:Hostname}

6. Tips and Tricks

 

You can customize the message display based on the authorization or connection attributes from the authentication request. You can also customize the colour and speed of the message:

 

"ColorRed":248, "ColorGreen":152, "ColorBlue":30, "speed":0.05

7. Use cases

 

- Display customized message when VIP guest entering the shop

- Alert NOC staff when non-compliance device connecting to the network

 

 

 

ryh
New Contributor
Posts: 4
Registered: ‎09-27-2015

Re: How to: ClearPass Exchange with Raspberry Pi 2/3 LED matrix signage display

Very cool project!  I'm going to give this a shot.

 

Maybe as an additional feature, some of the bottom unused rows could be treated as bar graphs for showing the number of successful vs failed authentications, or types of devices, or service categorizations, in the last timeframe - say 1 hour. Center x=0 in the middle, and you could extend both directions on a row for two pieces of info.

 

Since they are RGB LEDs, using different colors would work nice visually for a few bars; it seems you have about 3-4 LED rows untouched at the bottom to capitalize on.

Search Airheads
Showing results for 
Search instead for 
Did you mean: