Snooker Shotclock programmieren - wie am besten auf dem Pi etablieren (aktuell HTML und JS)

  • Hallo ihr Maschis,


    ich bin einige Zeit raus aus der Uni und diesem Maschboard, hat mir damals gute Dienste geleistet (Eigentlich brauche ich mein Studium jetzt gar nicht mehr für meine Job, etwas schade). Jedenfalls habe ich ein Problem und mir fehlt die richtige Community um da den richtigen Ansatz zu finden.


    Ich bin Präsident eines Snooker-Vereins in NRW und war lange auf der Suche nach einer Lösung, eine Shotclock für den Verein zu bekommen. Zu kaufen gibt es fast nichts out-of-the-box und das wenige was da ist, ist extrem teuer und wenig funktional. Vor allem grad nicht lieferbar. Daher habe ich mich dran gesetzt und mal etwas mit Javascript versucht. Bin blutiger Anfänger dadrin, deswegen ist das nicht reponsive, sieht mies aus und funktioniert nicht in allen Browsern (bspw. wird unter iOS nur der erste Ton abgespielt und bei allen anderen Browsern ist der Ton nicht sonderlich akkurat zur korrekten Zeit). Aber, es funktioniert in den grundlegenden Eigenschaften.


    snookershotclock.netlify.app


    das hat für ein Turnier mehr schlecht als Recht gereicht, aber war da auch sehr buggy. Wir hatten es an einem Rechner und einer hat dann immer die Buttons gedrückt und das war über einen Fernseher für alle sichtbar und hörbar.


    Ich würde das jetzt gerne auf einem Raspberry Pi laufen lassen. Dazu müsste ich aber einige Dinge ändern:

    1. es gibt keine Peripherie mehr, das soll in einer Box laufen.

    --> meine Idee war eine BT Maus umzubauen, dass da drei Knöpfe drauf sind, mit denen kann man das bedienen ohne hinzugucken

    2. es muss beim Anschalten sofort das HTML laden


    Eigentlich dachte ich, dass der Pi eine "eigene" Version bekommen soll, aber nötig ist, das nicht. Es wäre auch besser, wenn die Web-Version besser funktioniert. Die sollte auch über Tasten bedient werden können. Am besten sogar auf dem Handy mit Lautstärketasten oder so, am Rechner geht auch Leertaste. Wirklich gut wäre es halt, wenn man nicht auf das Display gucken muss für die Bedienung (weil man dann die Bälle im Blick halten kann).


    Mein Problem ist hauptschlich die Bedienung, also wie bekomme ich das in JS hin, dass der auf jedwede Maus-Klicks reagiert, egal wo man drückt und vor allem: ohne beim Rechtsklick das Kontextmenü zu öffnen? Ich hab es mit dem eventlistener probiert und das will einfach nicht. Weder über die Maus noch über die Leertaste (gedrückt halten: Stop und Reset der Shotclock; loslassen: Shotclock startet). Kennt sich hier jemand aus? Ich kann gerne meine bisherigen Code bereit stellen, da ist aber viel Müll drin.


    wer grundsätzlich das Prinzip Shootout beim Snooker nicht kennt, hier eine kurze Regelkunde:

    1. Ein Frame dauert fix 10 Minuten Zeit

    2. Pro Stoß hat der jeweilige Spieler 15 Sekunden Zeit, ab 5 Minuten Frame-Zeit nur noch 10 Sekunden (=Shotclock)

    3. Die Zeit beginnt, sobald alle Bälle ruhen und endet mit Stoß (während die Bälle rollen bleibt sie stehen)

    4. nach den 10 Minuten gewinnt der, mit mehr Punkten, oder eben Aufgabe

    Inhaltlich gibt es noch zwei wesentliche Regeländerungen beim Spiel, die sind aber für den Code egal (neues Foul und was passiert nach Foul).


    Das ganze mache ich in meiner Freizeit für den Verein und werde das auch anderen Vereinen zur Verfügung stellen, wenn die danach fragen. Also falls jemand sich die Hardware beschafft, würde ich denen auch beim Einrichten helfen, natürlich alles ehrenamtlich. Wäre ja grundsätzlich bereit, dafür auch was zu zahlen, aber normale Entwickler wollen dafür soviel Geld haben (vermutlich ja auch zurecht), dass sich das nicht ansatzweise lohnt. Ziel wäre es halt einerseits, eine Webversion auf unserer Webseite zu haben (snooker-freunde-wiedenbrueck.de) und eben eine Standalone-Lösung, die man mal eben aufstellen kann. Da ich den Pi hier hatte, dient der jetzt erstmal dafür, habe einen 10" Monitor günstig gebraucht bekommen, darauf soll das dann laufen. Also Strom anschließen und los. Ggf. bastel ich noch ein Gehäuse am 3D Drucker oder aus Holz, aber dafür muss das erstmal sauber laufen.


    Falls hier jemand gute Ideen hat, eine gute Community kennt (deutsch wäre viel einfacher, aber englisch geht natürlich auch), oder sogar aktiv helfen will, gerne melden! Danke


    LG

    Felix

    • Hilfreich

    Du könntest sowas auch alternativ auch auf einem ESP32 laufen lassen, das wäre bei den aktuellen Preisen ne ganze Ecke günstiger als auf dem Pi.


    Dann könntest du das ganze sogar autark betreiben, also ESP32 mit nem Aku, dann die entsprechenden Taster dazu und ein kleines 3D-Druck Gehäuse mit Buzzer/LEDs (eventuell kleines Display) und fertig. Die Programmierung ist ziemlich simpel über die Arduino IDE machbar und über WLAN kannst du das ganze auch super einfach in dein Netzwerk einbinden und dann über einen kleinen Webserver auf dem ESP auch vom Rechner/Handy abrufen.


    Und zu deiner Rechtsklick in JS Frage:

    How can I capture the right-click event in JavaScript?
    I want to block the standard context menus, and handle the right-click event manually. How is this done?
    stackoverflow.com

    Is right click a Javascript event?
    Is right click a Javascript event? If so, how do I use it?
    stackoverflow.com

  • Hi Benji,


    danke, die Links sind gut, den ersten hatte ich auch nicht gefunden und der scheint das auf jeden Fall zu lösen. Hatte bisher das Problem, dass die Maus an einer bestimmten Stelle sein muss (HTML Box), um erkannt zu werden. mit dem Eventlistener sollte das aber dann auch ohne gehen. Mal sehen.


    Initial ist das für unseren Club gedacht, also eine einmalige Sache. Da ich daran gleichzeitig auch lerne mit dem Pi umzugehen, ist das schon ok, der Preis ist fast egal, da er vorhanden ist (bin aktuell unter 100€ für Pi und Display, der Rest is vorhandene Peripherie). Da wir jede Menge alte Menschen im Club haben, die gerade so mit dem Handy umgehen können, sollte es halt eine Plug&Play Lösung sein: Strom anstecken und mit drei Tasten alles bedienen können, am Ende Strom aus. Alles andere wäre nichts für die meisten. Ich weiß dahe rnicht, ob deine angestrebte Lösung auch wirklich einfacher ist am Ende.


    Zudem soll das auch grundsätzlich für andere Clubs funktionieren. Also falls da Interesse besteht, ändere ich denen den Code so ab, dass deren Logo da ist und bastel denen das zusammen. Oder auch nur die Webversion. Man kann das halt kaum kaufen und es gibt nur eine sehr miese Android-App. Da verdient niemand Geld mit, gibt zu wenig potentielle Kunden.


    Finde gerade allerdings kaum Zeit neben Arbeit und Kind, um mich da rein zu knien. Das mach ich leider nicht mit halbem Arsch, da muss ich mich für einschließen und konzentrieren können

  • habe übrigens das Design noch responsive gestaltet, so dass es einigermaßen gut auf Handys laufen sollte. Leider weiterhin keine Töne auf iOS Geräten, kein Plan warum.

    SnookerShotClock


    Am Pi arbeite ich noch, dass ich da eine Version habe, die mit einem Standard-Presenter funktioniert.