Sisukord:

Androidi/iOS -i rakendus teie OpenWrt -ruuteri kaugjuurdepääsuks: 11 sammu
Androidi/iOS -i rakendus teie OpenWrt -ruuteri kaugjuurdepääsuks: 11 sammu

Video: Androidi/iOS -i rakendus teie OpenWrt -ruuteri kaugjuurdepääsuks: 11 sammu

Video: Androidi/iOS -i rakendus teie OpenWrt -ruuteri kaugjuurdepääsuks: 11 sammu
Video: Enabling printing from a smartphone (iOS) - 1/2 (GM2000 series) 2024, Juuni
Anonim
Androidi/iOS -i rakendus teie OpenWrt -ruuteri kaugjuurdepääsuks
Androidi/iOS -i rakendus teie OpenWrt -ruuteri kaugjuurdepääsuks
Androidi/iOS -i rakendus teie OpenWrt -ruuteri kaugjuurdepääsuks
Androidi/iOS -i rakendus teie OpenWrt -ruuteri kaugjuurdepääsuks

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 …

Eeldan, et teil on juba OpenWrt …
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

Tarkvara ja tööriistad
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

WiFi juhtimine: ON/OFF
WiFi juhtimine: ON/OFF

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

Süsteemistatistika diagramm
Süsteemistatistika diagramm
Süsteemistatistika diagramm
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

Võrgutegevuse diagramm
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

Märguanded
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

Kokkuvõte ja muud ideed
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: