Wiki - eIntranet.net

Deutsch flag Čeština flag English flag Español flag Slovenčina flag Magyar flag Polski flag

Frekwencja - chip/odcisk palca

Moduł Obecność - chip/czytnik linii papilarnych

1. Przegląd modułu

1.1 Cel modułu

Moduł Obecność - chip/czytnik linii papilarnych (WorkAttendanceChips) służy do automatycznego rejestrowania czasu pracy pracowników za pomocą fizycznych kart chipowych (RFID/NFC), biometrycznych czytników linii papilarnych lub rozpoznawania twarzy z wykorzystaniem sztucznej inteligencji.

Moduł eliminuje potrzebę ręcznego wprowadzania czasów przychodów i wychodów, zwiększa dokładność ewidencji i zapewnia mechanizmy kontrolne przeciwko nadużyciom (np. zdjęcie przy odbiciu karty, minimalna długość przerwy, automatyczne zamknięcie czasu pracy).

1.2 Kluczowe funkcje

  • Ustawienia kart chipowych - Ewidencja kodu bezpieczeństwa chipa RFID/NFC dla każdego pracownika
  • Czytnik linii papilarnych - Identyfikacja biometryczna za pomocą odcisków palców (opcjonalnie)
  • Rozpoznawanie twarzy - Wykrywanie twarzy przez AI za pomocą face-api.js (wymaga terminalu RasPi z kamerą)
  • Terminal obecności RasPi - Fizyczny terminal do rejestrowania obecności na miejscu
  • Ograniczenie IP - Biała lista dozwolonych adresów IP dla czytników (bezpieczeństwo)
  • Konfigurowalne przyciski - Typy obecności dostępne na terminalu (lekarz, podróż służbowa itp.)
  • Automatyczne zamknięcie - Automatyczne zakończenie czasu pracy (3 tryby)
  • Zdjęcie przy zapisie - Zdjęcie zabezpieczające z terminalu do wykrywania nadużyć kart
  • Zapobieganie ręcznym zmianom - Ścisły tryb chipowy z możliwością wyjątków (urlop, choroba)
  • Minimalna przerwa - Wymuszenie minimalnej długości przerwy
  • Przyciski na dashboardzie - Wirtualne przybycie/wyjście bezpośrednio w systemie bez fizycznej karty

1.3 Grupa docelowa

Ta dokumentacja jest przeznaczona dla:

  • Administratorów systemu - Konfiguracja modułu, zarządzanie czytnikami, ustawienia bezpieczeństwa
  • Działów personalnych - Zarządzanie uprawnieniami użytkowników, ustawienia kodów chipów, kontrola zdjęć
  • Administratorów IT - Instalacja terminali RasPi, konfiguracja sieci, aktualizacje firmware
  • Kierowników - Kontrola obecności, zatwierdzanie wyjątków
Ważne: Aby uzyskać dostęp do ustawień modułu, użytkownik musi mieć uprawnienia administratora (admin=1) lub być wymieniony w polu AdminToModules_ser_arr z wartością dochazka_cipy.

2. Ustawienia i konfiguracja

2.1 Ustawienia modułu

Ścieżka do ustawień: Ustawienia → Obecność - chip/czytnik linii papilarnych

Moduł wykorzystuje następujące parametry konfiguracyjne przechowywane w tabelach bazy danych Company i User:

Parametry tabeli Company

Parametr Typ Opis Wartość domyślna
wa_RasPi_Face boolean Włącz rozpoznawanie twarzy (wymaga RasPi z kamerą) 0 (wyłączone)
wa_RasPi_TakePhoto boolean Wykonuj zdjęcia przy zapisie z terminalu 0 (wyłączone)
wa_chip_allowed_ips_ser_arr array Dozwolone adresy IP czytników (tablica serializowana) ['all']
wa_chip_show_active boolean Pokaż statusy (obecność) innych na czytniku 0 (wyłączone)
wa_chip_use_WDT_14 boolean Pozwól zapisywać Obiady oddzielnie od Przerw 0 (wyłączone)
wa_chip_buttons_on_dashboard boolean Pokaż przyciski Przybycie/Wyjście na głównym panelu 0 (wyłączone)
wa_chip_WritePause boolean Zapisuj przerwę po powrocie tego samego dnia 0 (wyłączone)
wa_chip_AutoCloseInLastDay boolean Powiadomienie i zamknięcie obecności z poprzedniego dnia 0 (wyłączone)
wa_chip_ChiporFaceDetect string Główny tryb wykrywania ('c' = chip, 'f' = twarz) 'c' (chip)

Parametry tabeli User

Parametr Typ Opis Wartość domyślna
wa_chip_code string Kod hash bezpieczeństwa chipa pracownika NULL
wa_chip_last_inout enum Aktualny status pracownika ('in', 'out') 'out'
wa_chip_minimal_pause_min int Minimalna długość przerwy w minutach NULL
wa_chip_last_poznamka string Ostatnia notatka przy odbiciu karty NULL
wa_chip_AllowManualType_ser_arr array Dozwolone typy obecności do ręcznego zapisu (tablica serializowana) []
rights_workattendance enum Uprawnienia obecności ('1' = tylko chip, '2' = także ręczny zapis) '2'
FingerPrints_ser_arr array Zapisane odciski palców (tablica serializowana) []

2.2 Uprawnienia użytkownika

Aby uzyskać dostęp do ustawień modułu, należy spełnić jeden z następujących warunków:

  • Uprawnienia administratora: $Logged_User->admin == 1
  • Zarządca modułu: in_array('dochazka_cipy', $Logged_User->AdminToModules_ser_arr)
Ostrzeżenie bezpieczeństwa: Bez tych uprawnień dostęp do modułu jest odrzucany przez wywołanie funkcji DieUnauthorized().

3. Interfejs użytkownika

3.1 Przegląd zakładek

Interfejs użytkownika modułu jest podzielony na 5 głównych zakładek:

  1. Uprawnienia użytkownika - Ustawienia kodów chipów, odcisków palców, zapobieganie ręcznym zmianom
  2. Dozwolone adresy IP - Biała lista adresów IP czytników
  3. Dodatkowo dozwolone przyciski - Konfiguracja przycisków na terminalu
  4. Pozostałe ustawienia - Ogólne ustawienia modułu
  5. Zarejestrowane czytniki - Przegląd terminali RasPi
Uwaga: Aktualnie wyświetlana zakładka jest zapisana w zmiennej sesji $_SESSION['nastaveni_dochazka_cipy']['Show'].

3.2 Zakładka: Uprawnienia użytkownika

Główna zakładka do ustawiania dostępu pracowników do systemu obecności.

Wykrywanie użytkownika

System obsługuje 3 sposoby identyfikacji pracownika:

Metoda Opis Wymagania Status
Według chipa (RFID/NFC) Standardowa karta chipowa Czytnik RFID/NFC Zawsze włączone
Według twarzy Rozpoznawanie twarzy przez AI za pomocą face-api.js Terminal RasPi z kamerą, wa_RasPi_Face=1 Opcjonalnie
Według odcisku palca Biometryczny czytnik odcisków RasPi z czytnikiem odcisków, FingerPrintReader=1 Opcjonalnie

