Jelenlét érzékelés
2017. október 01. írta: eNeS

Jelenlét érzékelés

Azt, hogy valaki jelen van egy adott helyiségben, érzékeli a mozgásérzékelő, nyomásérzékelő, hangérzékelő, stb.. de az, hogy KI az, aki jelen van, no az már egy teljesen más kérdés.

wifibeacon.png

De azért nem lehetetlen megválaszolni.
Az alapötlet az, hogy az emberek manapság sehová nem mennek a mobiltelefonjuk nélkül. (kivéve ha véletlenül otthon felejtik, de azonnal érte is mennek, ahogy ezt észlelik) A mobiltelefonok döntő többsége WiFi és Bluetooth támogatással is bír, persze ezeket engedélyezni is kell, blutooth-nál pedig még a felderíthetőséget is. A WiFi egyébként eléggé meríti a készülék akkumulátorát, de egy okos WiFi Automatic nevű alkalmazással időzítve be illetve ki tudjuk kapcsolni rajta a WiFi-t, így esélyt adva, hogy letöltse e-mailjeinket néha, illetve felderíthető legyen, amikor csatlakozik a helyi hálózatra. A WiFi AP nagyjából a távolságot is meg tudná becsülni a jelerősség alapján, de most egy sokkal egyszerűbb megoldással próbálkozom: a nagyszerű nmap hálózati szkennelő progammal, amivel megtudható, hogy az adott MAC című eszköz a helyi hálózaton aktív-e, vagyis otthon van-e a gazdája.
Bluetooth oldalról a hatótáv aránylag kicsi, persze falaktól is függően 5m-nél nem nagyon több, így ha több egységre tesszük fel a lekérdező alkalmazást, tudhatjuk melyikhez van közelebb az illető telefon, gyakorlatilag megtudjuk melyik helyiségben van.. feltéve, hogy magával cipeli a telefonját lakáson belül is. :) Ha nem, akkor csak annyit tudunk, hogy otthon van a készülék tulajdonosa.
Szerencsére a Raspberry Pi Zero W mind WiFi, mind Bluetooth modullal integrálva van, de persze nem ördöngősség egyéb minigépekre sem egy USB WiFi/Bluetooth sticket rádugni.

A WiFi szkennelése:

Az nmap telepítése után, ha a saját belső hálózatunk a 192.168.1.x tartományban van, akkor az alábbi parancs aránylag gyorsan végigpingeli a tartományt, és megmondja mely IP címek aktívak éppen és milyen MAC címmel rendelkeznek.

sudo nmap -n -sP 192.168.1.0/24

Legtöbben a könnyebb utat választják és fix IP címet állítanak be a telefonjuknak a routeren, és azt pingelik direktben. Én a másik megoldást választottam, a hardveres MAC azonosítókat gyűjtöm be, melyek elméletileg nem változnak, és egy Python programmal ellenőriztetem 5 percenként. Apró szépséghibája az eljárásnak, hogy a sudo segítségével rendszergazdai joggal kell futtatni az nmap parancsot, máskülönben csak az IP címeket kapja vissza, a MAC címeket nem.. de semmi sem lehetetlen!
Az
/etc/sudoers fájl végére illesszük be az alábbi sort, és ha az aktuálisan bejelentkezett felhasználó az adm csoport tagja, akkor jelszókérés nélkül megadja az nmap parancsnak, ami kell.

%adm ALL=(ALL) NOPASSWD: /usr/bin/nmap

A Bluetooth szkennelése:

A bluetooth csomag telepítése után az alábbi paranccsal listázhatjuk ki a hatókörön belüli, és felderítésre engedélyezett eszközöket.

hcitool scan

Bluetooth esetén a mobiltelefonon túl a mostanában divatos iBeacon-okkal is kísérletezhetünk, de mivel ezek általában egy kicsit eltérő BLE szabvány szerint működnek a "scan" parancs nem fogja megtalálni őket, e helyett az "lescan" lesz a jó (ha a Bluetooth modulunk is támogatja), viszont ezt az alábbi szerint lehet ütemezni, hogy ne végtelenül keressen:

sudo timeout -s SIGINT 5s hcitool lescan

A begyűjtött MAC címeket az alábbi konfigurációs fájlba gyűjtsük össze, az első paraméter tartalmazza a MAC típusát Wifi/Bluetooth, a második paraméter maga a MAC cím - a megadott formátumban - a harmadik pedig egy szám, amit visszaad a funkció, ha az adott MAC cím látható, ez praktikusan pl egy Domoticz IDX egy virtuális kapcsolóra, ami mutatja, hogy az eszköz jelen van.
https://github.com/enesbcs/multisensor-python-rpi/blob/master/config_presence.py

A szükséges funkciók az alábbi unit-ban kerültek összegyűjtésre: (egyelőre nem BLE kompatibilis)
https://github.com/enesbcs/multisensor-python-rpi/blob/master/unit_presence.py

A unit használatára a Cerberus projektben található minta:
https://github.com/enesbcs/multisensor-python-rpi/blob/master/ms_cer.py

És hogy honnan tudjuk, ha már nincs jelen az adott eszköz? A Domoticz-ban érdemes erre egy időzített szabályt felvenni, amennyiben pl nem jelentkezik be 60 percig az adott eszköz, és volt bejárati ajtónyitás közben, amikoris az ajtón belüli mozgásérzékelő mozgást jelzett az ajtónyitás előtt (tehát kifelé ment az illető) akkor az eszközt megjelöli, mint nem jelenlévőt.. de kinek milyen eszközparkja van. Aki ennél is pontosabbra vágyik, az OwnTracks segítségével a GPS koordinátáit is beküldheti telefonos alkalmazás segítségével, de erre személy szerint nincs igényem.

A bejegyzés trackback címe:

https://bitekmindenhol.blog.hu/api/trackback/id/tr10012915077

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.