- FLL Event Management System: A comprehensive and locally hosted solution for scoring, storing and ignoring. Replacing paper and hard set schedules for live modifiable event data. Including digital scoring, timers, live schedules, scoreboards, match/score tracking, snapshots rollbacks and more.
Project Status | Pulls | Version | Size |
---|---|---|---|
- Most TMS binaries can be found on the release page.
- Download the required platform TMS build from the releases page, i.e
tms.zip
for windows. - Decompress this folder and place somewhere memorable.
- Run the application inside the folder named
tms_server.exe
- There are some optional parameters you can run with the server to change it's configuration.
--addr
modifies the address binding, e.g--addr 0.0.0.0
, by default it's0.0.0.0
--port
modifies which port TMS will run on, e.g--addr 8080
, by default it's8080
--no-tls
this switches the server from usingHTTPS
to the insecureHTTP
, by default TLS is enabled for added security on public networks.--cert
this specifies the location of the certificate file used for TLS, e.g--cert=cert.pem
- By default this will use
--cert=cert.pem
. If no cert is found at the location the server will generate it's own.
- By default this will use
--key
this specifies the location of the key file used for TLS, e.g--key=key.rsa
- By default this will use
--key=key.rsa
. If no cert is found at the location the will will generate it's own
- By default this will use
- There are some optional parameters you can run with the server to change it's configuration.
- Familiarize yourself with the server directory.
cert.pem
used for TLS as the public certificate handed out to clients for connectingkey.rsa
used as the private for the server to decrypt messages sent from the clientslog_config
this directory contains the runtime logs configurations, and what should and shouldn't be placed in the logs folderlogs
this directory contains the logs for the server, and is split betweendb.log
,mdns.log
andtms.log
. Where the DB logs containing the subscriptions to data, access and data entry modifications are placed. And TMS logs hold the general runtime logs for the server.tms.kvdb
this is the database of the server, and shouldNEVER
be touched. The server by default (after setup in the ui) will create backups of this directory and place it inside the backups folder for safe keeping.backups
this directory contains the backups of the server in.zip
format. From the UI you can restore backups/snapshots that are in this directory and create new backups. By default the server will create a backup every 10 minutes, and retain a total of 5 backups at a time.- Note, if you want to restore from a backup that is from a different event. Place the backup inside the
backups
folder. Then from the UI restore from that backup. - It's not recommended to directly remove the
tms.kvdb
directory and replace it with the backup you have on hand. But instead let the TMS server handle trying to parse, verify and replace the running config with the backup. - An upload backup button has not yet been added to the setup page as this is a fairly niche use case.
- Note, if you want to restore from a backup that is from a different event. Place the backup inside the
tms_client
this directory contains the static website files that is hosted by the server.
- The iOS client for iPads and similar devices can be found on the App Store, and can be used to connect to the server hosted on the same network.
- Install Docker
- Pull the image
- Pull the image using the following command
docker pull cjbuchel/tms
, alternatively pull usingdocker pull cjbuchel/tms:<version>
for a specific version.
- Pull the image using the following command
- Running the image in a container
- Run
docker run -d -it -p 8080:8080 -p 5353:5353 --name tms cjbuchel/tms
- Or, for native network. Run
docker run -d -it --network host --name tms cjbuchel/tms
- Or, for native network. Run
- Breaking down the command
- The prior command runs the container in the background using the
-d
flag - The command also exposes the following ports
8080
&5353
8080
is the primary network port, and is used for all endpoints, Web, HTTP, WS & DB control.- The ui is also located at this address under the
/ui
endpoint.https://localhost:80880/ui
- Port
5353
(Optional) is the port used for mDNS broadcasting. mDNS provides a way for non web compiled clients to scan and connect to the server if they're on the same subnet. While it's not critical, it does provide a layer of simplified networking for devices such as iPads or mobile devices. Allowing users to connect without needing to enter the server address. Or in the event that the host ip changes, it provides an automated manner for the client to scan and reconnect using the new IP.
--network host
forces the container to use the host machines network configuration, rather than relying on it's own. This is not critical and is only useful if mDNS is enabled and port5353
is exposed. As the broadcaster needs to broadcast the server (host machine) ip, not the internal docker ip. View https://docs.docker.com/network/network-tutorial-host/ for more information
- The prior command runs the container in the background using the
- Run
- Once the server has been started navigate to the client (either through the hosted web address) or through the application
- For example
https://localhost:8080
, orhttp://localhost:8080
for non tls connections
- For example
- Either wait for a network connection by monitoring the header messages (if on the web or using mDNS).
- Or navigate to the connection page in the top right corner and manually enter the ip. Afterwards go back to view selector screen
- Once you have connected to the server and no header messages are displayed in the app bar. Login through the button in the top right.
- On the first startup only one user will be active,
admin
with a password ofadmin
.
- On the first startup only one user will be active,
- After logging in go back to the view selector screen and click on
Setup
- Provide the generated CSV for your event or create a new one using a supported FLL Schedule generator
- (Optional) Input an admin password, it's recommended but not essential. By default the password will stay as
admin
- (Optional) Input an event name
- Click on the designated send buttons and go back to the view selector.
- Note that the setup page is live, all of the options can be changed during the running of an event.
- Setup users by going to the
Dashboard
page and clicking on the arrow on the left. Then clickUsers
in the drawer menu. - You can either create your own users by clicking on the
+
or generate a set of default users for the event by clicking theAdd Defaults
button.- By default all generated users will have the password of their username (i.e,
head_referee
pass:head_referee
) and should be changed to suite the event if needed.
- By default all generated users will have the password of their username (i.e,
- Once complete the system should be ready for event use.
- TMS has an integrity system built in to catch common mistakes and problems that can be found during an event.
- Specifically that related to Teams, Judging Sessions and Game Matches.
- The integrity system runs as a service in the background, and does a pass over the database every
10 seconds
. - During this time it iterates over the common data and checks for issues related to the prior mentioned. Such as, a score duplication, a team with less matches than others and more. See below for the full list of currently implemented Integrity Checks
Code | Description |
---|---|
W000 | (Unknown Warning) This is the default warning. Usually implying it could not infer the warning type. |
W001 | Team name is missing. |
W002 | Duplicate Team Name. |
W003 | Team has a round 0 score. |
W004 | No tables or teams found in match. |
W005 | Match is complete but score not submitted. |
W006 | Match is not complete but score submitted. |
W007 | Blank table in match. |
W008 | No team on table. |
W009 | Team has judging session within 10 minutes of match. |
W010 | No pods or teams found in sessions. |
W011 | Session Complete, but no core values score submitted. |
W012 | Session Complete, but no innovation score submitted. |
W013 | Session Complete, but no robot design score submitted. |
W014 | Session not Complete, but core values score submitted. |
W015 | Session not Complete, but innovation score submitted. |
W016 | Session not Complete, but robot design score submitted. |
W017 | Blank pod in session. |
W018 | No team in pod. |
Code | Description |
---|---|
E000 | (Unknown Error) This is the default error, usually implying it could not infer the error type. |
E001 | Team number is missing. |
E002 | Duplicate Team Number. |
E003 | Team has conflicting scores. |
E004 | Table does not exist in event. |
E005 | Team in match does not exist in this event. |
E006 | Duplicate match number. |
E007 | Team has fewer matches than the maximum number of rounds. |
E008 | Pod does not exist in event. |
E009 | Team in pod does not exist in this event. |
E010 | Team has more than one judging session. |
E011 | Team is not in any judging sessions. |
E012 | Duplicate session number. |
E013 | Team has match overlapping with Judging session. |
- While the Integrity system finds most common issues, it doesn't find EVERYTHING, and therefore shouldn't be relied upon to determine if an Event to good to run or not.
- Above includes the checks that are currently implemented. But feel free to PR/Raise an issue for added checks.
- Chrome added an update in 2021 which stopped the use of auto play sounds without manual input of some kind. View Auto Play Policy C66 for more information.
- This causes sound to work briefly but when left alone may cut out as it can't be done without user input.
- To bypass this on a chromium browser you must whitelist the website and allow sound. Click the info icon/lock symbol left of the site url, and then navigate to site settings -> sound, and then change to allow.
- You should be able to reload and save. For every new ip address you will need to re-complete this action.
- TMS has sound on any view which has the timer clock
- Similar actions may need to be taken in safari and/or other untested browsers.