
Programowanie
Kiosk informacyjny w urzędzie: dostępny dla każdego
Martwy kiosk po komercyjnym systemie bez wsparcia dostał nowe życie: własna aplikacja, pięć przycisków z alfabetem Braille’a, polski głos działający lokalnie i czujnik, który wita podchodzących. Dane płyną z CMS portalu i intranetu, a nadzór sam zgłasza awarie SMS-em.
29.10.2026
W holu Urzędu Miejskiego w Starym Sączu wiszą już dwie tablice informacyjne z listą pokoi, aktualnościami i mapą budynków. Tablica pokazuje wszystkim to samo. Brakowało miejsca, w którym można zadać własne pytanie: gdzie złożę deklarację podatkową, gdzie jest kasa, co zabrać do ślubu.
Tę lukę zamyka kiosk informacyjny. Stał w urzędzie od lat, ale od dawna był martwy. Teraz działa na nowym oprogramowaniu, które napisałem od zera, i jest zaprojektowany przede wszystkim dla osób z niepełnosprawnościami.

Komplet w holu: tablice, przystanek i kiosk
Urządzenia w holu i przed urzędem tworzą teraz jedną całość:
- tablica pokoi pokazuje, który referat jest w którym budynku i na którym piętrze,
- tablica ze slajdami podaje aktualności, wydarzenia, pogodę i mapę budynków,
- tablica przystankowa na os. Słonecznym pokazuje najbliższe odjazdy autobusów,
- kiosk odpowiada na konkretne pytanie i prowadzi do właściwego pokoju.
Wszystkie korzystają z tych samych danych, tych samych krojów pisma i tej samej palety. Mieszkaniec widzi na kiosku ten sam numer pokoju co na tablicy i na portalu gminy. Szczegóły tablic opisałem we wpisie Tablice informacyjne w holu urzędu i Tablica przystankowa z odjazdami MPK.
Punkt wyjścia: kiosk bez wsparcia
Kiosk to stojak marki SAROS z pionowym ekranem dotykowym, pięcioma przyciskami z opisem w alfabecie Braille’a i czujnikiem obecności. W środku pracował mały komputer z Androidem 7 z 2017 roku i aplikacja komercyjnej platformy digital signage.
Problem polegał na tym, że całe oprogramowanie żyło w chmurze dostawcy:
- treści i konfiguracja nie były zapisane na urządzeniu, tylko pobierane z serwera,
- wsparcie dla tej instalacji wygasło, więc kiosk pokazywał tylko ekran oczekiwania,
- wyjście z aplikacji blokowała osobna blokada z kodem PIN, którego nikt nie znał,
- system nie dostawał poprawek bezpieczeństwa od lat.
Obudowa, ekran i przyciski były w świetnym stanie. Szkoda było je wyrzucić.

Debugowanie krok po kroku
Zacząłem od sprawdzenia, czy da się cokolwiek odzyskać. Przez menu recovery Androida wyczyściłem urządzenie, co usunęło blokadę PIN i starą aplikację. Okazało się, że ten egzemplarz nie ma portu USB do debugowania, a wgranie Linuksa na procesor ARM groziło urządzeniem bez obrazu i bez dotyku.
Dlatego wymieniłem tylko komputer. W obudowie pracuje teraz mały, cichy komputer x86 z Debianem 13. Reszta sprzętu została bez zmian.
Płytka przycisków
Przyciski i czujnik obsługuje osobna płytka z mikrokontrolerem ATmega32U4, tym samym co w Arduino Leonardo. Oryginalnego programu na niej nie było, tylko szkic testowy, który zakładał złe piny i pokazywał odległość 0 cm.
- napisałem szkic diagnostyczny, który ustalił, który pin odpowiada któremu przyciskowi,
- potem nowy firmware z prostym protokołem tekstowym: wciśnięcie przycisku i odległość osoby od kiosku,
- płytkę programuję zdalnie przez sam kiosk, bez rozkręcania obudowy.

Obrócony ekran i dotyk
Monitor stoi w obudowie pionowo, więc obraz trzeba obrócić o 90 stopni. Dotyk nie obraca się razem z obrazem, dlatego przygotowałem stronę kalibracyjną z pięcioma punktami. Z pomiarów policzyłem macierz kalibracji i wpisałem ją do systemu. Dotyk trafia teraz z dokładnością do około centymetra, co przy dużych przyciskach w zupełności wystarcza.

Co potrafi kiosk
Ekran startowy pyta: „W czym możemy pomóc?” i daje cztery drogi:
- wyszukiwarka spraw z klawiaturą ekranową, która rozumie wpisy bez polskich znaków („slub” znajdzie „ślub”),
- sprawy do załatwienia pogrupowane w kategorie, na przykład meldunek, podatki, ślub, odpady,
- referaty i biura z lokalizacją, telefonem i godzinami przyjęć,
- kasa, dziennik podawczy, punkt potwierdzania profilu zaufanego i filie starostwa.

Karta sprawy odpowiada na pytania, z którymi ludzie podchodzą do portierni:
- gdzie: budynek, piętro i numer pokoju, wyróżnione na samej górze,
- ile kosztuje i ile trwa,
- jakie dokumenty trzeba przynieść,
- kod QR „Zabierz tę informację ze sobą” otwiera opis sprawy z formularzami w telefonie.
Z karty referatu można przejść do wszystkich spraw, które załatwia się w tym samym miejscu.


