Moduł Obecność - chip/czytnik linii papilarnych
Spis treści
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
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)
DieUnauthorized().
3. Interfejs użytkownika
3.1 Przegląd zakładek
Interfejs użytkownika modułu jest podzielony na 5 głównych zakładek:
- Uprawnienia użytkownika - Ustawienia kodów chipów, odcisków palców, zapobieganie ręcznym zmianom
- Dozwolone adresy IP - Biała lista adresów IP czytników
- Dodatkowo dozwolone przyciski - Konfiguracja przycisków na terminalu
- Pozostałe ustawienia - Ogólne ustawienia modułu
- Zarejestrowane czytniki - Przegląd terminali RasPi
$_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 |
|
| 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 |
|
| Minimalna długość przerwy | Liczba minut minimalnej przerwy | Wprowadź liczbę (np. 30), zmiana jest automatycznie zapisywana |
| Akcje | Specjalne akcje dla pracownika |
|
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)
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
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:
- Wybierz Typ obecności z listy rozwijanej (wczytywane są tylko typy z
chip_buttons_available=1) - Kliknij Zapisz
- 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 |
|
| Automatyczne zakończenie o podanej godzinie | Stała godzina zakończenia |
|
| Stała długość w min | Konkretna liczba minut |
|
| Akcje | Przycisk do usunięcia |
|
Tryby automatycznego zakończenia - szczegółowo
1. Do liczby godzin pracy dziennie
Jak to działa:
- System wczytuje dzienny wymiar pracownika (np. 8 godzin)
- Przy odbiciu przybycia rejestruje czas (np. 7:00)
- Automatycznie oblicza koniec: 7:00 + 8h = 15:00
- 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:
- Administrator ustawia stałą godzinę zakończenia (np. 15:30)
- Przy odbiciu przybycia rejestruje czas (np. 7:00)
- 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:
- Administrator ustawia liczbę minut (np. 60)
- Przy odbiciu przybycia rejestruje czas (np. 9:00)
- 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.
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_14Typ 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_dashboardZastosowanie: 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_WritePausePrzykł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_TakePhotoWymagania: 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_AutoCloseInLastDayCel: Zapobieganie "wiszącym" zapisom w obecności |
Wyłączone (0) |
- 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) |
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)
- 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ść.
- Otwórz Ustawienia → Obecność - chip/czytnik linii papilarnych
- Przejdź do zakładki Uprawnienia użytkownika
- W tabeli pracowników znajdź wymaganego pracownika (możesz użyć wyszukiwania)
- W kolumnie Kod chipa wprowadź kod hash bezpieczeństwa (zalecane minimum 16 znaków, losowych)
- System automatycznie zapisze zmianę przy opuszczeniu pola (zdarzenie onChange)
- Opcjonalnie: Kliknij ikonę schowka (fa-clipboard) aby skopiować URL API do testowania
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.
- W zakładce Uprawnienia użytkownika znajdź pracownika
- W wierszu pracownika zaznacz pole wyboru Zapobiegaj zmianom czasu pracy w obecności
- System ustawi
rights_workattendance='1' - Pojawi się zielony przycisk Ręcznie może zapisywać tylko typ obecności...
- Kliknij przycisk
- W oknie modalnym zaznacz dozwolone typy (np. Urlop, Choroba, Homeoffice)
- Kliknij Zapisz
Wynik: Pracownik teraz nie może ręcznie modyfikować obecności, ale może ręcznie wprowadzić wybrane typy nieobecności.
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).
- W zakładce Uprawnienia użytkownika znajdź pracownika
- W kolumnie Minimalna długość przerwy (minut) wprowadź liczbę minut (np. 30)
- 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
4.4 Reset statusu przybycie/wyjście
Cel: Zresetować "wiszący" status pracownika, który zapomniał odbić wyjście.
- W zakładce Uprawnienia użytkownika znajdź pracownika
- Jeśli pracownik jest w statusie "in" (obecny), pojawi się przycisk Resetuj (dla przybycia)
- Kliknij przycisk
- System zmieni status na "out" (nieobecny)
- 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
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.
- Przejdź do zakładki Dodatkowo dozwolone przyciski na czytniku chipów
- Kliknij zielony przycisk Dodaj przycisk
- W oknie modalnym wybierz Typ obecności z listy rozwijanej
- Kliknij Zapisz
- Przycisk pojawi się w tabeli
- 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
- 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
- W tabeli przycisków znajdź wiersz z przyciskiem, który chcesz usunąć
- Kliknij czerwony przycisk Usuń przycisk
- 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).
- Przejdź do zakładki Dozwolone adresy IP, z których może zgłaszać się czytnik
- Zaznacz Zezwalaj na dostęp czytnika tylko z poniższych adresów IP
- W pierwszym pustym polu wprowadź adres IP czytnika (np. 192.168.1.100)
- Po zapisaniu automatycznie pojawi się kolejne puste pole
- Powtórz dla wszystkich czytników
- 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();
}
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:
- Przejdź do zakładki Uprawnienia użytkownika
- W nagłówku tabeli zaznacz Według twarzy (wymagany nasz czytnik)
- System ustawi
wa_RasPi_Face=1 - Na terminalu RasPi aktywuje się kamera i wykrywanie twarzy
Jak to działa:
- Pracownik podchodzi przed kamerę RasPi
- System wczytuje wszystkie zapisane zdjęcia pracowników
- Face-api.js wykrywa twarz w live video
- Porównuje wykrytą twarz z zapisanymi zdjęciami (próg 0.4)
- Przy dopasowaniu automatycznie rejestruje obecność
- 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.
- Przejdź do zakładki Pozostałe ustawienia
- Zaznacz Pokaż statusy (obecność) innych na czytniku
- 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')
- 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.
- Przejdź do zakładki Pozostałe ustawienia
- Zaznacz Pokaż przyciski Przybycie/Wyjście na głównym panelu po zalogowaniu
- 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
5.7 Zdjęcie przy zapisie
Cel: Wykonywać zdjęcie zabezpieczające przy każdym odbiciu karty do wykrywania nadużyć kart.
- Przejdź do zakładki Pozostałe ustawienia
- Zaznacz Zdjęcie przy zapisie obecności z terminalu
- System ustawi
wa_RasPi_TakePhoto=1
Jak to działa:
- Pracownik przybliża chip do czytnika
- Kamera RasPi wykonuje zdjęcie
- Zdjęcie jest przesyłane na serwer
- Zapisuje się do tabeli
Filesz powiązaniem do zapisu obecności - 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
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_codePrzykł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:
- Weryfikacja hasha:
if ($User->wa_chip_code != $_GET['hash']) { DieUnauthorized(); } - 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(); } - Kontrola istnienia użytkownika:
$User = new cUser(); $User->load($_GET['idUser']); if ($User->idUser == 0) { DieUnauthorized(); } - 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
- Fizycznie podłącz RasPi do sieci (Ethernet lub WiFi)
- Uruchom skrypt instalacyjny na RasPi
- RasPi automatycznie zarejestruje się na serwerze:
POST https://firma.pl/RestAPI/RasPi.php
{
"action": "register",
"hash": "E5tlu8Jg44ZwwlBQgSbCE3lU7RSRvMXa"
}
- 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
- Zaloguj się na RasPi przez SSH
- Uruchom polecenie:
sudo /home/pi/UpdateFromeIntranetServer - Skrypt pobierze najnowszą wersję z:
https://firma.pl/Apps/RasPiUpdate/ - Automatycznie zrestartuje usługi
- 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:
- Sprawdź połączenie sieciowe RasPi (ping serwera)
- Zweryfikuj, że adres IP RasPi jest na białej liście
- Sprawdź logi na RasPi:
/var/log/eintranet/ - Zrestartuj RasPi:
sudo reboot
Problem: Czytnik nie odczytuje chipów
Objawy: Przybliżenie chipa nie wywołuje żadnej reakcji
Rozwiązanie:
- Sprawdź fizyczne połączenie czytnika z RasPi
- Zweryfikuj, że działa usługa czytnika:
sudo systemctl status rfid - Zrestartuj usługę:
sudo systemctl restart rfid - 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:
- Zweryfikuj, że w ustawieniach jest włączone:
wa_RasPi_Face=1 - Sprawdź połączenie kamery z RasPi
- Zweryfikuj, że pracownicy mają przesłane zdjęcia w systemie
- Sprawdź konsolę JavaScript w przeglądarce pod kątem błędów
- 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:
- Skopiuj URL API pracownika
- Otwórz URL w przeglądarce
- System zarejestruje obecność jak z RasPi
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:
- W zakładce "Uprawnienia użytkownika" użyj eksportu DataTables
- Kliknij przycisk "Excel" lub "CSV"
- 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:
- Moduł Obecność
- Szczegóły rekordu
- 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:
- W zakładce "Uprawnienia użytkownika" znajdź pracownika
- W kolumnie Minimalna długość przerwy (minut) usuń wartość lub zmniejsz (np. z 30 na 15)
- 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 cameraZrestartuj: sudo systemctl restart camera
|
| Błąd przy przesyłaniu na serwer |
Sprawdź logi RasPi: /var/log/eintranet/camera.logZweryfikuj 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.plSprawdź 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-checkZrestartuj: sudo systemctl restart eintranet-check
|
| Błąd w pliku konfiguracyjnym |
Sprawdź konfigurację: /etc/eintranet/config.jsonZweryfikuj 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.jsSprawdź 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 -lSzukaj linii z wa_chip_autoclose.php (lub podobną).
|
| Błędne ustawienie czasu |
Przy trybie "Do podanej godziny" sprawdź format czasu: GG:MMMusi 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.100Nie: 192.168.1.100:80 lub http://192.168.1.100
|
- Tymczasowo wyłącz białą listę IP (odznacz pole wyboru)
- Spróbuj odbić z czytnika
- Jeśli działa → problem jest w białej liście IP
- Sprawdź logi serwera, jaki IP widzi
- Dodaj prawidłowy IP do białej listy
- Ponownie włącz białą listę