Skip to content

Latest commit

History

53 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Wuzzler for FHTW Mensa

The Smart Wuzzler is an augmented Tabletop-Soccer Game for the student restaurant of the University of Applied Sciences Technikum Wien. It features automatic goal counts, game session management via smart phone user login, audio-visual feedback of game progress and a high score list. Users can register and login via smartphone - the game logic runs on a RaspberryPi4 which also provides a WiFi Hotspot.

Credits

This project is based upon the work by Alexander Peters who had the initial idea and made the first implementation in 2017, and Ferdinand Unger who ported the project to a recent version of node.js and Angular.js.

Architecture and tools

The Tabletop-Soccer game implementation consists of 3 parts, which are built using node.js (Version 12.13.1). The backend (server) connects to a Postgres database to store user and game session data. The graphical frontends (client and display) use and Angular CLI version 8.2.2.

  • The Backend: connects to the database and to the low level hardware (via Cylon/Firmata, expects an Arduino with Firmata firmware running at port /dev/ttyACM0). The GPIO pin connections for goal detection and pushbuttons can be found in file "robot.js". The backend detects goals and user interaction and updates the game state for client and display accordingly. It also generates soccer arena sounds to indicate game events (game start, goal, revoked goal, game won).
  • The Client: offers a responsive user interface in the web browser in order to create a new user, login, as well as challenge your friends into a 1 vs. 1 at tabletop soccer. The available players are displayed and can be challenged.
  • The Display: shows the progress of ongoing games and the high score list on a TV that is mounted behind the soccer table.

Useful scripts (start chromium in kiosk mode, activate/deactivate hotspot, iptables for routing traffic) can be found in subfolder scripts

