Sisällysluettelo:
- Vaihe 1: Oletan, että sinulla on jo OpenWrt…
- Vaihe 2: Ohjelmisto ja työkalut
- Vaihe 3: Minimaalisen sovelluksen luominen
- Vaihe 4: Tietojen lisääminen: asiakkaiden määrä, WAN -IP -osoite, käyttöaika
- Vaihe 5: WiFi -ohjaus: ON/OFF
- Vaihe 6: Järjestelmätilastotaulukko
- Vaihe 7: Kiintolevyn kehruutila
- Vaihe 8: Verkkotoimintakaavio
- Vaihe 9: Ilmoitukset
- Vaihe 10: Automaattinen käynnistys taustalla
- Vaihe 11: Johtopäätös ja muita ideoita
Video: Android/iOS -sovellus OpenWrt -reitittimen etäkäyttöön: 11 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:02
Ostin äskettäin uuden reitittimen (Xiaomi Mi Router 3G). Ja tietysti tämä uusi, mahtava laitteisto inspiroi minua aloittamaan tämän projektin;)
Vaihe 1: Oletan, että sinulla on jo OpenWrt…
Minun oli ensin asennettava OpenWrt … Enimmäkseen seurasin tätä opasta (erityisesti tätä reititinmallia varten): https://dzone.com/articles/hacking-into-xiaomi-mi-… Löysin tämän mahtavan videon: Openwrt -asennus, WiFi -vertailuarvo, tyttöystävä vilkkuu. Wow nauroin niin kovasti!:)
Huomio! OpenWrtin asentaminen voi katkaista reitittimen. Mutta kun se on valmis, se avaa täyden tehon ja hallinnan. En ole tarpeeksi rohkea antamaan ohjeita täällä, koska ne voivat olla erilaisia jokaisella reitittimellä.
Mutta jos sinulla on jo OpenWrt reitittimessäsi, voit aloittaa tämän opetusohjelman kanssa
BTW, joissakin kehityskorteissa on valmiina OpenWrt, kuten Onion Omega, VoCore, LinkIt Smart 7688 ja muut. Tämä opetusohjelma selittää myös joitain perusideoita tällaisten sovellusten luomisesta, joten voit helposti mukauttaa sen toimimaan Raspberry Pi: n ja muiden kanssa.
Tässä projektissa käytän enimmäkseen esiasennettua ohjelmistoa (saatavana millä tahansa OpenWrt-yhteensopivalla reitittimellä). Mutta joidenkin lisätoimintojen vuoksi minun oli asennettava lisäpaketteja. Tämä tehdään vain muutamalla napsautuksella, joten lisään ohjeet tähän.
Lisäksi oletan, että tiedät jo:
- SSH -terminaalin avaaminen/käyttäminen OpenWrt -reitittimellesi
- Tiedostojen lataaminen/muokkaaminen reitittimellä (käytä FileZillaa tai scp/sftp: tä)
- Kuinka työskennellä Linux -konsolin kanssa
Vaihe 2: Ohjelmisto ja työkalut
Älypuhelimen puolella käytän Blynkia. Se tarjoaa iOS- ja Android -sovelluksia minkä tahansa laitteiston hallintaan. Voit helposti luoda kauniita graafisia käyttöliittymiä kaikkiin projekteihisi vetämällä ja pudottamalla widgettejä suoraan älypuhelimeesi. Blynkia käytetään enimmäkseen Arduinon, Raspberry Pi: n jne. Kanssa. Mutta miksi et käytä sitä itse reitittimessä?;)
Laitteen puolella käytän Luaa tarvittavien toimintojen komentamiseen. Voisin käyttää myös Pythonia tai Node.js -tiedostoa, mutta valitettavasti nämä vaihtoehdot eivät ole aina käytettävissä, koska resursseja ei ole joissakin reitittimissä. Tai C/C ++, mutta sen kanssa työskentely ei ole niin kätevää (kokoaminen uudelleen jokaista muutosta varten jne.). Toisaalta Lua on esiasennettu, helppokäyttöinen ja opittava. Sitä käyttää oletusverkkokäyttöliittymä, LuCI.
Vaihe 3: Minimaalisen sovelluksen luominen
Blynkin ja Luan käytön aloittaminen on yhtä helppoa kuin:
- Lataa Blynk -sovellus (App Storesta, Google Playsta)
- Luo uusi projekti ja hanki todennustunnus
- Noudata Blynk Lua -asennusohjeita OpenWrtille.
Käytä SSH: ta reitittimen konsolin käyttämiseen. Oletusesimerkin suorittamisen jälkeen:
lua./esimerkit/asiakas.lua
Meidän pitäisi nähdä jotain tällaista:
Yhdistetään…
SSL -kättely… Valmis.
Tämä tarkoittaa, että suojattu, kaksisuuntainen yhteys sovellukseen on muodostettu!
Voimme nyt helposti laajentaa annettua esimerkkiä, joten se tekee jotain mielenkiintoista. Olen luonut kopion tästä esimerkistä muokkaamaan sitä:
cp./esimerkit/asiakas.lua./blynkmon.lua
Vaihe 4: Tietojen lisääminen: asiakkaiden määrä, WAN -IP -osoite, käyttöaika
Perusajatuksena on saada tiedot käyttöjärjestelmästä säännöllisesti, suorittaa tarvittaessa yksinkertaisia laskutoimituksia ja lähettää sitten tulos Blynkille näytettäväksi.
Linux/OpenWrt -järjestelmässä meillä on useita tapoja saada järjestelmätiedot:
- Suorita komento ja jäsennä sen tuottama teksti
- Suorita komento ja katso, kuinka se palauttaa poistumiskoodin
- Lue järjestelmätiedosto, joka sijaitsee hakemistossa/proc/ja/sys/class/hakemistot
Nyt haluan näyttää yhdistettyjen laitteiden määrän.
Kun suoritan cat/proc/net/arp -konsolin, se lähettää luettelon tunnetuista laitteista sekä niiden MAC- ja IP -osoitteet:
IP -osoite HW -tyyppi Liput HW -osoite Maskilaite
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
Voimme jäsentää sen suoraan Lualla, mutta erikoisohjelmien käyttö on usein helpompaa. Linuxissa nämä ovat grep, head, tail, cut, wc, awk.
Jotta saisin asiakkaiden lukumäärän arp -tulostuksesta, minun on suodatettava taulukko (poistettava toisiinsa liittymättömät kohteet) ja laskettava taulukon rivit, mikä johtaa seuraavaan komentoon:
kissa/proc/net/arp | grep br-lan | grep 0x2 | wc -l
Kokeillaan:
root@reititin: ~/lua-blynk# cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l
1
Loistava. Nyt saamme käsityksen siitä, kuinka voimme kerätä kaikki tarvittavat tiedot. Automatisoimme sen. Jotta koodistamme tulisi puhdas ja laajennettava, luomme joitain aputoimintoja:
toiminto exec_out (cmd)
paikallinen tiedosto = io.popen (cmd) jos ei tiedosto, niin palauta null end local output = file: read ('*all') tiedosto: close () print ("Run:"..cmd.. " ->".. output) return output end function read_file (polku) local file = io.open (path, "rb") if not file then return nil end local content = file: read "*a" file: close () print ("Lue: "..polku.." -> "..sisältö) palauta sisällön loppu
Näiden apuohjelmien avulla voimme nyt toteuttaa todelliset tiedonhakutoiminnot:
funktio getArpClients ()
return tonumber (exec_out ("cat/proc/net/arp | grep br -lan | grep 0x2 | wc -l")) lopetusfunktio getUptime () palauta tonumber (exec_out ("cat/proc/uptime | awk '{print $ 1 } '")) lopetusfunktio getWanIP () palauta exec_out (" ifconfig eth0.2 | grep' inet addr: '| cut -d: -f2 | awk' {print $ 1} '") end
Voit suorittaa osia näistä komentokomennoista, saadaksesi syvemmän käsityksen sen toiminnasta ja säätääksesi sen tarpeidesi mukaan.
Helpoin osa on tietojen lähettäminen Blynk -sovellukseen. Oletusesimerkki asettaa jo ajastimen, joka suorittaa jonkin koodin 5 sekunnin välein, joten käytämme sitä vain uudelleen:
paikallinen tmr1 = Ajastin: uusi {interval = 5000, func = function ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) blynk: virtualWrite (12, getWanIP ()) end}
Lisäämme sovellukseen 3 tarra -widgettiä ja määritämme ne Virtual Pins 10, 11, 12 vastaavasti.
Vaikka tämä toimii, se on melko tehotonta, koska WAN IP tai asiakasmäärät eivät päivity niin usein
WAN IP: lle siirrämme sen yhdistettyyn käsittelijään. Se suoritetaan joka kerta, kun reititin muodostaa yhteyden Blynk Cloudiin. Tämän pitäisi riittää:
blynk: päällä ("kytketty", toiminto ()
print ("Valmis.") blynk: virtualWrite (12, getWanIP ()) end)
Luomme Uptime ja Client Number -toiminnolle erillisen ajastimen, jonka kesto on 5 minuuttia. väli:
local tmr2 = Ajastin: uusi {interval = 5*60*1000, func = function ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) end}
Vaihe 5: WiFi -ohjaus: ON/OFF
Tähän asti olimme saaneet vain tietoja laitteesta, yritä hallita sitä!
blynk: päällä ("V20", toiminto (param)
jos param [1] == "1", niin os.execute ("wifi up") else os.execute ("wifi down") end end)
Sovelluspuolella lisäsin juuri painike -widgetin (tila: kytkin) ja annoin sen V20: lle.
Se siitä. Hämmästyttävä.
Vaihe 6: Järjestelmätilastotaulukko
funktio getCpuLoad ()
return tonumber (exec_out ("top -bn1 | grep 'CPU:' | head -n1 | awk '{print $ 2+$ 4}'")) lopetusfunktio getRamUsage () palauta tonumber (exec_out ("free | grep Mem | awk ' {print ($ 3- $ 7)/$ 2 * 100.0} '")) end
Meidän on myös lähetettävä tiedot Blynkille (käytämme tmr1: tä uudelleen):
paikallinen tmr1 = Ajastin: uusi {interval = 5000, func = function ()
blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) end}
Lisää sovelluksen puolella SuperChart -widget. Lisää suorittimen, RAM -datavirtoja ja määritä V5, V6.
Vaihe 7: Kiintolevyn kehruutila
Reitittimessäni on ulkoinen kiintolevyasema, joka on kytketty verkkoon liitettyyn tallennuslaitteeseen. Tämä asema on määritetty aloittamaan pyöriminen, kun joku käyttää sitä, ja pysähtymään aikakatkaisun jälkeen.
Ilmeisesti olisi hienoa tietää, kuinka monta kertaa se käynnistyy päivän aikana. Joten lisäsin toisen tietovirran järjestelmäkaaviooni.
On hieman hankalampaa saada kiintolevyaseman tila, mutta löysin tavan! Asenna ensin smartmontools SSH -konsolista:
opkg päivitys
opkg asentaa smartmontools
Sitten koodissamme meidän on suoritettava erityinen komento ja tarkistettava poistumiskoodi:
funktio exec_ret (cmd)
local exit = os.execute (cmd) print ("Suorita:"..cmd.. " -> exit:".. exit) palaa poistuminen lopetusfunktio getHddSpinning () if exec_ret ("smartctl --nocheck = standby --info /dev/sda>/dev/null ") == 0 ja palauta sitten 1 muu palauta 0 loppu
Huomautus: kiintolevyni on /dev /sda
Vaihe 8: Verkkotoimintakaavio
Luomme toisen SuperChart -widgetin (samanlainen kuin edellinen), lisäämme TX- ja RX -tietovirrat ja määritämme V1: lle ja V2: lle.
Aputoiminnot:
funktio getWanRxBytes ()
return tonumber (read_file ("/sys/class/net/eth0.2/statistics/rx_bytes")) lopetusfunktio getWanTxBytes () palauta tonumber (read_file ("/sys/class/net/eth0.2/statistics/tx_bytes")) loppu
Lisää seuraavaksi koodia samaan tmr1: een. Tämä on monimutkaisempaa, koska meidän tarvitsee vain laskea ja näyttää lähetettyjen/vastaanotettujen tavujen ero:
paikallinen prevTx, prevRx
local tmr1 = Ajastin: uusi {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 sitten blynk: virtualWrite (2, rx - prevRx) end prevTx = tx prevRx = rx blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) blynk: virtualWrite (7, getHddSpinning)) loppu}
Vaihe 9: Ilmoitukset
Halusin myös saada ilmoituksen, kun reitittimeni katkaisee virran tai Internet -yhteyden. Tätä varten tarvitsemme Ilmoitus -widgetin.
Ota widget -asetuksissa käyttöön "offline -ilmoitus". Koodia ei tarvita. Mutta voimme myös lähettää mukautettuja ilmoituksia koodistamme.
Vaihe 10: Automaattinen käynnistys taustalla
Tällä hetkellä komentosarja on suoritettava manuaalisesti, mutta haluan saada sen toimimaan taustalla automaattisesti, kun reititin käynnistetään.
Tämä tehdään luomalla palvelu. Luo tiedosto /etc/init.d/blynkmon:
#!/bin/sh /etc/rc.common
START = 99 STOP = pidfile = "/var/run/blynkmon.pid" start () {if [-f $ pidfile]; sitten echo "blynkmon jo käynnissä" exit 0 fi cd /root /lua-blynk lua blynkmon.lua your-auth-token> /dev /null & echo $! > $ pidfile} stop () {if [! -f $ pidfile]; sitten kaiku "blynkmon ei käynnissä" exit 0 fi kill -9 $ (cat $ pidfile) rm $ pidfile}
Huomaa: älä unohda vaihtaa auth-tunnusta
Ota sitten blynkmon -palvelu käyttöön:
palvelu blynkmon käyttöön
Vaihe 11: Johtopäätös ja muita ideoita
Voit skannata tämän QR -koodin saadaksesi Blynk -projektini kloonin. Se vaatii joitakin energiapisteitä (4600), koska se käyttää paljon widgettejä!
Löydät koko Lua -koodin täältä:
Toistaiseksi hyvä, mutta tässä on joitain ideoita, joita haluan lisätä lähitulevaisuudessa.
- Lisää Käynnistä uudelleen -komento. Vältä sen napsauttamista vahingossa.
- Lisää Terminal -widget suorittaaksesi minkä tahansa linux -komennon.
-
Lisää suorittimen lämpötilakaavio.
UPD: Valitettavasti OpenWrtistä puuttuu tällä hetkellä ajureita reitittimelleni. Mutta se on saatavilla monille muille reitittimille
- Lisää ilmoitus, kun tietty laite liittyy verkkoon tai poistuu siitä. Meillä on jo arp -tiedot, tarkista nyt vain MAC -osoite.
Tällä tavalla voimme valvoa ja ohjata 3D -tulostimia, robotteja, tavallista PC/kannettavaa tietokonetta, Arduino/ESP8266/ESP32/RaspberryPi -kamaa, Smart Home -laitteita ja käytännössä mitä tahansa ympärilläsi. Kerro minulle, jos sinulla on muita mielenkiintoisia ideoita. Mitä mieltä olet tästä kaikesta?
Suositeltava:
MotionEyen asentaminen Linksys WRT3200ACM -laitteeseen OpenWrt -ohjelmalla: 7 vaihetta
MotionEyen asentaminen Linksys WRT3200ACM -laitteeseen OpenWrt-ohjelmalla: Tarvitsen valvontakamerajärjestelmän kotiini, kävin avoimen lähdekoodin vaihtoehdossa. Tämä johti minut Motioneyen Web -käyttöliittymään Motion daemon for linux -ohjelmaan. Tämä Calin Crisanin (MotionEye) projekti on juuri sitä, mitä lääkäri määräsi
Luo turvallinen alue Android-/IOS-/WIN10 -laitteille lukitsematta: 6 vaihetta
Luo turva -alue Android-/IOS-/WIN10 -laitteille lukitsematta: Tässä artikkelissa haluamme luoda hienon gadgetin, joka voi tehdä turvavyöhykkeen laitteidesi lukituksen avaamiseksi. Tämän projektin lopussa: Opit käyttämään sormenjälkitunnistinta
OpenWrt -kotiverkko: 9 vaihetta (kuvien kanssa)
OpenWrt-kotiverkko: OpenWrt on avoimen lähdekoodin Linux-jakelu, jonka käyttäjät asentavat tavallisesti omalle kodin Wi-Fi-reitittimelleen. päivitys
Flash OpenWrt / LEDE BT Homehubiin 5 Syömäpuikolla: 5 vaihetta
Flash OpenWrt / LEDE BT Homehub 5: een syömäpuikolla: Tämä on opas, joka näyttää uuden helpon juotostavan menetelmän yhdistämiseen BART Home Hub 5: n A-tyypin UART-liitäntään. Tämä on tarpeen, jos haluat asentaa hämmästyttävä " OpenWrt " sen jälkimarkkinoiden laiteohjelmisto (OpenWrt tunnettiin aiemmin nimellä
Meraki / Accton / Fonero vilkkuu OpenWRT: llä Linuxia käytettäessä: 3 vaihetta
Meraki / Accton / Foneron vilkkuminen OpenWRT: llä Linuxia käytettäessä: Tässä ohjeessa kerrotaan, kuinka Meraki / Accton / Fonero -laitteisto flashataan OpenWRT Linuxilla Linux -tietokonetta käyttäen. Tekijän verkkosivusto: http://ruckman.net