Obsah:
- Krok 1: Predpokladám, že už máte OpenWrt …
- Krok 2: Softvér a nástroje
- Krok 3: Vytvorenie minimálnej aplikácie
- Krok 4: Pridanie informácií: počet klientov, adresa IP WAN, doba prevádzky
- Krok 5: Ovládanie WiFi: ZAPNUTÉ/VYPNUTÉ
- Krok 6: Graf štatistiky systému
- Krok 7: Stav otáčania pevného disku
- Krok 8: Graf aktivity siete
- Krok 9: Oznámenia
- Krok 10: Automatické spustenie na pozadí
- Krok 11: Záver a ďalšie nápady
Video: Aplikácia Android/iOS na vzdialený prístup k vášmu smerovaču OpenWrt: 11 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:58
Nedávno som si kúpil nový router (Xiaomi Mi Router 3G). A samozrejme, tento nový, úžasný kus hardvéru ma inšpiroval k tomu, aby som začal pracovať na tomto projekte;)
Krok 1: Predpokladám, že už máte OpenWrt …
Najprv som musel nainštalovať OpenWrt … Väčšinou som sa riadil týmto sprievodcom (špecifickým pre tento model smerovača): https://dzone.com/articles/hacking-into-xiaomi-mi-… Pri práci na tomto som našiel toto úžasné video: Inštalácia Openwrt, benchmark WiFi, priateľka bliká. Wow, tak som sa smial!:)
Pozor! Inštalácia OpenWrt môže váš router pokaziť. Po dokončení však odomkne plný výkon a kontrolu. Nie som dosť odvážny poskytnúť sem akékoľvek pokyny, pretože sa môžu líšiť pre každý model smerovača.
Ale ak už máte OpenWrt na svojom smerovači, budete môcť začať s týmto návodom čoskoro
BTW, niektoré vývojové dosky sú dodávané s otvoreným boxom OpenWrt, ako napríklad Onion Omega, VoCore, LinkIt Smart 7688 a ďalšie. Tento tutoriál tiež vysvetľuje niekoľko základných myšlienok vytvárania takýchto aplikácií, aby ste ich mohli ľahko prispôsobiť práci s Raspberry Pi a podobnými.
Na tento projekt budem väčšinou používať predinštalovaný softvér (k dispozícii na akomkoľvek smerovači s podporou OpenWrt). Ale kvôli niektorým pokročilým funkciám som musel nainštalovať ďalšie balíky. To sa deje niekoľkými kliknutiami, takže sem vložím pokyny.
Tiež predpokladám, že už viete:
- Ako otvoriť/použiť terminál SSH na smerovači OpenWrt
- Ako nahrávať/upravovať súbory na smerovači (použite FileZilla alebo scp/sftp)
- Ako pracovať s konzolou Linux
Krok 2: Softvér a nástroje
Na strane smartfónu používam Blynk. Poskytuje aplikácie pre iOS a Android na ovládanie akéhokoľvek hardvéru. Krásne grafické rozhrania pre všetky svoje projekty môžete jednoducho vytvárať jednoduchým pretiahnutím miniaplikácií priamo vo svojom smartfóne. Blynk sa väčšinou používa s Arduino, Raspberry Pi atď. Ale prečo ho nespustíte na samotnom routeri?;)
Na strane zariadenia budem pomocou Lua skriptovať potrebné funkcie. Mohol by som použiť aj Python alebo Node.js, ale bohužiaľ tieto možnosti nie sú vždy k dispozícii, kvôli nedostatku zdrojov na niektorých smerovačoch. Alebo C/C ++, ale pracovať s nimi nie je také pohodlné (prekompilovať pri každej zmene atď.) Na druhej strane, Lua je predinštalovaný, používanie a učenie sa je jednoduché. Používa ho predvolené webové rozhranie LuCI.
Krok 3: Vytvorenie minimálnej aplikácie
Začíname s Blynkom a Luou je také jednoduché, ako:
- Stiahnite si aplikáciu Blynk (z App Store, Google Play)
- Vytvorte nový projekt a získajte overovací token
- Postupujte podľa pokynov na inštaláciu Blynk Lua pre OpenWrt.
Na prístup k konzole routera použite SSH. Po spustení predvoleného príkladu:
lua./examples/client.lua
Mali by sme vidieť niečo také:
Pripája sa…
Podanie ruky SSL … Pripravené.
To znamená, že je zabezpečené obojsmerné pripojenie k aplikácii! YAY!
Teraz môžeme uvedený príklad jednoducho rozšíriť, takže robí niečo zaujímavé. Vytvoril som kópiu tohto príkladu, aby som ho mohol upraviť:
cp./examples/client.lua./blynkmon.lua
Krok 4: Pridanie informácií: počet klientov, adresa IP WAN, doba prevádzky
Základnou myšlienkou je pravidelne získavať informácie z operačného systému, v prípade potreby vykonať niekoľko jednoduchých výpočtov a potom výsledok poslať Blynkovi na zobrazenie.
V systéme Linux/OpenWrt máme niekoľko spôsobov, ako získať systémové údaje:
- Spustite príkaz a analyzujte výstupný text
- Spustite príkaz a sledujte, ako sa vráti kód ukončenia
- Prečítajte si systémový súbor umiestnený v adresároch/proc/a/sys/class/
Teraz chcem zobraziť počet pripojených zariadení.
Keď spustím cat/proc/net/arp na konzole, zobrazí sa zoznam známych zariadení spolu s ich adresami MAC a IP:
IP adresa Typ HW Príznaky HW adresa Maska Zariadenie
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
Môžeme to analyzovať priamo v Lua, ale často je jednoduchšie použiť špecializované nástroje. V Linuxe sú to grep, head, tail, cut, wc, awk.
Na získanie počtu klientov z výstupu arp potrebujem filtrovať tabuľku (odstrániť nesúvisiace položky) a spočítať riadky tabuľky, výsledkom čoho je nasledujúci príkaz:
cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l
Skúsme to:
root@router: ~/lua-blynk# cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l
1
Skvelé. Teraz máme predstavu o tom, ako môžeme zhromaždiť všetky požadované informácie. Zautomatizujme to. Aby bol náš kód čistý a rozšíriteľný, vytvorme niekoľko pomocných funkcií:
funkcia exec_out (cmd)
lokálny súbor = io.popen (cmd) ak nie je súbor, potom sa vráti bez konca lokálny výstup = súbor: čítať ('*všetky') súbor: zavrieť () vytlačiť ("Spustiť:"..cmd.. " ->".. výstup) návratová funkcia výstupu výstup read_file (cesta) lokálny súbor = io.open (cesta, „rb“) ak nie súbor, potom vráťte nulový koniec lokálny obsah = súbor: prečítajte si „*a“súbor: zatvorte () tlač („Prečítajte si: „..path..“-> „..content) návrat obsahu koniec
Pomocou týchto nástrojov teraz môžeme implementovať skutočné funkcie načítania údajov:
funkcia getArpClients ()
vrátiť tonumber (exec_out ("cat/proc/net/arp | grep br -lan | grep 0x2 | wc -l")) koncová funkcia getUptime () vrátiť tonumber (exec_out ("cat/proc/uptime | awk '{print $ 1 } '")) end function getWanIP () return exec_out (" ifconfig eth0.2 | grep' inet addr: '| cut -d: -f2 | awk' {print $ 1} '") end
Môžete spustiť časti týchto príkazov shellu, aby ste lepšie pochopili, ako funguje, a upravili ich podľa svojich potrieb.
Najľahšie je odoslať údaje do aplikácie Blynk. Predvolený príklad už nastavuje časovač, ktorý každých 5 sekúnd spustí nejaký kód, takže ho znova použijeme:
local tmr1 = Timer: new {interval = 5000, func = function ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) blynk: virtualWrite (12, getWanIP ()) end}
V aplikácii pridáme 3 miniaplikácie štítkov a podľa toho ich priradíme k virtuálnym pinom 10, 11, 12.
Aj keď to funguje, je to dosť neefektívne, pretože adresa IP WAN alebo počet klientov sa neaktualizuje tak často. Opravme to
V prípade siete WAN IP ju presúvame do pripojeného obslužného programu. Spustí sa zakaždým, keď router vytvorí spojenie s Blynk Cloud. To by malo stačiť:
blynk: on ("pripojený", funkcia ()
print ("Ready.") blynk: virtualWrite (12, getWanIP ()) end)
Pre Uptime a Clients Number vytvoríme samostatný časovač s 5 min. interval:
local tmr2 = Timer: new {interval = 5*60*1000, func = function ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) end}
Krok 5: Ovládanie WiFi: ZAPNUTÉ/VYPNUTÉ
Doteraz sme zo zariadenia získavali iba nejaké informácie. Skúsme to ovládať!
blynk: on ("V20", funkcia (param)
if param [1] == "1" then os.execute ("wifi up") else os.execute ("wifi down") end end)
Na strane aplikácie som práve pridal widget Button (režim: Switch) a priradil som ho k V20.
To je všetko. Úžasný.
Krok 6: Graf štatistiky systému
funkcia getCpuLoad ()
vrátiť tonumber (exec_out ("top -bn1 | grep 'CPU:' | head -n1 | awk '{print $ 2+$ 4}'" "))) end function getRamUsage () return tonumber (exec_out (" free | grep Mem | awk ' {print ($ 3- $ 7)/$ 2 * 100.0} '")) end
Údaje musíme tiež odoslať Blynkovi (znova použijeme tmr1):
local tmr1 = Timer: new {interval = 5000, func = function ()
blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) end}
Na strane aplikácie pridajte miniaplikáciu SuperChart. Pridajte dátové toky CPU, RAM a priraďte k V5, V6.
Krok 7: Stav otáčania pevného disku
Môj smerovač má externý pevný disk pripojený ako zariadenie pripojené k sieti. Ide o to, že táto jednotka je nakonfigurovaná tak, aby sa začala otáčať, keď k nej niekto pristupuje, a aby sa pozastavila po uplynutí časového limitu.
Očividne by bolo skvelé vedieť, koľkokrát sa zapne počas dňa. Preto som do svojho systémového grafu pridal ďalší dátový tok.
Získať stav jednotky HDD je trochu zložitejšie, ale našiel som cestu! Najprv nainštalujte smartmontools z konzoly SSH:
aktualizácia opkg
opkg nainštalovať smartmontools
Potom v našom kóde musíme spustiť špeciálny príkaz a skontrolovať výstupný kód:
funkcia exec_ret (cmd)
local exit = os.execute (cmd) print ("Run:"..cmd.. " -> exit:".. exit) return exit end function getHddSpinning () if exec_ret ("smartctl --nocheck = standby --info /dev/sda>/dev/null ") == 0 potom vráti 1 inak vráti 0 koniec konca
Poznámka: môj pevný disk je /dev /sda
Krok 8: Graf aktivity siete
Vytvoríme ďalšiu miniaplikáciu SuperChart (podobnú tej predchádzajúcej), pridáme dátové toky TX a RX a priradíme k V1 a V2. Poznámka: Chcem zobrazovať statc portu WAN a môj port WAN je eth0.2
Pomocné funkcie:
funkcia getWanRxBytes ()
return tonumber (read_file ("/sys/class/net/eth0.2/statistics/rx_bytes")) end function getWanTxBytes () return tonumber (read_file ("/sys/class/net/eth0.2/statistics/tx_bytes")) koniec
Ďalej pridajte rovnaký kód do rovnakého súboru tmr1. Je to komplikovanejšie, pretože potrebujeme iba vypočítať a zobraziť rozdiel v odoslaných/prijatých bajtoch:
lokálne 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 potom blynk: virtualWrite (2, rx - prevRx) koniec prevTx = tx prevRx = rx blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) blynk: virtualWrite (7, getHddSpinning ()) koniec}
Krok 9: Oznámenia
Tiež som chcel byť upozornený, keď môj smerovač stratí napájanie alebo internetové pripojenie. Na to potrebujeme widget Upozornenie.
V nastaveniach widgetu povoľte „offline upozornenie“. Nie je potrebný žiadny kód. Z nášho kódu však môžeme odosielať aj vlastné upozornenia.
Krok 10: Automatické spustenie na pozadí
Skript je zatiaľ potrebné vykonať ručne, ale chcem, aby sa spustil automaticky na pozadí pri zapnutí smerovača.
To sa deje vytvorením služby. Vytvorte súbor /etc/init.d/blynkmon:
#!/bin/sh /etc/rc.common
START = 99 STOP = pidfile = "/var/run/blynkmon.pid" start () {if [-f $ pidfile]; potom echo „blynkmon už beží“exit 0 fi cd /root /lua-blynk lua blynkmon.lua your-auth-token> /dev /null & echo $! > $ pidfile} stop () {if [! -f $ pidfile]; potom zopakujte „blynkmon nebeží“exit 0 fi kill -9 $ (cat $ pidfile) rm $ pidfile}
Poznámka: Nezabudnite nahradiť svoj token-auth
Potom povoľte službu blynkmon:
služba blynkmon povoliť
Krok 11: Záver a ďalšie nápady
Môžete naskenovať tento QR a získať klon môjho projektu Blynk. Vyžaduje niekoľko energetických bodov (4600), pretože používa veľa miniaplikácií!
Úplný kód Lua nájdete tu:
Zatiaľ je to dobré, ale tu je niekoľko nápadov, ktoré by som rád pridal v blízkej budúcnosti.
- Pridajte príkaz Reštartovať. Zabráňte náhodnému kliknutiu.
- Pridajte miniaplikáciu Terminal na spustenie ľubovoľného príkazu linux.
-
Pridajte graf teploty procesora.
UPD: Bohužiaľ, v programe OpenWrt v súčasnosti chýbajú niektoré ovládače pre môj model smerovača. Je však k dispozícii pre mnoho ďalších smerovačov
- Pridajte upozornenie, keď sa konkrétne zariadenie pripojí/opustí sieť. Informácie o arp už máme, teraz skontrolujte iba MAC adresu.
Týmto spôsobom môžeme monitorovať a ovládať 3D tlačiarne, roboty, bežný počítač/notebook, veci Arduino/ESP8266/ESP32/RaspberryPi, zariadenia Smart Home a prakticky čokoľvek v okolí. Dajte mi vedieť, ak máte ďalšie zaujímavé nápady. Čo si o tom všetkom myslíte?
Odporúča:
Vzdialený prístup k Raspberry Pi: SSH, Dekstop a FTP: 4 kroky
Vzdialený prístup k Raspberry Pi: SSH, Dekstop a FTP: V tomto príspevku sa pozrieme na 3 rôzne metódy, pomocou ktorých môžete na Raspberry Pi vzdialene pristupovať, aby sa s ním trochu jednoduchšie pracovalo. Prvým je SSH, ktorý vám umožní vzdialený prístup k terminálu. Ten druhý je remo
Aplikácia diaľkového ovládania AmbiBox IOS: 5 krokov
Aplikácia AmbiBox IOS pre diaľkové ovládanie: S touto aplikáciou pre iOS môžete ovládať svoj AmbiBox zo svojho zariadenia iPhone alebo iPad. Budem hovoriť o aplikácii a o tom, ako komunikuje so serverom AmbiBox, ak chcete vedieť, ako nainštalovať AmbiBox a LED pásy, existuje niekoľko návodov v
Bluetooth LED rysovacia doska a aplikácia IOS: 9 krokov (s obrázkami)
Kresliaca doska Bluetooth LED a aplikácia IOS: V tomto návode budete môcť vytvoriť dosku Bluetooth LED, ktorá dokáže kresliť obrázky z aplikácie pre iPhone, ktorú vytvoríme. V tejto aplikácii budú môcť používatelia vytvoriť hru Connect 4, ktorá sa bude zobrazovať aj na tejto hernej doske. Toto bude ch
Vzdialený prístup SSH k Raspberry Pi 2: 5 krokov
Vzdialený prístup SSH k Raspberry Pi 2: Chceli ste niekedy nasadiť Raspberry Pi „v teréne“a stále k nemu máte prístup? Toto je jednoduchý spôsob, ako povoliť vzdialený prístup SSH k vášmu Raspberry Pi 2 (a iným modelom). Aj keď existujú riešenia zahŕňajúce sieť VPN alebo konfiguráciu
Vzdialený prístup / ovládanie servera alebo väčšiny počítačov so systémom Windows .: 6 krokov
Vzdialený prístup Ovládajte server alebo väčšinu počítačov so systémom Windows .: Tento návod je kombináciou niekoľkých myšlienok, ktoré ste tu videli v pokynoch. Spoločnosť Ha4xor4life ľahko vydala pokyn s názvom Kontrola na vašom osobnom súborovom serveri. Je to dobrý nápad, ale vyžadovalo to monitor s dvoma vstupmi