Satura rādītājs:

Android/iOS lietotne, lai piekļūtu jūsu OpenWrt maršrutētājam attālināti: 11 soļi
Android/iOS lietotne, lai piekļūtu jūsu OpenWrt maršrutētājam attālināti: 11 soļi

Video: Android/iOS lietotne, lai piekļūtu jūsu OpenWrt maršrutētājam attālināti: 11 soļi

Video: Android/iOS lietotne, lai piekļūtu jūsu OpenWrt maršrutētājam attālināti: 11 soļi
Video: How to Transfer contacts from Android to iPhone 2024, Jūnijs
Anonim
Android/iOS lietotne, lai attālināti piekļūtu jūsu OpenWrt maršrutētājam
Android/iOS lietotne, lai attālināti piekļūtu jūsu OpenWrt maršrutētājam
Android/iOS lietotne, lai attālināti piekļūtu jūsu OpenWrt maršrutētājam
Android/iOS lietotne, lai attālināti piekļūtu jūsu OpenWrt maršrutētājam

Nesen nopirku jaunu maršrutētāju (Xiaomi Mi Router 3G). Un, protams, šī jaunā, satriecošā aparatūra iedvesmoja mani sākt strādāt pie šī projekta;)

1. solis: Es pieņemu, ka jums jau ir OpenWrt…

Es pieņemu, ka jums jau ir OpenWrt…
Es pieņemu, ka jums jau ir OpenWrt…

Vispirms man bija jāinstalē OpenWrt … Galvenokārt es sekoju šai rokasgrāmatai (īpaši šim maršrutētāja modelim): https://dzone.com/articles/hacking-into-xiaomi-mi-… Strādājot pie tā, es atklāju šo satriecošo video: Openwrt instalēšana, WiFi etalons, draudzenes mirgošana. Oho, es tik smagi smējos!:)

Uzmanību! OpenWrt instalēšana var sabojāt maršrutētāju. Bet, kad tas ir pabeigts, tas atver pilnu jaudu un kontroli. Es neesmu pietiekami drosmīgs, lai šeit sniegtu jebkādus norādījumus, jo tie var būt atšķirīgi katram maršrutētāja modelim.

Bet, ja maršrutētājā jau ir OpenWrt, jūs varēsit sākt ar šo pamācību

BTW, dažas izstrādes plates tiek piegādātas kopā ar OpenWrt, piemēram, Onion Omega, VoCore, LinkIt Smart 7688 un citas. Šī apmācība arī izskaidro dažas pamatidejas, kas veido šādu lietotņu izveidi, lai jūs varētu viegli pielāgot to darbam ar Raspberry Pi un citiem.

Šim projektam es galvenokārt izmantošu iepriekš instalētu programmatūru (pieejama jebkurā maršrutētājā, kurā ir iespējota OpenWrt). Bet dažām papildu funkcijām man bija jāinstalē papildu paketes. Tas tiek darīts tikai ar dažiem klikšķiem, tāpēc es šeit ievietošu norādījumus.

Turklāt es pieņemu, ka jūs jau zināt:

  • Kā atvērt/izmantot SSH termināli savam OpenWrt maršrutētājam
  • Kā augšupielādēt/rediģēt failus maršrutētājā (izmantojiet FileZilla vai scp/sftp)
  • Kā strādāt ar Linux konsoli

2. darbība: programmatūra un rīki

Programmatūra un rīki
Programmatūra un rīki

Viedtālruņa pusē es izmantoju Blynk. Tas nodrošina iOS un Android lietotnes, lai kontrolētu jebkuru aparatūru. Jūs varat viegli izveidot skaistus grafiskos interfeisus visiem saviem projektiem, vienkārši velkot un nometot logrīkus tieši savā viedtālrunī. Blynk lielākoties tiek izmantots kopā ar Arduino, Raspberry Pi uc Bet kāpēc gan to nedarbināt pašā maršrutētājā?;)

