Tartalomjegyzék:
- 1. lépés: Feltételezem, hogy már rendelkezik OpenWrt programmal…
- 2. lépés: Szoftver és eszközök
- 3. lépés: Minimális alkalmazás létrehozása
- 4. lépés: Néhány információ hozzáadása: Ügyfelek száma, WAN IP -cím, Üzemidő
- 5. lépés: WiFi vezérlés: BE/KI
- 6. lépés: Rendszerstatisztikai táblázat
- 7. lépés: A HDD centrifugálási állapota
- 8. lépés: Hálózati tevékenység diagram
- 9. lépés: Értesítések
- 10. lépés: Automatikus futtatás a háttérben
- 11. lépés: Következtetés és további ötletek
Videó: Android/iOS alkalmazás az OpenWrt Router távoli eléréséhez: 11 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
Nemrég vettem egy új routert (Xiaomi Mi Router 3G). És persze ez az új, fantasztikus hardver inspirált arra, hogy elkezdjek dolgozni ezen a projekten;)
1. lépés: Feltételezem, hogy már rendelkezik OpenWrt programmal…
Először az OpenWrt-et kellett telepítenem… Többnyire ezt az útmutatót követtem (kifejezetten erre a routermodellre): https://dzone.com/articles/hacking-into-xiaomi-mi-… Ezen dolgozva találtam ezt a fantasztikus videót: Openwrt telepítés, WiFi benchmark, Girlfriend Flashing. Wow, annyira nevettem!:)
Figyelem! Az OpenWrt telepítése tönkreteheti az útválasztót. De miután elkészült, teljes hatalmat és irányítást szabadít fel. Nem vagyok elég bátor, hogy itt bármilyen utasítást adjak, mivel ezek minden útválasztó modellnél eltérőek lehetnek.
De ha már rendelkezik OpenWrt -vel az útválasztón, akkor ezzel az oktatóanyaggal kezdheti a munkát
BTW, egyes fejlesztőlapok az OpenWrt-hez tartoznak, például Onion Omega, VoCore, LinkIt Smart 7688 és mások. Ez az oktatóanyag néhány alapvető ötletet is elmagyaráz az ilyen alkalmazások létrehozása mögött, így könnyen adaptálhatja azt a Raspberry Pi és a lájkok működéséhez.
Ehhez a projekthez többnyire előre telepített szoftvert fogok használni (elérhető minden OpenWrt-kompatibilis útválasztón). De néhány speciális funkcióhoz további csomagokat kellett telepítenem. Ez mindössze néhány kattintással megtörténik, ezért az utasításokat itt közlöm.
Ezenkívül feltételezem, hogy már tudja:
- Az SSH terminál megnyitása/használata az OpenWrt útválasztón
- Fájlok feltöltése/szerkesztése az útválasztón (FileZilla vagy scp/sftp használatával)
- Hogyan működik a Linux konzol
2. lépés: Szoftver és eszközök
Okostelefonról a Blynk -et használom. IOS és Android alkalmazásokat biztosít a hardverek vezérléséhez. Könnyedén létrehozhat gyönyörű grafikus felületeket minden projektjéhez, egyszerűen húzza és dobja el a widgeteket közvetlenül az okostelefonján. A Blynk többnyire az Arduino, a Raspberry Pi stb.;)
Az eszközoldalon a Lua -t fogom használni a szükséges funkciók szkripteléséhez. Használhatnám a Python -ot vagy a Node.js -t is, de sajnos ezek a lehetőségek nem mindig állnak rendelkezésre, mivel néhány útválasztón nincs erőforrás. Vagy C/C ++, de nem olyan kényelmes vele dolgozni (minden változás után újra összeállítani stb.) Másrészt a Lua előre telepített, egyszerűen használható és tanulható. Az alapértelmezett webes felület, a LuCI használja.
3. lépés: Minimális alkalmazás létrehozása
A Blynk és a Lua használatának megkezdése olyan egyszerű, mint:
- Töltse le a Blynk alkalmazást (az App Store -ból, a Google Play -ből)
- Hozzon létre egy új projektet, és szerezze be a hitelesítési tokent
- Kövesse a Blynk Lua telepítési utasításait az OpenWrt számára.
Az útválasztó konzol eléréséhez használja az SSH -t. Az alapértelmezett példa futtatása után:
lua./examples/client.lua
Valami ilyesmit kellene látnunk:
Csatlakozás…
SSL kézfogás… Kész.
Ami azt jelenti, hogy létrejött a biztonságos, kétirányú kapcsolat az alkalmazással!
Most könnyen kiterjeszthetjük a megadott példát, így valami érdekeset csinál. Létrehoztam egy példányt a példából a szerkesztéshez:
cp./példák/kliens.lua./blynkmon.lua
4. lépés: Néhány információ hozzáadása: Ügyfelek száma, WAN IP -cím, Üzemidő
Az alapötlet az, hogy rendszeresen lekérjük az információkat az operációs rendszertől, szükség esetén elvégezünk néhány egyszerű számítást, majd elküldjük az eredményt a Blynknek megjelenítésre.
A Linux/OpenWrt rendszerben többféle módon szerezhetjük be a rendszeradatokat:
- Futtasson egy parancsot, és elemezze a kimeneti szöveget
- Futtasson egy parancsot, és nézze meg a visszatérési kódot
- Olvassa el a/proc/és/sys/class/könyvtárakban található rendszerfájlt
Most szeretném megjeleníteni a csatlakoztatott eszközök számát.
Amikor a cat/proc/net/arp parancsot futtatom a konzolon, az ismert eszközök listáját adja ki, valamint a MAC- és IP -címüket:
IP cím HW típus Jelzi HW cím Maszk Eszköz
192.168.10.206 0x1 0x2 78: 02: f8: fb: d6: bf * br-lan 194.---------- 0x1 0x2 4c: 5e: 0c: 14: e0: 5c * eth0.2 192.168.10.162 0x1 0x0 04: b1: 67: 2f: e3: 74 * br-lan
Közvetlenül a Lua -ban elemezhetjük, de gyakran könnyebb speciális segédprogramokat használni. Linuxon ezek a grep, head, tail, cut, wc, awk.
Ahhoz, hogy az arp kimenetből lekérjem az ügyfelek számát, szűrnem kell a táblát (el kell távolítanom a nem kapcsolódó elemeket), és meg kell számolnom a táblázat sorait, ami a következő parancsot eredményezi:
cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l
Próbáljuk ki:
root@router: ~/lua-blynk# cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l
1
Nagy. Most megkaptuk az ötletet, hogyan gyűjthetjük össze az összes szükséges információt. Automatizáljuk. Annak érdekében, hogy kódunk tiszta és bővíthető legyen, hozzunk létre néhány segítő funkciót:
függvény exec_out (cmd)
helyi fájl = io.popen (cmd), ha nem fájl, akkor térjen vissza nulla végű helyi kimenet = fájl: olvassa el ('*minden') fájl: zárja () print ("Futtatás:"..cmd.. " ->".. output) return kimenet vége függvény read_file (elérési út) helyi fájl = io.open (elérési út, "rb"), ha nem fájl, akkor vissza nil end local content = file: read "*a" file: close () print ("Olvasás: "..útvonal.." -> "..tartalom) visszatér tartalom vége
Ezen segédprogramok segítségével most megvalósíthatjuk a tényleges adatletöltési funkciókat:
függvény getArpClients ()
return tonumber (exec_out ("cat/proc/net/arp | grep br -lan | grep 0x2 | wc -l")) end függvény getUptime () return tonumber (exec_out ("cat/proc/uptime | awk '{print $ 1 } '")) end függvény getWanIP () return exec_out (" ifconfig eth0.2 | grep' inet addr: '| cut -d: -f2 | awk' {print $ 1} '") end
Futtathatja ezen parancsok egyes részeit, hogy jobban megértse a működését, és az igényeihez igazítsa.
A legegyszerűbb az adatok elküldése a Blynk alkalmazásba. Az alapértelmezett példa már beállítja az időzítőt, amely 5 másodpercenként futtat valamilyen kódot, ezért csak újra használjuk:
local tmr1 = Időzítő: új {intervallum = 5000, func = function ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) blynk: virtualWrite (12, getWanIP ()) vége}
Az alkalmazásban hozzáadunk 3 címke widgetet, és ennek megfelelően hozzárendeljük őket a Virtual Pins 10, 11, 12 -hez.
Bár ez működik, meglehetősen nem hatékony, mivel a WAN IP vagy az ügyfelek száma nem frissül olyan gyakran. Javítsuk ki ezt
WAN IP esetén áthelyezzük a csatlakoztatott kezelőbe. Minden alkalommal le fog futni, amikor az útválasztó kapcsolatot létesít a Blynk Cloud szolgáltatással. Ennek elegendőnek kell lennie:
blynk: be ("csatlakoztatva", function ()
print ("Ready.") blynk: virtualWrite (12, getWanIP ()) end)
Az Üzemidő és az Ügyfélszám számára külön időzítőt hozunk létre, 5 perccel. intervallum:
local tmr2 = Időzítő: új {intervallum = 5*60*1000, func = function ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) end}
5. lépés: WiFi vezérlés: BE/KI
Eddig csak néhány információt kaptunk az eszköztől. Próbáljuk meg irányítani!
blynk: be ("V20", funkció (param)
ha param [1] == "1", akkor os.execute ("wifi up") else os.execute ("wifi down") end end)
Az alkalmazás oldalon most hozzáadtam egy gomb widgetet (mód: kapcsoló), és hozzárendeltem a V20 -hoz.
Ez az. Elképesztő.
6. lépés: Rendszerstatisztikai táblázat
függvény getCpuLoad ()
return tonumber (exec_out ("top -bn1 | grep 'CPU:' | head -n1 | awk '{print $ 2+$ 4}'")) end függvény getRamUsage () return tonumber (exec_out ("free | grep Mem | awk ' {print ($ 3- $ 7)/$ 2 * 100.0} '")) end
Az adatokat el kell küldenünk a Blynk -nek is (használjuk újra a tmr1 -et):
local tmr1 = Időzítő: új {intervallum = 5000, func = function ()
blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) end}
Az alkalmazásoldalon adjon hozzá SuperChart widgetet. Adjon hozzá CPU-, RAM -adatfolyamokat, és rendelje hozzá a V5, V6 -hoz.
7. lépés: A HDD centrifugálási állapota
Az útválasztómnak van egy külső merevlemez -meghajtója, amely hálózathoz csatlakoztatott tárolóeszközként van csatlakoztatva. A helyzet az, hogy ez a meghajtó úgy van konfigurálva, hogy elkezdje forogni, amikor valaki hozzáfér hozzá, és felfüggeszti az időt.
Nyilván jó lenne tudni, hogy hányszor kapcsol be egy nap alatt. Így hozzáadtam egy másik adatfolyamot a rendszer diagramomhoz.
Kicsit bonyolultabb a merevlemez -meghajtó állapotának megszerzése, de megtaláltam a módját! Először telepítse a smartmontools eszközöket az SSH konzolról:
opkg frissítés
opkg smartmontools telepítése
Ezután a kódunkban egy speciális parancsot kell futtatnunk, és ellenőriznünk kell a kilépési kódot:
függvény exec_ret (cmd)
local exit = os.execute (cmd) print ("Run:"..cmd.. " -> exit:".. exit) return kilépés vége függvény getHddSpinning () if exec_ret ("smartctl --nocheck = standby --info /dev/sda>/dev/null ") == 0, majd 1 érték visszatérése 0 visszatér 0 vég
Megjegyzés: a merevlemezem a /dev /sda
8. lépés: Hálózati tevékenység diagram
Létrehozunk egy másik SuperChart widgetet (hasonlóan az előzőhöz), hozzáadunk TX és RX adatfolyamokat, és hozzárendeljük a V1 és V2 -hez. Megjegyzés: Meg akarom jeleníteni a WAN port statc -ot, és a WAN portom eth0.2
Segítő funkciók:
függvény getWanRxBytes ()
return tonumber (read_file ("/sys/class/net/eth0.2/statistics/rx_bytes")) end függvény getWanTxBytes () return tonumber (read_file ("/sys/class/net/eth0.2/statistics/tx_bytes")) vége
Ezután adjon hozzá néhány kódot ugyanahhoz a tmr1 -hez. Ez bonyolultabb, mivel csak ki kell számolnunk és megjelenítenünk az átvitt/fogadott bájtok közötti különbséget:
helyi prevTx, prevRx
local tmr1 = Timer: new {interval = 5000, func = function () local tx = getWanTxBytes () local rx = getWanRxBytes () if prevTx and prevTx ~ = tx then blynk: virtualWrite (1, tx - prevTx) end if prevRx and prevRx ~ = rx majd blynk: virtualWrite (2, rx - prevRx) vége prevTx = tx prevRx = rx blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) blynk: virtualWrite (7, getHddSpinning)) vége}
9. lépés: Értesítések
Azt is szerettem volna értesíteni, amikor az útválasztóm megszakítja az áramellátást vagy az internetkapcsolatot. Ehhez szükségünk van az Értesítés modulra.
A widget beállításaiban engedélyezze az "offline értesítést". Nincs szükség kódra. De egyedi értesítéseket is küldhetünk a kódunkból.
10. lépés: Automatikus futtatás a háttérben
Egyelőre a szkriptet manuálisan kell végrehajtani, de azt szeretném, hogy automatikusan fusson a háttérben, amikor a router be van kapcsolva.
Ez egy szolgáltatás létrehozásával történik. Hozzon létre egy fájlt /etc/init.d/blynkmon:
#!/bin/sh /etc/rc.common
START = 99 STOP = pidfile = "/var/run/blynkmon.pid" start () {if [-f $ pidfile]; akkor echo "blynkmon már fut" exit 0 fi cd /root /lua-blynk lua blynkmon.lua your-auth-token> /dev /null & echo $! > $ pidfile} stop () {if [! -f $ pidfile]; majd echo "blynkmon not running" exit 0 fi kill -9 $ (cat $ pidfile) rm $ pidfile}
Megjegyzés: ne felejtse el kicserélni az auth-tokenjét
Ezután engedélyezze a blynkmon szolgáltatást:
szolgáltatás blynkmon engedélyezése
11. lépés: Következtetés és további ötletek
Ezt a QR -t beolvasva megkaphatja a Blynk Project klónját. Ehhez néhány energiapont (4600) szükséges, mivel sok kütyüt használ!
A teljes Lua kódot itt találja:
Eddig jó, de íme néhány ötlet, amelyeket a közeljövőben szeretnék hozzáfűzni.
- Adja hozzá az Újraindítás parancsot. Kerülje el a véletlen kattintást.
- A Terminal widget hozzáadásával bármilyen linux parancs futtatható.
-
Adja hozzá a CPU hőmérsékleti diagramját.
UPD: Sajnos az OpenWrt -ből jelenleg hiányoznak az illesztőprogramok az útválasztómodellhez. De sok más útválasztóhoz is elérhető
- Értesítés hozzáadása, amikor egy adott eszköz csatlakozik/elhagyja a hálózatot. Már rendelkezünk arp információkkal, most csak a MAC -címet ellenőrizze.
Így felügyelhetjük és irányíthatjuk a 3D nyomtatókat, robotokat, normál PC/laptop, Arduino/ESP8266/ESP32/RaspberryPi cuccokat, intelligens otthoni eszközöket és gyakorlatilag bármit. Mondja el, ha van más érdekes ötlete. Mit gondol minderről?
Ajánlott:
Android -alkalmazás létrehozása az Android Studio segítségével: 8 lépés (képekkel)
Android -alkalmazás létrehozása az Android Stúdióval: Ez az oktatóanyag megtanítja az Android -alkalmazás létrehozásának alapjait az Android Studio fejlesztői környezet használatával. Ahogy az Android -eszközök egyre gyakoribbak, az új alkalmazások iránti kereslet csak nőni fog. Az Android Studio könnyen használható (
AmbiBox IOS távirányító alkalmazás: 5 lépés
AmbiBox IOS távirányító alkalmazás: Ezzel az iOS alkalmazással vezérelheti AmbiBox készülékét iPhone vagy iPad készülékéről. Beszélni fogok az alkalmazásról és arról, hogyan kommunikál az AmbiBox szerverrel, ha szeretné tudni, hogyan kell telepíteni az AmbiBox -ot és a led csíkokat, számos oktatóanyag található a
Nagy pontosságú távoli adatnaplózás multiméter/Arduino/pfod használatával Alkalmazás: 10 lépés (képekkel)
Nagy pontosságú távoli adatnaplózás multiméter/Arduino/pfod használatával Alkalmazás: Frissítve 2017. április 26 -án Felújított áramkör és tábla 4000ZC USB -mérőkhöz. Nincs szükség Android -kódolásra naplózáshoz és
Bluetooth LED rajztábla és IOS alkalmazás: 9 lépés (képekkel)
Bluetooth LED rajztábla és IOS alkalmazás: Ebben az oktatóanyagban létrehozhat egy Bluetooth LED táblát, amely képes rajzokat készíteni az általunk készített iPhone alkalmazásból. Ebben az alkalmazásban a felhasználók létrehozhatnak egy Connect 4 játékot, amely ezen a játéktáblán is megjelenik. Ez lesz egy ch
Egyszerű IOS alkalmazás BLE modulokhoz: 4 lépés
Egyszerű IOS alkalmazás a BLE modulokhoz: Ez az utasítás utasítja, hogyan hozhat létre egy nagyon alapvető funkciókkal rendelkező iOS -alkalmazást. Ez az utasítás nem megy végig az iOS BLE alkalmazás létrehozásának teljes folyamatán. Csak magas szintű áttekintést ad néhány fontos elemről