How it works?


Strona internetowa
Smartpixels.app Website

The application uses the Node.js runtime - it generates a website with a control panel. Variable page elements are stored in the MySQL database which is replicated between servers. The application is based on the potential of Docker containers, it is run for production in a Kubernetes cluster. To ensure fast implementation of the code, we use the CI/CD (continuous integration and continuous deployment) with GitLab and Docker Hub services.
User page is delivered from the nearest server through Cloudflare. Production machines communicate with each other via WireGuard VPN working in a mesh configuration. Infrastructure is designed for high availability and ability to scale quickly.

Used technologies:

  • Node.js - is a server-side JavaScript runtime, application main programming language
  • Nginx - proxy server between the app and Cloudflare
  • Kubernetes - is an open-source platform for automating deployment and scaling application
  • GitLab - allows us to automate software implementation process
  • Cloudflare - we are using it to deliver content from the closest server to the user. It allows us to distribute load between servers

Sterownik
Lighting control

Colors or effects is sent to controller in a given location via Socket.io software. Each of us has different proprietary controllers, but whole thing is based on client's code written in JavaScript. For lighting we use: cards with relays, PWM brightness controllers, programmable pixel diodes, LED strips. Small Raspberry Pi computer or an ESP8266/ESP32 microcontroller is most often useful for implementation. WLED or ESP Easy software is installed on the microcontroller.

Used technologies:

  • Socket.io - provides two-way communication between user on website, our application and controllers in locations
  • Redis - is a fast database, it exchanges information about current light settings
  • WLED - open-source software for ESP8266/ESP32 microcontrollers - used to control programmable LEDs
  • ESPEasy - open-source software for ESP8266/ESP32 microcontrollers - used for PWM control of RGB LEDs and relay cards
  • Raspberry Pi - single board computer - usually acts as a bridge between the site and lights/LEDs

Karty graficzne w serwerze
Image Transmission

Our streaming service is built on the principles of microservices, which ensures exceptional flexibility and scalability of the infrastructure. Using docker-compose configurations, we create a coherent environment that is both easy to manage and highly configurable.
nginx-rtmp serves as the video signal receiver, being the first point of stream processing and managing authorization. Then, the signal is directed to OvenMediaEngine, where further processing occurs in order to deliver the transmission with the smallest possible delay. In the current setting, we do not perform image transcoding, which allows for very fast distribution of material to the end user.
The system uses scripts for synchronization and thumbnail generation, which are then distributed between servers using rsync. This makes the process automated and efficient, ensuring current updates without overloading the network.

Used technologies:

ELK Kibana
Monitoring

Our entire infrastructure and application are monitored and tested continuously. Availability monitoring is provided by Uptime Kuma, Uptime Robot, Zabbix and LibreNMS. We use Elasticsearch software to monitor application events. Hardware and performance parameters is collected by Zabbix.

Used technologies:

Drukarka termiczna
Thermal printer

Idea of sharing a printer was completely spontaneous. For this task, we wanted to choose a printer that would be as maintenance-free as possible. After reviewing many offers, we chose Epson TM-T88IV printer. This printer supports the ESC / POS standard, so you can "write" to it with using many libraries available on the web.
Our proprietary script, using the DiscordPHP library, is responsible for sending messages from Discord to the printer. An appropriate message is generated and sent to RabbitMQ.
Our proprietary code is also responsible for sending messages from Tipply, which also was handled with RabbitMQ. We use RabbitMQ to queue outgoing messages to the printer. Printer is connected to computer via an RS232 port, which might not keep up with a large amount of messages - this is why we queueing messages.

Items used for this part of the project:

  • EPSON TM-T88IV - around 150zł
  • Webcamera Logitech C920 - around 350zł
  • Cable/Converter USB to RS232 - Unitek + adaptor DB9F/DB25M - 40zł
  • Graphics Card GTX 750 Ti - 420zł
  • Null-modem cable - DIY made
  • Little light source - around 25zł
  • Rolls (thermal paper) 80mm/80m - 5zł / pcs
  • SuperMicro Server (for streaming)
  • Intel NUC Computer (printer handler)
Software:
  • https://github.com/mike42/escpos-php
  • https://github.com/discord-php/DiscordPHP
  • RabbitMQ
  • ... and our scripts

Have additional questions? Want to know more?

See also our "Authors"

Join to our community!

Facebook Fanpage

Go to Facebook

Text and voice chat on Discord

Join on Discord