Ierīces pusē es izmantošu Lua, lai skriptu nepieciešamo funkcionalitāti. Es varētu izmantot arī Python vai Node.js, bet diemžēl šīs iespējas ne vienmēr ir pieejamas resursu trūkuma dēļ dažos maršrutētājos. Vai C/C ++, bet ar to nav tik ērti strādāt (pārkompilēt katrai izmaiņai utt.) No otras puses, Lua ir iepriekš instalēta, to ir viegli lietot un iemācīties. To izmanto noklusējuma tīmekļa saskarne LuCI.

3. darbība: minimālas lietotnes izveide

Darba sākšana ar Blynk un Lua ir tikpat vienkārša kā:

  • Lejupielādējiet lietotni Blynk (no App Store, Google Play)
  • Izveidojiet jaunu projektu un iegūstiet autentifikācijas marķieri
  • Izpildiet OpenWrt instalēšanas instrukcijas Blynk Lua.

Izmantojiet SSH, lai piekļūtu maršrutētāja konsolei. Pēc noklusējuma piemēra palaišanas:

lua./examples/client.lua

Mums vajadzētu redzēt kaut ko līdzīgu šim:

Notiek savienojuma izveide…

SSL rokasspiediens… Gatavs.

Tas nozīmē, ka ir izveidots drošs, divvirzienu savienojums ar lietotni! YAY!

Tagad mēs varam viegli pagarināt sniegto piemēru, tāpēc tas rada kaut ko interesantu. Esmu izveidojis šī piemēra kopiju, lai to rediģētu:

cp./examples/client.lua./blynkmon.lua

4. darbība. Informācijas pievienošana: klientu skaits, WAN IP adrese, darbības laiks

Pamatideja ir periodiski iegūt informāciju no OS, vajadzības gadījumā veikt dažus vienkāršus aprēķinus un pēc tam nosūtīt rezultātu uz Blynk, lai tie tiktu parādīti.

Sistēmā Linux/OpenWrt mums ir vairāki veidi, kā iegūt sistēmas datus:

  • Palaidiet komandu un analizējiet izvadīto tekstu
  • Izpildiet komandu un skatieties, kā tas atgriežas
  • Izlasiet sistēmas failu, kas atrodas mapē/proc/un/sys/class/directory

Tagad es vēlos parādīt pievienoto ierīču skaitu.

Kad konsolē palaižu cat/proc/net/arp, tas izvada zināmo ierīču sarakstu, kā arī to MAC un IP adreses:

IP adrese HW tips Karodziņi HW address Mask Device

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

Mēs varam to parsēt tieši programmā Lua, taču bieži vien ir vieglāk izmantot specializētas utilītas. Operētājsistēmā Linux tie ir grep, head, tail, cut, wc, awk.

Lai iegūtu klientu skaitu no arp izvades, man ir jāfiltrē tabula (jānoņem nesaistīti vienumi) un jāskaita tabulas rindas, kā rezultātā rodas šāda komanda:

kaķis/proc/net/arp | grep br-lan | grep 0x2 | wc -l

Izmēģināsim:

root@maršrutētājs: ~/lua-blynk# cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l

1

Lieliski. Tagad mums ir ideja par to, kā mēs varam savākt visu nepieciešamo informāciju. Automatizēsim to. Lai padarītu mūsu kodu tīru un paplašināmu, izveidosim dažas palīgfunkcijas:

funkcija exec_out (cmd)

vietējais fails = io.popen (cmd), ja tas nav fails, tad atgrieziet nulles beigas vietējā izvade = fails: lasiet ('*viss') fails: aizveriet () drukāt ("Palaist:"..cmd.. " ->".. output) atgriezt izvades beigu funkciju "..path.." -> "..content) atgriezt satura beigas

Izmantojot šīs utilītas, mēs tagad varam ieviest faktiskās datu iegūšanas funkcijas:

funkcija getArpClients ()

atgriezt tonumber (exec_out ("cat/proc/net/arp | grep br -lan | grep 0x2 | wc -l")) beigu funkcija getUptime () atgriezt tonumber (exec_out ("cat/proc/uptime | awk '{print $ 1 } '")) beigu funkcija getWanIP () atgriežas exec_out (" ifconfig eth0.2 | grep' inet addr: '| cut -d: -f2 | awk' {print $ 1} '") end

Varat palaist šo apvalku komandu daļas, lai iegūtu dziļāku izpratni par to, kā tā darbojas, un pielāgotu to savām vajadzībām.

Vienkāršākais ir datu nosūtīšana uz lietotni Blynk. Noklusējuma piemērā jau ir iestatīts taimeris, kas palaiž kādu kodu ik pēc 5 sekundēm, tāpēc mēs to vienkārši izmantojam atkārtoti:

local tmr1 = Taimeris: jauns {intervāls = 5000, func = funkcija ()

blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) blynk: virtualWrite (12, getWanIP ()) beigas}

Lietotnē mēs pievienojam 3 etiķešu logrīkus un attiecīgi piešķiram tos virtuālajām tapām 10, 11, 12.

Lai gan tas darbojas, tas ir diezgan neefektīvs, jo WAN IP vai klientu skaits netiek atjaunināts tik bieži. Labosim to

WAN IP gadījumā mēs to pārvietojam uz pievienoto apstrādātāju. Tas tiks palaists katru reizi, kad maršrutētājs izveidos savienojumu ar Blynk Cloud. Tam vajadzētu būt pietiekamam:

blynk: ieslēgts ("savienots", funkcija ()

print ("Gatavs.") blynk: virtualWrite (12, getWanIP ()) beigas)

Uptime un Client Number mēs izveidojam atsevišķu taimeri ar 5 min. intervāls:

local tmr2 = Taimeris: jauns {intervāls = 5*60*1000, func = function ()

blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) beigas}

5. darbība: WiFi vadība: IESL/IZSL

WiFi vadība: IESL/IZSL
WiFi vadība: IESL/IZSL

Līdz šim mēs tikai saņēmām informāciju no ierīces. Mēģināsim to kontrolēt!

blynk: ieslēgts ("V20", funkcija (param)

ja param [1] == "1", tad os.execute ("wifi up") else os.execute ("wifi down") beigas)

Lietotnes pusē es tikko pievienoju pogas logrīku (režīms: slēdzis) un piešķīru to V20.

Tieši tā. Pārsteidzošs.

6. solis: Sistēmas statistikas diagramma

Sistēmas statistikas diagramma
Sistēmas statistikas diagramma
Sistēmas statistikas diagramma
Sistēmas statistikas diagramma

funkcija getCpuLoad ()

atgriezt tonumber (exec_out ("top -bn1 | grep 'CPU:' | head -n1 | awk '{print $ 2+$ 4}'")) beigu funkcija getRamUsage () atgriezt tonumber (exec_out ("bezmaksas | grep Mem | awk ' {print ($ 3- $ 7)/$ 2 * 100.0} '")) beigas

Mums arī jānosūta dati uz Blynk (atkal izmantosim tmr1):

local tmr1 = Taimeris: jauns {intervāls = 5000, func = funkcija ()

blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) beigas}

Lietotnes pusē pievienojiet logrīku SuperChart. Pievienojiet CPU, RAM datu plūsmas un piešķiriet V5, V6.

7. darbība. HDD vērpšanas statuss

Manam maršrutētājam ir pievienots ārējais HDD diskdzinis kā tīklam pievienota atmiņas ierīce. Lieta ir tāda, ka šis disks ir konfigurēts, lai sāktu griezties, kad kāds tam piekļūst, un apturētu darbību pēc taimauta.

Acīmredzot būtu forši zināt, cik reizes tas dienas laikā ieslēdzas. Tāpēc es pievienoju vēl vienu datu plūsmu savai sistēmas diagrammai.

Ir nedaudz grūtāk iegūt HDD diska statusu, bet es atradu veidu! Pirmkārt, instalējiet smartmontools no SSH konsoles:

opkg atjauninājums

opkg instalēt smartmontools

Pēc tam mūsu kodā mums jāizpilda īpaša komanda un jāpārbauda izejas kods:

funkcija exec_ret (cmd)

local exit = os.execute (cmd) print ("Run:"..cmd.. " -> exit:".. exit) atgriezties izejas beigu funkcija getHddSpinning () if exec_ret ("smartctl --nocheck = standby --info /dev/sda>/dev/null ") == 0, tad atgrieziet 1 cits atgrieziet 0 beigu beigas

Piezīme: mans cietais disks ir /dev /sda

8. darbība: tīkla darbības diagramma

Tīkla darbības diagramma
Tīkla darbības diagramma

Mēs izveidojam citu SuperChart logrīku (līdzīgu iepriekšējam), pievienojam TX un RX datu plūsmas un piešķiram V1 un V2. Piezīme. Es vēlos parādīt WAN porta statc, un mans WAN ports ir eth0.2

Palīga funkcijas:

funkcija getWanRxBytes ()

atgriezt tonumber (read_file ("/sys/class/net/eth0.2/statistics/rx_bytes")) beigu funkcija getWanTxBytes () atgriezt tonumber (read_file ("/sys/class/net/eth0.2/statistics/tx_bytes")) beigas

Pēc tam tam pašam tmr1 pievienojiet kādu kodu. Tas ir sarežģītāk, jo mums tikai jāaprēķina un jāparāda pārsūtīto/saņemto baitu atšķirības:

vietējais prevTx, prevRx

local tmr1 = Taimeris: new {interval = 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 tad blynk: virtualWrite (2, rx - prevRx) beigas prevTx = tx prevRx = rx blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) blynk: virtualWrite (7, getHddSpinning)) beigas}

9. darbība: paziņojumi

Paziņojumi
Paziņojumi

Es arī gribēju saņemt paziņojumu, kad mans maršrutētājs zaudē enerģiju vai interneta savienojumu. Šim nolūkam mums ir nepieciešams paziņojumu logrīks.

Logrīka iestatījumos iespējojiet “bezsaistes paziņojumu”. Nav nepieciešams kods. Bet mēs varam arī nosūtīt pielāgotus paziņojumus no sava koda.

10. darbība: automātiskā palaišana fonā

Pašlaik skripts ir jāizpilda manuāli, bet es vēlos, lai tas tiktu palaists fonā automātiski, kad maršrutētājs tiek ieslēgts.

Tas tiek darīts, izveidojot pakalpojumu. Izveidojiet failu /etc/init.d/blynkmon:

#!/bin/sh /etc/rc.common

START = 99 STOP = pidfile = "/var/run/blynkmon.pid" start () {if [-f $ pidfile]; tad atbalss "blynkmon jau darbojas" exit 0 fi cd /root /lua-blynk lua blynkmon.lua your-auth-token> /dev /null & echo $! > $ pidfile} stop () {ja [! -f $ pidfile]; tad atbalss "blynkmon nedarbojas" izeja 0 fi nogalināt -9 $ (cat $ pidfile) rm $ pidfile}

Piezīme: neaizmirstiet nomainīt autentifikācijas marķieri

Pēc tam iespējojiet blynkmon pakalpojumu:

pakalpojuma blynkmon iespējošana

11. solis. Secinājums un citas idejas

Secinājums un citas idejas
Secinājums un citas idejas

Jūs varat skenēt šo QR, lai iegūtu mana Blynk projekta klonu. Tam nepieciešami daži enerģijas punkti (4600), jo tas izmanto daudzus logrīkus!

Pilnu Lua kodu meklējiet šeit:

Pagaidām viss ir kārtībā, bet šeit ir dažas idejas, kuras es vēlētos pievienot tuvākajā nākotnē.

  • Pievienot komandu Reboot. Izvairieties no nejaušas noklikšķināšanas uz tā.
  • Pievienojiet termināļa logrīku, lai palaistu jebkuru Linux komandu.
  • Pievienojiet CPU temperatūras diagrammu.

    UPD: Diemžēl OpenWrt pašlaik trūkst draiveru manam maršrutētāja modelim. Bet tas ir pieejams daudziem citiem maršrutētājiem

  • Pievienojiet paziņojumu, kad konkrēta ierīce pievienojas/iziet no tīkla. Mums jau ir arp informācija, tagad pārbaudiet tikai MAC adresi.

Tādā veidā mēs varam uzraudzīt un kontrolēt 3D printerus, robotus, parastu personālo datoru/klēpjdatoru, Arduino/ESP8266/ESP32/RaspberryPi, viedās mājas ierīces un praktiski visu apkārt. Ļaujiet man zināt, vai jums ir citas interesantas idejas. Ko jūs domājat par to visu?

Ieteicams: