Sadržaj:
- Korak 1: Pretpostavljam da ste već otvorili OpenWrt…
- Korak 2: Softver i alati
- Korak 3: Kreiranje minimalne aplikacije
- Korak 4: Dodavanje nekih informacija: Broj klijenata, WAN IP adresa, vrijeme rada
- Korak 5: WiFi kontrola: UKLJ./ISKLJ
- Korak 6: Tabela sistemske statistike
- Korak 7: Status okretanja HDD -a
- Korak 8: Tabela aktivnosti na mreži
- Korak 9: Obavještenja
- Korak 10: Automatsko pokretanje u pozadini
- Korak 11: Zaključak i dodatne ideje
Video: Android/iOS aplikacija za daljinski pristup vašem OpenWrt usmjerivaču: 11 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:07
Nedavno sam kupio novi usmjerivač (Xiaomi Mi Router 3G). I naravno, ovaj novi, sjajan komad hardvera me inspirirao da počnem raditi na ovom projektu;)
Korak 1: Pretpostavljam da ste već otvorili OpenWrt…
Morao sam prvo instalirati OpenWrt … Uglavnom, slijedio sam ovaj vodič (specifičan za ovaj model usmjerivača): https://dzone.com/articles/hacking-into-xiaomi-mi-… Dok sam radio na ovome, našao sam ovaj odličan video: Openwrt instalacija, WiFi benchmark, Girlfriend Flashing. Kako sam se jako nasmijao!:)
Pažnja! Instaliranje OpenWrt -a može oštetiti vaš usmjerivač. Ali kad se završi, otključava punu snagu i kontrolu. Nisam dovoljno hrabar dati ovdje upute jer se mogu razlikovati za svaki model usmjerivača.
No, ako već imate OpenWrt na usmjerivaču, moći ćete započeti s ovim vodičem uskoro
BTW, neke razvojne ploče dolaze s OpenWrt-om, kao što su Onion Omega, VoCore, LinkIt Smart 7688 i druge. Ovaj vodič također objašnjava neke osnovne ideje iza stvaranja takvih aplikacija, tako da ih možete jednostavno prilagoditi za rad s Raspberry Pi i sličnim.
Za ovaj projekt uglavnom ću koristiti unaprijed instalirani softver (dostupan na bilo kojem usmjerivaču s omogućenim OpenWrt-om). Ali za neke napredne funkcionalnosti morao sam instalirati dodatne pakete. To se radi u samo nekoliko klikova, pa ću ovdje uključiti upute.
Takođe, pretpostavljam da već znate:
- Kako otvoriti/koristiti SSH terminal na vašem OpenWrt usmjerivaču
- Kako prenijeti/urediti datoteke na usmjerivaču (koristite FileZilla ili scp/sftp)
- Kako raditi s Linux konzolom
Korak 2: Softver i alati
Sa pametnog telefona koristim Blynk. Pruža iOS i Android aplikacije za kontrolu bilo kojeg hardvera. Možete jednostavno izgraditi prekrasna grafička sučelja za sve svoje projekte jednostavnim povlačenjem i ispuštanjem widgeta, direktno na vašem pametnom telefonu. Blynk se uglavnom koristi s Arduinom, Raspberry Pi itd. Ali zašto ga ne pokrenete na samom usmjerivaču?;)
Na strani uređaja koristit ću Lua za skriptiranje potrebne funkcionalnosti. Također bih mogao koristiti Python ili Node.js, ali nažalost ove opcije nisu uvijek dostupne zbog nedostatka resursa na nekim usmjerivačima. Ili C/C ++, ali nije tako zgodno za rad (ponovno sastavljanje za svaku promjenu itd.) S druge strane, Lua je unaprijed instalirana, jednostavna je za upotrebu i učenje. Koristi ga zadano web sučelje, LuCI.
Korak 3: Kreiranje minimalne aplikacije
Početak rada s Blynk -om i Lua -om je jednostavan kao:
- Preuzmite aplikaciju Blynk (s App Store -a, Google Play)
- Kreirajte novi projekt i nabavite token autorizacije
- Slijedite upute za instalaciju programa Blynk Lua za OpenWrt.
Koristite SSH za pristup konzoli usmjerivača. Nakon pokretanja zadanog primjera:
lua./examples/client.lua
Trebali bismo vidjeti ovako nešto:
Povezivanje…
SSL rukovanje … Spremno.
Što znači da je uspostavljena sigurna, dvosmjerna veza s aplikacijom! YAY!
Sada možemo lako proširiti navedeni primjer, pa čini nešto zanimljivo. Napravio sam kopiju ovog primjera da ga uredim:
kp./primjeri/klijent.lua./bliknkmon.lua
Korak 4: Dodavanje nekih informacija: Broj klijenata, WAN IP adresa, vrijeme rada
Osnovna ideja je povremeno dobivanje informacija iz OS -a, izvršavanje nekih jednostavnih proračuna ako je potrebno, a zatim slanje rezultata Blynku za prikaz.
U Linuxu/OpenWrt -u imamo nekoliko načina za dobivanje sistemskih podataka:
- Pokrenite naredbu i raščlanite tekst koji izlazi
- Pokrenite naredbu i gledajte izlaznu šifru koju vraća
- Pročitajte sistemsku datoteku koja se nalazi u/proc/i/sys/class/direktorijumima
Sada želim prikazati broj povezanih uređaja.
Kad pokrenem cat/proc/net/arp na konzoli, on prikazuje popis poznatih uređaja, zajedno s njihovim MAC i IP adresama:
IP adresa HW tip Zastavice HW adresa Maska Uređaj
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
Možemo ga raščlaniti izravno u Lua -i, ali je često lakše koristiti specijalizirane alate. Na Linuxu su to grep, head, tail, cut, wc, awk.
Da bih dobio broj klijenata iz arp izlaza, moram filtrirati tablicu (ukloniti nepovezane stavke) i prebrojati redove tablice, što rezultira sljedećom naredbom:
cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l
Hajde da probamo:
root@ruter: ~/lua-blynk# cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l
1
Odlično. Sada imamo ideju o tome kako možemo prikupiti sve potrebne podatke. Hajde da ga automatizujemo. Da bismo naš kod učinili čistim i proširivim, kreirajmo neke pomoćne funkcije:
funkcija exec_out (cmd)
lokalna datoteka = io.popen (cmd) ako nije datoteka onda vrati nulti kraj lokalni izlaz = datoteka: čitanje ('*sve') datoteka: close () print ("Pokreni:"..cmd.. " ->".. output) return output end funkcija read_file (path) local file = io.open (path, "rb") ako nije file then return nil end local content = file: read "*a" file: close () print ("Read: "..path.." -> "..content) vraćanje kraja sadržaja
Pomoću ovih pomoćnih programa sada možemo implementirati stvarne funkcije dohvaćanja podataka:
funkcija getArpClients ()
return tonumber (exec_out ("cat/proc/net/arp | grep br -lan | grep 0x2 | wc -l")) završna funkcija getUptime () return tonumber (exec_out ("cat/proc/uptime | awk '{print $ 1 } '")) end funkcija getWanIP () povratak exec_out (" ifconfig eth0.2 | grep' inet addr: '| cut -d: -f2 | awk' {print $ 1} '") kraj
Možete pokrenuti dijelove ovih naredbi ljuske, da biste stekli dublje razumijevanje o tome kako radi i da ga prilagodite svojim potrebama.
Najjednostavniji dio je slanje podataka u aplikaciju Blynk. Zadani primjer već postavlja mjerač vremena, koji pokreće neki kôd svakih 5 sekundi, pa ga jednostavno ponovo koristimo:
lokalni tmr1 = Tajmer: novi {interval = 5000, func = funkcija ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) blynk: virtualWrite (12, getWanIP ()) kraj}
U aplikaciju dodajemo 3 widgeta za oznake i dodjeljujemo ih Virtualnim pinovima 10, 11, 12 u skladu s tim.
Iako ovo funkcionira, prilično je neučinkovito jer se WAN IP ili broj klijenata ne ažuriraju tako često. Ispravimo ovo
Za WAN IP, premještamo ga na povezani rukovatelj. Pokretat će se svaki put kada usmjerivač uspostavi vezu s Blynk Cloudom. Ovo bi trebalo biti dovoljno:
blynk: on ("povezano", funkcija ()
print ("Spremno.") blynk: virtualWrite (12, getWanIP ()) kraj)
Za vrijeme neprekidnog rada i broj klijenata, stvaramo zasebni tajmer sa 5 minuta. interval:
lokalni tmr2 = Tajmer: novi {interval = 5*60*1000, func = function ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) end}
Korak 5: WiFi kontrola: UKLJ./ISKLJ
Do sada smo samo dobivali neke podatke s uređaja. Pokušajmo to kontrolirati!
blynk: on ("V20", funkcija (param)
ako je param [1] == "1" onda os.execute ("wifi up") inače os.execute ("wifi down") end end)
Sa strane aplikacije, upravo sam dodao widget Button (način rada: Switch) i dodijelio ga V20.
To je to. Amazing.
Korak 6: Tabela sistemske statistike
funkcija getCpuLoad ()
return tonumber (exec_out ("top -bn1 | grep 'CPU:' | head -n1 | awk '{print $ 2+$ 4}'")) end funkcija getRamUsage () return tonumber (exec_out ("free | grep Mem | awk ' {print ($ 3- $ 7)/$ 2 * 100.0} '")) kraj
Također moramo poslati podatke u Blynk (upotrijebimo ponovo tmr1):
lokalni tmr1 = Tajmer: novi {interval = 5000, func = funkcija ()
blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) kraj}
Na strani aplikacije dodajte widget SuperChart. Dodajte CPU, RAM podatke i dodijelite ih V5, V6.
Korak 7: Status okretanja HDD -a
Moj usmjerivač ima vanjski HDD pogon povezan kao uređaj za pohranu povezan s mrežom. Stvar je u tome da je ovaj pogon konfiguriran da se počne vrtjeti kad mu netko pristupi i da se obustavi nakon isteka vremena.
Očigledno bi bilo super znati koliko se puta uključuje tokom dana. Tako sam dodao još jedan tok podataka u sistemski grafikon.
Malo je teže dobiti status HDD pogona, ali pronašao sam način! Prije svega, instalirajte smartmontools sa SSH konzole:
opkg update
opkg instalirajte smartmontools
Zatim, u našem kodu, moramo pokrenuti posebnu naredbu i provjeriti izlazni kod:
funkcija exec_ret (cmd)
lokalni izlaz = os.execute (cmd) ispis ("Pokreni:"..cmd.. " -> izlaz:".. izlaz) povratak funkcija završetka izlaza getHddSpinning () ako exec_ret ("smartctl --nocheck = standby --info /dev/sda>/dev/null ") == 0 zatim vratite 1 else vratite 0 kraj kraja
Napomena: moj HDD je /dev /sda
Korak 8: Tabela aktivnosti na mreži
Kreiramo još jedan SuperChart widget (sličan prethodnom), dodajemo TX i RX tokove podataka i dodjeljujemo V1 i V2. Napomena: Želim prikazati statistiku WAN porta, a moj WAN port je eth0.2
Pomoćne funkcije:
funkcija getWanRxBytes ()
return tonumber (read_file ("/sys/class/net/eth0.2/statistics/rx_bytes")) end funkcija getWanTxBytes () return tonumber (read_file ("/sys/class/net/eth0.2/statistics/tx_bytes")) kraj
Zatim dodajte neki kôd u isti tmr1. Ovo je složenije jer samo trebamo izračunati i prikazati razliku u prenesenim/primljenim bajtovima:
lokalni prevTx, prevRx
lokalni tmr1 = Tajmer: novi {interval = 5000, func = function () lokalni tx = getWanTxBytes () lokalni rx = getWanRxBytes () ako prevTx i prevTx ~ = tx tada blynk: virtualWrite (1, tx - prevTx) kraj ako prevRx i prevRx ~ = rx zatim blynk: virtualWrite (2, rx - prevRx) kraj prevTx = tx prevRx = rx blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) blynk: virtualWrite (7, getHddSpinning (7, getHddSpinning)) kraj}
Korak 9: Obavještenja
Također sam želio biti obaviješten kada moj usmjerivač izgubi napajanje ili internetsku vezu. Za to nam je potreban widget za obavijesti.
U postavkama widgeta omogućite "vanmrežno obavještavanje". Nije potreban kôd. Ali također možemo slati prilagođena obavještenja iz našeg koda.
Korak 10: Automatsko pokretanje u pozadini
Za sada se skripta mora ručno izvršiti, ali želim da se automatski pokreće u pozadini pri uključivanju usmjerivača.
To se postiže stvaranjem usluge. Kreirajte datoteku /etc/init.d/blynkmon:
#!/bin/sh /etc/rc.common
START = 99 STOP = pidfile = "/var/run/blynkmon.pid" start () {if [-f $ pidfile]; zatim odjeknite "blynkmon već radi" izlaz 0 fi cd /root /lua-blynk lua blynkmon.lua vaš-auth-token> /dev /null & echo $! > $ pidfile} stop () {if [! -f $ pidfile]; zatim odjekni "blynkmon ne radi" izlaz 0 fi kill -9 $ (cat $ pidfile) rm $ pidfile}
Napomena: ne zaboravite zamijeniti token-auth-token
Zatim omogućite uslugu blynkmon:
usluga blynkmon enable
Korak 11: Zaključak i dodatne ideje
Možete skenirati ovaj QR da biste dobili klon mog Blynk projekta. On zahtijeva neke energetske bodove (4600), jer koristi puno widgeta!
Kompletan kôd Lua pronađite ovdje:
Zasad je dobro, ali evo nekoliko ideja koje bih želio dodati u bliskoj budućnosti.
- Dodajte naredbu Reboot. Spriječite slučajno klikanje na nju.
- Dodajte widget Terminal za pokretanje bilo koje naredbe za Linux.
-
Dodajte grafikon temperature procesora.
UPD: Nažalost OpenWrt -u trenutno nedostaju neki upravljački programi za moj model usmjerivača. Ali dostupan je za mnoge druge usmjerivače
- Dodajte obavijest kada se određeni uređaj pridruži/napusti mrežu. Već imamo arp podatke, sada provjeravamo samo MAC adresu.
Na ovaj način možemo nadzirati i kontrolirati 3D pisače, robote, običan računar/prijenosno računalo, Arduino/ESP8266/ESP32/RaspberryPi stvari, uređaje pametne kuće i gotovo sve u blizini. Javite mi ako imate još neke zanimljive ideje. Šta mislite o svemu tome?
Preporučuje se:
Kako pretvoriti svoj Raspberry Pi u pristupnik za daljinski pristup: 6 koraka
Kako pretvoriti svoj Raspberry Pi u pristupnik za daljinski pristup: Hej momci! U svjetlu nedavnih događanja, naš tim na lokaciji remote.it radio je na napornim idejama o tome kako daljinski rad učiniti bezbolnim i pristupačnim. Osmislili smo sliku remote.itPi SD kartice, SD karticu koju možete staviti u novu
Daljinski pristup Raspberry Pi: SSH, Dekstop & FTP: 4 koraka
Daljinski pristup Raspberry Pi -u: SSH, Dekstop i FTP: U ovom ćemo članku pogledati 3 različite metode pomoću kojih možete daljinski pristupiti Raspberry Pi -u kako biste olakšali rad s njim. Prvi je SSH, koji će vam omogućiti daljinski pristup terminalu. Drugi je daljinski
Napravite ESP8266 robotskog batlera / automobila / tenka za daljinski upravljač od 15 USD za iOS i Android: 4 koraka
Napravite ESP8266 robotskog batlera / automobila / cisternu sa daljinskim upravljanjem od 15 USD za iOS i Android: Mrzite li hodati do kuhinje kako biste pojeli nešto za užinu? Ili po novo piće? Sve se to može popraviti pomoću ovog jednostavnog batlera od 15 USD. Prije nego nastavimo, trenutno vodim Kickstarter projekt za glasovno upravljanu RGB LED traku
Dodajte optički tahometar zasnovan na Arduinu CNC usmjerivaču: 34 koraka (sa slikama)
Dodajte optički tahometar zasnovan na Arduinu CNC usmjerivaču: Izgradite optički indikator broja okretaja za svoj CNC usmjerivač s Arduino Nano, IR LED/IR fotodiodnim senzorom i OLED zaslonom za manje od 30 USD. Inspirirao me eletro18 -ov Measure RPM - Optički tahometar sa instrukcijama i želio sam dodati tahometar
Nadogradnja memorije u usmjerivaču Cisco serije 2500: 9 koraka
Nadogradnja memorije u usmjerivaču Cisco serije 2500: Želite li nadograditi na tu novu verziju iOS -a kako bi vaš Cisco usmjerivač serije 2500 opet bio koristan za nešto, ali ne može jer nemate dovoljno RAM -a? Pokazat ću vam kako nadograditi RAM i gdje ću vam dati neke savjete gdje ih pronaći