Tabela pracowników

Tabela zawiera następujące kolumny:

Kolumna Opis Akcje
ID ID pracownika w systemie -
Nazwisko, imię Pełne imię i nazwisko z linkiem do szczegółów użytkownika Kliknięcie otwiera szczegóły pracownika
Kod chipa Kod hash bezpieczeństwa chipa
  • Wprowadź w pole tekstowe
  • Zmiana jest automatycznie zapisywana (onChange)
  • Ikona schowka kopiuje URL API
Odcisk palca Wskaźnik, czy pracownik ma zapisane odciski Wyświetla 0/1 według sizeofSafe($User->FingerPrints_ser_arr)
Zapobiegaj zmianom Pole wyboru zapobiegające ręcznym zmianom obecności
  • Zaznaczenie ustawia rights_workattendance='1'
  • Pojawia się przycisk zezwalający na wyjątki
Minimalna długość przerwy Liczba minut minimalnej przerwy Wprowadź liczbę (np. 30), zmiana jest automatycznie zapisywana
Akcje Specjalne akcje dla pracownika
  • Jeśli status to "in", pojawia się przycisk Resetuj (dla przybycia)
  • Resetuje status na "out"

Przycisk: Ręcznie może zapisywać tylko typ obecności...

Ten przycisk pojawia się tylko u pracowników, którzy mają zaznaczone Zapobiegaj zmianom czasu pracy.

Funkcja: Otwiera okno modalne do wyboru typów obecności, które pracownik może zapisywać ręcznie pomimo zapobiegania ręcznym zmianom.

Typowe zastosowanie:

  • Urlop (pracownik może wprowadzić urlop ręcznie)
  • Choroba (pracownik może wprowadzić chorobę ręcznie)
  • Homeoffice (pracownik może wprowadzić homeoffice ręcznie)
Wskazówka: Ten mechanizm umożliwia ścisłą kontrolę obecności (tylko chip), ale jednocześnie zapewnia elastyczność dla specjalnych typów nieobecności.

3.3 Zakładka: Dozwolone adresy IP

Ta zakładka służy do ustawiania białej listy bezpieczeństwa adresów IP, z których czytniki mogą zgłaszać się do systemu.

Główne pole wyboru

Zezwalaj na dostęp czytnika tylko z poniższych adresów IP

  • Zaznaczone: System sprawdza adres IP żądania względem białej listy
  • Niezaznaczone: Dostęp jest dozwolony ze wszystkich adresów IP (wa_chip_allowed_ips_ser_arr = ['all'])

Dynamiczne pole adresów IP

Po zaznaczeniu głównego pola wyboru pojawia się pole do wprowadzania adresów IP:

  • Każdy adres IP ma własne pole tekstowe
  • Po wypełnieniu automatycznie pojawia się kolejne puste pole
  • Zmiany są zapisywane automatycznie (AJAX)
  • Zawsze widoczne są co najmniej 2 puste pola do dodania kolejnych IP

Przykład ustawienia:

192.168.1.100
192.168.1.101
10.0.0.50
Ważne: Jeśli włączysz białą listę IP i nie wprowadzisz żadnego adresu IP, czytniki nie będą mogły się połączyć! Upewnij się, że masz wprowadzone prawidłowe adresy IP przed aktywacją.

3.4 Zakładka: Dodatkowo dozwolone przyciski

Konfiguracja dodatkowych przycisków na terminalu obecności dla specjalnych typów obecności (lekarz, podróż służbowa itp.).

Przycisk: Dodaj przycisk

Otwiera okno modalne do dodania nowego przycisku:

  1. Wybierz Typ obecności z listy rozwijanej (wczytywane są tylko typy z chip_buttons_available=1)
  2. Kliknij Zapisz
  3. Przycisk pojawi się na terminalu i w tabeli

Tabela przycisków

Wyświetla wszystkie skonfigurowane przyciski z następującymi kolumnami:

Kolumna Opis Opcje
Przycisk Nazwa typu obecności Np. "Lekarz", "Podróż służbowa"
Automatyczne zakończenie do liczby godzin pracy dziennie System doliczy koniec według dziennego wymiaru
  • Przycisk radiowy
  • Zapisuje autoclose_user_hour_day=1
  • Przykład: Wymiar 8h, przybycie 7:00 → auto koniec 15:00
Automatyczne zakończenie o podanej godzinie Stała godzina zakończenia
  • Przycisk radiowy + pole czasowe (GG:MM)
  • Zapisuje autoclose_user_hour_day=0
  • Zapisuje autoclose_at_time (np. "15:30:00")
  • Przykład: Zawsze zakończ o 16:00
Stała długość w min Konkretna liczba minut
  • Przycisk radiowy + pole liczbowe
  • Zapisuje autoclose_user_hour_day=2
  • Zapisuje autoclose_at_length (minuty)
  • Przykład: Lekarz = 60 min
Akcje Przycisk do usunięcia
  • Przycisk Usuń przycisk
  • Ustawia delete=1
  • Przycisk znika z terminalu

Tryby automatycznego zakończenia - szczegółowo

1. Do liczby godzin pracy dziennie

Jak to działa:

  1. System wczytuje dzienny wymiar pracownika (np. 8 godzin)
  2. Przy odbiciu przybycia rejestruje czas (np. 7:00)
  3. Automatycznie oblicza koniec: 7:00 + 8h = 15:00
  4. Jeśli pracownik nie zapisze wyjścia do północy, system automatycznie zakończy o 15:00

Przykład zastosowania: Podróż służbowa - pracownik wyjeżdża w podróż, system zakończy czas automatycznie według jego wymiaru.

2. Do podanej godziny

Jak to działa:

  1. Administrator ustawia stałą godzinę zakończenia (np. 15:30)
  2. Przy odbiciu przybycia rejestruje czas (np. 7:00)
  3. Jeśli pracownik nie zapisze wyjścia do północy, system automatycznie zakończy o 15:30

Przykład zastosowania: Konferencja - wszyscy uczestnicy mają stały koniec o 16:00.

3. Stała długość

Jak to działa:

  1. Administrator ustawia liczbę minut (np. 60)
  2. Przy odbiciu przybycia rejestruje czas (np. 9:00)
  3. System automatycznie zakończy po 60 minutach: 9:00 + 60 min = 10:00

Przykład zastosowania: Lekarz - pracownik idzie do lekarza, system zakończy po 60 minutach.

Uwaga: Jeśli do północy nie zostanie odbite zakończenie, system zastosuje automatyczne zakończenie według wybranego trybu. Warunek jest zaimplementowany w funkcji zamykania obecności.

3.5 Zakładka: Pozostałe ustawienia

Ogólne ustawienia modułu wpływające na zachowanie całego systemu.

Ustawienie Opis Wartość domyślna
Pokaż statusy (obecność) innych na czytniku Na terminalu wyświetla się lista wszystkich pracowników z ich aktualnym statusem (obecny/nieobecny).

Kolumna bazy danych: wa_chip_show_active
Wyłączone (0)
Pozwól zapisywać Obiady oddzielnie od Przerw Pracownik może na terminalu rozróżnić między ogólną przerwą a obiadem (specjalny typ przerwy).

Kolumna bazy danych: wa_chip_use_WDT_14
Typ obecności: WDT_14 (Obiad)
Wyłączone (0)
Pokaż przyciski Przybycie/Wyjście na głównym panelu po zalogowaniu Każdy pracownik zobaczy po zalogowaniu na dashboardzie przyciski do odbicia przybycia/wyjścia bez potrzeby posiadania fizycznej karty.

Kolumna bazy danych: wa_chip_buttons_on_dashboard
Zastosowanie: Odpowiednie dla pracowników pracujących z domu lub bez dostępu do terminalu
Wyłączone (0)
Zapisuj przerwę po powrocie tego samego dnia Jeśli pracownik odbije wyjście, a następnie ponownie przybycie tego samego dnia, system automatycznie zarejestruje czas między jako przerwę.

Kolumna bazy danych: wa_chip_WritePause
Przykład: Wyjście 12:00, Przybycie 12:30 → Przerwa 30 min
Wyłączone (0)
Zdjęcie przy zapisie obecności z terminalu Przy każdym odbiciu karty z terminalu RasPi wykonywane jest zdjęcie pracownika. Służy do wykrywania nadużyć kart (kontrola, czy kartę używa rzeczywisty właściciel).

Kolumna bazy danych: wa_RasPi_TakePhoto
Wymagania: Terminal RasPi z kamerą
Wyłączone (0)
Powiadomienie i zamknięcie obecności z poprzedniego dnia Jeśli pracownik zapomni odbić wyjście wczoraj, a dziś zapisze nowe przybycie, system wyświetli powiadomienie i wymaga uzupełnienia wczorajszego wyjścia z przełożonym.

Kolumna bazy danych: wa_chip_AutoCloseInLastDay
Cel: Zapobieganie "wiszącym" zapisom w obecności
Wyłączone (0)
Zalecane ustawienie dla zwiększenia bezpieczeństwa:
  • Włącz Zdjęcie przy zapisie - wykryje nadużycia kart
  • Włącz Powiadomienie i zamknięcie z poprzedniego dnia - zapobiegnie błędom w obecności
  • Ustaw Minimalną długość przerwy (np. 30 min) - wymusza obiad

3.6 Zakładka: Zarejestrowane czytniki

Przegląd wszystkich terminali RasPi zarejestrowanych w systemie.

Tabela czytników

Kolumna Opis
ID Unikalny identyfikator czytnika w bazie danych (idRasPi)
Data zakupu Data instalacji/rejestracji czytnika (BuyDate)
Zainstalowana wersja FW Wersja firmware zainstalowana na RasPi (Version)
Ostatnie sprawdzenie Data i czas ostatniej komunikacji z czytnikiem (LastCheck)
Informacja: Czytniki rejestrują się automatycznie przy pierwszym kontakcie z serwerem. Dane czytników są wczytywane z tabeli bazy danych RasPi według Company_idCompany.

Diagnostyka czytników

Według kolumny Ostatnie sprawdzenie można zdiagnozować problemy:

  • Zielony: Czytnik zgłosił się w ostatniej godzinie - wszystko w porządku
  • Żółty: Czytnik nie zgłaszał się dłużej niż godzinę - możliwy problem z siecią
  • Czerwony: Czytnik nie zgłaszał się dłużej niż dzień - poważny problem (wyłączony, sieć, sprzęt)
Rozwiązywanie problemów:
  • Sprawdź połączenie sieciowe RasPi
  • Zweryfikuj, że adres IP RasPi jest na białej liście (zakładka "Dozwolone adresy IP")
  • Sprawdź, czy RasPi jest włączone i działa
  • Spróbuj zrestartować RasPi

4. Podstawowe operacje

4.1 Ustawienie kodu chipa pracownikowi

Cel: Przypisać pracownikowi kod bezpieczeństwa chipa, aby mógł rejestrować obecność.

  1. Otwórz Ustawienia → Obecność - chip/czytnik linii papilarnych
  2. Przejdź do zakładki Uprawnienia użytkownika
  3. W tabeli pracowników znajdź wymaganego pracownika (możesz użyć wyszukiwania)
  4. W kolumnie Kod chipa wprowadź kod hash bezpieczeństwa (zalecane minimum 16 znaków, losowych)
  5. System automatycznie zapisze zmianę przy opuszczeniu pola (zdarzenie onChange)
  6. Opcjonalnie: Kliknij ikonę schowka (fa-clipboard) aby skopiować URL API do testowania
Przykład URL API:
https://twoja-domena.pl/?w=wa_chip_inout&idUser=123&hash=abc123xyz789def456

4.2 Zapobieganie ręcznym zmianom obecności

Cel: Ustawić pracownikowi ścisły tryb, w którym może rejestrować obecność tylko chipem.

  1. W zakładce Uprawnienia użytkownika znajdź pracownika
  2. W wierszu pracownika zaznacz pole wyboru Zapobiegaj zmianom czasu pracy w obecności
  3. System ustawi rights_workattendance='1'
  4. Pojawi się zielony przycisk Ręcznie może zapisywać tylko typ obecności...
  5. Kliknij przycisk
  6. W oknie modalnym zaznacz dozwolone typy (np. Urlop, Choroba, Homeoffice)
  7. Kliknij Zapisz

Wynik: Pracownik teraz nie może ręcznie modyfikować obecności, ale może ręcznie wprowadzić wybrane typy nieobecności.

Szczegóły techniczne: Dozwolone typy są zapisywane w tablicy serializowanej wa_chip_AllowManualType_ser_arr. Przy próbie ręcznego zapisu system sprawdza, czy typ jest dozwolony.

4.3 Ustawienie minimalnej przerwy

Cel: Wymusić minimalną długość przerwy (np. obiad minimum 30 minut).

  1. W zakładce Uprawnienia użytkownika znajdź pracownika
  2. W kolumnie Minimalna długość przerwy (minut) wprowadź liczbę minut (np. 30)
  3. System automatycznie zapisze zmianę

Jak to działa:

  • Pracownik odbija przerwę (np. 12:00 - 12:10 = 10 minut)
  • System sprawdza wa_chip_minimal_pause_min (np. 30)
  • Jeśli przerwa jest krótsza, automatycznie ją wydłuża do minimum (10 min → 30 min)
  • W zapisie obecności pojawia się przerwa 30 minut
Ostrzeżenie: Automatyczne wydłużenie przerwy może zaskoczyć pracownika. Zalecamy poinformowanie pracowników o ustawieniu minimalnej przerwy.

4.4 Reset statusu przybycie/wyjście

Cel: Zresetować "wiszący" status pracownika, który zapomniał odbić wyjście.

  1. W zakładce Uprawnienia użytkownika znajdź pracownika
  2. Jeśli pracownik jest w statusie "in" (obecny), pojawi się przycisk Resetuj (dla przybycia)
  3. Kliknij przycisk
  4. System zmieni status na "out" (nieobecny)
  5. Pracownik teraz może ponownie odbić przybycie

Kiedy używać:

  • Pracownik zapomniał odbić wyjście wczoraj
  • System "wisi" w statusie "in" i nie pozwala na nowe przybycie
  • Potrzebujesz szybko odblokować pracownika
