Zum Inhalt springen

TUTORIAL Entwickler Informationen zur DR!FT Community API


Empfohlene Beiträge

Bitte melde dich an um den Link zu sehen.

 Achte vielleicht mal darauf, welche Werte in dem Beispiel als String "" und welche ohne Gänsefüßchen übermittelt werden.

Bitte melde dich an um den Link zu sehen.

 Nein, dass ist leider aktuell noch nicht möglich, steht bei mir auf der Ideenliste für die Erweiterung der API aber ganz weit oben.

Bitte melde dich an um den Link zu sehen.

 Es gibt viele Pläne und mehrere Arten, sich zu beteiligen. Ich selbst werde aktuell vor allem am Server-Prototypen weiter entwickeln, dort verschiedene Features und Ideen einbauen und die API selbst voran treiben. Was wir aber, für die Community denke ich mal am meisten brauchen, ist ein Online-Fähiger Racing Server. Den würde ich aber getrennt vom Prototypen aufsetzen, weil man dafür vermutlich andere Technologien nutzen wird. Wenn du in dem Bereich Fähigkeiten hast, kannst du mich gerne per PN anschreiben oder du machst einfach mal einen ersten Aufschlag in die Richtung. Ich hab dafür auch schon angefangen, eine Feature-Liste zu erstellen. Zum Kickoff solcher Projekte würde ich übrigens allen Empfehlen, einfach hier im Forum einen neuen Beitrag zu eröffnen, wo ihr die Idee vorstellt, was ihr dafür noch für Leute sucht.

Bitte melde dich an um den Link zu sehen.

 Zu Frage 1: Das könnte man schon jetzt machen, es steht deinem Server ja frei, welche Events von welchen "user-id's" er weiterhin für die Punkteberechnung heran zieht. Nur die App selbst kannst du von Server Seite während des Rennens nicht beeinflussen, d.h. du kannst z.B. nicht einfach das Rennen der heraus fallenden Fahrer beenden.

Zu Frage 2:  Nein, das gibt es leider aktuell noch nicht, aber solche Ideen sammel' ich als Vorschlag für die Verbesserung der API. Vielleicht magst du mir mal einen konkreten Vorschlag dazu, wie das umgesetzt werden könnte, per PN schicken? Ich hab auch schon überlegt, ob die Nachrichten der Racer quasi signiert werden können, damit deren Authentizität gewährleistet ist, bin aber auf dem Gebiet nicht ganz so bewandert. Für eine Online-Webseite wär das aber ziemlich notwendig, genau so wie vielleicht ein Nutzer-Passwort, oder meinst du man käme ohne aus, wenn man nur über JWT die Nachrichten signiert?

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 5 Stunden schrieb THR3360:

 

