
Programowanie
Tablica przystankowa z odjazdami MPK
Elektroniczna tablica odjazdów na przystanek z publicznych danych MPK Nowy Sącz, zwykłego monitora i małego komputera: rozkład połączony z prognozami, kiosk bez sekretów i nadzór przez SMS. Jeden system dla dowolnej liczby przystanków.
26.10.2026
Elektroniczne tablice odjazdów to zwykle duży wydatek i zamknięty system od jednego dostawcy. Sprawdziłem, ile da się zrobić z publicznych danych przewoźnika, zwykłego monitora i małego komputera.
Pierwsza tablica jest przygotowana dla przystanku Os. Słoneczne w Starym Sączu, obsługiwanego przez MPK Nowy Sącz. Strona tablicy działa pod adresem bus.starysacz.um.gov.pl, a kiosk, który ją wyświetla, czeka na montaż w obudowie.

Czytelna z kilku metrów
Tablica przystankowa to nie strona internetowa. Nikt jej nie klika, nie przewija i nie czyta z bliska. Dlatego z szablonu usług gminy wziąłem tylko tożsamość: kroje, paletę i kształty. Resztę zaprojektowałem pod ekran na ulicy:
- ciemne tło, które nie razi wieczorem i nie odbija słońca tak mocno jak białe,
- numer linii jako jedyny kolorowy element,
- godziny cyframi o stałej szerokości, żeby nie skakały przy zmianie minut,
- każdy stan opisany słowem, na przykład „przed czasem 2 min”, a nie tylko kolorem,
- układ dobiera się sam: dwa słupki obok siebie albo lista dla większego węzła.
Dane, których nikt nie opisał
MPK Nowy Sącz ma dwa publiczne źródła danych, ale żadne nie jest udokumentowane. Plik z prognozami obejmuje całą sieć, ponad 550 słupków, ale podaje czas względny i godzinę bez daty. Rozkład jest pełny, ale nie wie nic o opóźnieniach.
Serwer gminy łączy oba źródła. Rozkład jest podstawą, a prognoza poprawką: dla każdego kursu tablica pokazuje godzinę planową i to, o ile autobus się spóźnia albo przyspiesza.
Po drodze wyszły błędy w danych przewoźnika, na przykład odwrócone słupki jednej z linii. Poprawki są w osobnym pliku konfiguracyjnym, więc nie trzeba ich szukać w kodzie.

Kiosk bez sekretów
Przy przystanku stoi mały komputer z Debianem i Chromium w trybie kiosku. Zna tylko adres swojej tablicy. Nie ma kluczy do API przewoźnika ani do bramki SMS, bo urządzenie stojące na ulicy prędzej czy później ktoś może otworzyć.
- łączy się z serwerem przez VPN, logowanie tylko certyfikatem,
- restartuje się co noc o 4:00, a watchdog pilnuje go w ciągu dnia,
- konto nadzoru może wykonać tylko kilka ściśle określonych poleceń,
- gdy prognozy przestaną przychodzić, po 10 minutach tablica wraca do samego rozkładu, zamiast pokazywać stare opóźnienia.
Nadzór przez SMS
Usługa nadzoru działa na osobnym serwerze, obok własnej bramki SMS urzędu. Co minutę sprawdza kiosk, serwer tablic i dane MPK. Administrator dostaje SMS, gdy:
- kiosk przez 10 minut nie pyta o dane,
- kiosk zrestartował się poza planem, na przykład po zaniku prądu,
- temperatura w obudowie przekroczy 75 stopni albo zapełni się dysk,
- dane MPK lub rozkład przestały się odświeżać.
Działa to też w drugą stronę. Operator może SMS-em zapytać o stan kiosku albo zlecić restart, bez wyjazdu na przystanek.
Kiosk na przystanku powinien być najgłupszą częścią systemu. Wszystko, co może się zmienić, ma się dać zmienić na serwerze, bez wyjazdu w teren.
- Aleksander Kowal
Jeden system dla wielu przystanków
W kodzie nie ma żadnego przystanku. Tablicę opisuje wpis w konfiguracji: słupki, układ i opisy kierunków. Serwer i tak pobiera całą sieć MPK, więc kolejna tablica to nowy wpis i ten sam obraz systemu na kolejnym komputerze.
Dane odjazdów wystawiam w publicznym API gminy, w tym samym formacie co inne usługi. Może z nich skorzystać portal gminy, aplikacja mobilna albo kiosk informacyjny w urzędzie. Ten sam mechanizm kiosku działa już na tablicach w holu urzędu.
Stack
- usługa odjazdów w Node 24 i TypeScript, migawka danych na dysku zamiast bazy,
- strona tablicy w Astro, Tailwind v4, fonty self-hosted,
- Debian, cage i Chromium w trybie kiosku, systemd, WireGuard,
- nadzór w Pythonie bez zależności, własna bramka SMS,
- Docker, CI na OneDev.
