Jump to content

TUTORIAL Entwickler Informationen zur DR!FT Community API


Recommended Posts

Posted (edited)

Bitte melde dich an um den Link zu sehen.

naja, musst ja nicht mit dem virtuellen Finger auf deine unordentlichste Ecke hinweisen .. 😉

 

Yeah ... die Portierung auf  Raspberry Pi ist abgeschlossen. Alle Container lassen sich auf dem Pi bauen, Connection zur DB funktioniert jetzt auch und es läuft stabil - der praktische Test ist ebenfalls erfolgreich.

Ich musste einiges was während dem build angezogen wird austauschen. Aber die build-Skripte bleiben vom Aufbau her gleich. Also auch die meisten künftigen Mods sollten portierbar sein.

Ich werde jetzt noch schauen, ob sich an der Größe etwas optimieren lässt und ein paar Komfort-Funktionen einbauen (Wifi-AP, Display on Demand, evtl auch Touchscreen) und dann eine Anleitung zum Nachbauen bereitstellen und das fertige Image für Anfänger. Damit wird das Projekt auch für unbedarfte Nutzer zugänglich und man kann es bei Treffen spontan und mit minimaler Hardware einsetzen.

Schonmal ein paar Spoiler-Infos:

- Basis ist Pi-OS 64Bit bullseye (jippieh, es geht sogar ohne das fette Ubuntu/Debian sondern mit dem entschlackten und schnell bootenden System)

- Voraussetzung ist ein Pi4. Eventuell kann man es auch auf dem Pi3 und 2w laufen lassen, müsste man testen (ich selbst hab keinen). Pi2 und weniger geht definitiv nicht, sofern man an der MongoDB festhält.

- Es wird jetzt eine modifizierte Version von FastAPI bzw uvicorn-gunicorn angezogen. Das ist noch nicht ganz clean und ich suche eine bessere Lösung. Wenn man es richtig machen will, müsste man selbst an den built-Prozess des original Docker-Images herangehen. Da der Entwickler tiangolo den request danach schon seit einer Weile "zurückstellt", vermute ich dass es mit einem einfachen buildx nicht getan ist. Mal schauen ob  ich mir  die Mühe mache - es hat jetzt auch keine große Prio, da es ja auch so funktioniert.

Jetzt werde ich erstmal etwas ausgiebiger die Funktionen testen! 😀😀😀

Please log in to see the images

Please log in to see the images

 

 

Edited by Foox
  • Like 3
Link to comment
Share on other sites

Posted (edited)

Hallo Zusammen,

ich baue gerade einen eigenen Server in Java, dadurch entfällt das ganze docker Gedöns und es lässt sich auf Windows, Mac und Linux  einfach direkt ausführen. Ist evtl. für einige etwas einfacher. Hauptgrund ist allerdings das meine ganze Strecken-Kontroll-Software schon auf Java läuft und ich den server nun mit implementieren möchte 🙂
Wenn das alles läuft plane ich einen standalone crossplatform server der sowohl auf desktop oder headless, Android und iOS laufen kann.


Allerdings struggle ich gerade mit dem timestamp 
2022-06-06T12:45:23.4651510Z

Das sieht mir nach ISO 8601 aus, allerdings verwirren mich die letzen 4 Ziffern (1510) vor dem Z.   ISO8601 hat 9 (bis zu Nanosekunden) Stellen , daher bin ich mir nicht sicher, warum hier nur 7 stellen sind.
Das Z steht ja nur für die Zulu-Zeit (UTC).
Wie muss ich den Spaß parsen?

Viele Grüße
Stephan

 
Edited by Blueforcer
  • Like 2
Link to comment
Share on other sites

Posted (edited)

Bitte melde dich an um den Link zu sehen.

 hmm, gute Frage, ich hab die Zeit einfach direkt von FastAPI parsen lassen und mich nicht so sehr darum gekümmert. Wichtig ist, dass die Zeit immer als UTC+0 übermittelt wird. Da innerhalb der VMs immer nur UTC+0 herrscht, musste ich bei create game etwas tricksen und die differenz zur Deutsgen Zeit ermitteln und fix drauf rechnen. Die Entwickler von Sturmkind schreiben zum Zeitformat:

start_time: (optional)
If set this time will be used as preset.

