WiFi-s jelenlét-érzékelés (OpenWRT)

Már régebben is kísérleteztem WiFi jelenlét-érzékeléssel, ami mellesleg több fórumon is vissza-visszatérő téma. Azt előre kell bocsájtanom, hogy ha valaki az alapján akarja 100% biztonsággal megmondani, hogy ki van otthon, nagyot fog csalódni. Ugyanis a fogyasztás optimalizálása miatt a telefonok bizony gyakran lekapcsolják a wifi csatlakozásukat, és ilyenkor a rendszerünk azt fogja gondolni, hogy az eszköz távozott. Bizonyos esetekben mégis hasznos lehet ez a plusz információ, akár annak előjelzésére, hogy megérkeztünk a házunk közelébe (telefonunk általában még az előtt becsatlakozik a routerünkre, mielőtt mi magunk hazaérnénk) vagy arra is, hogy megmondjuk, ha valamely okoseszközünk nem elérhető, akár azért, mert elemes és ledöglött az eleme, akár kihúzta valaki a konnektorból a tápellátását, akár szándékos szabotázs miatt.

owrtnet.jpg

A problémát többféleképpen is megközelíthetjük, leggyakrabban úgy szokták, hogy IP cím szerint végigkérdezgetik (ping) a hálózaton levő eszközöket időnként (polling), hogy ott van-e, él-e még? Ez szerintem nem túl hatásos, vagy fogalmazzunk úgy: nem erőforrásbarát megoldás. A SOHO környezetben szokásos 255.255.255.0 alhálózaton maximum 254 eszköz is lehet, és nem feltétlenül sorban, így végigkérdezni minden lehetőséget egy darabig eltart, és feleslegesen terheli a (hálózati címkiosztást és kapcsolattartást intéző) Routert. Ha fix IP-re állítottunk mindent és tudjuk az IP címeiket, és csak azokat ping-eljük, az már egy fokkal gyorsabb megoldás, de még ezt sem tartom a legjobbnak.

Sokkal praktikusabb megoldásnak tartom azt, ha maga a Router közli egy erre kijelölt, pl MQTT szerverrel, amikor egy új eszköz jelent meg a hálózaton, vagy tűnt el onnan. Hiszen ő adja az IP címet! Az OpenWRT-re találtam is egy egyszerű szkriptet, a beállítása viszont igényel némi konzollal történő barátkozást.
(és bár nem lehetetlen a Raspberry Pi-re telepíteni az OpenWRT-t, de nem feltétlenül ez a legcélszerűbb megoldás, nem véletlenül vannak erre a célra optimalizált router-hardverek, én is így használom egy TP-Link routerrel)

Az OpenWRT-ről korábban írtam már, azóta a LEDE vonala újra egyesült az OpenWRT fő vonallal, ezen a néven fejlesztik tovább. Sokféle (de azért nem mindegyik) routerre feltehető, mint alternatív, gyártófüggetlen firmware. Miért jó egy független firmware? Nem szorítkozunk a gyártó által elérhetővé tett opciókra, szabadabban konfigurálható, és általában frissebb, védettebb rendszerhez is juthatunk, ha lecseréljük. (általában 2011-2013 között kiadott gyártói firmware-eket látok azokon a routereken, amikkel van szerencsém találkozni, 2020-ban) A gyártók 1-2 év után már nem igazán adnak ki frissítéseket a már eladott eszközeikre, abból ugyanis nem jön bevétel. A bevételt nyilván az új eszközök eladása hozza.

A szóban forgó szkript a beszédes "owrtwifi2mqtt" névre hallgat és itt érhető el:

https://github.com/dersimn/owrtwifi2mqtt

A presence_report fájlt letöltjük első körben a gépünkre, majd feltöltjük SCP protokoll segítségével az OpenWRT routerünkre a /usr/bin mappába.
Linux alatt, feltételezve, hogy a saját routerünk IP címe 192.168.1.1 így:

scp presence_report root@192.168.1.1:/usr/bin/

Windows alatt az ingyenes WinSCP segédprogrammal tehetjük ugyanezt.

Fontos lépés, hogy a felmásolt szkriptet tegyük futtathatóvá, SSH segítségével be kell lépnünk a routerre, Linux alatt ezzel a paranccsal:

