not_used | ||
static | ||
templates | ||
.gitignore | ||
graphs.py | ||
hw_funcs.py | ||
poc.py | ||
README.md | ||
run.py | ||
ss.py | ||
stats.py | ||
steam_api.py | ||
steam_small.json | ||
steam.json |
Project_Steam_Tracker
Het doel van dit project is om een concept te ontwikkelen waarbij je een grafishe weergrave wat inzicht geeft op de game activiteiten van je vrienden op Steam. Een raspberypi wordt ook gebruikt om hardwarematig lapjes en sensoren aan te sturen.
Casus
Steam wil haar klanten beter bedienen door meer grafische weergaves te maken van gaming gedrag naar verschillende klantsegmenten. Hiervoor heeft ze een consultancybedrijf ingehuurd. De hoofdopdracht luidt: maak een grafische weergave die inzicht geeft in het gaming gedrag van jouw vrienden op het platform Steam, ondersteund door een netwerk waarbij gebruik gemaakt wordt van een RaspberryPi.
Voorbeeldvragen die Steam beantwoord wil zien voor haar klanten:
Welke games spelen mijn vrienden?
Welke spellen worden het meest gespeeld?
Wanneer zijn jouw vrienden online?
Wanneer heb je gepland om te gaan spelen?
Welke aanbevelingen kunnen er gemaakt worden om te spelen?
Uitvoeren applicatie
Deze applicatie maakt gebruik van de volgende python libraries, zorg ervoor dat deze zijn geinstalleerd.
- Flask
steamgeventeventemitter
matplotlib- requests
- apa102-pi
Om de dependencies te installeren voer het onderste commando uit.
pip install flask requests apa102-pi
Als je op een RaspberryPI draait en de hardware wil aansturen moet je in run.py aangeven dat de software draait op een
RaspberryPI, en in hardware.py kan je de default pinnen aanpassen. De APA102 library gebruikt SPI, dus zorg ervoor dat
je via sudo raspi-config
spi aan hebt gezet.
In run.py kan je aangeven dat je op een RaspberryPI draait zodat de hardware pagina werkt. Default werkt de hardware niet omdat de software libraries oproept die alleen op een RaspberryPI werken.
De applicatie is simpel uit te voeren door de python script uit te voeren. En via de browser naar de gegeven url te gaan. Let op! Gebruik python 3!
python3 run.py of python run.py
Data formaat geheugen tabel
Om het sorteren makkelijker te maken gaan we de json in een tuple/list opslaan in het geheugen. Het formaat is een tabel achtige structuur. Als voorbeeld de eerste json entry in een tuple.
{
"appid":10,
"name":"Counter-Strike",
"release_date":"2000-11-01",
"english":1,
"developer":"Valve",
"publisher":"Valve",
"platforms":"windows;mac;linux",
"required_age":0,
"categories":"Multi-player;Online Multi-Player;Local Multi-Player;Valve Anti-Cheat enabled",
"genres":"Action",
"steamspy_tags":"Action;FPS;Multiplayer",
"achievements":0,
"positive_ratings":124534,
"negative_ratings":3339,
"average_playtime":17612,
"median_playtime":317,
"owners":"10000000-20000000",
"price":7.19
}
(10, "Counter-Strike", "2000-11-01", 1, "Valve", "windows;mac;linux", 0,
"Multi-player;Online Multi-Player;Local Multi-Player;Valve Anti-Cheat enabled", "Action", "Action;FPS;Multiplayer",
0, 124534, 3339, 17612, 317, "10000000-20000000", 7.19)
En om meerdere entries op te slaan maken we het genest zoals alsvolgd.
(
(10, "Counter-Strike", "2000-11-01", 1, "Valve", "windows;mac;linux", 0, "Multi-player;Online Multi-Player;Local Multi-Player;Valve Anti-Cheat enabled", "Action", "Action;FPS;Multiplayer", 0, 124534, 3339, 17612, 317, "10000000-20000000", 7.19),
(20, "Team Fortress Classic", "1999-04-01", 1, "Valve", "Valve", "windows;mac;linux", 0, "Multi-player;Online Multi-Player;Local Multi-Player;Valve Anti-Cheat enabled", "Action", "Action;FPS;Multiplayer", 0, 3318, 633, 277, 62, "5000000-10000000", 3.99)
)
Uitleg functies
sorting.py
nest-qsort(tpl, colnum. reverse=False)
Deze recursieve functie kan de bovenstaande geneste tuple formaat sorteren. Als eerste argument geef je de geneste tuple , tweede argument is de kolom nummer vanaf 0 waarop je wilt sorteren. En de derde argument is een bool, als true dan sorteerd de functie van hoog naar laag.
qsort(tpl, reverse=False)
Deze recursieve functie is de standaard sorteer functie die wij gaan gebruiken. Als eerste argument neemt de functie een lijst of tuple met waardes, deze mogen ints of strings zijn. De tweede argument is een bool, als true dan sorteerd de functie van hoog naar laag.
stats.py
mediaan(lst)
Deze functie geeft de mediaan in de mee gegeven lijst.
freq(lst)
Deze functie geeft een dict terug met de frequentie van alle waardes in een lijst. Als voorbeeld met [1, 4, 6, 4] meegegeven wordt {1: 1, 4: 2, 6: 1} terug gegeven
gmld(lst)
Geeft de gemiddelde van een lijst terug in een float
steam_api.py
getappdata(appid)
Deze functie vraagt de gegeven appid op via de http steam api en retourneert het als json. Een voorbeeld van de json is te vinden in steam_api.py
hardware.py
set_strip(value)
Deze functie stuurt de ledstrip met 8 APA102 led's aan zodat de hele strip in 1 kleur oplicht. Value moet in HEX RGB gegeven worden. Bijvoorbeeld set_strip('FFAABB')
set_register(value)
Deze functie accepteerd waardes in machten van 2 tot 128. Waarde 1 zet de eerste pinout van het register op ON. Waarde 2 zet de 2e pinout op ON en de rest op OFF. Waarde 4 zet de 3e pin op ON enz... Tot waarde 128(pin 8). Accepteerd ook waarde 0 dat alles op OFF zet.
poll_sensor()
Een simpele functie die de afstandsensor aanstuurt. Wanneer de functie wordt aangeroepen retourneert het een tuple met als eerste waarde de afstand gemeten in cm van de sensor tot object. En waarde 2 weergeeft de afstand in tijd.
LET OP als de sensor niet is aangesloten, en de functie wordt opgeroepen, blokkeert de functie. Zorg ervoor dat de sensor is aangesloten voordat de functie wordt opgeroepen. Dit wordt niet aangepast anders wordt de nauwkeurigheid van de sensor substantieel negatief beinvloed, vooral op langzame computers.
set_servo(degree)
Deze functie accepteert waardes van 0 tot en met 180. Deze waardes corresponderen met de gradens vanaf het meest linkse positie van de servo(voorbeeld).
poll_button()
Dit is de meest simpele functie geschreven in dit programme. Wanneer de knop is ingedrukt returnt de functie True, anders False
graphs.py
De functie van dit bestand is om grafieken te maken van lijsten met waardes, deze grafieken worden als svg terug gegeven om door flask geserveerd te worden.