System parkingowy z kamerami Dahua to aplikacja, która przyjmuje odczyty tablic rejestracyjnych z kamer ANPR, sprawdza rezerwacje i białą listę, a potem decyduje, czy otworzyć szlaban. Zbudowaliśmy taki system dla operatora parkingów i od początku zakładaliśmy, że Dahua nie będzie jedynym producentem kamer, a rezerwacje mogą przychodzić z zewnętrznego systemu. W artykule opisujemy, jak przepływa zdarzenie od kamery do szlabanu, jak działa biała lista, co widzi obsługa w panelu i jak zaprojektowaliśmy warstwę adapterów i API, żeby podłączyć kolejne kamery i systemy bez przepisywania logiki.
Jak działa parking z rozpoznawaniem tablic rejestracyjnych?
Kamera ANPR robi dwie rzeczy: odczytuje numer tablicy i zapisuje zdjęcie pojazdu. Resztę robi aplikacja. W naszym systemie proces wygląda tak:
- Kamera wysyła zdarzenie z numerem tablicy, czasem i zdjęciem przez stałe połączenie z aplikacją.
- Aplikacja zapisuje zdarzenie ze zdjęciem.
- Jeśli kamera stoi przy szlabanie, system sprawdza blokadę numeru, rezerwację i białą listę, a obsługa może później w panelu obejrzeć zdjęcie każdego wjazdu i zobaczyć, jaką decyzję podjął system.
- Przy pozytywnej decyzji aplikacja wysyła do kamery polecenie otwarcia szlabanu i zapisuje wynik.
- Zdarzenie dopisuje się do postoju pojazdu, z którego system liczy czas parkowania.
Kamery powiązane w parę znają swoje ostatnie odczyty. Jeśli druga kamera z pary widziała ten sam numer w ciągu 30 sekund, nowe zdarzenie jest odrzucane, więc auto złapane przez dwie kamery tej samej bramy nie wywołuje dwóch decyzji. Opcjonalny filtr w panelu poprawia też format odczytanego numeru, zanim system zacznie go porównywać.
Budujesz system parkingowy albo integrujesz kamery? Projektujemy aplikacje, które łączą kamery ANPR, szlabany, rezerwacje i zewnętrzne API. Opisz, jakie masz kamery i z czym system ma rozmawiać. Aplikacje webowe →
Jakie role mogą mieć kamery Dahua na parkingu?
Każdą kamerę opisuje w panelu kilka ustawień, a od nich zależy, co system zrobi ze zdarzeniem. Dzięki temu jedna instalacja obsługuje wjazd, wyjazd i strefy wewnątrz parkingu.
| Ustawienie | Co zmienia |
|---|---|
| Typ: wjazd albo wyjazd | Na wjeździe system szuka rezerwacji w oknie czasowym, na wyjeździe sprawdza ostatni postój pojazdu |
| Kamera główna | Tylko zdarzenia z kamer głównych wyznaczają początek i koniec postoju |
| Kamera szlabanu | Tylko taka kamera może otworzyć szlaban, pozostałe tylko rejestrują przejazd |
| Kamera strefy | Otwiera tylko wtedy, gdy strefa z rezerwacji zgadza się ze strefą kamery |
| Kamera powiązana | Łączy dwie kamery w parę, żeby nie przetwarzać dwa razy tego samego przejazdu; powiązanie ustawia się automatycznie w obie strony |
Zmiana ustawień kamery w panelu nie wymaga restartu. Proces obsługujący kamery co minutę porównuje konfigurację z bazą i ponownie łączy się tylko z kamerami, których dane się zmieniły.
Kiedy szlaban się otwiera, a kiedy nie?
Decyzja ma stałą kolejność. Przy kamerze wjazdowej system najpierw sprawdza, czy numer nie jest zablokowany. Potem szuka aktywnej rezerwacji, która obejmuje bieżący czas, z buforem przed początkiem i po końcu rezerwacji ustawianym w panelu. Bufor rozwiązuje prozaiczny problem: kierowca przyjeżdża dziesięć minut przed czasem i nie powinien stać pod szlabanem.
Jeśli rezerwacji nie ma, system sprawdza białą listę. Gdy nic nie pasuje, zdarzenie dostaje status nieznanego wjazdu, a obsługa parkingu dostaje e-mail z numerem tablicy, nazwą kamery i strefą. Szablon wiadomości z polami do podstawienia operator edytuje sam.
Na wyjeździe logika jest prostsza. System bierze ostatni postój pojazdu i otwiera, jeśli był powiązany z rezerwacją albo wpisem z białej listy. W każdym przypadku wynik trafia do dziennika: otwarto, zablokowano, nieznany numer albo błąd sterowania szlabanem.
Jak działa biała lista na parkingu z kamerami ANPR?
Biała lista obsługuje stałych użytkowników, którzy nie rezerwują miejsca za każdym razem: pracowników, dostawców, serwis. Wpis łączy numery tablic z regułą czasową, w której można ustawić:
- zakres dat ważności wpisu,
- dni miesiąca, w które wpis działa,
- dni tygodnia, np. tylko od poniedziałku do piątku,
- godziny wjazdu, od której do której.
Puste pole oznacza brak ograniczenia. Wpis „poniedziałek do piątku, 7:00 do 18:00” wpuści dostawcę w dni robocze, a w sobotę jego auto dostanie status nieznanego wjazdu.
Jak system łączy odczyty kamer z rezerwacjami?
Pojedyncze zdarzenie z kamery niewiele mówi. System składa więc zdarzenia w postój: początek to najwcześniejszy wjazd zarejestrowany przez kamerę główną, koniec to ostatni wyjazd. Wjazd po wcześniejszym wyjeździe otwiera nowy postój. Postój jest powiązany z rezerwacją albo wpisem z białej listy, a w pierwszej wersji także z kontem kierowcy w zewnętrznym systemie rezerwacji.
Na tej podstawie działają powiadomienia. Kierowca, który wciąż stoi na parkingu, dostaje mailem i SMS-em przypomnienie o kończącej się rezerwacji. Kiedy auto wyjedzie przed końcem rezerwacji, system pyta SMS-em i mailem „Czy jeszcze wrócisz?” i dołącza link do rezerwacji. Czas parkowania przy rezerwacji to suma wszystkich jej postojów.
Obsługa może też zamknąć postój ręcznie, gdy kamera nie odczytała wyjazdu. System zapisuje wtedy zdarzenie przypisane do użytkownika panelu, a nie do kamery, więc w historii widać, kto to zrobił.
Co obsługa parkingu widzi w panelu?
Panel administracyjny zbudowaliśmy w Filament. Zawiera listę kamer, zdarzenia ze zdjęciami, postoje i dziennik szlabanu. Uprawnienia są rozdzielone, więc pracownik ochrony może oglądać podgląd na żywo i otworzyć szlaban, nie mając prawa do zmiany konfiguracji kamer. Panel rozróżnia osobno:
- przeglądanie listy kamer i podgląd na żywo,
- dodawanie, edycję i usuwanie kamer,
- przeglądanie dziennika szlabanu i ręczne otwarcie.
Widżet w panelu pokazuje, ile kamer jest połączonych i kiedy proces obsługi kamer ostatnio działał. Gdy połączenie z kamerą padnie, system dwa razy próbuje ponownie się autoryzować. Jeśli to nie pomoże, wysyła SMS do zespołu technicznego i ponawia próbę po 10 minutach. Kiedy wszystkie kamery wracają, alarm się kasuje.
Jak przygotować system parkingowy na kamery innych producentów?
Tego wymagał klient. Parking, który dziś ma Dahua, za dwa lata może dostawić kamery innej marki albo przejąć obiekt z cudzą instalacją. Gdyby logika wjazdu była spleciona z protokołem jednego producenta, każda taka zmiana oznaczałaby przepisanie systemu.
W drugiej wersji kod producenta przenieśliśmy do osobnego modułu sterowników. Sterownik Dahua odpowiada za połączenie z kamerą, autoryzację i polecenie otwarcia szlabanu. Reguły wjazdu, rezerwacje, biała lista i postoje operują na numerze tablicy, kamerze z panelu i czasie zdarzenia. Nowy producent to nowy sterownik obok, a reszta systemu zostaje bez zmian.
Jak system parkingowy współpracuje z zewnętrznymi API?
Druga wersja składa się z dwóch rodzajów aplikacji. Każdy operator parkingu dostaje własną instancję na osobnym serwerze, z tego samego kodu. Nad nimi działa centralna aplikacja z publicznym API dla aplikacji mobilnej i routerem, który kieruje żądania do właściwego operatora. Zastępuje ona zewnętrzny system rezerwacji, z którym integrowała się pierwsza wersja.
- API publiczne z tokenem dostępowym, przygotowane pod aplikację kliencką w React Native na iOS, Androida i web.
- API wewnętrzne między serwerami, gdzie każde żądanie jest podpisane HMAC-SHA256 z identyfikatorem klienta, czasem i jednorazowym nonce, a podpis starszy niż 5 minut jest odrzucany.
- Kolejka wywołań między serwerami, przetwarzana w tle co minutę.
Oba API mają dokumentację OpenAPI generowaną z kodu, w której opisaliśmy 62 operacje razem z parametrami, odpowiedziami i sposobem podpisywania żądań między serwerami. Dostęp do niej sprawdza sama aplikacja, a reguła serwera WWW jest drugą warstwą. Bez skonfigurowanego hasła dokumentacja zwraca 404, zamiast stać otworem. Zewnętrzny system, np. sprzedaż biletów albo system rezerwacji, podłącza się do udokumentowanego API. Kodu parkingu nikt przy tym nie musi czytać.
Jak budujemy systemy z kamerami i API w ASAPDevs?
Zaczynamy od spisania urządzeń i systemów, z którymi aplikacja ma rozmawiać, a potem oddzielamy to, co specyficzne dla producenta, od reguł biznesowych. Wdrażamy na Dockerze bez przestojów, z logami do diagnozy i uprawnieniami w panelu. Po starcie zostajemy przy systemie jako zespół utrzymaniowy.
Masz kamery ANPR i chcesz połączyć je z rezerwacjami, płatnościami albo własną aplikacją? Zobacz, jak budujemy aplikacje webowe →