Uwaga: Reset tylko zmienia status wa_chip_last_inout='out'. Nie rozwiązuje brakującego zapisu w obecności - ten musisz uzupełnić ręcznie w module Obecność.

5. Zaawansowane funkcje

5.1 Dodanie przycisku na czytnik

Cel: Dodać specjalny typ obecności (np. Lekarz, Podróż służbowa) jako przycisk na terminalu RasPi.

  1. Przejdź do zakładki Dodatkowo dozwolone przyciski na czytniku chipów
  2. Kliknij zielony przycisk Dodaj przycisk
  3. W oknie modalnym wybierz Typ obecności z listy rozwijanej
  4. Kliknij Zapisz
  5. Przycisk pojawi się w tabeli
  6. Ustaw tryb automatycznego zakończenia (zobacz poniżej)

Ustawienie automatycznego zakończenia

Po dodaniu przycisku wybierz jeden z 3 trybów:

A) Do liczby godzin pracy dziennie
  • Zaznacz przycisk radiowy w kolumnie Automatyczne zakończenie do liczby godzin pracy dziennie
  • System doliczy koniec według dziennego wymiaru pracownika
  • Przykład: Podróż służbowa - pracownik ma wymiar 8h, wyjeżdża o 9:00 → auto koniec 17:00
B) Do podanej godziny
  • Zaznacz przycisk radiowy w kolumnie Automatyczne zakończenie o podanej godzinie
  • W polu czasowym poniżej wprowadź godzinę (np. 15:30)
  • Przykład: Szkolenie - wszyscy mają stały koniec o 16:00
C) Stała długość
  • Zaznacz przycisk radiowy w kolumnie Stała długość w min
  • W polu liczbowym poniżej wprowadź liczbę minut (np. 60)
  • Przykład: Lekarz - automatycznie zakończ po 60 minutach
Zalecenia:
  • Podróż służbowa → Do liczby godzin pracy
  • Szkolenie/Konferencja → Do podanej godziny
  • Lekarz/Urząd → Stała długość (60-120 min)

5.2 Usunięcie przycisku

  1. W tabeli przycisków znajdź wiersz z przyciskiem, który chcesz usunąć
  2. Kliknij czerwony przycisk Usuń przycisk
  3. Przycisk zostanie usunięty z bazy danych i zniknie z terminalu

5.3 Ograniczenie adresów IP

Cel: Zezwolić na dostęp do API tylko z zaufanych adresów IP (czytników).

  1. Przejdź do zakładki Dozwolone adresy IP, z których może zgłaszać się czytnik
  2. Zaznacz Zezwalaj na dostęp czytnika tylko z poniższych adresów IP
  3. W pierwszym pustym polu wprowadź adres IP czytnika (np. 192.168.1.100)
  4. Po zapisaniu automatycznie pojawi się kolejne puste pole
  5. Powtórz dla wszystkich czytników
  6. Zmiany są zapisywane automatycznie

Kontrola bezpieczeństwa w kodzie:

// System sprawdza USER_IP względem wa_chip_allowed_ips_ser_arr
if (!in_array(USER_IP, $Company->wa_chip_allowed_ips_ser_arr)
    && $Company->wa_chip_allowed_ips_ser_arr[0] != 'all') {
    DieUnauthorized();
}
Krytyczne ostrzeżenie: Jeśli włączysz białą listę IP i nie wprowadzisz adresów IP czytników, wszystkie czytniki zostaną zablokowane! Najpierw wprowadź adresy IP, potem włącz białą listę.

5.4 Włączenie rozpoznawania twarzy

Cel: Umożliwić pracownikom odbijanie obecności za pomocą twarzy bez chipa.

Wymagania:

  • Terminal RasPi z kamerą
  • Zdjęcia pracowników w systemie (minimum 1 zdjęcie na pracownika)
  • Biblioteka JavaScript face-api.js (część systemu)

Procedura aktywacji:

  1. Przejdź do zakładki Uprawnienia użytkownika
  2. W nagłówku tabeli zaznacz Według twarzy (wymagany nasz czytnik)
  3. System ustawi wa_RasPi_Face=1
  4. Na terminalu RasPi aktywuje się kamera i wykrywanie twarzy

Jak to działa:

  1. Pracownik podchodzi przed kamerę RasPi
  2. System wczytuje wszystkie zapisane zdjęcia pracowników
  3. Face-api.js wykrywa twarz w live video
  4. Porównuje wykrytą twarz z zapisanymi zdjęciami (próg 0.4)
  5. Przy dopasowaniu automatycznie rejestruje obecność
Szczegóły techniczne:
  • Biblioteka: face-api.js v0.22.2
  • Model: SsdMobilenetv1 (szybki, dokładny)
  • Próg: 0.4 (40% dopasowania = rozpoznanie)
  • Zdjęcia: Wczytywane z /UserFaceRecognitionShow/{hash}-{photoID}.png

5.5 Wyświetlanie statusów innych

Cel: Na terminalu wyświetlić, kto jest obecny, a kto nie.

  1. Przejdź do zakładki Pozostałe ustawienia
  2. Zaznacz Pokaż statusy (obecność) innych na czytniku
  3. System ustawi wa_chip_show_active=1

Wynik: Na terminalu RasPi wyświetla się lista wszystkich pracowników:

  • Zielony: Obecny (wa_chip_last_inout='in')
  • Czerwony: Nieobecny (wa_chip_last_inout='out')
Korzyści:
  • Pracownicy widzą, kto jest w pracy
  • Szybka orientacja dla odwiedzających
  • Przejrzystość obecności

5.6 Przyciski na dashboardzie

Cel: Umożliwić pracownikom odbijanie obecności bezpośrednio z interfejsu webowego bez fizycznej karty.

  1. Przejdź do zakładki Pozostałe ustawienia
  2. Zaznacz Pokaż przyciski Przybycie/Wyjście na głównym panelu po zalogowaniu
  3. System ustawi wa_chip_buttons_on_dashboard=1

Wynik: Po zalogowaniu każdy pracownik zobaczy na dashboardzie:

  • Zielony przycisk "Przybycie" (jeśli status to 'out')
  • Czerwony przycisk "Wyjście" (jeśli status to 'in')

Zastosowanie:

  • Homeoffice - pracownik nie ma dostępu do czytnika
  • Pracownicy mobilni - odbijanie z telefonu/tabletu
  • Administracja - zapasowy sposób zapisu
Uwaga dotycząca bezpieczeństwa: Przyciski na dashboardzie nie weryfikują fizycznej obecności. Zalecamy łączyć ze zdjęciami przy zapisie lub używać tylko dla zaufanych pracowników.

5.7 Zdjęcie przy zapisie

Cel: Wykonywać zdjęcie zabezpieczające przy każdym odbiciu karty do wykrywania nadużyć kart.

  1. Przejdź do zakładki Pozostałe ustawienia
  2. Zaznacz Zdjęcie przy zapisie obecności z terminalu
  3. System ustawi wa_RasPi_TakePhoto=1

Jak to działa:

  1. Pracownik przybliża chip do czytnika
  2. Kamera RasPi wykonuje zdjęcie
  3. Zdjęcie jest przesyłane na serwer
  4. Zapisuje się do tabeli Files z powiązaniem do zapisu obecności
  5. Administrator może sprawdzić zdjęcia w module Obecność

Wykrywanie nadużyć:

  • Na zdjęciu jest inna osoba niż właściciel karty → nadużycie
  • Zdjęcie jest rozmazane/puste → próba obejścia systemu
  • Powtarzające się zdjęcia tej samej osoby z cudzą kartą → regularne nadużycie
Zalecenie: Włącz fotografowanie dla maksymalnego bezpieczeństwa. Poinformuj pracowników, że zdjęcia służą tylko do kontroli i nie są publicznie dostępne.

6. Integracja

6.1 Powiązane moduły

Moduł Relacja Opis
Obecność Zapis danych Automatyczny zapis czasów przybycia/wyjścia do tabeli Workattendance.
Jeśli włączone wa_chip_WritePause=1, zapisywana jest także długość przerwy.
Użytkownicy Powiązanie z pracownikami Wczytywanie danych użytkownika (klasa cUser):
- Kod chipa (wa_chip_code)
- Odciski palców (FingerPrints_ser_arr)
- Uprawnienia obecności (rights_workattendance)
- Minimalna przerwa (wa_chip_minimal_pause_min)
Terminale RasPi Fizyczny czytnik Zarządzanie urządzeniami RasPi (klasa cRasPi):
- Wersja firmware (Version)
- Ostatnie sprawdzenie (LastCheck)
- Czytnik odcisków (FingerPrintReader)
- Punkt końcowy API (GetUrl())
Typy obecności Przyciski na czytniku Wczytywanie typów obecności (cWorkattendance_days_type):
- Nazwa typu (day_name_cs)
- Dostępność na czytniku (chip_buttons_available)
- Powiązanie przez tabelę Workattendance_chip_buttons
Pliki Zdjęcia przy zapisie Przechowywanie zdjęć z terminalu:
- Tabela Files
- Powiązanie z zapisem obecności
- Dostęp przez moduł Obecność

6.2 Przepływy danych

Przepływ 1: Odbicie chipem z terminalu RasPi

1. Pracownik przybliża chip do czytnika RasPi
   ↓
2. RasPi odczytuje kod chipa z RFID/NFC
   ↓
3. RasPi wywołuje punkt końcowy API:
   GET /?w=wa_chip_inout&idUser=123&hash=abc123xyz
   ↓
4. inc/wa_chip_inout.php przetwarza żądanie:
   - Weryfikuje hash względem User.wa_chip_code
   - Weryfikuje adres IP względem wa_chip_allowed_ips_ser_arr
   - Sprawdza status wa_chip_last_inout
   ↓
5. Zapis do tabeli Workattendance:
   - Przybycie: Tworzy nowy rekord z time_start
   - Wyjście: Uzupełnia time_end w istniejącym rekordzie
   ↓
6. Aktualizacja User.wa_chip_last_inout:
   - 'in' → 'out' lub 'out' → 'in'
   ↓
7. Jeśli wa_RasPi_TakePhoto=1:
   - RasPi wykonuje zdjęcie
   - Przesyła na serwer
   - Zapisuje do tabeli Files
   ↓
8. Odpowiedź do terminalu RasPi:
   - Strona HTML z potwierdzeniem
   - Wyświetlenie czasu zapisu
   - Lista obecnych (jeśli wa_chip_show_active=1)

Przepływ 2: Odbicie z dashboardu (interfejs webowy)

1. Pracownik klika przycisk "Przybycie" na dashboardzie
   ↓
2. JavaScript wywołuje AJAX:
   $.get('/?w=wa_chip_inout&idUser='+idUser+'&hash='+hash)
   ↓
3. inc/wa_chip_inout.php przetwarza tak samo jak RasPi
   ↓
4. Zapis do Workattendance
   ↓
5. Aktualizacja wa_chip_last_inout
   ↓
6. Odpowiedź AJAX:
   - Dashboard się odświeża
   - Wyświetla się nowy status ("Wyjście" zamiast "Przybycie")

Przepływ 3: Rozpoznawanie twarzy (Face Recognition)

1. Pracownik podchodzi przed kamerę RasPi
   ↓
2. RasPi streamuje video na serwer
   ↓
3. JavaScript face-api.js:
   - Wczytuje wszystkie zdjęcia pracowników
   - Tworzy FaceMatcher z zapisanymi twarzami
   - Wykrywa twarz w live video
   - Porównuje z zapisanymi twarzami
   ↓
4. Przy dopasowaniu (threshold > 0.4):
   window.location.replace('?w=wa_chip_inout&FaceDetection='+hash)
   ↓
5. Serwer przetwarza parametr FaceDetection:
   - Znajduje idUser według hasha
   - Wczytuje wa_chip_code
   - Rejestruje obecność
   ↓
6. Taki sam przepływ jak Przepływ 1 (kroki 5-8)

6.3 Zależności

Komponent Zależność Wymagany
Terminal RasPi Fizyczne urządzenie z czytnikiem RFID/NFC Tak
Moduł obecności Musi być aktywny do zapisu danych Tak
Użytkownicy Pracownicy muszą mieć uprawnienia obecności Tak
RasPi z kamerą Do rozpoznawania twarzy i zdjęć Opcjonalnie
Czytnik odcisków Do identyfikacji biometrycznej Opcjonalnie
face-api.js Biblioteka do rozpoznawania twarzy Opcjonalnie
Połączenie sieciowe RasPi musi mieć dostęp do serwera Tak

7. Punkt końcowy API

7.1 Główny punkt końcowy

Format URL:

https://twoja-domena.pl/?w=wa_chip_inout&idUser={ID}&hash={HASH}

7.2 Parametry

Parametr Typ Wymagany Opis
w string Tak Identyfikator punktu końcowego
Wartość: wa_chip_inout
idUser int Tak ID pracownika w systemie
Przykład: 123
hash string Tak Kod hash bezpieczeństwa chipa
Odpowiada: User.wa_chip_code
Przykład: abc123xyz789def456
idWorkattendance_chip_buttons int Nie ID przycisku na czytniku (specjalny typ obecności)
Przykład: 5 (Lekarz)
FaceDetection string Nie Hash rozpoznanej twarzy
Format: {userHash}-{photoID}
Przykład: abc123-1
FingerID int Nie ID rozpoznanego odcisku palca
Przykład: 7
wa_chip_action string Nie Specyficzna akcja (np. ręczny wybór notatki)
Wartości: note, pause

7.3 Kontrole bezpieczeństwa

Punkt końcowy API przeprowadza następujące kontrole bezpieczeństwa:

  1. Weryfikacja hasha:
    if ($User->wa_chip_code != $_GET['hash']) {
        DieUnauthorized();
    }
  2. Kontrola adresu IP:
    if (!in_array(USER_IP, $Company->wa_chip_allowed_ips_ser_arr)
        && $Company->wa_chip_allowed_ips_ser_arr[0] != 'all') {
        DieUnauthorized();
    }
  3. Kontrola istnienia użytkownika:
    $User = new cUser();
    $User->load($_GET['idUser']);
    if ($User->idUser == 0) {
        DieUnauthorized();
    }
  4. Kontrola aktywnego konta:
    if ($User->active != 1 || $User->deleted != 0) {
        DieUnauthorized();
    }

7.4 Odpowiedź API

API zwraca stronę HTML z następującymi informacjami:

  • Zegar i data: Aktualny czas i data (zegar JavaScript)
  • Potwierdzenie zapisu: "Przybycie zarejestrowane" / "Wyjście zarejestrowane"
  • Czas zapisu: Dokładny czas odbicia karty
  • Lista obecnych: Jeśli wa_chip_show_active=1
  • Zdjęcie: Jeśli wa_RasPi_TakePhoto=1, wyświetla się podgląd zdjęcia

7.5 Przykłady wywołań

Przykład 1: Zwykłe przybycie

GET https://firma.pl/?w=wa_chip_inout&idUser=45&hash=x7k9mN2pQ5rT8vW1

Przykład 2: Wyjście do lekarza (przycisk ID=3)

GET https://firma.pl/?w=wa_chip_inout&idUser=45&hash=x7k9mN2pQ5rT8vW1&idWorkattendance_chip_buttons=3

Przykład 3: Rozpoznanie twarzy

GET https://firma.pl/?w=wa_chip_inout&FaceDetection=abc123def456-1

Przykład 4: Odcisk palca

GET https://firma.pl/?w=wa_chip_inout&idUser=45&hash=x7k9mN2pQ5rT8vW1&FingerID=7

8. Terminal RasPi

8.1 Opis urządzenia

Terminal RasPi (Raspberry Pi) to kompaktowy komputer wielkości karty kredytowej, który służy jako fizyczny czytnik obecności.

Komponenty sprzętowe

Komponent Opis Wymagany
Raspberry Pi Płyta główna (zalecane RPi 4 lub nowszy) Tak
Czytnik RFID/NFC Moduł do odczytu kart chipowych (np. RC522) Tak
Wyświetlacz Ekran dotykowy do wyświetlania przycisków i statusów Tak
Kamera Pi Camera do fotografowania i rozpoznawania twarzy Opcjonalnie
Czytnik odcisków Biometryczny czytnik odcisków palców (np. R307) Opcjonalnie
Połączenie sieciowe Ethernet lub WiFi do komunikacji z serwerem Tak

8.2 Funkcje terminalu

Podstawowe funkcje

  • Odczyt chipów: Automatyczne wykrywanie kart RFID/NFC
  • Wyświetlanie czasu: Aktualny czas i data
  • Przyciski typów obecności: Przybycie, Wyjście, Przerwa, Obiad + konfigurowalne przyciski
  • Potwierdzenie zapisu: Wizualna i dźwiękowa sygnalizacja udanego zapisu
  • Lista obecnych: Wyświetlanie, kto jest w pracy (jeśli włączone)

Zaawansowane funkcje (opcjonalnie)

  • Rozpoznawanie twarzy: Wykrywanie przez AI za pomocą kamery i face-api.js
  • Odczyt odcisków: Identyfikacja biometryczna za pomocą odcisków palców
  • Fotografowanie: Wykonanie zdjęcia zabezpieczającego przy każdym odbiciu karty
  • Strumień video: Live video z kamery do rozpoznawania twarzy

8.3 Zarządzanie terminalem

Rejestracja nowego terminalu

  1. Fizycznie podłącz RasPi do sieci (Ethernet lub WiFi)
  2. Uruchom skrypt instalacyjny na RasPi
  3. RasPi automatycznie zarejestruje się na serwerze:
POST https://firma.pl/RestAPI/RasPi.php
{
    "action": "register",
    "hash": "E5tlu8Jg44ZwwlBQgSbCE3lU7RSRvMXa"
}
  1. W administracji pojawi się nowy terminal w zakładce Zarejestrowane czytniki

Kontrola statusu terminalu

Terminal regularnie zgłasza się do serwera (co 5 minut):

GET https://firma.pl/RestAPI/RasPiCheck.php?hash={hash}

Serwer aktualizuje kolumnę LastCheck w tabeli RasPi.

Aktualizacja firmware

  1. Zaloguj się na RasPi przez SSH
  2. Uruchom polecenie: sudo /home/pi/UpdateFromeIntranetServer
  3. Skrypt pobierze najnowszą wersję z: https://firma.pl/Apps/RasPiUpdate/
  4. Automatycznie zrestartuje usługi
  5. Wersja zostanie zaktualizowana w bazie danych (kolumna Version)

8.4 URL API terminalu

Każdy terminal RasPi ma unikalny URL API:

https://firma.pl/RasPi/{HASH}/RFID/WorkAttenDance

Gdzie {HASH} to identyfikator bezpieczeństwa terminalu (np. E5tlu8Jg44ZwwlBQgSbCE3lU7RSRvMXa).

Zastosowanie:

  • RasPi odczytuje chip z kodem 12345
  • RasPi wywołuje: https://firma.pl/?w=wa_chip_inout&idUser=45&hash=12345
  • Serwer weryfikuje i rejestruje obecność
  • RasPi wyświetla potwierdzenie

8.5 Diagnostyka problemów

Problem: Terminal się nie zgłasza

Objawy: W zakładce "Zarejestrowane czytniki" jest stary czas w kolumnie "Ostatnie sprawdzenie"

Rozwiązanie:

  1. Sprawdź połączenie sieciowe RasPi (ping serwera)
  2. Zweryfikuj, że adres IP RasPi jest na białej liście
  3. Sprawdź logi na RasPi: /var/log/eintranet/
  4. Zrestartuj RasPi: sudo reboot

Problem: Czytnik nie odczytuje chipów

Objawy: Przybliżenie chipa nie wywołuje żadnej reakcji

Rozwiązanie:

  1. Sprawdź fizyczne połączenie czytnika z RasPi
  2. Zweryfikuj, że działa usługa czytnika: sudo systemctl status rfid
  3. Zrestartuj usługę: sudo systemctl restart rfid
  4. Sprawdź, czy chip jest kompatybilny (RFID/NFC 13.56 MHz)

Problem: Rozpoznawanie twarzy nie działa

Objawy: Kamera nie wyświetla video lub nie rozpoznaje twarzy

Rozwiązanie:

  1. Zweryfikuj, że w ustawieniach jest włączone: wa_RasPi_Face=1
  2. Sprawdź połączenie kamery z RasPi
  3. Zweryfikuj, że pracownicy mają przesłane zdjęcia w systemie
  4. Sprawdź konsolę JavaScript w przeglądarce pod kątem błędów
  5. Spróbuj obniżyć próg: zmodyfikuj minConfidence = 0.3 (zamiast 0.4)

9. Wskazówki i porady

9.1 Kopiowanie URL API

Wskazówka: W zakładce "Uprawnienia użytkownika" kliknij ikonę schowka (fa-clipboard) obok kodu chipa. URL zostanie skopiowany do schowka.

Zastosowanie: Możesz otworzyć URL w przeglądarce do ręcznego testowania odbicia bez fizycznego czytnika.

