Okt 07, 2015

Jira Ticket Statusanzeige mit RGB-LEDs (WS2801) und Raspberry Pi

Durch meine Arbeit konnte ich schon einige Erfahrung mit dem Projektmanagement-Tool Jira von Atlassian sammeln. Ich persönlich arbeite sehr gerne mit Jira, da man Projektabläufe sehr gut organisieren kann.

Nachdem wir neuerdings einen weiteren Standort haben und ich zusammen mit einem Kollegen unter anderem für IT-Themen zuständig bin, dachte ich mir es wäre klasse, eine Statusanzeige über eintreffende Tickets zu bekommen.

Ein alter Raspberry war schnell gefunden, ein paar einzel programmierbare RGB-LEDs hatte ich auch noch von meinem Ambilight-Projekt.

Zum Ansteuern der LEDs kann man direk an den Raspberry an PIN 19 (MOSI) und 23 (CLK).

Normalerweise sollte man die RGB-LEDs nicht direkt über den Raspberry speisen sondern ein zusätzliches Netzteil verwenden (Masse muss mit dem Raspberry verbunden sein). In diesem Fall sollten aber sowieso nur 2 LEDs zum Einsatz kommen, die der Raspberry noch stemmen kann.

Nun muss man natürlich dem Raspberry noch sagen, wie er die LEDs ansteuert:

Konfiguration und Vorbereitung des Raspberrys

Wie man das Betriebssystem (Raspbian Wheezy) aufsetzt kann man in etlichen Beiträgen im Internet lesen, daher gehe ich darauf nicht weiter ein.

Zunächst muss man das SPI-Modul aktivieren. Dazu wählt man sich per Putty bzw. SSH auf den Raspberry auf und startet die Konfiguration.

sudo raspi-config

Advanced Options -> SPI -> Yes

Anschießend muss noch ein Update vom Raspi gemacht sowie Python installiert werden

 sudo apt-get udpate
 sudo apt-get install python-dev
 sudo apt-get install python-pip
 sudo apt-get install git
 sudo pip install spidev

Installation von benötigten Bibliotheken

Um die LEDs komfortabel anzusteuern, empfehle ich das Python-Programm „BiblioPixel“.

sudo pip install bibliopixel

Das Tool kann noch viel mehr, wie zum Beispiel einige Animationen. Ich möchte aber nur einzelne LEDs ansteuern.

Installation und Konfiguration des Jira Clients

Um die Jira Tickets auslesen zu können, habe ich kurz im Netz geschaut, ob es vielleicht etwas in Python gibt. Und siehe da, es kommt schon einen Jira Client in Python geschrieben. Den kann man sich dann ganz einfach mit folgendem Befehl installieren

sudo pip install jira

Man kann natürlich mit dem Client noch viel mehr machen, als Tickets auslesen. Die komplette Doku hier hier zu finden.

Nun muss der Jira Client noch eingerichtet werden. Es existiert bereits eine Datei client.py. Dort stehen allerdings soviele Anweisungen, die für meinen Fall gar nicht relevant sind. Daher habe ich mir eine 2. Datei „client2.py“ angelegt.

Zuerst werden die Bibliotheken geladen

import bibliopixel.colors as colors
import time
from bibliopixel.led import *
from bibliopixel.drivers.WS2801 import *
from jira import JIRA

Anschließend wird der Treiber zur ANsteuerung der LEDs geladen

driver = DriverWS2801(2)
led = LEDStrip(driver)

Danach werden die Informationen für Jira geladen

options = {
    'server': 'https://firma.atlassian.net'
}
jira = JIRA(basic_auth=('User', 'password'))

Somit sind die Vorbereitungen schon getroffen. Zum Auslesen der Tickets und direktem filtern nach dem Benutzernamen habe ich folgenden Code verwendet:

issues_status = [issue.fields.status for issue in jira.search_issues('project = PROJEKTNAME and assignee = benutzer')]

Man bekommt dabei eine Liste mit Statusobjekten der Tickets, die die Bedingung Projekt und aktueller Bearbeiter haben.
Diese Liste kann man nun auswerten und den verschiedenen Stati verschiedene Farben zuordnen

red = colors.Red
green = colors.Green
blue = colors.Blue
yellow = colors.Yellow

led0 = red
led1 = red

todo = False
inprogress = False
done = False

for elem in issues_status:
        i = elem.id
        print elem.name + " " + elem.id
        if (i == '10002'):
                todo = True
                break
        elif (i == '3'):
                inprogress = True
        else:
                done = True

if todo:
        led0 = red
elif inprogress:
        led0 = yellow
elif done:
        led0 = green
else:
        led0 = blue

led.update()

Der letzte Befehl

led.update()

ist wichtig, weil erst dann die LEDs angesteuert werden.

Da es ja darum geht, zu sehen, ob Tickets noch nicht behandelt (Status rot) wurden, wird zunächst geprüft ob der Status ‚todo‘ (ID 10002) gefunden wurde. Wenn ja, wird LED 1 auf rot gesetzt. Falls nicht, wird überprüft, ob ein Ticket in Bearbeitung (ID 3) ist. Ist das der Fall, wird die LED 1 auf gelb gesetzt. Wenn alle Tickets auf ‚done‘ stehen, wird die LED 1 grün. Der letzte Fall sollte eigentlich nie eintreten, da hieße nämlich, dass Jira zu diesem Namen und Projekt keine Tickets gefunden hat.

Das Ganze kann natürlich noch erweitert werden, aber die Grundlogik sollte klar sein.

Den Raspberry und die LEDs haben wir nun in ein transparentes Gehäuse. Und so sieht das ganze nun aus:

raspi_ws2801_jira

Leave a Reply