Sisukord:
- Samm: eeldan, et teil on juba OpenWrt …
- Samm: tarkvara ja tööriistad
- Samm: looge minimaalne rakendus
- Samm 4: Teabe lisamine: klientide arv, WAN -i IP -aadress, tööaeg
- Samm: WiFi juhtimine: sisse/välja
- 6. samm: süsteemistatistika diagramm
- Samm: kõvaketta ketramise olek
- 8. samm: võrgutegevuse diagramm
- 9. toiming: märguanded
- Samm: automaatne käivitamine taustal
- Samm 11: Kokkuvõte ja muud ideed
Video: Androidi/iOS -i rakendus teie OpenWrt -ruuteri kaugjuurdepääsuks: 11 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:48
Ostsin hiljuti uue ruuteri (Xiaomi Mi Router 3G). Ja loomulikult inspireeris see uus ja vinge riistvara mind selle projektiga tegelema;)
Samm: eeldan, et teil on juba OpenWrt …
Pidin kõigepealt installima OpenWrt … Enamasti järgisin seda juhendit (selle ruuterimudeli jaoks spetsiifiline): https://dzone.com/articles/hacking-into-xiaomi-mi-… Sellega töötades leidsin selle vinge video: Openwrt -i installimine, WiFi võrdlusalus, tüdruksõbra vilkumine. Vau, ma naersin nii kõvasti!:)
Tähelepanu! OpenWrti installimine võib teie ruuteri katkestada. Kuid pärast valmimist avab see täieliku võimsuse ja kontrolli. Ma ei julge siinkohal mingeid juhiseid esitada, kuna need võivad iga ruuterimudeli puhul olla erinevad.
Aga kui teil on ruuteris juba OpenWrt, saate selle õpetusega alustada
BTW, mõned arendusplaadid on varustatud OpenWrtiga, näiteks Onion Omega, VoCore, LinkIt Smart 7688 ja teised. See õpetus selgitab ka mõningaid põhiideid selliste rakenduste loomise taga, nii et saate seda hõlpsalt kohandada Raspberry Pi ja muude sarnastega töötamiseks.
Selle projekti jaoks kasutan enamasti eelinstallitud tarkvara (saadaval igal OpenWrt-toega ruuteril). Kuid mõne täiustatud funktsiooni jaoks pidin installima lisapakette. Seda tehakse vaid mõne hiireklõpsuga, seega lisan juhised siia.
Lisaks eeldan, et teate juba:
- SSH -terminali avamine/kasutamine OpenWrt -ruuteri jaoks
- Kuidas ruuterisse faile üles laadida/muuta (kasutage FileZilla või scp/sftp)
- Kuidas töötada Linuxi konsooliga
Samm: tarkvara ja tööriistad
Nutitelefoni poolel kasutan ma Blynkit. See pakub iOS- ja Android -rakendusi mis tahes riistvara juhtimiseks. Saate hõlpsasti luua ilusaid graafilisi liideseid kõigi oma projektide jaoks, lihtsalt lohistades vidinaid otse nutitelefoni. Blynkit kasutatakse enamasti koos Arduino, Raspberry Pi jt -ga. Aga miks mitte käivitada see ruuteril endal?;)
Seadme poolel kasutan vajalike funktsioonide skriptimiseks Lua -d. Võiksin kasutada ka Pythoni või Node.js -i, kuid kahjuks pole need valikud alati saadaval, kuna mõnedel ruuteritel pole ressursse. Või C/C ++, kuid sellega pole nii mugav töötada (iga muudatuse jaoks uuesti kompileerida jne.) Teisest küljest on Lua eelinstallitud, seda on lihtne kasutada ja õppida. Seda kasutab vaikimisi veebiliides LuCI.
Samm: looge minimaalne rakendus
Blynk ja Luaga alustamine on sama lihtne kui:
- Laadige alla rakendus Blynk (App Store'ist, Google Playst)
- Looge uus projekt ja hankige autentimisluba
- Järgige OpenWrt -i jaoks Blynk Lua installijuhiseid.
Ruuteri konsoolile juurdepääsemiseks kasutage SSH -d. Pärast vaikenäite käivitamist tehke järgmist.
lua./examples/client.lua
Me peaksime nägema midagi sellist:
Ühendamine…
SSL käepigistus… Valmis.
Mis tähendab, et turvaline, kahesuunaline ühendus rakendusega on loodud! YAY!
Nüüd saame esitatud näidet hõlpsalt laiendada, nii et see teeb midagi huvitavat. Olen selle näite muutmiseks selle koopia loonud:
cp./näited/klient.lua./blynkmon.lua
Samm 4: Teabe lisamine: klientide arv, WAN -i IP -aadress, tööaeg
Põhiidee on saada operatsioonisüsteemist teavet perioodiliselt, vajadusel teha mõned lihtsad arvutused ja seejärel saata tulemus kuvamiseks Blynkile.
Linuxis/OpenWrtis on meil süsteemiandmete hankimiseks mitu võimalust:
- Käivitage käsk ja sõeluge väljastatav tekst
- Käivitage käsk ja vaadake väljumiskoodi, mida see tagastab
- Lugege süsteemifaili, mis asub kataloogides/proc/ja/sys/class/
Nüüd tahan kuvada ühendatud seadmete arvu.
Kui käivitan konsoolil kataloogi cat/proc/net/arp, väljastab see teadaolevate seadmete loendi koos nende MAC- ja IP -aadressidega:
IP -aadress HW -tüüp Lipud HW -aadress Maskiseade
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
Saame selle sõeluda otse Luas, kuid sageli on lihtsam kasutada spetsiaalseid utiliite. Linuxis on need grep, head, tail, cut, wc, awk.
Arp väljundist klientide arvu saamiseks pean tabeli filtreerima (eemaldama mitteseotud üksused) ja loendama tabeli read, mille tulemuseks on järgmine käsk:
kass/proc/net/arp | grep br-lan | grep 0x2 | wc -l
Proovime seda:
root@ruuter: ~/lua-blynk# cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l
1
Suurepärane. Nüüd saame idee, kuidas kogu vajalikku teavet koguda. Automatiseerime selle. Et muuta meie kood puhtaks ja laiendatavaks, loome mõned abifunktsioonid:
funktsioon exec_out (cmd)
local file = io.popen (cmd) if not file then return nul end local output = file: read ('*all') file: close () print ("Käivita:"..cmd.. " ->".. väljund) tagastama väljundi lõppfunktsioon read_file (tee) kohalik fail = io.open (tee, "rb") "..path.." -> "..content) tagastatakse sisu lõpp
Neid utiliite kasutades saame nüüd rakendada tegelikke andmete hankimise funktsioone:
funktsioon getArpClients ()
return tonumber (exec_out ("cat/proc/net/arp | grep br -lan | grep 0x2 | wc -l")) lõppfunktsioon getUptime () return tonumber (exec_out ("cat/proc/uptime | awk '{print $ 1 } '")) lõppfunktsioon getWanIP () tagastab exec_out (" ifconfig eth0.2 | grep' inet addr: '| cut -d: -f2 | awk' {print $ 1} '") end
Saate käivitada nende kestade käskude osi, et paremini mõista selle toimimist ja kohandada seda vastavalt teie vajadustele.
Lihtsaim osa on andmete saatmine rakendusse Blynk. Vaikimisi näites on juba seadistatud taimer, mis käivitab koodi iga 5 sekundi tagant, nii et me lihtsalt kasutame seda uuesti:
local tmr1 = Taimer: uus {intervall = 5000, func = function ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) blynk: virtualWrite (12, getWanIP ()) lõpp}
Rakenduses lisame 3 siltide vidinat ja määrame need vastavalt Virtual Pins 10, 11, 12.
Kuigi see töötab, on see üsna ebaefektiivne, kuna WAN -i IP -d või klientide arvu ei värskendata nii sageli. Parandame selle
WAN IP puhul teisaldame selle ühendatud käitlejale. Seda käivitatakse iga kord, kui ruuter loob ühenduse Blynk Cloudiga. Sellest peaks piisama:
blynk: on ("ühendatud", function ()
print ("Valmis.") blynk: virtualWrite (12, getWanIP ()) lõpp)
Uptime ja Client Number jaoks loome eraldi 5 -minutilise taimeri. intervall:
local tmr2 = Taimer: uus {intervall = 5*60*1000, func = function ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) lõpp}
Samm: WiFi juhtimine: sisse/välja
Siiani saime seadmest ainult teavet. Proovime seda juhtida!
blynk: on ("V20", funktsioon (param)
kui param [1] == "1", siis os.execute ("wifi üles") else os.execute ("wifi alla") lõpp)
Rakenduse poolel lisasin just nupu vidina (režiim: lüliti) ja määrasin selle versioonile V20.
See on kõik. Hämmastav.
6. samm: süsteemistatistika diagramm
funktsioon getCpuLoad ()
return tonumber (exec_out ("top -bn1 | grep 'CPU:' | head -n1 | awk '{print $ 2+$ 4}'")) lõppfunktsioon getRamUsage () tagastab tonumber (exec_out ("tasuta | grep Mem | awk ' {print ($ 3- $ 7)/$ 2 * 100.0} '")) lõpp
Samuti peame andmed saatma Blynkile (kasutame uuesti tmr1):
local tmr1 = Taimer: uus {intervall = 5000, func = function ()
blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) lõpp}
Lisage rakenduse poolel vidin SuperChart. Lisage protsessori, RAM -i andmevooge ja määrake V5, V6.
Samm: kõvaketta ketramise olek
Minu ruuteril on võrguga ühendatud mäluseadmena ühendatud väline kõvaketas. Asi on selles, et see draiv on konfigureeritud alustama pöörlemist, kui keegi sellele juurde pääseb, ja peatuma pärast aegumist.
Ilmselgelt oleks lahe teada, mitu korda see päeva jooksul sisse lülitub. Nii lisasin oma süsteemitabelisse veel ühe andmevoo.
HDD -draivi oleku hankimine on natuke keerulisem, kuid leidsin viisi! Kõigepealt installige SSH konsoolilt smartmontools:
opkg värskendus
opkg install smartmontools
Seejärel peame oma koodis käivitama spetsiaalse käsu ja kontrollima väljumiskoodi:
funktsioon exec_ret (cmd)
kohalik väljumine = os.execute (cmd) print ("Käivita:"..cmd.. " -> väljumine:".. väljumine) tagasta väljumise lõppfunktsioon getHddSpinning () if exec_ret ("smartctl --nocheck = standby --info /dev/sda>/dev/null ") == 0, siis tagastage 1 muu tagastage 0 lõpp
Märkus: minu kõvaketas on /dev /sda
8. samm: võrgutegevuse diagramm
Loome teise SuperCharti vidina (sarnane eelmisele), lisame TX- ja RX -andmevooge ning määrame V1 ja V2. Märkus. Soovin kuvada WAN -pordi statistikat ja minu WAN -port on eth0.2
Abistaja funktsioonid:
funktsioon getWanRxBytes ()
return tonumber (read_file ("/sys/class/net/eth0.2/statistics/rx_bytes")) lõppfunktsioon getWanTxBytes () tagastab tonumber (read_file ("/sys/class/net/eth0.2/statistics/tx_bytes")) lõpp
Seejärel lisage samale tmr1 -le mõni kood. See on keerulisem, kuna meil on vaja ainult arvutada ja kuvada edastatud/vastuvõetud baitide erinevus:
kohalik prevTx, prevRx
local tmr1 = Taimer: uus {intervall = 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 siis blynk: virtualWrite (2, rx - prevRx) lõpp prevTx = tx prevRx = rx blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) blynk: virtualWrite (7, getHddSpinning)) lõpp}
9. toiming: märguanded
Samuti soovisin saada märguannet, kui minu ruuter kaotab toite või Interneti -ühenduse. Selleks vajame teavitusvidinat.
Vidina seadetes lubage "võrguühenduseta märguanne". Koodi pole vaja. Kuid saame oma koodist saata ka kohandatud teateid.
Samm: automaatne käivitamine taustal
Praegu tuleb skript käsitsi käivitada, kuid ma tahan panna selle automaatselt taustal töötama, kui ruuter on sisse lülitatud.
Seda tehakse teenuse loomisega. Looge fail /etc/init.d/blynkmon:
#!/bin/sh /etc/rc.common
START = 99 STOP = pidfile = "/var/run/blynkmon.pid" start () {if [-f $ pidfile]; siis kaja "blynkmon juba töötab" exit 0 fi cd /root /lua-blynk lua blynkmon.lua your-auth-token> /dev /null & echo $! > $ pidfile} stop () {kui [! -f $ pidfile]; siis kaja "blynkmon ei tööta" exit 0 fi kill -9 $ (cat $ pidfile) rm $ pidfile}
Märkus: ärge unustage oma autentimismärki asendada
Seejärel lubage blynkmoni teenus:
teenuse blynkmon lubamine
Samm 11: Kokkuvõte ja muud ideed
Saate selle QR -koodi skannida, et saada minu Blynk -projekti kloon. See nõuab mõningaid energiapunkte (4600), kuna see kasutab palju vidinaid!
Täieliku Lua koodi leiate siit:
Siiani on kõik hästi, kuid siin on mõned ideed, mida tahaksin lähitulevikus lisada.
- Lisa käsk Reboot. Vältige sellel juhuslikku klõpsamist.
- Lisage terminali vidin mis tahes linuxi käsu käivitamiseks.
-
Lisage protsessori temperatuuri diagramm.
UPD: Kahjuks puuduvad OpenWrtil praegu mõned ruuterimudeli draiverid. Kuid see on saadaval paljude teiste ruuterite jaoks
- Lisage teatis, kui konkreetne seade võrguga liitub/sealt lahkub. Meil on juba arp -teave, nüüd kontrollige ainult MAC -aadressi.
Nii saame jälgida ja juhtida 3D -printereid, roboteid, tavalist personaalarvutit/sülearvutit, Arduino/ESP8266/ESP32/RaspberryPi asju, nutikodu seadmeid ja praktiliselt kõike ümbritsevat. Andke mulle teada, kui teil on muid huvitavaid ideid. Mida te sellest kõigest arvate?
Soovitan:
Androidi rakendus 1. osa: pritsmeekraan fragmentide abil/Kotlin: 5 sammu
Androidi rakendus 1. osa: pritsmeekraan fragmentide abil/Kotlin: Tere jälle, tõenäoliselt on teil mõni " tasuta " COVID19 tõttu kodus olemise aega ja saate tagasi vaadata teemasid, mida varem õppida tahtsite. Androidi rakenduste arendamine on minu jaoks kindlasti üks neist ja otsustasin paar nädalat tagasi anda
Käivitage APK Blynk või muu Androidi rakendus HMI -na Raspberry Pi -l: 7 sammu
Käivitage APK Blynk või muu Androidi rakendus HMI -na Raspberry Pi -l: Tere tegijad! See on minu esimene juhendatav … See on vaarika algaja käeulatuses. Ma veetsin palju aega õigete kombinatsioonide leidmiseks hea töökindluse ja kiiruse jaoks kasutuselevõtust. Olles leidnud vähe teavet selle rakendamiseks
Nutikas kodu Arduino MKR1000 ja M.I.T. Androidi rakendus: 4 sammu
Nutikas kodu Arduino MKR1000 ja M.I.T. Androidi rakendus: selles õpetuses kirjeldan, kuidas oma nutikat kodu vaid mõne komponendiga täiustada. Selle nutika kodu disaini süda on rakendusega juhitav Arduino MKR1000 tahvel, mis on loodud M.I.T. (Massachusettsi Instituut
AmbiBox IOS kaugjuhtimispuldi rakendus: 5 sammu
AmbiBox IOS kaugjuhtimispult: selle iOS -i rakendusega saate oma AmbiBoxi juhtida oma iPhone'ist või iPadist. Ma räägin rakendusest ja sellest, kuidas see AmbiBoxi serveriga suhtleb. Kui soovite teada, kuidas AmbiBoxi ja LED -ribasid installida, on seal mitmeid õpetusi
IOT pulsikell (ESP8266 ja Androidi rakendus): 5 sammu
IOT pulsikell (ESP8266 ja Androidi rakendus): oma viimase aasta projekti raames tahtsin kavandada seadme, mis jälgiks teie pulssi, salvestaks teie andmed serverisse ja teavitaks teid teatega, kui teie pulss on ebanormaalne. Selle projekti idee tekkis siis, kui proovisin ehitada