9.2 Testowanie bez terminalu RasPi

Procedura:

  1. Skopiuj URL API pracownika
  2. Otwórz URL w przeglądarce
  3. System zarejestruje obecność jak z RasPi
Ostrzeżenie: Jeśli masz włączoną białą listę IP, musisz dodać swój adres IP, w przeciwnym razie dostęp zostanie odrzucony.

9.3 Reset "wiszących" statusów hurtowo

Sytuacja: Wielu pracowników zapomniało odbić wyjście i system jest w statusie "in".

Rozwiązanie zapytaniem SQL:

UPDATE User
SET wa_chip_last_inout='out'
WHERE Company_idCompany=123
AND wa_chip_last_inout='in';

Uwaga: To tylko resetuje statusy, nie rozwiązuje brakujących zapisów w obecności.

9.4 Ustawienie minimalnej przerwy dla wszystkich

Sytuacja: Chcesz ustawić minimalną przerwę 30 minut dla wszystkich pracowników.

Rozwiązanie zapytaniem SQL:

UPDATE User
SET wa_chip_minimal_pause_min=30
WHERE Company_idCompany=123
AND active=1
AND deleted=0;

9.5 Eksportowanie kodów chipów

Procedura:

  1. W zakładce "Uprawnienia użytkownika" użyj eksportu DataTables
  2. Kliknij przycisk "Excel" lub "CSV"
  3. Pobierze się plik ze wszystkimi kodami chipów

9.6 Automatyczny przycisk dla homeoffice

Zalecenie: Dodaj przycisk "Homeoffice" z automatycznym zakończeniem do liczby godzin pracy.

Korzyść: Pracownik zapisze homeoffice, system automatycznie zakończy według jego wymiaru.

9.7 Kombinacja chipa i twarzy

Możliwość: Włącz rozpoznawanie twarzy i chipa jednocześnie.

Korzyść:

  • Pracownik może użyć chipa (szybko)
  • Lub twarzy (jeśli zapomniał karty)
  • System obsługuje obie metody

9.8 Zdjęcia jako dowód

Wskazówka: Jeśli masz spory o obecność, użyj zdjęć z terminalu jako dowodu.

Dostęp:

  1. Moduł Obecność
  2. Szczegóły rekordu
  3. Wyświetli się zdjęcie wykonane przy odbiciu karty

9.9 Aplikacja mobilna jako alternatywa

Informacja: System obsługuje również aplikację mobilną do odbijania obecności.

Korzyść:

  • Pracownik nie musi mieć chipa
  • Odbijanie z telefonu z dowolnego miejsca
  • Lokalizacja GPS przy zapisie (opcjonalnie)

9.10 Regularne czyszczenie starych zdjęć

Wskazówka: Zdjęcia zajmują miejsce na serwerze. Ustaw automatyczne usuwanie starszych niż 3 miesiące.

Zadanie Cron:

DELETE FROM Files
WHERE table_name='Workattendance'
AND created < DATE_SUB(NOW(), INTERVAL 3 MONTH);

10. Rozwiązywanie problemów

10.1 Chip nie działa

Objawy: Przybliżenie chipa do czytnika nie wywołuje żadnej reakcji lub wyświetla się błąd.

Możliwe przyczyny i rozwiązania:

Przyczyna Rozwiązanie
Błędny lub pusty kod chipa Sprawdź, czy w zakładce "Uprawnienia użytkownika" wypełniony jest Kod chipa.
Musi dokładnie odpowiadać kodowi w chipie.
Adres IP czytnika nie jest na białej liście Przejdź do zakładki "Dozwolone adresy IP".
Dodaj adres IP terminalu RasPi.
Lub wyłącz białą listę IP (niezaznaczone).
Czytnik nie odczytuje chipa Sprawdź fizyczne połączenie czytnika z RasPi.
Zrestartuj usługę RFID: sudo systemctl restart rfid
Niekompatybilny chip Zweryfikuj, że chip to RFID/NFC 13.56 MHz (np. Mifare).
System nie obsługuje chipów 125 kHz.
Problem sieciowy Sprawdź połączenie RasPi z siecią.
Ping do serwera: ping twoja-domena.pl

Testowanie: Skopiuj URL API (ikona schowka) i otwórz w przeglądarce. Jeśli działa, problem jest w RasPi/czytniku. Jeśli nie działa, problem jest w ustawieniach systemu.

10.2 Pracownik nie może zapisywać ręcznie

Objawy: Przy próbie ręcznego zapisu w module Obecność wyświetla się błąd "Brak uprawnień".

Możliwe przyczyny i rozwiązania:

Przyczyna Rozwiązanie
Zaznaczone "Zapobiegaj zmianom" W zakładce "Uprawnienia użytkownika" odznacz pole wyboru Zapobiegaj zmianom czasu pracy.
Lub kliknij Ręcznie może zapisywać tylko typ obecności... i zezwól na konkretne typy.
Typ obecności nie jest dozwolony Kliknij Ręcznie może zapisywać tylko typ obecności...
Zaznacz wymagany typ (np. Urlop, Choroba).
Kliknij Zapisz.
Brak uprawnień do obecności W administracji użytkowników sprawdź, że pracownik ma ustawione rights_workattendance.
Musi być '1' lub '2' (nie NULL lub 0).

10.3 Przerwa jest automatycznie wydłużana

Objawy: Pracownik zapisze przerwę 15 minut, ale w systemie pojawia się 30 minut.

Przyczyna: Jest ustawiona minimalna długość przerwy.

Rozwiązanie:

  1. W zakładce "Uprawnienia użytkownika" znajdź pracownika
  2. W kolumnie Minimalna długość przerwy (minut) usuń wartość lub zmniejsz (np. z 30 na 15)
  3. System automatycznie zapisze

Uwaga: Wydłużenie przerwy to zamierzona funkcja, nie błąd. Służy do wymuszenia obiadu.

10.4 Zdjęcia nie są wykonywane

Objawy: W module Obecność przy rekordach brakuje zdjęć, mimo że funkcja jest włączona.

Możliwe przyczyny i rozwiązania:

Przyczyna Rozwiązanie
Nie jest włączone w ustawieniach W zakładce "Pozostałe ustawienia" zaznacz Zdjęcie przy zapisie obecności z terminalu.
Sprawdź, że wa_RasPi_TakePhoto=1.
RasPi nie ma kamery Zweryfikuj, że do RasPi jest fizycznie podłączona Pi Camera.
Sprawdź połączenie kabla kamery.
Uruchom test kamery: raspistill -o test.jpg
Usługa kamery nie działa Sprawdź status: sudo systemctl status camera
Zrestartuj: sudo systemctl restart camera
Błąd przy przesyłaniu na serwer Sprawdź logi RasPi: /var/log/eintranet/camera.log
Zweryfikuj połączenie sieciowe i uprawnienia do zapisu na serwerze.
Odbicie z dashboardu Zdjęcia są wykonywane tylko przy odbiciu z terminalu RasPi.
Przyciski na dashboardzie nie wykonują zdjęć (nie mają kamery).

10.5 Terminal się nie zgłasza

