Na základě požadavku našeho zákazníka jsme rozšířili modul Docházka o možnost evidence příchodů a odchodů tak, že uživatelé nemusí vůbec nic dělat, a přesto se jim zapíše příchod a odchod.

Dosáhnout tohoto stavu je možné několika cestami, například biometrií obličeje nebo pomocí technologie UHF (ultra high frequency), které se používají v bezpečnostních rámech v obchodech. My jsme na to šli ale úplně jinak.

Vsadili jsme na předpoklad, že většina firem, ve kterých provozujeme Sloneeka, poskytuje svým zaměstnancům bezplatný přístup k podnikové wifi síti, která je připojuje k internetu. A použili jsme jednoduchou logiku - kdo má mobilní telefon připojený k síti, je v práci.

Nejdříve jsme prozkoumali možnost implementace logiky připojování a odpojování k firemní síti přímo na mobilních zařízeních. Vyzkoušeli jsme Siri Shortcuts od Apple i Automate pro Android a zjistili jsme, že by to mohlo docela dobře fungovat. Nepříjemná situace by ale nastala v okamžiku, kdy by to fungovat přestalo 🤯

Rozhodli jsme se, že logika nesmí běžet na těžko kontrolovatelných zařízeních, ale že musí být implementována na jednoduše kontrolovatelném zařízení. Vyvinuli jsme script, který neustále skenuje vnitřní síť a analyzuje MAC adresy připojených zařízení.

Mezi tím jsme připravili REST API aplikace, které čeká vzdálený API call, ve kterém je zápis příchodu nebo odchodu uživatele. Tato komunikace je chráněna privátním tokenem, který si každý uživatel může vygenerovat v aplikaci.

Vygenerování uživatelského tokenu pro externí zápis docházky

Samotné zařízení, které běží v podnikové síti, je Raspberry Pi 4 - jednodeskový počítač, miláček všech geeků a tedy i našich vývojářů 🤟 Je to ani ne 10 cm dlouhý a 6 cm široký počítač, který v sobě má kromě čtyřjádrového procesoru, který zvládne i přehrávání 4K videa, až 4 GB RAM a hlavně bezdrátový b/g/n wifi adaptér. A o ten nám jde především…

Raspberry Pi 4 včetně case je skutečně maličké. A přitom velice výkonné.

Na Raspberry Pi je spuštěný nmap - linuxový nástroj pro skenování sítě. Je extrémně konfigurovatelný, efektivní a dá se nastavit tak, aby nijak nezatěžoval skenovanou síť (ta ho za odměnu nevyhodnotí jako intrudera a neodstřihne ho od připojení 😁).

Nástroj nmap je maximálně efktivní. Více na nmap.org

Navazující Pythonový script pak vyhodnocuje výsledek nmapu. Pokud se uživatelův device poprvé po předdefinované době přihlásil do sítě, jde bezpochyby o uživatelův příchod. Snad jedině s výjimkou, že by si někdo vzal jeho telefon a přišel do práce, nebo že by spoofoval jeho MAC adresu. Ale to je již tak trochu mimo naše možnosti… Pokud naopak uživatelův device určitý čas na síti není, velice pravděpodobně odešel z dosahu sítě, a tedy i z práce. Telefon se mu také mohl odpojit, vybít nebo jinak zkolabovat, ale to jde také trochu mimo nás…

Raspberry Pi máme kvůli servisu připojené přes Teamviewer. Kdykoliv se k němu můžeme připojit a na základě požadavku zákazníka nebo zjištěné závady provést update.

Zatím toto řešení funguje nad očekávání dobře. Fantastické na něm je, že se pro to dá použít jakékoliv zařízení, na kterém běží některá z běžných distribucí Linuxu, takže ani není potřeba kupovat nový hardware. Po vyřešení úvodních bolestí je zařízení v nonstop provozu a je na něj maximální spolehnutí.

P.S. Tu docházku postavenou na UHF vůbec nezahazujeme. Možná již brzy…

Václav Martin, Product manager