The time needs to be in coordinate world time standard (Coordinated Universal Time, UTC)
possible formats are:
    - 2008-06-15T21:15:07.0000000
    - 2008-06-15T21:15:07
    - 2008-06-15 21:15:07Z
    - Sunday, June 15, 2008 9:15 PM
    - Sunday, June 15, 2008 9:15:07 PM
    - 6/15/2008 9:15 PM
    - 6/15/2008 9:15:07 PM

 

Da sehe ich kein Z am Ende bei dem höchstaufgelösten Format, ich kann es aber auch nicht erklären, vielleicht müsste man da noch mal tief in den Standard schauen.

Bitte melde dich an um den Link zu sehen.

sehr geil, tolle Sache. Ich finde die größe der Images und so auch nicht cool gerade, hatte auch überlegt die api und das frontend in den gleichen container zu packen, fand es so aber sauberer. Braucht aber viel zu viel Platz. Ne direkte Installation wenn man ein image baut wäre vielleicht das Beste?

Bitte melde dich an um den Link zu sehen.

ich verstehe was du vorschlägst, aber die Lösung hört sich sehr speziell für diesen einen Use Case zugeschnitten an. Grundsätzlich sollte aber die reset bzw sofort weiterspielen Aktion irgendwie auch zu nem Sync führen, ich bin mir nur nicht sicher, wie genau man das universell gut lösen kann. Eine Feste Zeit von 1 Minute für die neue Startzeit finde ich nicht so sauber. Ich hab dahingehend aber auch schon eine andere Lösung, weil ich die Startzeit so wie sie aktuell implementiert ist nocht nicht ideal finde.

Zu den Gymkhana Punkten: ja, die werden aktuell schon übermittelt, siehe api Beschreibung. Und im Server ist auch schon alles dafür vorbereitet.

Edited by Decrayer
Link to comment
Share on other sites

Posted (edited)

Servus zusammen,

Zitat

Bitte melde dich an um den Link zu sehen.

ich verstehe was du vorschlägst, aber die Lösung hört sich sehr speziell für diesen einen Use Case zugeschnitten an. Grundsätzlich sollte aber die reset bzw sofort weiterspielen Aktion irgendwie auch zu nem Sync führen, ich bin mir nur nicht sicher, wie genau man das universell gut lösen kann. Eine Feste Zeit von 1 Minute für die neue Startzeit finde ich nicht so sauber. Ich hab dahingehend aber auch schon eine andere Lösung, weil ich die Startzeit so wie sie aktuell implementiert ist nocht nicht ideal finde.

Also ich hatte ja umgestellt, dass man die Startzeit in Minutenschritten wählen kann und wenn man das Spiel kreiert, dann wird für die default Einstellung die aktuelle Zeit + 2 Minuten genommen; so kann man, wenn man lokal beisammen ist, fast unmittelbar starten; und wenn nicht, kann man die Zeit aja ohnehin festlegen.

Ich finde ein Sync von der Sturmkind App, sollte man ein Spiel mit gemeinsamer Startampel gespielt haben und nach dem Rennen nicht "zurück" auf dem Handy klickt, sondern "erneut" durchaus  wünschenswert. Du merkst schon ich möchte das schmackhaft machen 😄 denn ich finde das wäre doch sehr sinnvoll. Ich kann hier eigentlich keine Nachteile erkennen. Weil, wer spielt einmal mit ner gesyncten Ampel und geht dann gleich wieder hinein, um ohne zeitgesyncter Ampel zu starten?

Am 6.6.2022 um 13:45 schrieb Decrayer:

Bitte melde dich an um den Link zu sehen.

 Sehr geile "Hacks" 😉 Der ganze Prototyp besteht aus Hacks also never mind 😉 Der ist ja genau dazu gedacht, mal etwas schnell zusammen zu bekommen / zu ändern um Ideen zu brainstormen und zu erproben. Kannst ja mal schauen, ob deinen privaten Stand auch mal teilen magst wenn er soweit ist.

