Satura rādītājs:
- 1. solis: Es pieņemu, ka jums jau ir OpenWrt…
- 2. darbība: programmatūra un rīki
- 3. darbība: minimālas lietotnes izveide
- 4. darbība. Informācijas pievienošana: klientu skaits, WAN IP adrese, darbības laiks
- 5. darbība: WiFi vadība: IESL/IZSL
- 6. solis: Sistēmas statistikas diagramma
- 7. darbība. HDD vērpšanas statuss
- 8. darbība: tīkla darbības diagramma
- 9. darbība: paziņojumi
- 10. darbība: automātiskā palaišana fonā
- 11. solis. Secinājums un citas idejas
Video: Android/iOS lietotne, lai piekļūtu jūsu OpenWrt maršrutētājam attālināti: 11 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:56
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…
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
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
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
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
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
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
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:
AmbiBox IOS tālvadības lietotne: 5 soļi
AmbiBox IOS tālvadības lietotne: ar šo iOS lietotni jūs varat kontrolēt savu AmbiBox no sava iPhone vai iPad. Es runāšu par lietotni un to, kā tā sazinās ar AmbiBox serveri, ja vēlaties uzzināt, kā instalēt AmbiBox un LED sloksnes, šeit ir vairākas apmācības
Bluetooth LED zīmēšanas dēlis un IOS lietotne: 9 soļi (ar attēliem)
Bluetooth LED zīmēšanas dēlis un lietotne IOS: šajā apmācībā jūs varēsit izveidot Bluetooth LED tāfeli, kas var zīmēt attēlus no mūsu izveidotās lietotnes iPhone. Šajā lietotnē lietotāji varēs izveidot spēli Connect 4, kas tiks parādīta arī šajā spēļu panelī. Šis būs č
Vienkārša IOS lietotne BLE moduļiem: 4 soļi
Vienkārša IOS lietotne BLE moduļiem: šajā pamācībā aprakstīts, kā jūs varat izveidot iOS lietotni ar ļoti pamatfunkcijām. Šī pamācība neizies visu iOS BLE lietotnes izveides procesu. Tas sniegs tikai augsta līmeņa pārskatu par dažiem svarīgiem elementiem ar
Parallax Basic Stamp II izmantošana, lai attālināti zvana durvju zvanu: 4 soļi (ar attēliem)
Parallax Basic Stamp II izmantošana, lai attālināti zvanītu durvīm: problēma? Suns, kurš pārāk satraukti, kad zvana durvju zvans. Risinājums? Zvaniet pie durvīm nejaušā laikā, kad neviena nav, un neviens uz to neatbild, lai sunim radītu pretnosacījumus - lai izjauktu saikni, ka zvana durvju zvans
Kā panākt, lai jūsu iPod Touch (vai iPhone, ja U patiešām to sajauca), lai pārtrauktu avāriju no atmiņas trūkuma: 3 soļi
Kā panākt, lai jūsu iPod Touch (vai iPhone, ja U patiešām to sajauca), lai pārtrauktu avāriju no atmiņas trūkuma: Sveiki, tur, ipod touch un iphone lietotāji. Labi, tāpēc esmu diezgan pārliecināts, ka jums visiem ir nedaudz pamata izpratne par to, kā darbojas Apple iPod, vai ne? Jūs atverat lietotni. Šī lietotne tiks izmantota jebkur, iespējams, 1G iPod touch, 5-30 MB no pieejamā