Vielleicht liegts daran? -> { "status": "true", ...

Ich nutze json_encode();

Hi,

hab ich schon ausprobiert, klappt leider auch nicht. Ich habe die Daten auch per json_encode() verschlüsselt.

Bitte melde dich an um den Link zu sehen.

 klappt bei dir denn die Verarbeitung der json kodierten Daten von der App?

Gruß 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 3 Stunden schrieb NorthWave:

Hi,

hab ich schon ausprobiert, klappt leider auch nicht. Ich habe die Daten auch per json_encode() verschlüsselt.

Bitte melde dich an um den Link zu sehen.

 klappt bei dir denn die Verarbeitung der json kodierten Daten von der App?

Gruß 

Das Senden funktioniert, allerdings habe ich den startzeitpunkt noch nicht übertragen. Also noch gar nicht probiert.

Definiere die Ubergabeparameter in einem assoziativem Array und dann parsen.

Empfang hab ich noch nicht programmiert. Viele Baustellen.

Bearbeitet von THR3360
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 7 Stunden schrieb Zockermichi125:

? Ich hab als Idee schon eingeplant
einen Art "Deathmatch" Modus zu bauen bei dem in jeder Runde der letzte Runde rausfliegt bis der letzte Übrig bleibt
und dementsprechend gewinnt.

Ausscheidungsrennen! 
Genau darauf warte ich schon sooooo lange! 
entweder nach Zeit - alle 2 min bspw aber sollte einstellbar sein logischerweise - oder eben nach Runden! 
Treib die Idee voran, ich will den Modi! 🔥

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bitte melde dich an um den Link zu sehen.

kannst du Mal bitte nachschauen welche Mongo-Version angezogen wird, wenn du bei dir den Docker baust?

Ich hab die Dockerfiles so umgeschrieben, dass der Build jetzt auch auf der Raspi-Architektur durchläuft (ein ganz schönes Reverse-Gebastel war das). Damit bekomme ich den Container auf die Beine und die Webseite ist erreichbar. Yeah!

Bitte melde dich an um Bilder zu sehen.

Allerdings können noch keine Rennen angelegt werden. Ziemlich offensichtlich liegts an der Verbindung zur MongoDB. Die Fehlermeldungen haben erstmal gezeigt, dass nicht alle notwendigen Extensions unterstützt seien (armv8.2-A wird benötigt aber der Cortex vom Pi ist ein armv8-A https://en.m.wikipedia.org/wiki/ARM_Cortex-A72).

Bitte melde dich an um Bilder zu sehen.

Als workaround habe ich jetzt erstmal das Docker Image Mongo:bionic angezogen. Das ist kompatibel mit dem Pi. Es scheint auch so, als würden Daten reingeschrieben. Allerdings crasht weiterhin der driftapi-service beim ersten Aufruf:

Bitte melde dich an um Bilder zu sehen.

Nochmal zur zurück zur Eingangsfrage: Ich hoffe dass sich das Problem auflöst, wenn ich die Bionic-Variante der von dir verwendeten Version anziehe.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bitte melde dich an um den Link zu sehen.

 

Wenn ich das MongoDB Image Inspiziere, finde ich folgendes: 

/bin/sh -c #(nop) ENV MONGO_VERSION=5.0.9

Im Container selbst "mongod --version" ergibt ebenfalls:

# mongod --version
db version v5.0.9
Build Info: {
    "version": "5.0.9",
    "gitVersion": "6f7dae919422dcd7f4892c10ff20cdc721ad00e6",
    "openSSLVersion": "OpenSSL 1.1.1f  31 Mar 2020",
    "modules": [],
    "allocator": "tcmalloc",
    "environment": {
        "distmod": "ubuntu2004",
        "distarch": "x86_64",
        "target_arch": "x86_64"
    }
}
#

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke dir!

Also mit MongoDB ist es echt nicht einfach. Ich finde keine 5.x Version, die mit dem Raspi harmoniert - crashen alle - teilweise mit unterschiedlichen Fehlercodes, aber alle mit dem Hinweis auf fehlende Extensions. Und bei den älteren Versionen schießt es die driftapi ab und die Datenbank baumelt nutzlos im Leeren.

Ich überlege jetzt schon eine andere, leichtgewichtigere DB einzubinden. Aber ich scheue den Aufwand, um mich in alles reinzuarbeiten ... ist leider schon sehr lange her, dass ich mich ernsthaft mit Code  beschäftigt hab.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 23 Minuten schrieb Foox:

Danke dir!

Also mit MongoDB ist es echt nicht einfach. Ich finde keine 5.x Version, die mit dem Raspi harmoniert - crashen alle - teilweise mit unterschiedlichen Fehlercodes, aber alle mit dem Hinweis auf fehlende Extensions. Und bei den älteren Versionen schießt es die driftapi ab und die Datenbank baumelt nutzlos im Leeren.

Ich überlege jetzt schon eine andere, leichtgewichtigere DB einzubinden. Aber ich scheue den Aufwand, um mich in alles reinzuarbeiten ... ist leider schon sehr lange her, dass ich mich ernsthaft mit Code  beschäftigt hab.

Bitte melde dich an um den Link zu sehen.

 Vielleicht kannst du ja eine ältere MongoDB Version nehmen, wenn du PyMongo in einer älteren Version nutzt? Oder ganz bescheuert: Nimm ne kostenlose MongoDB Instanz aus dem Internet oder lass einfach nur MongoDB auf deinem Laptop laufen in dem Container der funktioniert...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bitte melde dich an um den Link zu sehen.

naja, mein Ziel ist es einen Pi komplett Standalone zu nutzen, um das ganze Paket ohne Aufwand zu Treffen mitzunehmen. Und natürlich um es jedem mit wenig Aufwand zugänglich zu machen. Ein zusätzliches Laptop oder Internetzugang mit Cloud-DB würde den Ansatz leider ad absurdum führen.

 

Die Idee mit pymongo ist interessant. Erste Google-Recherche sagt mir allerdings, dass die aktuelle pymongo-Version alle alten MongoDB bis runter zu v3.6 unterstützen "müsste". Hast du da Erfahrungen? UND: Wie ziehe ich da eine ältere Version an? Müsste das im database.py angelegt werden? (Sorry falls die letzten zwei Fragen naiv klingen, das ist mein erster Kontakt mit Python)

PS: dein Code ist super-aufgeräumt .. da kann man sich sogar ohne Python-Kenntnisse schön durch die Struktur hangeln! Klasse!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bitte melde dich an um den Link zu sehen.

 in dem Fall würde ich nicht die pymongo version ändern, sondern mir die genaue Fehlermeldung anschauen die es mit einer pi kompatiblen mongodb Umgebung gibt. Konkret sind die benötigten Komponenten in /driftapi/ in der poetry datei und der pyproject datei hinterlegt. Die pyproject ist quasi die Bedingung und die poetry.lock die konkrete festgezurrte Kombination die von poetrs herunter geladen wird wenn der container gebaut wird.

Danke für das Lob! Aber bestimmt hast du auch noch nicht das Chaos in database.py entdeckt 😉

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Servus zusammen,

Bitte melde dich an um den Link zu sehen.

top Arbeit, da habe ich gleich Lust bekommen ein bisschen zu basteln.

Hab mich bei meiner lokalen Version mal ein bisschen ausgetobt (besser gesagt, ein paar Dinge ziemlich quick and dirty umgesetzt).

Kurzzusammenfassung von dem, was ich bisher umgesetzt/probiert habe:

  • Hinzufügen von Emojis an diversen Stellen, speziell auch für Streckeneigenschaft, Spielerstatus (Ready, Driving, Finish, False Start), sowie für die Endwertung, zudem Metadaten über set_page_config (Icon und Tabname) und Hintergrund
  • eine Endwertung mit Medaillen für Platz 1 bis 3, sowie Auszeichnung für die schnellste Runde (später wohl auch für den Spieler mit den meisten Punkten beim Bonus Target) - keine Auszeichnungen bei Fehlstart und bei frühzeitigen Rennabbruch
  • hab das Widget für die Festlegung der Startzeit von time_insert zu selectbox geändert, um die Startzeit in Minutenintgervallen setzen zu können
  • speziell für Rally-Cross und Rally wird mit Emojis die aktuelle Streckenbeschafffenheit angezeigt (selbst wenn man (öfters) über Start/Ziel fährt wird die letzte gütige Eigenschaft angezeigt), sowie Anzeige vom Kiesbett für 3 Sekunden und dann wieder zurück zur letzten gültigen Streckeneigeschaft - ist ein ziemlich übler Hack geworden..
  • kleine weitere Dinge

Ich muss betonen, ich bin eigentlich kein Python-Programmierer und einige der Hacks sind bestimmt sehr übel. 😄

Jedoch sind mir bei meinen Versuchen ein paar Dinge aufgefallen und so komme ich zu meinen eigentlichen Fragen:

  1. wohl die aktuell interessanteste für mich:
    • cool ist, dass wenn ein Rennen eingestellt ist, über den Button "Reset Game" in Streamlit zurückgespult werden kann und auf den Smartphones ebenfalls mit dem "Reset/Nochmals" Button neu gestartet werden kann.
    • Sollte jedoch eine Startzeit eingestellt worden sein, dann ist das neue Rennen nach reset ohne  neue Startzeit
    • Kann es sein, dass hierzu von der WebApp an die Dr!ft App am Smartphone kein neuer Sync geschickt wird?
    • Das wäre nämlich cool - Frage ist hierbei, könnte das auf die Liste für ein kommendes Update: hieße dann, falls beim Sync zu Beginn eine Startzeit eingestellt wurde, dass, wenn auf der WebApp "Reset Game" gedrückt wird, in der Datenbank eine neue Startzeit (würde sagen aktuelle Zeit + 1 Sekunde) gesetzt wird. Wenn man in der Dr!ft App auf dem Smartphone "Reset/Nochmals" ausführt, wird ein neuer Sync durchgeführt und los gehts... 🙂
  2. Kleinigkeit:
    • kann es sein, dass für die Einstellungen von Drift Assi und Soft Steering noch keine Werte von der Dr!ft App vom Smartphone an den Webserver übertragen werden?
  3. für (Team-)Gymkhana Spielmodus:
    • gibt es bereits Informationen wann und speziell wie die Punkte der Targets übermittelt werden? Kann na nach dem Überfahren des Targets noch etwas dauern bis die Punkte zum Target feststehen.

Nochmals herzlichen Dank

Bitte melde dich an um den Link zu sehen.

und ich freue mich auf deine Antworten.

Viele Grüße

Spider

Bitte melde dich an um Bilder zu sehen.

Bearbeitet von -=Sp!der=-
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Zu deinen Fragen:

1) Der Button "reset game" löscht einfach nur alle PlayerStatus Objekte aus der Datenbank die dieselbe game id haben wie das aktuell angezeigte Spiel, mehr macht das nicht.

Die Sache mit der fehlenden Startzeit ist in der App eingebaut, macht aber auch Sinn dass die dann nicht mehr eingebaut ist, oder?

Stimmt, da wird kein neuer Sync geschickt, ich vermute, dass die App einfach stur die gleichen Einstellungen von davor übernimmt und zum Glück das übersenden von Informationen an der Server beibehält. Das ist praktisch, wenn man z.B. einen auf viele Gymkhana Läufe Optimierten Server basteln möchte, wo man nicht jedes mal zwischendrin ein neues Spiel aufmachen möchte, sondern einfach so oft wie möglich neu starten möchte.

Die Idee mit dem Startzeit-Reset bei Game Reset ist nicht ganz so simpel: Wenn ich einfach nur Zeit+1 Sekunde setze, dann wäre das viel zu knapp bemessen. Ich meine, alle müssten innerhalb einer Sekunde nachdem ich den Knopf gedrückt habe sofort wieder rein joinen und los gehts. Das wäre glaube ich in der Praxis nicht funktionsfähig. Eher +1 Minute, aber ganz ehrlich, das wäre schon nen ziemlich spezieller Hack für eine sehr spezielle Funktion.

2) Ja, das ist mir auch schon aufgefallen.

