2020-11-17 13:35:49 +01:00
|
|
|
# Project_Steam_Tracker
|
|
|
|
|
2020-11-30 20:14:09 +01:00
|
|
|
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
|
2021-01-12 15:38:56 +01:00
|
|
|
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.
|
2020-11-30 20:14:09 +01:00
|
|
|
|
|
|
|
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.
|
|
|
|
|
2021-01-07 18:58:42 +01:00
|
|
|
- [Flask](https://github.com/pallets/flask/)
|
2021-01-14 19:01:35 +01:00
|
|
|
- [~~steam~~](https://github.com/ValvePython/steam)
|
|
|
|
- ~~gevent~~
|
|
|
|
- ~~eventemitter~~
|
2021-01-18 11:32:20 +01:00
|
|
|
- [~~matplotlib~~](https://pypi.org/project/matplotlib/)
|
2021-01-14 19:01:35 +01:00
|
|
|
- [requests](https://pypi.org/project/requests/)
|
2021-01-18 13:47:28 +01:00
|
|
|
- [apa102-pi](https://github.com/tinue/apa102-pi)
|
2021-01-12 15:31:53 +01:00
|
|
|
|
|
|
|
Om de dependencies te installeren voer het onderste commando uit.
|
|
|
|
|
2021-01-18 13:47:28 +01:00
|
|
|
pip install flask requests apa102-pi
|
2020-11-30 20:14:09 +01:00
|
|
|
|
2021-01-18 21:02:15 +01:00
|
|
|
Als je op een RaspberryPI draait en de hardware wil aansturen moet je in run.py aangeven dat de software draait op een
|
2021-01-19 15:01:52 +01:00
|
|
|
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.
|
2021-01-18 21:02:15 +01:00
|
|
|
|
|
|
|
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.
|
|
|
|
|
2021-01-12 15:38:56 +01:00
|
|
|
De applicatie is simpel uit te voeren door de python script uit te voeren. En via de browser naar de gegeven
|
2021-01-19 15:37:55 +01:00
|
|
|
url te gaan. Let op! Gebruik python 3!
|
2020-11-30 20:14:09 +01:00
|
|
|
|
2021-01-19 15:37:55 +01:00
|
|
|
python3 run.py of python run.py
|
2020-11-30 20:14:09 +01:00
|
|
|
|
2021-01-02 13:21:04 +01:00
|
|
|
## 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)
|
2021-01-07 13:11:34 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
## Uitleg functies
|
2021-01-12 15:38:56 +01:00
|
|
|
|
2021-01-07 13:11:34 +01:00
|
|
|
### 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
|
2021-01-12 15:38:56 +01:00
|
|
|
, 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.
|
2021-01-07 13:11:34 +01:00
|
|
|
#### ```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
|
2021-01-12 15:38:56 +01:00
|
|
|
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
|
|
|
|
|
2021-01-18 13:00:20 +01:00
|
|
|
### 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
|
|
|
|
|
2021-01-18 21:02:15 +01:00
|
|
|
### 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.
|
|
|
|
#### ```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](https://files.ventilaar.net/files/2021-01/servo.jpg)).
|
|
|
|
#### ````poll_button()````
|
|
|
|
Dit is de meest simpele functie geschreven in dit programme. Wanneer de knop is ingedrukt returnt de functie True,
|
|
|
|
anders False
|
|
|
|
|
2021-01-12 15:38:56 +01:00
|
|
|
### 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.
|
2021-01-18 13:00:20 +01:00
|
|
|
#### WIP verdere uitleg komt nog
|