Talaan ng mga Nilalaman:
- Hakbang 1: Ipinapalagay ko, Na Mayroon Ka Nang OpenWrt…
- Hakbang 2: Software at Mga Tool
- Hakbang 3: Lumilikha ng isang Minimal App
- Hakbang 4: Pagdaragdag ng Ilang Impormasyon: Bilang ng Mga kliyente, WAN IP Address, Uptime
- Hakbang 5: Kontrol sa WiFi: ON / OFF
- Hakbang 6: Tsart ng Stats ng System
- Hakbang 7: Katayuan sa Umiikot na HDD
- Hakbang 8: Tsart ng Aktibidad sa Network
- Hakbang 9: Mga Abiso
- Hakbang 10: Mag-Autorun sa Background
- Hakbang 11: Konklusyon at Karagdagang Mga Ideya
Video: Android / iOS App upang ma-access ang Iyong OpenWrt Router mula sa malayo: 11 Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:13
Bumili ako kamakailan ng isang bagong router (Xiaomi Mi Router 3G). At syempre, ang bago, kahanga-hangang piraso ng hardware na ito ang nagbigay inspirasyon sa akin upang magsimulang magtrabaho sa proyektong ito;)
Hakbang 1: Ipinapalagay ko, Na Mayroon Ka Nang OpenWrt…
Kinailangan kong mai-install muna ang OpenWrt … Kadalasan, sinunod ko ang patnubay na ito (tiyak para sa modelo ng router na ito): https://dzone.com/articles/hacking-into-xiaomi-mi-… Habang ginagawa ito, nahanap ko ang mahusay na video na ito: Pag-install ng Openwrt, benchmark ng WiFi, Girlfriend Flashing. Wow Tawa ako ng tawa!:)
Pansin Ang pag-install ng OpenWrt ay maaaring brick iyong router. Ngunit sa sandaling nakumpleto, ina-unlock ang buong lakas at kontrol. Hindi ako sapat na matapang upang magbigay ng anumang mga tagubilin dito, dahil maaaring magkakaiba ang mga ito para sa bawat modelo ng router.
Ngunit kung mayroon ka nang OpenWrt sa iyong router, magagawa mong magsimula sa tutorial na ito nang hindi pansamantala
Ang BTW, ang ilang mga development board ay mayroong OpenWrt out-of-the-box, tulad ng Onion Omega, VoCore, LinkIt Smart 7688 at iba pa. Ipinapaliwanag din ng tutorial na ito ang ilang pangunahing mga ideya sa likod ng paglikha ng mga naturang app, upang madali mong maiangkop ito upang gumana kasama ang Raspberry Pi at ang mga gusto.
Para sa proyektong ito, gumagamit ako ng halos paunang naka-install na software (magagamit sa anumang router na pinapagana ng OpenWrt). Ngunit para sa ilang advanced na pagpapaandar, kailangan kong mag-install ng karagdagang mga package. Ginagawa ito sa ilang pag-click lamang, kaya isasama ko ang mga tagubilin dito.
Gayundin, ipinapalagay ko na alam mo na:
- Paano buksan / gamitin ang SSH terminal sa iyong OpenWrt router
- Paano mag-upload / mag-edit ng mga file sa iyong router (gumamit ng FileZilla o scp / sftp)
- Paano gagana sa Linux console
Hakbang 2: Software at Mga Tool
Sa panig ng smartphone, gumagamit ako ng Blynk. Nagbibigay ito ng mga iOS at Android app upang makontrol ang anumang hardware. Madali kang makakagawa ng magagandang mga graphic interface para sa lahat ng iyong mga proyekto sa pamamagitan lamang ng pag-drag at pag-drop ng mga widget, sa iyong smartphone. Ang Blynk ay kadalasang ginagamit sa Arduino, Raspberry Pi, atbp. Ngunit bakit hindi ito patakbuhin sa router mismo?;)
Sa panig ng aparato gagamitin ko ang Lua upang i-script ang kinakailangang pag-andar. Maaari ko ring gamitin ang Python o Node.js, ngunit sa kasamaang palad ang mga pagpipiliang ito ay hindi palaging magagamit, dahil sa kakulangan ng mga mapagkukunan sa ilang mga router. O C / C ++, ngunit hindi ito maginhawa upang gumana (muling pagsasaayos para sa bawat pagbabago, atbp.) Sa kabilang banda, si Lua ay paunang naka-install, simpleng gamitin at matuto. Ginagamit ito ng default na web interface, LuCI.
Hakbang 3: Lumilikha ng isang Minimal App
Ang pagsisimula sa Blynk at Lua ay kasing dali ng:
- I-download ang Blynk App (mula sa App Store, Google Play)
- Lumikha ng isang bagong proyekto at kunin ang Auth Token
- Sundin ang mga tagubilin sa pag-install ng Blynk Lua para sa OpenWrt.
Gumamit ng SSH upang ma-access ka sa router console. Matapos patakbuhin ang default na halimbawa:
lua./examples/client.lua
Dapat nating makita ang isang bagay tulad nito:
Kumokonekta…
Pagkamayan ng SSL … Handa na.
Na nangangahulugang ang ligtas, bi-directional na koneksyon sa app ay naitatag! YAY!
Madali na nating palawakin ang ibinigay na halimbawa, kaya't gumagawa ito ng isang bagay na kawili-wili. Lumikha ako ng isang kopya ng halimbawang ito upang mai-edit ito:
cp./examples/client.lua./blynkmon.lua
Hakbang 4: Pagdaragdag ng Ilang Impormasyon: Bilang ng Mga kliyente, WAN IP Address, Uptime
Ang pangunahing ideya ay upang makuha ang impormasyon mula sa OS pana-panahon, magsagawa ng ilang mga simpleng pagkalkula kung kinakailangan, at pagkatapos ay ipadala ang resulta sa Blynk para ipakita.
Sa Linux / OpenWrt, mayroon kaming maraming mga paraan upang makuha ang data ng system:
- Patakbuhin ang isang utos, at i-parse ang teksto na inilalabas nito
- Patakbuhin ang isang utos, at panoorin ang exit code na ibinabalik nito
- Basahin ang isang file ng system, na matatagpuan sa / proc / at / sys / klase / direktoryo
Ngayon nais kong ipakita ang bilang ng mga nakakonektang aparato.
Kapag nagpatakbo ako ng cat / proc / net / arp sa console, inilalabas nito ang listahan ng mga kilalang aparato, kasama ang kanilang mga MAC at IP address:
IP address HW type Flags 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
Maaari nating mai-parse ito nang direkta sa Lua, ngunit madalas na mas madaling gamitin ang mga dalubhasang kagamitan. Sa Linux, ito ang grep, ulo, buntot, gupitin, wc, awk.
Upang makakuha ng bilang ng mga kliyente mula sa output ng arp, kailangan kong salain ang talahanayan (alisin ang mga hindi kaugnay na item) at bilangin ang mga hilera ng talahanayan, na magreresulta sa sumusunod na utos:
pusa / proc / net / arp | grep br-lan | grep 0x2 | wc -l
Subukan Natin:
root @ router: ~ / lua-blynk # cat / proc / net / arp | grep br-lan | grep 0x2 | wc -l
1
Malaki. Nakukuha namin ngayon ang ideya kung paano namin makokolekta ang lahat ng kinakailangang impormasyon. I-automate natin ito. Upang malinis at mapalawak ang aming code, gumawa tayo ng ilang mga pagpapaandar ng helper:
function exec_out (cmd)
lokal na file = io.popen (cmd) kung hindi mag-file pagkatapos ay ibalik ang walang katapusan na lokal na output = file: basahin ('* lahat') file: isara () i-print ("Run:"..cmd.. "->".. output) ibalik ang output end function read_file (path) local file = io.open (path, "rb") kung hindi i-file pagkatapos ay ibalik ang walang katapusang lokal na nilalaman = file: basahin ang "* a" file: close () print ("Basahin: "..path.." -> ".. nilalaman) ibalik ang nilalaman ng nilalaman
Gamit ang mga utility na ito, maaari na naming ipatupad ang aktwal na mga pag-andar ng pagkuha ng data:
pagpapaandar 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 function getWanIP () return exec_out (" ifconfig eth0.2 | grep' inet addr: '| cut -d: -f2 | awk' {print $ 1} '") end
Maaari kang magpatakbo ng mga bahagi ng mga command ng shell, upang makakuha ng mas malalim na pag-unawa sa kung paano ito gumagana, at upang ayusin ito sa iyong mga pangangailangan.
Ang pinakamadaling bahagi ay ang pagpapadala ng data sa Blynk App. Ang default na halimbawa ay nag-set up na ng timer, na nagpapatakbo ng ilang code bawat 5 segundo, kaya ginagamit lang namin ito muli:
local tmr1 = Timer: bagong {interval = 5000, func = function ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime () / 60/60)) blynk: virtualWrite (12, getWanIP ()) end}
Sa app, nagdagdag kami ng 3 mga widget ng label, at itatalaga ang mga ito sa Virtual Pins 10, 11, 12 nang naaayon.
Habang ito ay gumagana, ito ay sa halip hindi mabisa, tulad ng WAN IP o bilang ng mga kliyente ay hindi nag-update nang madalas. Ayusin natin ito
Para sa WAN IP, inililipat namin ito sa konektadong handler. Tatakbo ito tuwing itinatakda ng router ang koneksyon sa Blynk Cloud. Ito ay dapat na sapat:
blynk: on ("konektado", function ()
i-print ("Handa.") blynk: virtualWrite (12, getWanIP ()) pagtatapos)
Para sa Uptime at Clients Number, lumilikha kami ng isang hiwalay na timer na may 5 min. agwat:
lokal tmr2 = Timer: bagong {interval = 5 * 60 * 1000, func = function ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime () / 60/60)) end}
Hakbang 5: Kontrol sa WiFi: ON / OFF
Hanggang ngayon, nakakakuha lamang kami ng ilang impormasyon mula sa aparato. Subukan nating kontrolin ito!
blynk: sa ("V20", pagpapaandar (param)
kung ang param [1] == "1" pagkatapos ay os.execut ("wifi up") iba pa os.execut ("wifi down") end end)
Sa panig ng app, nagdagdag lamang ako ng isang Button widget (mode: Switch) at itinalaga ito sa V20.
Ayan yun. Kamangha-mangha
Hakbang 6: Tsart ng Stats ng System
pagpapaandar getCpuLoad ()
return tonumber (exec_out ("top -bn1 | grep 'CPU:' | head -n1 | awk '{print $ 2 + $ 4}'")) end function getRamUsage () return tonumber (exec_out ("libre | grep Mem | awk ' Pagtatapos ng {print ($ 3- $ 7) / $ 2 * 100.0} '"))
Kailangan din naming ipadala ang data sa Blynk (gamitin ulit natin ang tmr1):
local tmr1 = Timer: bagong {interval = 5000, func = function ()
blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) end}
Sa App Side, magdagdag ng SuperChart widget. Magdagdag ng CPU, RAM datastreams at italaga sa V5, V6.
Hakbang 7: Katayuan sa Umiikot na HDD
Ang aking router ay may isang panlabas na HDD drive na konektado bilang isang aparato na Naka-attach sa Storage. Ang bagay na ito, ang drive na ito ay na-configure upang simulan ang pag-ikot kapag may nag-access dito, at upang suspindihin pagkatapos ng isang pag-timeout.
Malinaw na, magiging cool na malaman kung gaano karaming beses itong nakabukas sa buong isang araw. Kaya nagdagdag ako ng isa pang datastream sa aking tsart ng System.
Medyo mas mahirap upang makuha ang katayuan ng HDD drive, ngunit nakakita ako ng paraan! Una sa lahat, mag-install ng mga smartmontool mula sa SSH console:
update ng opkg
opkg install ng smartmontools
Pagkatapos, sa aming code, kailangan naming magpatakbo ng isang espesyal na utos at suriin ang exit code:
function exec_ret (cmd)
local exit = os.execut (cmd) print ("Run:"..cmd.. "-> exit:".. exit) return exit end function getHddSpinning () if exec_ret ("smartctl --nocheck = standby --info / dev / sda> / dev / null ") == 0 pagkatapos ay ibalik ang 1 na bumalik sa 0 end end
Tandaan: ang aking HDD ay / dev / sda
Hakbang 8: Tsart ng Aktibidad sa Network
Lumilikha kami ng isa pang widget ng SuperChart (katulad ng dati), Magdagdag ng TX at RX datastreams, at italaga sa V1 at V2. Tandaan: Gusto kong ipakita ang WAN port statc, at ang aking WAN port ay eth0.2
Mga function ng helper:
pagpapaandar 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")) wakas
Susunod, magdagdag ng ilang code sa parehong tmr1. Ito ay mas kumplikado, dahil kailangan lamang naming kalkulahin at ipakita ang pagkakaiba sa mga naihatid / natanggap na byte:
lokal na prevTx, prevRx
local tmr1 = Timer: bagong {interval = 5000, func = function () local tx = getWanTxBytes () local rx = getWanRxBytes () kung prevTx at prevTx ~ = tx pagkatapos ay blynk: virtualWrite (1, tx - prevTx) magtatapos kung prevRx at prevRx ~ = rx pagkatapos blynk: virtualWrite (2, rx - prevRx) end prevTx = tx prevRx = rx blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) blynk: virtualWrite (7, getHddSpinning)) pagtatapos}
Hakbang 9: Mga Abiso
Nais ko ring maabisuhan kapag ang aking Router ay nawalan ng kapangyarihan o koneksyon sa internet. Para sa mga ito, kailangan namin ng widget ng Notification.
Sa mga setting ng widget, paganahin ang "offline na abiso". Hindi kinakailangan ng code. Ngunit maaari rin kaming magpadala ng mga pasadyang notification mula sa aming code.
Hakbang 10: Mag-Autorun sa Background
Sa ngayon ang script ay dapat na manu-manong naisakatuparan, ngunit nais kong patakbuhin ito sa background nang awtomatiko kapag pinapagana ang router.
Ginagawa ito sa pamamagitan ng paglikha ng isang serbisyo. Lumikha ng isang file /etc/init.d/blynkmon:
#! / bin / sh /etc/rc.common
MAGSIMULA = 99 STOP = pidfile = "/ var / run / blynkmon.pid" start () {if [-f $ pidfile]; pagkatapos ay i-echo ang "blynkmon na tumatakbo na" exit 0 fi cd / root / lua-blynk lua blynkmon.lua your-auth-token> / dev / null & echo $! > $ pidfile} huminto () {kung [! -f $ pidfile]; pagkatapos ay i-echo ang "blynkmon not running" exit 0 fi kill -9 $ (cat $ pidfile) rm $ pidfile}
Tandaan: huwag kalimutang palitan ang iyong-auth-token
Pagkatapos, paganahin ang serbisyo ng blynkmon:
paganahin ang service blynkmon
Hakbang 11: Konklusyon at Karagdagang Mga Ideya
Maaari mong i-scan ang QR na ito upang makuha ang clone ng aking Blynk Project. Nangangailangan ito ng ilang mga puntos ng enerhiya (4600), dahil gumagamit ito ng maraming mga widget!
Hanapin ang Buong code ng Lua dito:
Sa ngayon napakahusay, ngunit narito ang ilang mga ideya na nais kong idagdag sa malapit na hinaharap.
- Magdagdag ng utos ng Reboot. Pigilan ang pag-click dito nang hindi sinasadya.
- Magdagdag ng Terminal widget upang patakbuhin ang anumang utos ng linux.
-
Magdagdag ng tsart ng temperatura ng CPU.
UPD: Sa kasamaang palad ay kasalukuyang kulang sa OpenWrt ang ilang mga driver para sa aking modelo ng router. Ngunit magagamit ito para sa maraming iba pang mga router
- Magdagdag ng abiso kapag ang isang partikular na aparato ay sumali / umalis sa network. Mayroon kaming impormasyon sa arp, ngayon lamang suriin ang MAC address.
Sa ganitong paraan, masusubaybayan at makokontrol namin ang Mga 3D Printer, Robots, isang regular na PC / Laptop, Arduino / ESP8266 / ESP32 / Mga bagay na RaspberryPi, mga aparato ng Smart Home, at halos anumang bagay sa paligid. Ipaalam sa akin kung mayroong anumang iba pang mga kagiliw-giliw na ideya. Ano ang palagay mo tungkol sa lahat ng ito?
Inirerekumendang:
Steam Punk Ang iyong UPS upang Kumuha ng Mga Oras ng Uptime para sa Iyong Wi-fi Router: 4 na Hakbang (na may Mga Larawan)
Steam Punk Ang iyong UPS upang Kumuha ng Mga Oras ng Uptime para sa Iyong Wi-fi Router: Mayroong isang bagay na panimulang hindi kanais-nais tungkol sa pag-convert ng iyong UPS ng 12V DC na lakas ng baterya sa 220V AC na lakas upang ang mga transformer na nagpapatakbo ng iyong router at hibla ONT ay maaaring ibalik ito sa 12V DC! Kalaban mo rin ang [karaniwang
Dual Tutorial ng SonOFF: Kontrolin ang Iyong Mga Elektrikal na Kagamitan mula sa Malayo Paggamit ng MQTT at Ubidots: 4 na Hakbang
Dual Tutorial ng SONOFF: Kontrolin ang Iyong Mga Elektrikal na Kagamitan mula sa Malayo Paggamit ng MQTT at Ubidots: Ang $ 9 Wi-Fi relay na ito ay maaaring makontrol ang dalawang kasangkapan nang sabay. Alamin kung paano ikonekta ito sa Ubidots at ilabas ang buong potensyal nito! Sa gabay na ito matututunan mo kung paano makontrol ang isang pares ng 110V na kagamitan sa Wi-Fi sa halagang $ 9, gamit ang Ito's SonOFF Dual.
Gamit ang Iyong Bluetooth Pinagana ang Sony Ericsson Telepono upang Makontrol ang Iyong Computer: 6 Mga Hakbang
Paggamit ng Iyong Bluetooth na Pinagana ang Sony Ericsson Telepono upang Makontrol ang Iyong Kompyuter: Kanina pa ako nagbabasa ng mga itinuturo, at palaging nais kong gawin ang ilan sa mga bagay na sinulat ng mga tao, ngunit nahanap ko ang aking sarili sa mga bagay na ay mahirap gawin dahil ang mga ito ay tunay na mahirap gawin, o ang ika
Paggamit ng Parallax Basic Stamp II upang mag-ring ng isang Doorbell mula sa malayo: 4 na Hakbang (na may Mga Larawan)
Paggamit ng Parallax Basic Stamp II upang mag-ring ng isang Doorbell mula sa malayo: Ang problema? Isang aso na masyadong nasasabik kapag nag-ring ang doorbell. Ang solusyon? Mag-ring ng doorbell nang random na oras kung wala doon, at walang sumasagot dito, upang makontra ang kundisyon ng aso - upang masira ang samahan na isang ringbell
Baguhin ang isang Energizer Energi upang Pumunta Adapter upang Bayaran ang Iyong Motorola Telepono: 4 na Hakbang
Pagbabago ng isang Energizer Energi upang Pumunta Adapter upang Singilin ang Iyong Motorola Telepono: Bumili ako ng isang Energizer Energi To Go charger upang singilin ang aking Palm TX sa bukid habang nag-geocaching. Sumama ito sa adapter upang singilin ang isang Palm pati na rin ang isa upang singilin ang ilang mga random na cell phone na hindi ko pagmamay-ari. Mukhang kung nais kong singilin ang aking Motorol