Installation and build procedure

  1. Clone the git repository

  2. Navigate to "client" folder and run "npm install" in terminal

  3. Navigate to "display" folder and run "npm install" in terminal

  4. Navigate to "backend" folder and run "npm install" in terminal

  5. Create the database

  • Download and install the newest version of PostgreSQL.

  • Run following commands to create the database user and the wuzzler_db database, using the postgres tool:

    sudo su postgres createuser pi -P -s (then input and confirm password 'raspberry') createdb wuzzler_db psql wuzzler_db -f wuzzler_db_9.1.sql 
  • exit the postgres tool

  • Optional: you can use the pgAdmin tool to graphically manage the database (see e.g. [here] (https://www.guru99.com/postgresql-create-database.html) for details)

  1. Open the file "db.js" with a text editor. In line 8: Verify if user account/password match the credentials you chose in step 5.

  2. Navigate to "client" folder and run "npm run dev" in terminal to start the server. All three apps will start automatically. Client and display should open in a webbrowser and the backend should connect to Arduino and database. (Alternatively: start the backend via node app.js)

IP, ports and connections

The client content is served from http://localhost:4200/, multiple clients can connect to this port in order to show the user frontend. The display is served from http://localhost:4220/, it is shown in fullscreen (kiosk) mode by the RaspberryPi which also runs the backend. The backend listens on port 4444, where a websocket is used for communication to clients and display.

HDMI-CEC to control TV via HDMI

sudo apt install cec-utils

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - ProjectKitchen/WuzzlerFinal · GitHub
Skip to content

Latest commit

History

53 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Wuzzler for FHTW Mensa

The Smart Wuzzler is an augmented Tabletop-Soccer Game for the student restaurant of the University of Applied Sciences Technikum Wien. It features automatic goal counts, game session management via smart phone user login, audio-visual feedback of game progress and a high score list. Users can register and login via smartphone - the game logic runs on a RaspberryPi4 which also provides a WiFi Hotspot.

Credits

This project is based upon the work by Alexander Peters who had the initial idea and made the first implementation in 2017, and Ferdinand Unger who ported the project to a recent version of node.js and Angular.js.

Architecture and tools

The Tabletop-Soccer game implementation consists of 3 parts, which are built using node.js (Version 12.13.1). The backend (server) connects to a Postgres database to store user and game session data. The graphical frontends (client and display) use and Angular CLI version 8.2.2.

  • The Backend: connects to the database and to the low level hardware (via Cylon/Firmata, expects an Arduino with Firmata firmware running at port /dev/ttyACM0). The GPIO pin connections for goal detection and pushbuttons can be found in file "robot.js". The backend detects goals and user interaction and updates the game state for client and display accordingly. It also generates soccer arena sounds to indicate game events (game start, goal, revoked goal, game won).
  • The Client: offers a responsive user interface in the web browser in order to create a new user, login, as well as challenge your friends into a 1 vs. 1 at tabletop soccer. The available players are displayed and can be challenged.
  • The Display: shows the progress of ongoing games and the high score list on a TV that is mounted behind the soccer table.

Useful scripts (start chromium in kiosk mode, activate/deactivate hotspot, iptables for routing traffic) can be found in subfolder scripts

Installation and build procedure

  1. Clone the git repository

  2. Navigate to "client" folder and run "npm install" in terminal

  3. Navigate to "display" folder and run "npm install" in terminal

  4. Navigate to "backend" folder and run "npm install" in terminal

  5. Create the database

  • Download and install the newest version of PostgreSQL.

  • Run following commands to create the database user and the wuzzler_db database, using the postgres tool:

    sudo su postgres createuser pi -P -s (then input and confirm password 'raspberry') createdb wuzzler_db psql wuzzler_db -f wuzzler_db_9.1.sql 
  • exit the postgres tool

  • Optional: you can use the pgAdmin tool to graphically manage the database (see e.g. [here] (https://www.guru99.com/postgresql-create-database.html) for details)

  1. Open the file "db.js" with a text editor. In line 8: Verify if user account/password match the credentials you chose in step 5.

  2. Navigate to "client" folder and run "npm run dev" in terminal to start the server. All three apps will start automatically. Client and display should open in a webbrowser and the backend should connect to Arduino and database. (Alternatively: start the backend via node app.js)

IP, ports and connections

The client content is served from http://localhost:4200/, multiple clients can connect to this port in order to show the user frontend. The display is served from http://localhost:4220/, it is shown in fullscreen (kiosk) mode by the RaspberryPi which also runs the backend. The backend listens on port 4444, where a websocket is used for communication to clients and display.

HDMI-CEC to control TV via HDMI

sudo apt install cec-utils

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - ProjectKitchen/WuzzlerFinal · GitHub
Skip to content

Latest commit

History

53 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Wuzzler for FHTW Mensa

The Smart Wuzzler is an augmented Tabletop-Soccer Game for the student restaurant of the University of Applied Sciences Technikum Wien. It features automatic goal counts, game session management via smart phone user login, audio-visual feedback of game progress and a high score list. Users can register and login via smartphone - the game logic runs on a RaspberryPi4 which also provides a WiFi Hotspot.

Credits

This project is based upon the work by Alexander Peters who had the initial idea and made the first implementation in 2017, and Ferdinand Unger who ported the project to a recent version of node.js and Angular.js.

Architecture and tools

The Tabletop-Soccer game implementation consists of 3 parts, which are built using node.js (Version 12.13.1). The backend (server) connects to a Postgres database to store user and game session data. The graphical frontends (client and display) use and Angular CLI version 8.2.2.

  • The Backend: connects to the database and to the low level hardware (via Cylon/Firmata, expects an Arduino with Firmata firmware running at port /dev/ttyACM0). The GPIO pin connections for goal detection and pushbuttons can be found in file "robot.js". The backend detects goals and user interaction and updates the game state for client and display accordingly. It also generates soccer arena sounds to indicate game events (game start, goal, revoked goal, game won).
  • The Client: offers a responsive user interface in the web browser in order to create a new user, login, as well as challenge your friends into a 1 vs. 1 at tabletop soccer. The available players are displayed and can be challenged.
  • The Display: shows the progress of ongoing games and the high score list on a TV that is mounted behind the soccer table.

Useful scripts (start chromium in kiosk mode, activate/deactivate hotspot, iptables for routing traffic) can be found in subfolder scripts

Installation and build procedure

  1. Clone the git repository

  2. Navigate to "client" folder and run "npm install" in terminal

  3. Navigate to "display" folder and run "npm install" in terminal

  4. Navigate to "backend" folder and run "npm install" in terminal

  5. Create the database

  • Download and install the newest version of PostgreSQL.

  • Run following commands to create the database user and the wuzzler_db database, using the postgres tool:

    sudo su postgres createuser pi -P -s (then input and confirm password 'raspberry') createdb wuzzler_db psql wuzzler_db -f wuzzler_db_9.1.sql 
  • exit the postgres tool

  • Optional: you can use the pgAdmin tool to graphically manage the database (see e.g. [here] (https://www.guru99.com/postgresql-create-database.html) for details)

  1. Open the file "db.js" with a text editor. In line 8: Verify if user account/password match the credentials you chose in step 5.

  2. Navigate to "client" folder and run "npm run dev" in terminal to start the server. All three apps will start automatically. Client and display should open in a webbrowser and the backend should connect to Arduino and database. (Alternatively: start the backend via node app.js)

IP, ports and connections

The client content is served from http://localhost:4200/, multiple clients can connect to this port in order to show the user frontend. The display is served from http://localhost:4220/, it is shown in fullscreen (kiosk) mode by the RaspberryPi which also runs the backend. The backend listens on port 4444, where a websocket is used for communication to clients and display.

HDMI-CEC to control TV via HDMI

sudo apt install cec-utils

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - ProjectKitchen/WuzzlerFinal · GitHub
Skip to content

Latest commit

History

53 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Wuzzler for FHTW Mensa

The Smart Wuzzler is an augmented Tabletop-Soccer Game for the student restaurant of the University of Applied Sciences Technikum Wien. It features automatic goal counts, game session management via smart phone user login, audio-visual feedback of game progress and a high score list. Users can register and login via smartphone - the game logic runs on a RaspberryPi4 which also provides a WiFi Hotspot.

Credits

This project is based upon the work by Alexander Peters who had the initial idea and made the first implementation in 2017, and Ferdinand Unger who ported the project to a recent version of node.js and Angular.js.

Architecture and tools

The Tabletop-Soccer game implementation consists of 3 parts, which are built using node.js (Version 12.13.1). The backend (server) connects to a Postgres database to store user and game session data. The graphical frontends (client and display) use and Angular CLI version 8.2.2.

  • The Backend: connects to the database and to the low level hardware (via Cylon/Firmata, expects an Arduino with Firmata firmware running at port /dev/ttyACM0). The GPIO pin connections for goal detection and pushbuttons can be found in file "robot.js". The backend detects goals and user interaction and updates the game state for client and display accordingly. It also generates soccer arena sounds to indicate game events (game start, goal, revoked goal, game won).
  • The Client: offers a responsive user interface in the web browser in order to create a new user, login, as well as challenge your friends into a 1 vs. 1 at tabletop soccer. The available players are displayed and can be challenged.
  • The Display: shows the progress of ongoing games and the high score list on a TV that is mounted behind the soccer table.

Useful scripts (start chromium in kiosk mode, activate/deactivate hotspot, iptables for routing traffic) can be found in subfolder scripts

Installation and build procedure

  1. Clone the git repository

  2. Navigate to "client" folder and run "npm install" in terminal

  3. Navigate to "display" folder and run "npm install" in terminal

  4. Navigate to "backend" folder and run "npm install" in terminal

  5. Create the database

  • Download and install the newest version of PostgreSQL.

  • Run following commands to create the database user and the wuzzler_db database, using the postgres tool:

    sudo su postgres createuser pi -P -s (then input and confirm password 'raspberry') createdb wuzzler_db psql wuzzler_db -f wuzzler_db_9.1.sql 
  • exit the postgres tool

  • Optional: you can use the pgAdmin tool to graphically manage the database (see e.g. [here] (https://www.guru99.com/postgresql-create-database.html) for details)

  1. Open the file "db.js" with a text editor. In line 8: Verify if user account/password match the credentials you chose in step 5.

  2. Navigate to "client" folder and run "npm run dev" in terminal to start the server. All three apps will start automatically. Client and display should open in a webbrowser and the backend should connect to Arduino and database. (Alternatively: start the backend via node app.js)

IP, ports and connections

The client content is served from http://localhost:4200/, multiple clients can connect to this port in order to show the user frontend. The display is served from http://localhost:4220/, it is shown in fullscreen (kiosk) mode by the RaspberryPi which also runs the backend. The backend listens on port 4444, where a websocket is used for communication to clients and display.

HDMI-CEC to control TV via HDMI

sudo apt install cec-utils

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - ProjectKitchen/WuzzlerFinal · GitHub
Skip to content

Latest commit

History

53 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Wuzzler for FHTW Mensa

The Smart Wuzzler is an augmented Tabletop-Soccer Game for the student restaurant of the University of Applied Sciences Technikum Wien. It features automatic goal counts, game session management via smart phone user login, audio-visual feedback of game progress and a high score list. Users can register and login via smartphone - the game logic runs on a RaspberryPi4 which also provides a WiFi Hotspot.

Credits

This project is based upon the work by Alexander Peters who had the initial idea and made the first implementation in 2017, and Ferdinand Unger who ported the project to a recent version of node.js and Angular.js.

Architecture and tools

The Tabletop-Soccer game implementation consists of 3 parts, which are built using node.js (Version 12.13.1). The backend (server) connects to a Postgres database to store user and game session data. The graphical frontends (client and display) use and Angular CLI version 8.2.2.

  • The Backend: connects to the database and to the low level hardware (via Cylon/Firmata, expects an Arduino with Firmata firmware running at port /dev/ttyACM0). The GPIO pin connections for goal detection and pushbuttons can be found in file "robot.js". The backend detects goals and user interaction and updates the game state for client and display accordingly. It also generates soccer arena sounds to indicate game events (game start, goal, revoked goal, game won).
  • The Client: offers a responsive user interface in the web browser in order to create a new user, login, as well as challenge your friends into a 1 vs. 1 at tabletop soccer. The available players are displayed and can be challenged.
  • The Display: shows the progress of ongoing games and the high score list on a TV that is mounted behind the soccer table.

Useful scripts (start chromium in kiosk mode, activate/deactivate hotspot, iptables for routing traffic) can be found in subfolder scripts

Installation and build procedure

  1. Clone the git repository

  2. Navigate to "client" folder and run "npm install" in terminal

  3. Navigate to "display" folder and run "npm install" in terminal

  4. Navigate to "backend" folder and run "npm install" in terminal

  5. Create the database

  • Download and install the newest version of PostgreSQL.

  • Run following commands to create the database user and the wuzzler_db database, using the postgres tool:

    sudo su postgres createuser pi -P -s (then input and confirm password 'raspberry') createdb wuzzler_db psql wuzzler_db -f wuzzler_db_9.1.sql 
  • exit the postgres tool

  • Optional: you can use the pgAdmin tool to graphically manage the database (see e.g. [here] (https://www.guru99.com/postgresql-create-database.html) for details)

  1. Open the file "db.js" with a text editor. In line 8: Verify if user account/password match the credentials you chose in step 5.

  2. Navigate to "client" folder and run "npm run dev" in terminal to start the server. All three apps will start automatically. Client and display should open in a webbrowser and the backend should connect to Arduino and database. (Alternatively: start the backend via node app.js)

IP, ports and connections

The client content is served from http://localhost:4200/, multiple clients can connect to this port in order to show the user frontend. The display is served from http://localhost:4220/, it is shown in fullscreen (kiosk) mode by the RaspberryPi which also runs the backend. The backend listens on port 4444, where a websocket is used for communication to clients and display.

HDMI-CEC to control TV via HDMI

sudo apt install cec-utils

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - ProjectKitchen/WuzzlerFinal · GitHub
Skip to content

Latest commit

History

53 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Wuzzler for FHTW Mensa

The Smart Wuzzler is an augmented Tabletop-Soccer Game for the student restaurant of the University of Applied Sciences Technikum Wien. It features automatic goal counts, game session management via smart phone user login, audio-visual feedback of game progress and a high score list. Users can register and login via smartphone - the game logic runs on a RaspberryPi4 which also provides a WiFi Hotspot.

Credits

This project is based upon the work by Alexander Peters who had the initial idea and made the first implementation in 2017, and Ferdinand Unger who ported the project to a recent version of node.js and Angular.js.

Architecture and tools

The Tabletop-Soccer game implementation consists of 3 parts, which are built using node.js (Version 12.13.1). The backend (server) connects to a Postgres database to store user and game session data. The graphical frontends (client and display) use and Angular CLI version 8.2.2.

  • The Backend: connects to the database and to the low level hardware (via Cylon/Firmata, expects an Arduino with Firmata firmware running at port /dev/ttyACM0). The GPIO pin connections for goal detection and pushbuttons can be found in file "robot.js". The backend detects goals and user interaction and updates the game state for client and display accordingly. It also generates soccer arena sounds to indicate game events (game start, goal, revoked goal, game won).
  • The Client: offers a responsive user interface in the web browser in order to create a new user, login, as well as challenge your friends into a 1 vs. 1 at tabletop soccer. The available players are displayed and can be challenged.
  • The Display: shows the progress of ongoing games and the high score list on a TV that is mounted behind the soccer table.

Useful scripts (start chromium in kiosk mode, activate/deactivate hotspot, iptables for routing traffic) can be found in subfolder scripts

Installation and build procedure

  1. Clone the git repository

  2. Navigate to "client" folder and run "npm install" in terminal

  3. Navigate to "display" folder and run "npm install" in terminal

  4. Navigate to "backend" folder and run "npm install" in terminal

  5. Create the database

  • Download and install the newest version of PostgreSQL.

  • Run following commands to create the database user and the wuzzler_db database, using the postgres tool:

    sudo su postgres createuser pi -P -s (then input and confirm password 'raspberry') createdb wuzzler_db psql wuzzler_db -f wuzzler_db_9.1.sql 
  • exit the postgres tool

  • Optional: you can use the pgAdmin tool to graphically manage the database (see e.g. [here] (https://www.guru99.com/postgresql-create-database.html) for details)

  1. Open the file "db.js" with a text editor. In line 8: Verify if user account/password match the credentials you chose in step 5.

  2. Navigate to "client" folder and run "npm run dev" in terminal to start the server. All three apps will start automatically. Client and display should open in a webbrowser and the backend should connect to Arduino and database. (Alternatively: start the backend via node app.js)

IP, ports and connections

The client content is served from http://localhost:4200/, multiple clients can connect to this port in order to show the user frontend. The display is served from http://localhost:4220/, it is shown in fullscreen (kiosk) mode by the RaspberryPi which also runs the backend. The backend listens on port 4444, where a websocket is used for communication to clients and display.

HDMI-CEC to control TV via HDMI

sudo apt install cec-utils

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - ProjectKitchen/WuzzlerFinal · GitHub
Skip to content

Latest commit

History

53 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Wuzzler for FHTW Mensa

The Smart Wuzzler is an augmented Tabletop-Soccer Game for the student restaurant of the University of Applied Sciences Technikum Wien. It features automatic goal counts, game session management via smart phone user login, audio-visual feedback of game progress and a high score list. Users can register and login via smartphone - the game logic runs on a RaspberryPi4 which also provides a WiFi Hotspot.

Credits

This project is based upon the work by Alexander Peters who had the initial idea and made the first implementation in 2017, and Ferdinand Unger who ported the project to a recent version of node.js and Angular.js.

Architecture and tools

The Tabletop-Soccer game implementation consists of 3 parts, which are built using node.js (Version 12.13.1). The backend (server) connects to a Postgres database to store user and game session data. The graphical frontends (client and display) use and Angular CLI version 8.2.2.

  • The Backend: connects to the database and to the low level hardware (via Cylon/Firmata, expects an Arduino with Firmata firmware running at port /dev/ttyACM0). The GPIO pin connections for goal detection and pushbuttons can be found in file "robot.js". The backend detects goals and user interaction and updates the game state for client and display accordingly. It also generates soccer arena sounds to indicate game events (game start, goal, revoked goal, game won).
  • The Client: offers a responsive user interface in the web browser in order to create a new user, login, as well as challenge your friends into a 1 vs. 1 at tabletop soccer. The available players are displayed and can be challenged.
  • The Display: shows the progress of ongoing games and the high score list on a TV that is mounted behind the soccer table.

Useful scripts (start chromium in kiosk mode, activate/deactivate hotspot, iptables for routing traffic) can be found in subfolder scripts

Installation and build procedure

  1. Clone the git repository

  2. Navigate to "client" folder and run "npm install" in terminal

  3. Navigate to "display" folder and run "npm install" in terminal

  4. Navigate to "backend" folder and run "npm install" in terminal

  5. Create the database

  • Download and install the newest version of PostgreSQL.

  • Run following commands to create the database user and the wuzzler_db database, using the postgres tool:

    sudo su postgres createuser pi -P -s (then input and confirm password 'raspberry') createdb wuzzler_db psql wuzzler_db -f wuzzler_db_9.1.sql 
  • exit the postgres tool

  • Optional: you can use the pgAdmin tool to graphically manage the database (see e.g. [here] (https://www.guru99.com/postgresql-create-database.html) for details)

  1. Open the file "db.js" with a text editor. In line 8: Verify if user account/password match the credentials you chose in step 5.

  2. Navigate to "client" folder and run "npm run dev" in terminal to start the server. All three apps will start automatically. Client and display should open in a webbrowser and the backend should connect to Arduino and database. (Alternatively: start the backend via node app.js)

IP, ports and connections

The client content is served from http://localhost:4200/, multiple clients can connect to this port in order to show the user frontend. The display is served from http://localhost:4220/, it is shown in fullscreen (kiosk) mode by the RaspberryPi which also runs the backend. The backend listens on port 4444, where a websocket is used for communication to clients and display.

HDMI-CEC to control TV via HDMI

sudo apt install cec-utils

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - ProjectKitchen/WuzzlerFinal · GitHub
Skip to content

Latest commit

History

53 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Wuzzler for FHTW Mensa

The Smart Wuzzler is an augmented Tabletop-Soccer Game for the student restaurant of the University of Applied Sciences Technikum Wien. It features automatic goal counts, game session management via smart phone user login, audio-visual feedback of game progress and a high score list. Users can register and login via smartphone - the game logic runs on a RaspberryPi4 which also provides a WiFi Hotspot.

Credits

This project is based upon the work by Alexander Peters who had the initial idea and made the first implementation in 2017, and Ferdinand Unger who ported the project to a recent version of node.js and Angular.js.

Architecture and tools

The Tabletop-Soccer game implementation consists of 3 parts, which are built using node.js (Version 12.13.1). The backend (server) connects to a Postgres database to store user and game session data. The graphical frontends (client and display) use and Angular CLI version 8.2.2.

  • The Backend: connects to the database and to the low level hardware (via Cylon/Firmata, expects an Arduino with Firmata firmware running at port /dev/ttyACM0). The GPIO pin connections for goal detection and pushbuttons can be found in file "robot.js". The backend detects goals and user interaction and updates the game state for client and display accordingly. It also generates soccer arena sounds to indicate game events (game start, goal, revoked goal, game won).
  • The Client: offers a responsive user interface in the web browser in order to create a new user, login, as well as challenge your friends into a 1 vs. 1 at tabletop soccer. The available players are displayed and can be challenged.
  • The Display: shows the progress of ongoing games and the high score list on a TV that is mounted behind the soccer table.

Useful scripts (start chromium in kiosk mode, activate/deactivate hotspot, iptables for routing traffic) can be found in subfolder scripts

Installation and build procedure

  1. Clone the git repository

  2. Navigate to "client" folder and run "npm install" in terminal

  3. Navigate to "display" folder and run "npm install" in terminal

  4. Navigate to "backend" folder and run "npm install" in terminal

  5. Create the database

  • Download and install the newest version of PostgreSQL.

  • Run following commands to create the database user and the wuzzler_db database, using the postgres tool:

    sudo su postgres createuser pi -P -s (then input and confirm password 'raspberry') createdb wuzzler_db psql wuzzler_db -f wuzzler_db_9.1.sql 
  • exit the postgres tool

  • Optional: you can use the pgAdmin tool to graphically manage the database (see e.g. [here] (https://www.guru99.com/postgresql-create-database.html) for details)

  1. Open the file "db.js" with a text editor. In line 8: Verify if user account/password match the credentials you chose in step 5.

  2. Navigate to "client" folder and run "npm run dev" in terminal to start the server. All three apps will start automatically. Client and display should open in a webbrowser and the backend should connect to Arduino and database. (Alternatively: start the backend via node app.js)

IP, ports and connections

The client content is served from http://localhost:4200/, multiple clients can connect to this port in order to show the user frontend. The display is served from http://localhost:4220/, it is shown in fullscreen (kiosk) mode by the RaspberryPi which also runs the backend. The backend listens on port 4444, where a websocket is used for communication to clients and display.

HDMI-CEC to control TV via HDMI

sudo apt install cec-utils

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages