Sadržaj:
- Korak 1: Pretpostavljam da ste već otvorili OpenWrt…
- Korak 2: Softver i alati
- Korak 3: Stvaranje minimalne aplikacije
- Korak 4: Dodavanje nekih informacija: Broj klijenata, WAN IP adresa, vrijeme rada
- Korak 5: WiFi kontrola: UKLJ./ISKLJ
- Korak 6: Tablica statistike sustava
- Korak 7: Status okretanja tvrdog diska
- Korak 8: Tablica aktivnosti na mreži
- Korak 9: Obavijesti
- Korak 10: Automatsko pokretanje u pozadini
- Korak 11: Zaključak i daljnje ideje
Video: Aplikacija Android/iOS za daljinski pristup vašem OpenWrt usmjerivaču: 11 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:35
Nedavno sam kupio novi usmjerivač (Xiaomi Mi Router 3G). I naravno, ovaj novi, strašan hardver inspirirao me 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 sjajan video: Openwrt instalacija, WiFi benchmark, Girlfriend Flashing. Wow kako sam se nasmijao!:)
Pažnja! Instaliranje OpenWrt -a može oštetiti vaš usmjerivač. No, nakon dovršetka 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 otvorenim OpenWrt-om, poput Onion Omega, VoCore, LinkIt Smart 7688 i drugih. Ovaj vodič također objašnjava neke osnovne ideje iza stvaranja takvih aplikacija, tako da ga 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). No za neke napredne funkcionalnosti morao sam instalirati dodatne pakete. To se radi u samo nekoliko klikova, pa ću ovdje uključiti upute.
Također, 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
Na strani pametnih telefona koristim Blynk. Nudi 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, izravno na vašem pametnom telefonu. Blynk se uglavnom koristi s Arduinom, Raspberry Pi itd. Ali zašto ga ne pokrenuti na samom usmjerivaču?;)
Sa strane 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 prikladno za rad (ponovno sastavljanje za svaku promjenu itd.) S druge strane, Lua je unaprijed instalirana, jednostavna je za korištenje i učenje. Koristi ga zadano web sučelje, LuCI.
Korak 3: Stvaranje minimalne aplikacije
Početak rada s Blynkom i Luaom je jednostavan kao:
- Preuzmite aplikaciju Blynk (s App Storea, Google Playa)
- Izradite novi projekt i nabavite token autorizacije
- Slijedite upute za instalaciju programa Blynk Lua za OpenWrt.
Za pristup konzoli usmjerivača koristite SSH. Nakon pokretanja zadanog primjera:
lua./primjeri/klijent.lua
Trebali bismo vidjeti ovako nešto:
Povezivanje…
SSL rukovanje … Spremno.
Što znači da je uspostavljena sigurna, dvosmjerna veza s aplikacijom! DA!
Sada možemo lako proširiti dani primjer pa čini nešto zanimljivo. Napravio sam kopiju ovog primjera kako bih ga uredio:
k.č./primjeri/klijent.lua./blenkmon.lua
Korak 4: Dodavanje nekih informacija: Broj klijenata, WAN IP adresa, vrijeme rada
Osnovna ideja je povremeno dobivanje informacija iz OS -a, ako je potrebno izvršiti neka jednostavna izračunavanja, a zatim poslati rezultat Blynku za prikaz.
U sustavu Linux/OpenWrt imamo nekoliko načina za dobivanje podataka o sustavu:
- Pokrenite naredbu i raščlanite tekst koji izlazi
- Pokrenite naredbu i gledajte izlaznu šifru koju vraća
- Pročitajte datoteku sustava koja se nalazi u/proc/i/sys/class/direktorijima
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 Tip HW 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 često je 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 retke tablice, što rezultira sljedećom naredbom:
cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l
Pokušajmo:
root@usmjerivač: ~/lua-blynk# cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l
1
Sjajno. Sada imamo ideju o tome kako možemo prikupiti sve potrebne podatke. Automatizirajmo ga. Kako bi naš kôd bio čist i proširiv, napravimo neke pomoćne funkcije:
funkcija exec_out (cmd)
lokalna datoteka = io.popen (cmd) ako nije datoteka onda vrati nulti kraj lokalni izlaz = datoteka: read ('*sve') datoteka: close () print ("Pokreni:"..cmd.. " ->".. output) return output end funkcija read_file (path) local file = io.open (path, "rb") if not file then return nil end local content = file: read "*a" file: close () print ("Read:" "..path.." -> "..content) return content end
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")) end function getUptime () return tonumber (exec_out ("cat/proc/uptime | awk '{print $ 1 } '")) end funkcija getWanIP () return exec_out (" ifconfig eth0.2 | grep' inet addr: '| cut -d: -f2 | awk' {print $ 1} '") end
Možete pokrenuti dijelove ovih naredbi ljuske, kako biste stekli dublje razumijevanje kako to funkcionira i prilagodili je 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 ponovno koristimo:
lokalni tmr1 = Mjerač vremena: 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 s oznakama i prema tome ih dodjeljujemo Virtualnim pinovima 10, 11, 12.
Iako ovo funkcionira, prilično je neučinkovito jer se WAN IP ili broj klijenata ne ažuriraju tako često. Ispravimo to
Za WAN IP premještamo ga na povezani rukovatelj. Pokretat će se svaki put kada usmjerivač uspostavi vezu s Blynk Cloudom. To bi trebalo biti dovoljno:
blynk: on ("spojeno", funkcija ()
print ("Spremno.") blynk: virtualWrite (12, getWanIP ()) kraj)
Za vrijeme neprekidnog rada i broj klijenata stvaramo zasebni mjerač vremena s 5 minuta. interval:
lokalni tmr2 = Mjerač vremena: 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: uključeno ("V20", funkcija (param)
ako je param [1] == "1" tada 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. Zadivljujuće.
Korak 6: Tablica statistike sustava
funkcija getCpuLoad ()
return 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} '")) kraj
Također moramo poslati podatke u Blynk (upotrijebimo opet tmr1):
lokalni tmr1 = Mjerač vremena: novi {interval = 5000, func = funkcija ()
blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) kraj}
Na strani aplikacije dodajte widget SuperChart. Dodajte CPU, RAM podatkovne tokove i dodijelite V5, V6.
Korak 7: Status okretanja tvrdog diska
Moj usmjerivač ima vanjski HDD pogon spojen kao mrežni uređaj za pohranu. 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či tijekom dana. Stoga sam na grafikon sustava dodao još jedan tok podataka.
Malo je teže dobiti status HDD pogona, ali pronašao sam način! Prije svega, instalirajte smartmontools sa SSH konzole:
opkg ažuriranje
opkg instalirajte smartmontools
Zatim, u našem kodu, moramo pokrenuti posebnu naredbu i provjeriti izlazni kod:
funkcija exec_ret (cmd)
local exit = os.execute (cmd) print ("Run:"..cmd.. " -> exit:".. exit) return funkcija završetka getHddSpinning () if 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: Tablica aktivnosti na mreži
Izrađujemo još jedan widget SuperChart (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
local tmr1 = Timer: new {interval = 5000, func = function () local tx = getWanTxBytes () local rx = getWanRxBytes () ako prevTx i prevTx ~ = tx tada blynk: virtualWrite (1, tx - prevTx) kraj ako prevRx i prevRx ~ = rx onda 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: Obavijesti
Također sam htio biti obaviješten kada moj usmjerivač izgubi napajanje ili internetsku vezu. Za to nam je potreban widget za obavijesti.
U postavkama widgeta omogućite "offline obavijest". Nije potreban kôd. Ali također možemo poslati prilagođene obavijesti iz našeg koda.
Korak 10: Automatsko pokretanje u pozadini
Za sada se skripta mora ručno izvršiti, ali želim je omogućiti da se automatski pokreće u pozadini pri uključivanju usmjerivača.
To se postiže stvaranjem usluge. Izradite 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 your-auth-token> /dev /null & echo $! > $ pidfile} stop () {if [! -f $ pidfile]; zatim odjekni "blynkmon ne radi" exit 0 fi kill -9 $ (cat $ pidfile) rm $ pidfile}
Napomena: ne zaboravite zamijeniti svoj-auth-token
Zatim omogućite uslugu blynkmon:
usluga blynkmon enable
Korak 11: Zaključak i daljnje ideje
Možete skenirati ovaj QR da biste dobili klon mog Blynk projekta. On zahtijeva neke energetske točke (4600), jer koristi puno widgeta!
Ovdje pronađite potpuni kôd Lua:
Zasad je dobro, ali evo nekoliko ideja koje bih želio dodati u bliskoj budućnosti.
- Dodajte naredbu Ponovno pokretanje. Spriječite slučajno klikanje.
- Dodajte widget Terminal za pokretanje bilo koje naredbe za Linux.
-
Dodajte grafikon temperature CPU -a.
UPD: Nažalost OpenWrt -u trenutno nedostaju neki upravljački programi za moj model usmjerivača. No, 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čna računala/prijenosna računala, Arduino/ESP8266/ESP32/RaspberryPi stvari, uređaje Smart Home i gotovo sve u blizini. Javite mi ako imate još kakvih zanimljivih ideja. Što mislite o svemu tome?
Preporučeni:
Kako pretvoriti svoj Raspberry Pi u pristupnik za daljinski pristup: 6 koraka
Kako pretvoriti svoj Raspberry Pi u pristupnik za daljinski pristup: Hej dečki! U svjetlu nedavnih događanja, naš tim na lokaciji remote.it naporno je razmišljao o idejama 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 mu olakšali rad. Prvi je SSH, koji će vam omogućiti daljinski pristup terminalu. Drugi je remo
Napravite ESP8266 robotskog batlera / automobila / spremnika za daljinski upravljač od 15 USD za iOS i Android: 4 koraka
Napravite ESP8266 robotskog batlera / auta / spremnika s daljinskim upravljanjem za 15 USD za iOS i Android: Mrzite li hodati do kuhinje kako biste popili zalogajčić? Ili po novo piće? Sve se to može popraviti pomoću ovog jednostavnog batlera na daljinsko upravljanje od 15 USD. Prije nego nastavimo, trenutno vodim Kickstarter projekt za glasovno upravljanu RGB LED traku
Obrada okretanjem na DMS CNC usmjerivaču: 5 koraka (sa slikama)
Obrada prevrtanja na DMS CNC usmjerivaču: Nakon što sam razmislila o potencijalu troosne obrade prevrtanja, odlučila sam konstruirati trodimenzionalnu reljefnu sliku od laminirane šperploče. Ovaj bi se komad mogao vidjeti s obje strane, iako bi dvije strane bile međusobno povezane
Dodajte optički mjerač okretaja baziran na Arduinu CNC usmjerivaču: 34 koraka (sa slikama)
Dodajte optički mjerač okretaja temeljen 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 - Optic Tachometer Instructable i htio sam dodati tahometar