Objawy: W zakładce "Zarejestrowane czytniki" w kolumnie "Ostatnie sprawdzenie" jest stara data/czas (ponad godzinę).

Możliwe przyczyny i rozwiązania:

Przyczyna Rozwiązanie
RasPi jest wyłączone Sprawdź, że RasPi jest podłączone do zasilania i świeci LED.
Spróbuj fizycznie zrestartować (odłączyć i podłączyć zasilanie).
Problem sieciowy Sprawdź kabel Ethernet lub połączenie WiFi.
Ping do serwera z RasPi: ping twoja-domena.pl
Sprawdź firewall i router.
Adres IP nie jest na białej liście W zakładce "Dozwolone adresy IP" dodaj adres IP RasPi.
Sprawdź, czy adres IP RasPi się nie zmienił (DHCP).
Zalecamy ustawienie statycznego IP.
Usługa check nie została uruchomiona SSH na RasPi.
Sprawdź status: sudo systemctl status eintranet-check
Zrestartuj: sudo systemctl restart eintranet-check
Błąd w pliku konfiguracyjnym Sprawdź konfigurację: /etc/eintranet/config.json
Zweryfikuj poprawność URL serwera i hasha.

10.6 Rozpoznawanie twarzy nie działa

Objawy: Kamera wyświetla video, ale system nie rozpoznaje żadnego pracownika.

Możliwe przyczyny i rozwiązania:

Przyczyna Rozwiązanie
Nie jest włączone w ustawieniach W zakładce "Uprawnienia użytkownika" zaznacz Według twarzy (wymagany nasz czytnik).
Sprawdź, że wa_RasPi_Face=1.
Brakuje zdjęć pracowników W administracji użytkowników sprawdź, że pracownicy mają przesłane zdjęcia.
Minimum 1 zdjęcie na pracownika.
Zdjęcia muszą być frontalne, dobrze oświetlone, bez okularów/czapki.
Złe warunki oświetleniowe Zapewnij wystarczające oświetlenie przed czytnikiem.
Unikaj światła z tyłu i ciemnych miejsc.
Idealne jest równomierne światło dzienne.
Zbyt wysoki próg W pliku inc/wa_chip_inout.php obniż minConfidence:
let minConfidence = 0.3 (zamiast 0.4)
Uwaga: Niższy próg = więcej fałszywych rozpoznań.
Błędy JavaScript Otwórz konsolę JavaScript w przeglądarce (F12).
Sprawdź komunikaty błędów.
Spróbuj innej przeglądarki (zalecana Chrome).
Face-api.js się nie wczytała Sprawdź, że istnieje plik:
/_components/face-api.js-0.22.2/dist/face-api.min.js
Sprawdź połączenie sieciowe (API wczytuje modele z CDN).

10.7 Przyciski na dashboardzie nie są widoczne

Objawy: Po zalogowaniu na dashboard brakuje przycisków Przybycie/Wyjście.

Możliwe przyczyny i rozwiązania:

Przyczyna Rozwiązanie
Nie jest włączone w ustawieniach W zakładce "Pozostałe ustawienia" zaznacz Pokaż przyciski Przybycie/Wyjście na głównym panelu.
Sprawdź, że wa_chip_buttons_on_dashboard=1.
Cache przeglądarki Odśwież stronę z wyczyszczeniem cache: Ctrl + F5 (Windows) lub Cmd + Shift + R (Mac).
Lub wyczyść cookies i cache w ustawieniach przeglądarki.
Nie ma wypełnionego kodu chipa W zakładce "Uprawnienia użytkownika" sprawdź, że pracownik ma wypełniony Kod chipa.
Przyciski wyświetlają się tylko użytkownikom z kodem chipa.
Błąd JavaScript Otwórz konsolę JavaScript (F12).
Sprawdź komunikaty błędów.
Spróbuj innej przeglądarki.

10.8 Automatyczne zakończenie nie działa

Objawy: Pracownik odbija specjalny typ (np. Lekarz), ale obecność nie jest automatycznie zamykana.

Możliwe przyczyny i rozwiązania:

Przyczyna Rozwiązanie
Nie jest ustawiony tryb W zakładce "Dodatkowo dozwolone przyciski" sprawdź przycisk.
Musi być zaznaczony jeden z 3 przycisków radiowych (do godzin, czasu lub długości).
Jeśli nie, zaznacz i ustaw wartość.
Pracownik odbił wyjście ręcznie Automatyczne zakończenie stosuje się tylko jeśli pracownik NIE odbił wyjścia do północy.
Jeśli odbił ręcznie, automatyka nie jest stosowana.
Zadanie Cron nie działa Automatyczne zakończenie wykonuje zadanie cron (np. o 00:01).
Sprawdź, że działa: crontab -l
Szukaj linii z wa_chip_autoclose.php (lub podobną).
Błędne ustawienie czasu Przy trybie "Do podanej godziny" sprawdź format czasu: GG:MM
Musi być prawidłowy czas (np. 15:30, nie 25:00).

10.9 Minimalna przerwa nie jest stosowana

Objawy: Pracownik ma ustawioną minimalną przerwę 30 min, ale system akceptuje również krótsze przerwy.

Możliwe przyczyny i rozwiązania:

Przyczyna Rozwiązanie
Nie jest wypełniona wartość W zakładce "Uprawnienia użytkownika" sprawdź kolumnę Minimalna długość przerwy.
Musi być wartość liczbowa (np. 30), nie puste pole.
Ręczny zapis obecności Minimalna przerwa stosuje się tylko przy odbiciu z terminalu.
Przy ręcznym zapisie w module Obecność kontrola nie jest wykonywana.
Logika nie jest zaimplementowana Sprawdź, że kod w inc/wa_chip_inout.php zawiera kontrolę minimalnej przerwy.
Szukaj linii z wa_chip_minimal_pause_min.

10.10 Biała lista IP blokuje legalny dostęp

Objawy: Czytnik nie działa, mimo że jest prawidłowo skonfigurowany. W logu jest błąd "Unauthorized".

Możliwe przyczyny i rozwiązania:

Przyczyna Rozwiązanie
Adres IP nie jest na liście W zakładce "Dozwolone adresy IP" dodaj adres IP czytnika.
Sprawdź rzeczywisty adres IP RasPi: hostname -I
Dynamiczny adres IP (DHCP) Adres IP RasPi mógł się zmienić po restarcie.
Zalecamy ustawienie statycznego adresu IP w ustawieniach routera lub na RasPi.
NAT/Serwer proxy Jeśli RasPi jest za NAT/proxy, serwer widzi inny IP.
Sprawdź, jaki IP widzi serwer: echo USER_IP w logu.
Dodaj ten IP do białej listy.
Format adresu IP Sprawdź prawidłowy format: 192.168.1.100
Nie: 192.168.1.100:80 lub http://192.168.1.100
Szybka diagnostyka problemu IP:
  1. Tymczasowo wyłącz białą listę IP (odznacz pole wyboru)
  2. Spróbuj odbić z czytnika
  3. Jeśli działa → problem jest w białej liście IP
  4. Sprawdź logi serwera, jaki IP widzi
  5. Dodaj prawidłowy IP do białej listy
  6. Ponownie włącz białą listę