3) Da bin ich auch gerade dran (implementiere ich in einem Branch und merge ich sobald es schön ist). Sobald du über ein Target fährst und die Punkteauswertung für das Target fest steht, wird das entsprechende "target" event mit der Punktzahl übermittelt (inklusive combo und supercombo bonus). Wenn du ein "in-time-finish" hast, dann steht auch beim letzten Ziel-Target eine Punktzahl die dem Bonus entspricht. Aber Achtung: Frühstarts werden Punktemässig noch nicht übermittelt, weil die Strafe dafür Prozentual von der Gesamtpunktzahl abgezogen werden. Und in der App während des Spiels werden weder in-time-finish noch Frühstart-Abzug bei der Punktzahl oben rechts mit einbezogen. Allerdings bekommt man über das "end" event die finale, mit der statistik übereinstimmende Punktzahl übermittelt. D.h. du kannst einfach die Punktzahlen der target events mitzählen und anzeigen, ausser dass der letzten Ziellinie. Sobald du das "end" event bekommst, überschreibst du dann die Punktzahl mit der darin stehenden.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

erstmal vielen Dank für die gute Arbeit !

Habe Docker installiert bekommen, leider bekomme ich anscheinend keinen Zugriff von der Drift App auf den Server.

Die 127... kann ich vom Handy aus  und an anderen PC nicht aufrufen.