Dostępność na pierwszym miejscu
Od początku założyłem, że z kiosku ma skorzystać osoba niewidoma, słabowidząca, na wózku i starsza, która nie lubi ekranów dotykowych. Dlatego kiosk da się w pełni obsłużyć bez dotykania ekranu.
Pięć przycisków i głos
- Następny i Poprzedni przechodzą między elementami, Wybierz otwiera, Powrót cofa, Home wraca na początek,
- pierwsze naciśnięcie dowolnego przycisku samo włącza czytanie na głos, bo kto sięga po przyciski, najczęściej potrzebuje głosu,
- kiosk czyta każdy zaznaczony element i całą kartę sprawy, łącznie z pokojem i listą dokumentów,
- głośność ma trzy poziomy i zawsze startuje od najcichszego.
Polski głos bez chmury
Przeglądarka na Linuksie nie ma dobrego polskiego głosu, a wysyłanie tekstu do zewnętrznej usługi nie wchodziło w grę. Mowę syntezuje Piper, silnik działający lokalnie na komputerze kiosku. Wypowiedzi trafiają do pamięci podręcznej, więc często czytane zdania brzmią od razu.
Piper słabo radzi sobie z cyframi, dlatego przed syntezą zamieniam liczby na słowa. Numer telefonu kiosk czyta cyfra po cyfrze, „II piętro” jako „drugie piętro”, a kwoty z poprawną odmianą „złoty, złote, złotych”.
Kiosk wie, że ktoś podszedł
Czujnik ultradźwiękowy mierzy odległość od kiosku. Gdy ktoś stanie bliżej niż ok. 1,2 m, kiosk wita go głosem i podpowiada, że przyciski są po lewej stronie ekranu. Powitanie nie powtarza się częściej niż raz na minutę i nie przerywa osobie, która już korzysta z kiosku.
Czytelność i porządek po wizycie
- przyciski Większy tekst i Kontrast powiększają pismo i włączają tryb wysokiego kontrastu,
- krój Atkinson Hyperlegible Next zaprojektowano z myślą o osobach słabowidzących,
- przełączniki ułatwień są na dole ekranu, w zasięgu osoby na wózku,
- po 90 sekundach bez ruchu kiosk wraca na start i wyłącza głos, kontrast i powiększenie, żeby następna osoba zaczynała od zera.

Najważniejszy test nie był techniczny. Kiosk ma przeprowadzić od wejścia do właściwego pokoju osobę, która nie widzi ekranu.
- Aleksander Kowal
Dane z intranetu i CMS portalu
Kiosk nie ma własnej bazy treści i nikt nie musi go osobno uzupełniać. Sprawy, referaty i miejsca pochodzą z tego samego CMS, z którego korzysta portal gminy. Lokalizacje pokoi trafiły tam z intranetu urzędu.
- pracownik poprawia opis sprawy w panelu portalu, a zmiana pojawia się na kiosku najpóźniej po kwadransie,
- kiosk pokazuje tylko informacje publiczne: sprawę, referat, pokój i telefon ogólny, bez danych pracowników,
- serwer kiosku zapisuje ostatnie dobre dane na dysku, więc awaria CMS nie wyłącza kiosku,
- ekran nie odświeża treści, gdy ktoś z niego korzysta, tylko gdy stoi na stronie startowej.
Działa bez nadzoru
Kiosk stoi w holu bez opiekuna, więc musi sam dbać o siebie, a o problemach dawać znać, zanim zauważy je mieszkaniec.
- system startuje prosto do aplikacji, z herbem gminy zamiast komunikatów rozruchu,
- Chromium działa w trybie kiosku w kompozytorze cage, bez pulpitu i bez możliwości wyjścia z przeglądarki,
- sprzętowy watchdog restartuje komputer, gdy system przestanie odpowiadać,
- codziennie o 4:00 kiosk robi profilaktyczny restart,
- serwer nadzoru sprawdza, czy ekran nadal pyta o dane, oraz temperaturę, pamięć i dysk urządzenia,
- przy awarii wysyła SMS i może zdalnie zrestartować przeglądarkę albo cały komputer,
- konto nadzoru może wykonać na kiosku tylko te trzy polecenia i nic więcej,
- kiosk łączy się z serwerami urzędu przez VPN WireGuard, tak jak tablice.
Statystyki bez ciasteczek
Kiosk wysyła anonimowe statystyki do Matomo urzędu, bez ciasteczek. Widać, których spraw ludzie szukają najczęściej, jak często używają przycisków i głosu oraz ile osób podchodzi do kiosku. To podpowiedź, które opisy spraw warto poprawić w pierwszej kolejności.
Co dalej
Kolejny krok to plan budynku z zaznaczoną drogą do pokoju. W dalszej przyszłości kiosk mógłby odpowiadać na pytania zadane głosem, z asystentem korzystającym z tych samych danych co portal.
Stack
- Astro 7 (SSR na Node), Tailwind v4, DaisyUI v5, Lucide, fonty self-hosted,
- Directus portalu gminy jako źródło spraw, referatów i miejsc,
- Debian 13, cage i Chromium w trybie kiosku, Plymouth, systemd z watchdogiem,
- Python: usługa kiosku łącząca płytkę, czujnik i mowę przez WebSocket,
- Piper TTS z polskim głosem, działający lokalnie,
- ATmega32U4 z własnym firmware w Arduino,
- WireGuard, nadzór SMS, Matomo bez ciasteczek, Docker.