ssh -l root 192.168.1.1

Windows alatt pedig pl a PuTTY segítségével.
Ha sikerült belépni a router konzolos felületére, az alábbi paranccsal tehetjük a szkriptet futtathatóvá:

chmod u+x /usr/bin/presence_report

Következő lépésben belépünk a routerünk adminisztrációs felületére (pl webböngésző segítségével, de egyébként a konzolon maradva opkg -val is telepíthetnénk ezeket...), és a Rendszer->Szoftver menüpont alatt megkeressük és telepítjük az alábbi két csomagot:

  • mosquitto-client
  • coreutils-nohup

 

lede2.jpg

Ha ezzel megvagyunk a Rendszer->Automatikus indítás (System->Startup) menüpont alatt szúrjunk be egy sort az 'exit' fölé, ami egy korábban már általunk telepített MQTT szerver IP címére küldi az értesítéseket. Legyen például ez most 192.168.1.100. (Emlékeztetőül: pl a mosquitto kínál MQTT szerver szolgáltatásokat, ez nem varázslatos módon magától keletkezik, nekünk kell telepíteni)

nohup /usr/bin/presence_report event 192.168.1.100 >/dev/null 2>&1 &

owrt_autostart.jpg

Ha ezzel megvagyunk és újraindítjuk a routerünket, hamarosan érkeznie kell az MQTT szerverünkre hasonló útvonalra az adatoknak:

owrtwifi/status/mac-00-00-00-00-00-00/event

A MAC cím a hálózati eszközök azonosítója, ami az IP címmel ellentétben nem változik, így alkalmas egyedi azonosításra. Hogy melyik eszköz micsoda, azt pl az OpenWRT webes felületén történt bejelentkezést követően a kezdőképernyőn alul ki tudjuk nézni egy táblázatból.

Az adat "new" ha új WiFi eszköz jelentkezett be a routerre, illetve "del", ha jelezte, hogy lecsatlakozik. (vagy letelt az időkorlát, amíg nem adott életjelet a routernek)

Domoticz esetében ezek feldolgozása nem annyira triviális, de összeütöttem gyorsan egy python plugint. (Ugyan NodeRed-el is meg lehetne ezt oldani, de feleslegesnek tartom még egy program telepítését, amikor a Domoticz-al mindent meg tudok oldani)

Mielőtt használatba tudnánk venni egy - bármilyen - python plugint, érdemes az alábbi paranccsal feltelepíteni a függőségeket a Domoticz szervergépre:

sudo apt-get install python3 libpython3.6 python3-dev git

Ha ez megvan, lépjünk be a Domoticz alatti plugins könyvtárba és töltsük le az owrtwifi2domo plugint:

cd domoticz/plugins
git clone https://github.com/enesbcs/owrtwifi2domo.git

Majd a Domoticz újraindítása után a hardverek között immár megtalálható a "OpenWRT Presence MQTT" eszköz. (Beállítás->Hardver) A fenti példánál maradva állítsuk be a 192.168.1.100 IP címet az MQTT szervernek (vagy 127.0.0.1 ha ugyanarra a gépre van telepítve):

owrt_domo.jpg

Ha sikeresen belőttünk mindent, és az eszközök fel-le csatlakoznak, elkezdenek megjelenni a Beállítás->Eszközök alatt, "Nem használt"-ra állítva. Állítsuk ezeket használtra a zöld körben levő nyílra kattintva, majd elnevezve őket. Alapértelmezetten az eszköz MAC címe lesz a neve, amit a routerünk DHCP leases - IP cím - MAC összerendelés alapján tudunk visszafejteni. Az ikonjukat pedig a Kapcsolók menüben a kiválasztott eszköz melletti Szerkesztés lehetőségnél tudjuk változtatni.
A későbbiekben az automatizálásban a név alapján tudunk hivatkozni ezekre az eszközökre.

domopres_devs.jpg

Meglepően gyorsan átjön a változás, készítettem egy szabályt, hogy mikor kikapcsolom a gépemet, kapcsolódjon fel a szobában a világítás, ha sötét van... és valóban a shutdown-ra kattintás után rögtön kapcsol is a világítás. Természetesen ezt más módon is meg tudtam volna oldani, azonban ennek a megoldásnak kliensoldalon semmi feltétele nincs, akármilyen operációs rendszer futhat a gépen...