Portfreigabe habe ich gemacht, ohne Erfolg, testweise alle Firewalls deaktiviert auch ohne Erfolg.

Würde mich sehr über einen Tipp freuen.

grüße

... funzt jetzt ! Frage war ziemlich blöde von mir 😉

Bearbeitet von TheSeeVen
Link zu diesem Kommentar
Auf anderen Seiten teilen

Servus,

vor 19 Minuten schrieb Decrayer:

1) Der Button "reset game" löscht einfach nur alle PlayerStatus Objekte aus der Datenbank die dieselbe game id haben wie das aktuell angezeigte Spiel, mehr macht das nicht.

Die Sache mit der fehlenden Startzeit ist in der App eingebaut, macht aber auch Sinn dass die dann nicht mehr eingebaut ist, oder?

Stimmt, da wird kein neuer Sync geschickt, ich vermute, dass die App einfach stur die gleichen Einstellungen von davor übernimmt und zum Glück das übersenden von Informationen an der Server beibehält. Das ist praktisch, wenn man z.B. einen auf viele Gymkhana Läufe Optimierten Server basteln möchte, wo man nicht jedes mal zwischendrin ein neues Spiel aufmachen möchte, sondern einfach so oft wie möglich neu starten möchte.

Meine Überlegung dahinter war folgende:

Ein paar Spieler möchten z.B. ein gemeinsames Rennen fahren (Start Ampel sync.); dazu stellen Sie die Zeit ein, sagen wir in zwei Min. gehts los. Nach dem Spiel, möchten Sie in den gleichen Settings gleich wieder ein neues Spiel starten mit gemeinsamer Startampel (Revanche, evtl. auch der Grundstein für Best-of-X). Meine Gedankengang war es nun, dass Sie das schnell erledigen können, wenn man kurz "Reset Game" in der WebApp drückt und alle Spieler dann nur den "Nochmal" Button in der Sturmkind App klicken.

Zitat

Stimmt, da wird kein neuer Sync geschickt, ich vermute, dass die App einfach stur die gleichen Einstellungen von davor übernimmt und zum Glück das übersenden von Informationen an der Server beibehält. Das ist praktisch, wenn man z.B. einen auf viele Gymkhana Läufe Optimierten Server basteln möchte, wo man nicht jedes mal zwischendrin ein neues Spiel aufmachen möchte, sondern einfach so oft wie möglich neu starten möchte.

Sollte beim ersten Sync erkannt worden sein, dass man eine gemeinsame Startampel zu einer gewissen Zeit will, dann kann man ja davon ausgehen, dass es sich um ein Rennen, bzw. z.B: simultan Gynkhana Event handelt. Somit könnte man doch Seitens der Sturmkind App beim neu reingehen einen erneuten Sync durchführen, oder? Bei der WebApp meinte ich natürlich +1 min (das sollte aber reichen - die Minute läuft ja immer erst, wenn man Reset Game in der WebApp drückt) nicht +1 sec, die müsste ja bei einem Reset Game, sollte die Einstellung einer gemeinsamen Startampel gesetzt sein, auch zurückgesetzt werden.

Ich meine, es geht natürlich auch, dass man das Game löscht und dann wieder erneut einstellt, aber schöner wäre es doch, z.B. für Best-of-X dass das ohne den Umweg gehen würde. 😉 Gäbe es da evtl. eine Möglichkeit, dass dies in das nächste App Update einfließen könnte? Bzw anders gefragt, an welcher Stelle (z.B. hier im Forum) müsste man das sinnvollerweise einbringen?

Zitat

3) Da bin ich auch gerade dran

Sehr cool 🙂 d.h. die Punkte werden aktuell auch schon übermittelt?

Vielen Dank und beste Grüße

Spider

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

 Teilen

×
×
  • Neu erstellen...

Wichtige Information

Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung