Përmbajtje:
- Hapi 1: Supozoj, që ju keni OpenWrt Tashmë…
- Hapi 2: Softuer dhe mjete
- Hapi 3: Krijimi i një aplikacioni minimal
- Hapi 4: Shtimi i disa informacioneve: Numri i Klientëve, Adresa IP WAN, Uptime
- Hapi 5: Kontrolli WiFi: ON/OFF
- Hapi 6: Grafiku i Statistikave të Sistemit
- Hapi 7: Statusi i rrotullimit të HDD
- Hapi 8: Grafiku i Aktivitetit të Rrjetit
- Hapi 9: Njoftimet
- Hapi 10: Autorun në sfond
- Hapi 11: Përfundim & Ide të Mëtejshme
Video: Aplikacioni Android/iOS për të hyrë në distancë në routerin tuaj OpenWrt: 11 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:20
Kohët e fundit bleva një ruter të ri (Xiaomi Mi Router 3G). Dhe sigurisht, kjo pjesë e re, e mrekullueshme e pajisjeve më frymëzoi të filloja të punoja në këtë projekt;)
Hapi 1: Supozoj, që ju keni OpenWrt Tashmë…
Më duhej të instaloja së pari OpenWrt … Kryesisht, ndoqa këtë udhëzues (specifik për këtë model ruteri): https://dzone.com/articles/hacking-into-xiaomi-mi-… Ndërsa punoja në këtë, gjeta këtë video të mrekullueshme: Instalimi i Openwrt, standardi i WiFi, Dashuria ndezje. Ua qeshja aq shumë!:)
Kujdes! Instalimi i OpenWrt mund të rregullojë ruterin tuaj. Por pasi të përfundojë, zhbllokon fuqinë dhe kontrollin e plotë. Unë nuk jam aq i guximshëm për të dhënë ndonjë udhëzim këtu, pasi ato mund të jenë të ndryshme për çdo model ruter.
Por nëse tashmë keni OpenWrt në ruterin tuaj, do të jeni në gjendje të filloni me këtë mësim në notime
BTW, disa borde zhvillimi vijnë me OpenWrt pa dalë, si Onion Omega, VoCore, LinkIt Smart 7688 dhe të tjerë. Ky tutorial shpjegon gjithashtu disa ide themelore prapa krijimit të aplikacioneve të tilla, kështu që ju lehtë mund ta përshtatni atë për të punuar me Raspberry Pi dhe të ngjashme.
Për këtë projekt, unë do të përdor kryesisht softuer të para-instaluar (i disponueshëm në çdo ruter të aktivizuar me OpenWrt). Por për disa funksione të përparuara, më duhej të instaloja pako shtesë. Kjo është bërë në vetëm disa klikime, kështu që unë do të përfshijë udhëzimet këtu.
Gjithashtu, supozoj se ju tashmë e dini:
- Si të hapni/përdorni terminalin SSH në ruterin tuaj OpenWrt
- Si të ngarkoni/modifikoni skedarët në ruterin tuaj (përdorni FileZilla ose scp/sftp)
- Si të punoni me tastierën Linux
Hapi 2: Softuer dhe mjete
Nga ana e smartphone, unë jam duke përdorur Blynk. Ai siguron aplikacione iOS dhe Android për të kontrolluar çdo pajisje. Ju lehtë mund të ndërtoni ndërfaqe të bukura grafike për të gjitha projektet tuaja thjesht duke zvarritur dhe lëshuar widget, pikërisht në smartphone tuaj. Blynk përdoret më së shumti me Arduino, Raspberry Pi, etj. Por pse të mos e përdorni në vetë ruterin?;)
Nga ana e pajisjes unë do të përdor Lua për të shkruar funksionimin e nevojshëm. Unë gjithashtu mund të përdor Python ose Node.js, por për fat të keq këto opsione nuk janë gjithmonë të disponueshme, për shkak të mungesës së burimeve në disa rutera. Ose C/C ++, por nuk është aq i përshtatshëm për të punuar me të (rikompilimi për çdo ndryshim, etj.) Nga ana tjetër, Lua është para-instaluar, është i thjeshtë për t'u përdorur dhe mësuar. Përdoret nga ndërfaqja e paracaktuar e uebit, LuCI.
Hapi 3: Krijimi i një aplikacioni minimal
Fillimi me Blynk dhe Lua është aq i lehtë sa:
- Shkarkoni Aplikacionin Blynk (nga App Store, Google Play)
- Krijoni një projekt të ri dhe merrni Auth Token
- Ndiqni udhëzimet e instalimit të Blynk Lua për OpenWrt.
Përdorni SSH për të hyrë në tastierën tuaj të ruterit. Pas ekzekutimit të shembullit të paracaktuar:
lua./shembuj/klient.lua
Ne duhet të shohim diçka si kjo:
Po lidhet…
Shtrëngim duarsh SSL… Gati.
Që do të thotë se është krijuar lidhja e sigurt, dydrejtimore me aplikacionin! PO!
Tani mund ta zgjerojmë me lehtësi shembullin e dhënë, kështu që bën diçka interesante. Unë kam krijuar një kopje të këtij shembulli për ta redaktuar atë:
cp./shembuj/klient.lua./blynkmon.lua
Hapi 4: Shtimi i disa informacioneve: Numri i Klientëve, Adresa IP WAN, Uptime
Ideja themelore është që të merrni informacionin nga OS në mënyrë periodike, të bëni disa llogaritje të thjeshta nëse është e nevojshme, dhe pastaj ta dërgoni rezultatin në Blynk për t'u shfaqur.
Në Linux/OpenWrt, ne kemi disa mënyra për të marrë të dhënat e sistemit:
- Drejtoni një komandë dhe analizoni tekstin që nxjerr
- Drejtoni një komandë dhe shikoni kodin e daljes që kthehet
- Lexoni një skedar sistemi, të vendosur në/proc/dhe/sys/class/directories
Tani dua të shfaq numrin e pajisjeve të lidhura.
Kur drejtoj cat/proc/net/arp në tastierë, ajo nxjerr listën e pajisjeve të njohura, së bashku me adresat e tyre MAC dhe IP:
Adresa IP Lloji HW Flamujt Adresa HW Maska Pajisja
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
Ne mund ta analizojmë drejtpërdrejt në Lua, por shpesh është më e lehtë të përdorim shërbime të specializuara. Në Linux, këto janë grep, head, tail, cut, wc, awk.
Për të marrë numrin e klientëve nga dalja arp, më duhet të filtroj tabelën (të heq artikujt e palidhur) dhe të numëroj rreshtat e tabelës, gjë që rezulton në komandën e mëposhtme:
mace/proc/net/arp | grep br-lan | grep 0x2 | wc -l
Le ta provojmë:
root@router: ~/lua-blynk# cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l
1
E madhe Tani kemi idenë se si mund të mbledhim të gjitha informacionet e kërkuara. Le ta automatizojmë atë. Për ta bërë kodin tonë të pastër dhe të zgjerueshëm, le të krijojmë disa funksione ndihmëse:
funksioni exec_out (cmd)
skedari lokal = io.popen (cmd) nëse nuk është skedar, atëherë kthejeni në fund daljen vendore = skedar: lexoni ('*të gjithë') skedarin: mbyllni () print ("Run:"..cmd.. " ->".. rezultati) kthehet në funksionin përfundimtar të leximit read_file (shtegu) skedari lokal = io.open (shtegu, "rb") nëse nuk është skedar, atëherë kthejeni përmbajtjen lokale = skedar fare: lexoni "*a" skedarin: mbyllni () print ("Lexo: "..path.." -> "..përmbajtje) ktheje përmbajtjen fund
Duke përdorur këto shërbime, tani mund të zbatojmë funksionet aktuale të marrjes së të dhënave:
funksioni getArpClients ()
kthimi i numrit (exec_out ("cat/proc/net/arp | grep br -lan | grep 0x2 | wc -l")) fundi i funksionit getUptime () kthimi i numrit (exec_out ("cat/proc/uptime | awk '{print $ 1 } '")) fundi i funksionit getWanIP () kthehu exec_out (" ifconfig eth0.2 | grep' inet addr: '| cut -d: -f2 | awk' {print $ 1} '") fund
Ju mund të ekzekutoni pjesë të këtyre komandave të guaskës, për të fituar një kuptim më të thellë se si funksionon dhe për ta përshtatur atë me nevojat tuaja.
Pjesa më e lehtë është dërgimi i të dhënave në Aplikacionin Blynk. Shembulli i paracaktuar tashmë vendos kohëmatësin, i cili ekzekuton një kod çdo 5 sekonda, kështu që ne thjesht e përdorim përsëri:
lokale tmr1 = Kohëmatësi: i ri {interval = 5000, func = funksion ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) blynk: virtualWrite (12, getWanIP ()) fund}
Në aplikacion, ne shtojmë 3 widget të etiketave dhe i caktojmë në përputhje me Kunjat Virtual 10, 11, 12.
Ndërsa kjo funksionon, është mjaft joefikase, pasi WAN IP ose numri i klientëve nuk azhurnohen aq shpesh. Le ta rregullojmë këtë
Për WAN IP, ne e transferojmë atë në mbajtësin e lidhur. Do të ekzekutohet sa herë që ruteri krijon lidhje me Blynk Cloud. Kjo duhet të jetë e mjaftueshme:
blynk: on ("lidhur", funksioni ()
print ("Gati.") blynk: virtualWrite (12, getWanIP ()) fund)
Për Uptime dhe Numri i Klientëve, ne krijojmë një kohëmatës të veçantë me 5 minuta. intervali:
lokale tmr2 = Kohëmatësi: i ri {interval = 5*60*1000, func = funksion ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) fund}
Hapi 5: Kontrolli WiFi: ON/OFF
Deri tani, ne po merrnim vetëm disa informacione nga pajisja. Le të përpiqemi ta kontrollojmë atë!
blynk: aktiv ("V20", funksioni (param)
nëse param [1] == "1" atëherë os.execute ("wifi up") përndryshe os.ekzekutimi ("wifi poshtë") fundi i fundit)
Nga ana e aplikacionit, unë vetëm shtova një widget Button (modaliteti: Switch) dhe e caktova atë në V20.
Kjo eshte. E mahnitshme.
Hapi 6: Grafiku i Statistikave të Sistemit
funksioni getCpuLoad ()
kthimi i numrit (exec_out ("top -bn1 | grep 'CPU:' | head -n1 | awk '{print $ 2+$ 4}'")) fundi i funksionit getRamUsage () kthimi i numrit (exec_out ("falas | grep Mem | awk ' {print ($ 3- $ 7)/$ 2 * 100.0} '")) në fund
Ne gjithashtu duhet të dërgojmë të dhënat në Blynk (le të përdorim përsëri tmr1):
lokale tmr1 = Kohëmatësi: i ri {interval = 5000, func = funksion ()
blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) fund}
Në Anën e Aplikacionit, shtoni miniaplikacionin SuperChart. Shtoni CPU, datastreams RAM dhe caktojini V5, V6.
Hapi 7: Statusi i rrotullimit të HDD
Ruteri im ka një disk të jashtëm HDD të lidhur si një pajisje ruajtëse e bashkangjitur në rrjet. Gjë është se ky disk është konfiguruar të fillojë të rrotullohet kur dikush të ketë qasje në të dhe të pezullohet pas një afati kohor.
Natyrisht, do të ishte mirë të dihet sa herë ndizet gjatë gjithë ditës. Kështu që shtova një rrjedhë tjetër të të dhënave në tabelën time të Sistemit.
Ashtë pak më e ndërlikuar të marrësh statusin e diskut HDD, por gjeta një mënyrë! Para së gjithash, instaloni smartmontools nga tastiera SSH:
përditësim opkg
opkg instaloni smartmontools
Pastaj, në kodin tonë, ne duhet të ekzekutojmë një komandë të veçantë dhe të kontrollojmë kodin e daljes:
funksioni exec_ret (cmd)
dalje lokale = os.ekzekuto (cmd) print ("Drejto:"..cmd.. " -> dalje:".. dalje) kthehu funksionin përfundimtar të daljes getHddSpinning () nëse exec_ret ("smartctl --nocheck = gatishmëria --info /dev/sda>/dev/null ") == 0 pastaj kthehet 1 tjetër kthehet 0 fund fund
Shënim: HDD -ja ime është /dev /sda
Hapi 8: Grafiku i Aktivitetit të Rrjetit
Ne krijojmë një widget tjetër SuperChart (i ngjashëm me atë të mëparshëm), Shtojmë transmetime të të dhënave TX dhe RX dhe i caktojmë V1 dhe V2. Shënim: Unë dua të shfaq statc portën WAN, dhe porta ime WAN është eth0.2
Funksionet ndihmëse:
funksioni getWanRxBytes ()
ktheje numrin (lexo_file ("/sys/class/net/eth0.2/statistics/rx_bytes")) funksioni përfundimtar getWanTxBytes () ktheje numrin (lexo_file ("/sys/class/net/eth0.2/statistics/tx_bytes")) fund
Tjetra, shtoni një kod në të njëjtën tmr1. Kjo është më e ndërlikuar, pasi ne vetëm duhet të llogarisim dhe shfaqim ndryshimin në bajtët e transmetuar/marrë:
prevTx lokale, prevRx
lokale tmr1 = Kohëmatësi: i ri {interval = 5000, func = funksion () lokal tx = getWanTxBytes () lokal rx = getWanRxBytes () nëse prevTx dhe prevTx ~ = tx atëherë blynk: virtualWrite (1, tx - prevTx) përfundon nëse prevRx dhe prevRx ~ = rx pastaj blynk: virtualWrite (2, rx - prevRx) fund prevTx = tx prevRx = rx blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) blynk: virtualWdS (7,)) fund}
Hapi 9: Njoftimet
Unë gjithashtu doja të njoftohesha kur Routeri im humbet energjinë ose lidhjen me internetin. Për këtë, ne kemi nevojë për widget Notification.
Në cilësimet e widget -it, aktivizoni "njoftimin jashtë linje". Nuk nevojitet kod. Por ne gjithashtu mund të dërgojmë njoftime me porosi nga kodi ynë.
Hapi 10: Autorun në sfond
Tani për tani skenari duhet të ekzekutohet me dorë, por unë dua ta bëj atë të funksionojë automatikisht në sfond kur ruteri të jetë i ndezur.
Kjo bëhet duke krijuar një shërbim. Krijoni një skedar /etc/init.d/blynkmon:
#!/bin/sh /etc/rc.common
START = 99 STOP = pidfile = "/var/run/blynkmon.pid" start () {if [-f $ pidfile]; pastaj jehona "blynkmon tashmë po funksionon" dalja 0 fi cd /root /lua-blynk lua blynkmon.lua shenja juaj-auth> /dev /null & echo $! > $ pidfile} stop () {if [! -f $ pidfile]; pastaj jehona "blynkmon nuk po funksionon" dalja 0 fi kill -9 $ (cat $ pidfile) rm $ pidfile}
Shënim: mos harroni të zëvendësoni shenjën tuaj të autorizuar
Pastaj, aktivizoni shërbimin blynkmon:
shërbimi aktivizon blynkmon
Hapi 11: Përfundim & Ide të Mëtejshme
Ju mund ta skanoni këtë QR për të marrë klonin e Projektit tim Blynk. Kërkon disa pika energjie (4600), pasi përdor shumë pajisje shtesë!
Gjeni kodin e plotë të Lua këtu:
Deri tani është mirë, por këtu janë disa ide që do të doja të shtoja në të ardhmen e afërt.
- Shto komandën e Rinisjes. Parandaloni klikimin mbi të rastësisht.
- Shtoni widget Terminal për të ekzekutuar çdo komandë Linux.
-
Shtoni tabelën e temperaturës së CPU.
UPD: Për fat të keq OpenWrt aktualisht mungojnë disa drejtues për modelin tim të ruterit. Por është në dispozicion për shumë ruterë të tjerë
- Shtoni njoftim kur një pajisje e veçantë bashkohet/largohet nga rrjeti. Ne tashmë kemi informacione për arp, tani kontrolloni vetëm adresën MAC.
Në këtë mënyrë, ne mund të monitorojmë dhe kontrollojmë Printerët 3D, Robotët, një PC/Laptop të rregullt, gjërat Arduino/ESP8266/ESP32/RaspberryPi, pajisjet Smart Home dhe pothuajse çdo gjë përreth. Më tregoni nëse keni ndonjë ide tjetër interesante. Çfarë mendoni për gjithë këtë?
Recommended:
Mini UPS DIY për routerin Wifi: 11 hapa
DIY Mini UPS për Router Wifi: Në këtë Instructables do t'ju tregoj se si të bëni një kopje rezervë të energjisë për Wifi Router / Modem me kosto të ulët. Kjo do t'ju ndihmojë të bëni më pak të metat e punës tuaj nga shtëpia me lidhje të pandërprerë të internetit
Aplikacioni AmbiBox IOS për telekomandë: 5 hapa
Aplikacioni AmbiBox IOS Remote Control: Me këtë aplikacion iOS ju mund të kontrolloni AmbiBox -in tuaj nga iPhone ose iPad. Unë do të flas për aplikacionin dhe si komunikon me serverin AmbiBox, nëse doni të dini se si të instaloni AmbiBox dhe shiritat led, ka disa mësime në
Tabela e vizatimit Bluetooth LED dhe Aplikacioni IOS: 9 hapa (me fotografi)
Tabela e vizatimit të Bluetooth LED dhe Aplikacioni IOS: Në këtë tutorial, do të keni mundësi të krijoni një tabelë LED Bluetooth që mund të nxjerrë fotografi nga aplikacioni iPhone që krijojmë. Në këtë aplikacion, përdoruesit do të jenë në gjendje të krijojnë një lojë Connect 4 e cila gjithashtu do të shfaqet në këtë tabelë lojërash. Kjo do të jetë një gjë
Kontrolloni modelin tuaj të modelit të trenit me televizorin tuaj në distancë!: 7 hapa (me fotografi)
Kontrolloni modelin tuaj të modelit të trenit me televizorin tuaj në distancë!: Në këtë udhëzues, unë do t'ju tregoj se si të bëni një sistem telekomande IR për një tren model. Atëherë do të jeni në gjendje të kontrolloni trenat tuaj ndërsa pushoni në shtratin tuaj. Pra, le të fillojmë
Hack për të parë të gjitha hapat e një udhëzues pa hyrë në
Hack për të parë të gjitha hapat e një udhëzuesi pa u regjistruar!: Këtu keni një hack të vogël që do t'ju kursejë minuta të panevojshme të regjistrimit. Kjo në thelb ju lejon të "Shikoni të gjitha hapat në një faqe" të çdo Instructable pa u regjistruar, dhe pa përdorur çdo softuer 'hacking'! Ju lutem mos e bëni këtë vetëm një truk të vogël