A bejegyzés trackback címe:

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

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.

Támogatók:
okosotthon.jpg
allterco.jpg

Utolsó kommentek

  • szenorb: Hello. Bekötöttem 12V-ra , a bemetére egy mozgás érzékelőt kötöttem. Szépen kapcsol a relé a késle... (2023.06.14. 06:48) Shelly okosrelé (Shelly1)
  • Melanoheliophobia: Üdv! Kb. 2 éve vásároltam két ugyanilyen okos izzót. Sajnos az egyik még garancia idő alatt eltávo... (2023.05.03. 16:50) Shelly Vintage okosizzó
  • eNeS: Lehetséges, bár az ESP8266-ot lassan ideje elfelejteni, ha nem helyi hálózatra akarsz vele forgalm... (2023.04.02. 08:43) Tasmota szkriptek
  • eNeS: @tomih: Thonnyban rebootot nyomva nekem se megy az NTP. De mikor lekapcsoltam a Thonnyt és rebooto... (2023.04.02. 08:40) Raspberry Pico és a LAN (W5100S-EVB-Pico)
  • krump_lee: Kedves eNeS! ESP8266 tasmota-val szenvedek, hiemq kapcsolat sehogy nem jön össze, sehol nem talál... (2023.04.02. 08:31) Tasmota szkriptek
  • Utolsó 20

Címkék

433mhz (12) alkatrész (22) alternatív kapcsoló (2) amg8833 (1) analóg (2) android (1) arduinoeasy (5) audio (1) automatizálás (3) bemenet (3) bk7231n (1) ble (1) blitzwolf (4) bluetooth (9) bridge (2) camhi (2) csináld magad (22) dimmer (1) diy (28) do-it-yourself (27) domoticz (11) ds18b20 (1) ebay (3) érintő (2) érintőkapcsoló (7) érzékelő (11) esp-01 (2) esp32 (11) esp8266 (21) espeasy (2) espurna (1) esp projekt (18) Eview7 (1) ewelink (1) feldolgozó (1) felhő (1) fényérzékelő (1) firmware (7) flame detector (1) fogyasztásmérő (5) ftdi (1) füstérzékelő (1) gázérzékelő (1) gpio (1) hang (4) hangjelző (1) hőmérséklet (22) https (1) ikea (1) impulzus relé (1) izzó (2) javascript (1) jelenlétérzékelő (3) kamera (18) keresztkapcsoló (1) kézmozdulat (1) kijelző (3) kimenet (21) konnektor (8) lan (9) lángérzékelő (2) led (3) linux (4) logic level converter (1) lua (1) lux (1) maple mini (2) mcu (3) micropython (1) mikrovezérlő (2) milkv (1) mobil (1) mosfet (1) mozgás (5) mpyeasy (4) mq-2 (2) mqtt (3) működtető rendszer (5) multiroom (1) nedvesség (1) neo (1) neopixel (1) Node-RED (1) nvr (4) nyitás (7) okosház (4) okosizzó (3) okosotthon (8) oled (1) onvif (8) openbeken (1) opencv (1) openwrt (4) orange pi (4) páratartalom (6) php (1) pico (1) pi pico (2) poe (1) programozás (9) projekt (25) proximity olvasó (1) python (2) raspberry (14) raspberry projekt (6) raspbian (1) reed (1) relé (27) rf (2) rgb (6) rock pi (1) rögzítő (2) rp2 (1) rpieasy (1) rtc (1) shelly (24) smartwise (1) solid state relay (1) sonoff (20) SonOTA (1) soros (1) ssl (1) ssr (1) stm32 (4) szenzor (11) szilárdtest relé (1) szintillesztő (2) sziréna (1) szkript (3) szünetmentesítés (4) t1 (1) tasmota (8) távirányító (3) Telegram (1) termékteszt (85) termosztát (2) touch (2) ups (5) usb (7) usb hub (1) valós idejű óra (1) vezérlések (20) vezérlő (5) világítás (5) villanykapcsoló (12) webkamera (1) wiegand (1) wifi (32) ws2812 (1) xiaomi (5) xm (4) xmeye (4) yoosee (1) zigbee (16) zwave (3) Címkefelhő
süti beállítások módosítása