Kazalo:
- 1. korak: Predvidevam, da že imate OpenWrt…
- Korak: Programska oprema in orodja
- 3. korak: Ustvarite minimalno aplikacijo
- 4. korak: Dodajte nekaj informacij: Število strank, naslov IP WAN, čas delovanja
- 5. korak: Nadzor WiFi: VKLOP/IZKLOP
- 6. korak: Tabela sistemske statistike
- 7. korak: stanje vrtenja trdega diska
- 8. korak: Tabela omrežne dejavnosti
- 9. korak: Obvestila
- 10. korak: samodejni zagon v ozadju
- 11. korak: Zaključek in nadaljnje ideje
Video: Aplikacija Android/iOS za oddaljeni dostop do usmerjevalnika OpenWrt: 11 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:05
Pred kratkim sem kupil nov usmerjevalnik (Xiaomi Mi Router 3G). In seveda, ta nov, super kos strojne opreme me je navdihnil, da sem začel delati na tem projektu;)
1. korak: Predvidevam, da že imate OpenWrt…
Najprej sem moral namestiti OpenWrt … Večinoma sem sledil temu priročniku (posebej za ta model usmerjevalnika): https://dzone.com/articles/hacking-into-xiaomi-mi-… Med delom na tem sem našel ta super video: Odprta namestitev, merilo WiFi, utripanje dekleta. Kako sem se smejal!:)
Pozor! Namestitev programa OpenWrt lahko usmeri vaš usmerjevalnik. Ko pa konča, odklene polno moč in nadzor. Nisem dovolj pogumen, da bi tukaj dal navodila, saj so lahko za vsak model usmerjevalnika drugačna.
Če pa na usmerjevalniku že imate OpenWrt, boste s to vadnico lahko začeli pravočasno
BTW, nekatere razvojne plošče so opremljene z OpenWrt, kot so Onion Omega, VoCore, LinkIt Smart 7688 in druge. Ta vadnica pojasnjuje tudi nekaj osnovnih idej za ustvarjanje takšnih aplikacij, tako da jih lahko preprosto prilagodite za delo z Raspberry Pi in podobnimi.
Za ta projekt bom večinoma uporabljal vnaprej nameščeno programsko opremo (na voljo na katerem koli usmerjevalniku, ki podpira OpenWrt). Toda za nekatere napredne funkcije sem moral namestiti dodatne pakete. To se naredi v nekaj klikih, zato bom tukaj vključil navodila.
Predvidevam tudi, da že veste:
- Kako odpreti/uporabiti terminal SSH na usmerjevalniku OpenWrt
- Kako naložiti/urediti datoteke na usmerjevalniku (uporabite FileZilla ali scp/sftp)
- Kako delati s konzolo Linux
Korak: Programska oprema in orodja
Na strani pametnega telefona uporabljam Blynk. Ponuja aplikacije za iOS in Android za nadzor katere koli strojne opreme. Lepe grafične vmesnike za vse svoje projekte lahko preprosto sestavite tako, da preprosto povlečete in spustite pripomočke neposredno na pametnem telefonu. Blynk se večinoma uporablja z Arduinom, Raspberry Pi itd. Toda zakaj ga ne bi zagnali na samem usmerjevalniku?;)
Na strani naprave bom uporabil Lua za skriptiranje potrebne funkcionalnosti. Lahko bi uporabil tudi Python ali Node.js, vendar na žalost te možnosti zaradi pomanjkanja virov na nekaterih usmerjevalnikih niso vedno na voljo. Ali pa C/C ++, vendar ni tako priročno za delo (ponovno sestavljanje za vsako spremembo itd.) Po drugi strani pa je Lua vnaprej nameščen, enostaven za uporabo in učenje. Uporablja ga privzeti spletni vmesnik LuCI.
3. korak: Ustvarite minimalno aplikacijo
Začetek uporabe Blynk in Lua je preprost:
- Prenesite aplikacijo Blynk (iz App Store, Google Play)
- Ustvarite nov projekt in pridobite žeton za preverjanje pristnosti
- Sledite navodilom za namestitev programa Blynk Lua za OpenWrt.
Za dostop do konzole usmerjevalnika uporabite SSH. Po zagonu privzetega primera:
lua./examples/client.lua
Videti bi morali nekaj takega:
Povezovanje…
SSL rokovanje … Pripravljeno.
Kar pomeni, da je vzpostavljena varna, dvosmerna povezava z aplikacijo!
Predloženi primer lahko preprosto razširimo, tako da naredi nekaj zanimivega. Ustvaril sem kopijo tega primera, da ga uredim:
cp./examples/client.lua./blynkmon.lua
4. korak: Dodajte nekaj informacij: Število strank, naslov IP WAN, čas delovanja
Osnovna ideja je, da podatke iz operacijskega sistema občasno dobimo, po potrebi izvedemo nekaj preprostih izračunov in nato rezultat pošljemo Blynku za prikaz.
V sistemu Linux/OpenWrt imamo sistemske podatke za pridobivanje več podatkov:
- Zaženite ukaz in razčlenite besedilo, ki ga prikaže
- Zaženite ukaz in si oglejte izhodno kodo, ki jo vrne
- Preberite sistemsko datoteko, ki se nahaja v imenikih/proc/in/sys/class/
Zdaj želim prikazati število povezanih naprav.
Ko na konzoli zaženem cat/proc/net/arp, izpiše seznam znanih naprav skupaj z njihovimi naslovi MAC in IP:
Naslov IP Vrsta HW Zastavice Naslov HW Maska Naprava
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
Lahko ga razčlenimo neposredno v Lua, vendar je pogosto lažje uporabljati specializirane pripomočke. V Linuxu so to grep, head, tail, cut, wc, awk.
Če želim pridobiti število strank iz izhoda arp, moram filtrirati tabelo (odstraniti nepovezane elemente) in prešteti vrstice tabele, kar ima za posledico naslednji ukaz:
cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l
Poskusimo:
root@usmerjevalnik: ~/lua-blynk# cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l
1
Super. Zdaj imamo idejo, kako lahko zberemo vse zahtevane podatke. Naj bo naša koda čista in razširljiva, ustvarimo nekaj pomožnih funkcij:
funkcija exec_out (cmd)
lokalna datoteka = io.popen (cmd) če ni datoteka, potem vrni ničelni lokalni izhod = datoteka: branje ('*vse') datoteka: close () print ("Zaženi:"..cmd.. " ->".. output) vrne izhodno končno funkcijo read_file (pot) lokalno datoteko = io.open (pot, "rb") če ni datoteka, potem vrni ničelno lokalno vsebino = datoteka: preberi "*a" datoteka: close () print ("Preberi: "..path.." -> "..content) vrne vsebino konec
S temi pripomočki lahko zdaj implementiramo dejanske funkcije pridobivanja podatkov:
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 () vrnitev exec_out (" ifconfig eth0.2 | grep' inet addr: '| cut -d: -f2 | awk' {print $ 1} '") end
Lahko zaženete dele teh ukazov lupine, da bolje razumete, kako deluje, in ga prilagodite svojim potrebam.
Najlažji del je pošiljanje podatkov v aplikacijo Blynk. Privzeti primer že nastavlja časovnik, ki vsakih 5 sekund zažene nekaj kode, zato ga preprosto ponovno uporabimo:
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 ()) konec}
V aplikaciji dodamo 3 pripomočke za oznake in jih ustrezno dodelimo navideznim zatičem 10, 11, 12.
Čeprav to deluje, je precej neučinkovito, saj se IP ali število odjemalcev WAN ne posodabljata tako pogosto. Odpravimo to
Za WAN IP ga premaknemo v povezani upravljavec. Izvajal se bo vsakič, ko usmerjevalnik vzpostavi povezavo z Blynk Cloud. To bi moralo zadostovati:
blynk: on ("povezan", funkcija ()
print ("Pripravljeno.") blynk: virtualWrite (12, getWanIP ()) konec)
Za čas delovanja in število strank ustvarimo ločen časomer s 5 minutami. 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}
5. korak: Nadzor WiFi: VKLOP/IZKLOP
Doslej smo od naprave dobivali le nekaj podatkov. Poskusimo to nadzorovati!
blynk: on ("V20", funkcija (param)
če je param [1] == "1", potem os.execute ("wifi up") drugače os.execute ("wifi down") end end)
Na strani aplikacije sem dodal pripomoček za gumbe (način: stikalo) in ga dodelil V20.
To je to. Neverjetno.
6. korak: Tabela sistemske statistike
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} '")) konec
Podatke moramo poslati tudi Blynku (uporabimo spet tmr1):
local tmr1 = Timer: new {interval = 5000, func = function ()
blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) konec}
Na strani aplikacije dodajte gradnik SuperChart. Dodajte podatkovne tokove CPU -ja, RAM -a in jih dodelite V5, V6.
7. korak: stanje vrtenja trdega diska
Moj usmerjevalnik ima zunanji pogon trdega diska, ki je povezan kot naprava za shranjevanje v omrežju. Dejstvo je, da je ta pogon konfiguriran tako, da se začne vrteti, ko nekdo dostopa do njega, in da se prekine po izteku časovne omejitve.
Očitno bi bilo kul vedeti, kolikokrat se vklopi čez dan. Zato sem v svoj sistemski grafikon dodal še en tok podatkov.
Malo težje je pridobiti status pogona HDD, vendar sem našel način! Najprej namestite smartmontools s konzole SSH:
posodobitev opkg
opkg namestite smartmontools
Nato moramo v naši kodi zagnati poseben ukaz in preveriti izhodno kodo:
funkcija exec_ret (cmd)
local exit = os.execute (cmd) print ("Zaženi:"..cmd.. " -> exit:".. exit) vrni funkcijo konca izhoda getHddSpinning () če exec_ret ("smartctl --nocheck = standby --info /dev/sda>/dev/null ") == 0 nato vrnite 1 else vrnite 0 end end
Opomba: moj trdi disk je /dev /sda
8. korak: Tabela omrežne dejavnosti
Ustvarimo še en gradnik SuperChart (podoben prejšnjemu), dodamo podatkovne tokove TX in RX ter dodelimo V1 in V2. Opomba: Želim prikazati statc vrat WAN in moja vrata WAN so eth0.2
Pomožne funkcije:
funkcija 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")) konec
Nato v isti tmr1 dodajte nekaj kode. To je bolj zapleteno, saj moramo le izračunati in prikazati razliko v prenesenih/prejetih bajtih:
lokalni prevTx, prevRx
local tmr1 = Timer: new {interval = 5000, func = function () local tx = getWanTxBytes () local rx = getWanRxBytes () če prevTx in prevTx ~ = tx potem blynk: virtualWrite (1, tx - prevTx) konec če prevRx in prevRx ~ = rx nato blynk: virtualWrite (2, rx - prevRx) konec prevTx = tx prevRx = rx blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) blynk: virtualWrite (7, getHddSpinning (7, getHddSpinning)) konec}
9. korak: Obvestila
Prav tako sem želel biti obveščen, ko moj usmerjevalnik izgubi moč ali internetno povezavo. Za to potrebujemo pripomoček za obvestila.
V nastavitvah pripomočka omogočite »obvestilo brez povezave«. Koda ni potrebna. Lahko pa pošljemo tudi obvestila po meri iz naše kode.
10. korak: samodejni zagon v ozadju
Za zdaj je treba skript izvesti ročno, vendar želim, da se samodejno izvaja v ozadju, ko se usmerjevalnik vklopi.
To se naredi z ustvarjanjem storitve. Ustvarite datoteko /etc/init.d/blynkmon:
#!/bin/sh /etc/rc.common
START = 99 STOP = pidfile = "/var/run/blynkmon.pid" start () {if [-f $ pidfile]; nato odmevi "blynkmon že teče" exit 0 fi cd /root /lua-blynk lua blynkmon.lua your-auth-token> /dev /null & echo $! > $ pidfile} stop () {če [! -f $ pidfile]; nato odmev "blynkmon ne teče" exit 0 fi kill -9 $ (cat $ pidfile) rm $ pidfile}
Opomba: ne pozabite zamenjati žetona-auth-token
Nato omogočite storitev blynkmon:
storitev blynkmon omogoči
11. korak: Zaključek in nadaljnje ideje
Skenirate lahko ta QR, da dobite klon mojega projekta Blynk. Potrebuje nekaj energijskih točk (4600), saj uporablja veliko pripomočkov!
Popolno kodo Lua najdete tukaj:
Zaenkrat je vse v redu, vendar je nekaj idej, ki bi jih rad dodal v bližnji prihodnosti.
- Dodajte ukaz Reboot. Preprečite nenamerno klikanje.
- Dodajte pripomoček Terminal za zagon katerega koli ukaza Linux.
-
Dodajte grafikon temperature CPE -ja.
UPD: Na žalost OpenWrt trenutno nima nekaj gonilnikov za moj model usmerjevalnika. Na voljo pa je za številne druge usmerjevalnike
- Obvestilo dodajte, ko se določena naprava pridruži/zapusti omrežje. Podatke o arp že imamo, zdaj preverite samo naslov MAC.
Na ta način lahko spremljamo in nadzorujemo 3D -tiskalnike, robote, navadni računalnik/prenosni računalnik, Arduino/ESP8266/ESP32/RaspberryPi, naprave Smart Home in skoraj vse okoli. Sporočite mi, če imate še kakšno zanimivo idejo. Kaj menite o vsem tem?
Priporočena:
Dostop do mobilnega mobilnega telefona Android Remotemente Telnet .: 9 korakov
Dostop do mobilnega mobilnega telefona Android Remotemente Telnet .: ¡Bienvenido! En la actualidad, es muy fácil tener dostop do interneta. Piénsalo bien, el internet is una red global de computadoras que transmiten datos entre sí; así que sólo es necesario contar con las herramientas y técnicas correctas para poder ac
Kako spremeniti svoj Raspberry Pi v vrata za oddaljeni dostop: 6 korakov
Kako spremeniti svoj Raspberry Pi v vrata za oddaljeni dostop: Hej fantje! Glede na nedavne dogodke je naša ekipa na remote.it trdo delala na idejah, kako narediti delo na daljavo neboleče in dostopno. Pripravili smo sliko SD kartice remote.itPi, ki je kartica SD, ki jo lahko vstavite v novo
Ponovna namestitev starega usmerjevalnika za vaš projekt Arduino: 3 koraki
Ponovna namestitev starega usmerjevalnika za vaš projekt Arduino: Ta projekt je nastal zaradi potrebe po namestitvi mojega projekta avtomatizacije doma. Odločil sem se, da bom ohišje preuredil iz starega napačnega usmerjevalnika PlusNet (usmerjevalnik Thomson TG585). ohišje je bilo :: Nizkoprofilna stenska viseča škatla Enostavno odstranite posodo s pokrovom
Ponovni zagon usmerjevalnika Raspberry Pi: 3 koraki
Ponovni zagon usmerjevalnika Raspberry Pi: Ste kdaj opazili, da niste več povezani z internetom? Ali je frustrirajuće, če vstanem zjutraj in moram znova zagnati usmerjevalnik, da dobim internet nazaj? No, to se mi je zgodilo pogosteje, kot mi je mar, da se to zgodi. Prej
Oddaljeni dostop SSH do Raspberry Pi 2: 5 korakov
Oddaljeni SSH dostop do Raspberry Pi 2: Ste kdaj želeli uvesti Raspberry Pi " na terenu " in še vedno lahko dostopate do njega? Tukaj je preprost način, da omogočite oddaljeni dostop SSH do vašega Raspberry Pi 2 (in drugih modelov). Čeprav obstajajo rešitve, ki vključujejo VPN ali konfiguriranje por