Ich hab erneut ein bisschen gebastelt. Habe in der WebApp sozusagen den Modus wählbar gemacht, so dass das Scoreboard dann auch unterschiedlich aussehen kann. Habe dann über den Original Button das Rennen (Normal, Rally, Rally-Cross) und bei dem neuen Button den Gymkhana Modus (aktuell mit Bester Speed, Angle, 360, 180 - Platzierung für 1-3, Bonus Medaille für Bestes Target (aktuell fix 360, will ich aber in den Game Einstellungen wählbar machen, ähnlich wie die Joker Lap) und Medaille für die kürzeste Strecke, einfach weil es lustig ist 😄

Hänge mal ein paa Bilder an.

Ich teile den Stand natürlich sehr gerne, möchte aber zuvor noch ein bisschen sauber machen. Evtl. findet sich dann auch jemand, der die ein oder andere Verbesserung am ergänzten Code vornehmen kann. 🙂

Viele Grüße

Spider

EDIT: so, das Bonus Target ist nun auch wählbar und die Auswahl wird in Scoreboard auch angezeigt. Sobald ich den Code etwas aufgeräumt habe, stelle ich ihn zur Verfügung.

 

 

Please log in to see the images

Please log in to see the images

Please log in to see the images

Please log in to see the images

Please log in to see the images

Please log in to see the images

Edited by -=Sp!der=-
  • Like 2
Link to comment
Share on other sites

Bitte melde dich an um den Link zu sehen.

Hau deine Ideen gerne in den jeweiligen Vorschlage Beitrag hier im gleichen Unterbereich, damit die nicht verloren gehen. Geile Ideen hast du da, macht durchaus Sinn für Gymkhana bzw. spezielle Modi jeweils eigene Erstellmasken zu definieren, selbst wenn das Datenmodell darunter noch gleich ist. So kann man echt zugeschnittene Racing Boards erstellen.

Link to comment
Share on other sites

Posted (edited)

Servus zusammen, 

würde das eigentlich funktionieren, über die Streamlit Cloud eine ServerApp direkt online zu stellen? 

https://streamlit.io/cloud

Ich hätte das gestern mal versucht, war aber noch nicht mit Erfolg gekrönt.

WebApp läuft, aber die Erstellung eines Spiels klappt nicht. (Fehlermeldung: no game with that ID exists). Bin mir ned ganz sicher, wie man dort Daten bei Multipage teilen kann.. 

Der aktuelle Stand (nach Abbruch gestern Nacht) wäre hier:

https://share.streamlit.io/SpiderStan/drift/main/app.py

Da kann man in den Settings auch gleich zu den Sourcen springen. 

Bitte melde dich an um den Link zu sehen.

 hast du da evtl. bereits Erfahrungen damit und könntest Hilfestellung leisten, was man alles anpassen müsste?

Mir stellt sich auch noch die Frage, ob seitens der Sturmkind App eine Verbindung auf eine Webpage jetzt bereits möglich ist? 🤔 

 

Vielen Dank und beste Grüße, 

Spider

Edited by -=Sp!der=-
Link to comment
Share on other sites

Bitte melde dich an um den Link zu sehen.

 Streamlit ist ja nur das Frontend, du musst auch noch das backend und die Datenbank laufen haben, ohne die kannst du natürlich keine Spiele anlegen. Die DR!FT app kann auch mit internet url umgehen, das wurde schon getestet. 

Link to comment
Share on other sites

vor 1 Minute schrieb Decrayer:

Bitte melde dich an um den Link zu sehen.

 Streamlit ist ja nur das Frontend, du musst auch noch das backend und die Datenbank laufen haben, ohne die kannst du natürlich keine Spiele anlegen. Die DR!FT app kann auch mit internet url umgehen, das wurde schon getestet. 

OK, verstehe, aber könnte man die beiden Komponenten für die Streamlit Cloud App über den Code mit hinzunehmen, oder gibt es da keinen Weg? 

Link to comment
Share on other sites

Posted (edited)

Hi zusammen,

habe mal einen Fork angelegt, um die Raspberry-Portierung verfügbar zu machen. Die Anleitung ist ebenfalls angepasst.  Bitte auf die Systemvoraussetzungen (Pi-OS 64 Bit Bullseye auf Pi4 - zu testen wäre noch Pi3 und Pi2w) achten.

.https://github.com/Fooxbox/driftapi

 

Pull Request an Christian ist auch raus, es könnte aber etwas schwieriger sein, das in ein gemeinsames Repository zu packen, da Docker bei einigen Dateien einen eineindeutigen File-Namen vorschreibt. Insofern können die Raspi-Anwender sich gerne erstmal in meinem Repository bedienen. 👍

Happy Drift!

 

Bitte melde dich an um den Link zu sehen.

 

Bitte melde dich an um den Link zu sehen.

 

Bitte melde dich an um den Link zu sehen.

Edited by Foox
  • Like 1
  • Thanks 2
Link to comment
Share on other sites

Danke Foox schonmal!

Doch am Sync bin ich gescheitert, kann immer nur ein rotes x, trotz selbem wlan, richtiger IP (http://127.0.0.1/game)  und richtiger GameId.

Hab dann versucht ein adhoc Netzwerk mitm Raspi zu machen und hab dabei meinen dhcpcd-dienst zerschossen, also morgen wieder alles von null weg...

Link to comment
Share on other sites

127.0.0.1 ist die falsche IP


Bist du per SSH auf dem Pi? Dann check mal per ifconfig welche lokale IP der wirklich hat. Alternativ kannste auch in der Fritzbox (oder was du halt als DHCP Server nutzt) nachschauen, welche IP zugewiesen wurde. Dritte Möglichkeit: es gibt Netzwerkscanner fürs Handy, mit dem man sich auch schnell im Heimnetz orientieren kann. Ich nutze auf Android dafür die App "Fing".

  • Thanks 1
Link to comment
Share on other sites

Am 9.6.2022 um 12:54 schrieb Decrayer:

Bitte melde dich an um den Link zu sehen.

 Streamlit ist ja nur das Frontend, du musst auch noch das backend und die Datenbank laufen haben, ohne die kannst du natürlich keine Spiele anlegen. Die DR!FT app kann auch mit internet url umgehen, das wurde schon getestet. 

So, ein paar weitere Schritte konnte ich nun wieder machen.

Nun stehe ich an folgendem Punkt:

  • MongoDB läuft nun Online (MongoDB Atlas)
  • FastAPI läuft und über Swagger UI kann ich alle API Calls schön austesten, Kommunikation mit MongoDB funktioniert
  • Streamlit Frontend läuft

Aktuell starte ich dann quasi erst das Backend und dann separat das Streamlit Frontend. Aber genau hier bin ich aktuell am verzweifeln, da ich über das Frontend nicht auf die API Calls zugreifen kann/darf (?).

In den Docker files der ursprünglichen Variante  werden die Ports der Dienste exposed, ich denke, dass es daran liegen könnte.

Hätte jemand einen guten Ratschlag für mich?

Grüße

Spider

Edited by -=Sp!der=-
Link to comment
Share on other sites

  • 2 weeks later...

Kann mir jemand sagen ob ich das ganze unter Ubuntu auf einem NUC DN2820FYKH mit 8GB RAM und 120GB SSD zum laufen bekomme?

Ich habe den besagten NUC noch hier ruliegen, z.Z. noch ohne Betriebssystem und bevor ich jetzt hier Stundenlang vergebens test, frag ich lieber mal.

 

Grüße Marcel

 

 

 

################ Edit 1

Schade, habe das ganze jetzt mal auf dem besagten NUC unter Proxmox 6.4-15 und Ubuntu 18.04 versucht:

Docker läuft

Server an sich auch, leider scheint die MongoDB Probleme zu machen, das ganze braucht wohl mindestens einen I3 Prozessor

 

driftapi-main-driftapi-db-1          | 
driftapi-main-driftapi-db-1          | WARNING: MongoDB 5.0+ requires a CPU with AVX support, and your current system does not appear to have that!
driftapi-main-driftapi-db-1          |   see https://jira.mongodb.org/browse/SERVER-54407
driftapi-main-driftapi-db-1          |   see also https://www.mongodb.com/community/forums/t/mongodb-5-0-cpu-intel-g4650-compatibility/116610/2
driftapi-main-driftapi-db-1          |   see also https://github.com/docker-library/mongo/issues/485#issuecomment-891991814
driftapi-main-driftapi-db-1          | 
driftapi-main-driftapi-db-1 exited with code 132

 

################ Edit 2

Auf einem NUC7i5BNH unter Proxmox 6.4-15 und Ubuntu 18.04 läuft das ganze schonmal sauber.

Edited by Dr!ft-MaBo
  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

In order to optimize our website for you and to continuously improve it, we use cookies. By continuing to use the website, you consent to the use of cookies. Further information on cookies can be found in our Privacy Policy