Taula de continguts:
- Pas 1: Suposo que ja teniu OpenWrt …
- Pas 2: programari i eines
- Pas 3: crear una aplicació mínima
- Pas 4: afegir informació: nombre de clients, adreça IP WAN, temps d’activitat
- Pas 5: control WiFi: ON / OFF
- Pas 6: gràfic d'estadístiques del sistema
- Pas 7: Estat de gir del disc dur
- Pas 8: gràfic d'activitat en xarxa
- Pas 9: notificacions
- Pas 10: execució automàtica en segon pla
- Pas 11: Conclusió i idees addicionals
Vídeo: Aplicació Android / iOS per accedir al vostre router OpenWrt de forma remota: 11 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:14
Recentment he comprat un enrutador nou (Xiaomi Mi Router 3G). I, per descomptat, aquest nou i impressionant maquinari em va inspirar a començar a treballar en aquest projecte;)
Pas 1: Suposo que ja teniu OpenWrt …
Vaig haver d’instal·lar OpenWrt primer … Sobretot, vaig seguir aquesta guia (específica per a aquest model d’encaminador): https://dzone.com/articles/hacking-into-xiaomi-mi- … Mentre treballava en això, vaig trobar aquest vídeo increïble: Instal·lació Openwrt, referència WiFi, Girlfriend Flashing. Wow vaig riure tant!:)
Atenció! La instal·lació d’OpenWrt pot bloquejar el vostre enrutador. Però un cop acabat, desbloqueja la potència i el control. No sóc prou valent per proporcionar cap instrucció aquí, ja que poden ser diferents per a cada model d’encaminador.
Però si ja teniu OpenWrt al vostre encaminador, podreu començar amb aquest tutorial en notime
Per cert, algunes plaques de desenvolupament inclouen OpenWrt, com Onion Omega, VoCore, LinkIt Smart 7688 i altres. Aquest tutorial també explica algunes idees bàsiques darrere de la creació d’aquestes aplicacions, de manera que podeu adaptar-les fàcilment per treballar amb Raspberry Pi i similars.
Per a aquest projecte, utilitzaré principalment programari preinstal·lat (disponible en qualsevol enrutador habilitat per a OpenWrt). Però per a algunes funcions avançades, vaig haver d’instal·lar paquets addicionals. Això es fa amb pocs clics, de manera que inclouré les instruccions aquí.
A més, suposo que ja sabeu:
- Com obrir / utilitzar el terminal SSH al vostre encaminador OpenWrt
- Com penjar / editar fitxers al router (utilitzeu FileZilla o scp / sftp)
- Com treballar amb la consola Linux
Pas 2: programari i eines
Pel que fa als telèfons intel·ligents, faig servir Blynk. Proporciona aplicacions per a iOS i Android per controlar qualsevol maquinari. Podeu crear fàcilment belles interfícies gràfiques per a tots els vostres projectes simplement arrossegant i deixant anar ginys directament al vostre telèfon intel·ligent. Blynk s'utilitza principalment amb Arduino, Raspberry Pi, etc. Però, per què no s'executa al mateix router?;)
Pel que fa al dispositiu, faré servir Lua per escriure la funcionalitat necessària. També podria utilitzar Python o Node.js, però, malauradament, aquestes opcions no sempre estan disponibles a causa de la manca de recursos en alguns enrutadors. O C / C ++, però no és tan convenient treballar amb (recompilació per a cada canvi, etc.) D'altra banda, Lua està preinstal·lat, és senzill d'utilitzar i d'aprendre. L’utilitza la interfície web per defecte, LuCI.
Pas 3: crear una aplicació mínima
Començar amb Blynk i Lua és tan fàcil com:
- Baixeu-vos l'aplicació Blynk (des de l'App Store, Google Play)
- Creeu un projecte nou i obteniu el testimoni d'autenticació
- Seguiu les instruccions d'instal·lació de Blynk Lua per a OpenWrt.
Utilitzeu SSH per accedir a la consola del router. Després d'executar l'exemple per defecte:
lua./examples/client.lua
Hauríem de veure alguna cosa així:
Connectant…
Apretament de mans SSL … A punt.
Això significa que s'estableix la connexió bidireccional i segura a l'aplicació.
Ara podem ampliar fàcilment l’exemple proporcionat, de manera que fa alguna cosa interessant. He creat una còpia d'aquest exemple per editar-lo:
cp./examples/client.lua./blynkmon.lua
Pas 4: afegir informació: nombre de clients, adreça IP WAN, temps d’activitat
La idea bàsica és obtenir la informació del sistema operatiu periòdicament, realitzar alguns càlculs simples si cal, i després enviar el resultat a Blynk perquè es mostri.
A Linux / OpenWrt, tenim diverses maneres d’obtenir les dades del sistema:
- Executeu una ordre i analitzeu el text que emet
- Executeu una ordre i observeu el codi de sortida que retorna
- Llegiu un fitxer del sistema situat als directoris / proc / i / sys / class /
Ara vull mostrar el nombre de dispositius connectats.
Quan executo cat / proc / net / arp a la consola, emet la llista de dispositius coneguts, juntament amb les seves adreces MAC i IP:
Adreça IP Tipus HW Banderes Adreça HW Dispositiu de màscara
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
El podem analitzar directament a Lua, però sovint és més fàcil utilitzar utilitats especialitzades. A Linux, es tracta de grep, head, tail, cut, wc, awk.
Per obtenir el nombre de clients de la sortida d'arp, he de filtrar la taula (eliminar els elements no relacionats) i comptar les files de la taula, el que resulta en l'ordre següent:
cat / proc / net / arp | grep br-lan | grep 0x2 | wc -l
Provem-ho:
root @ router: ~ / lua-blynk # cat / proc / net / arp | grep br-lan | grep 0x2 | wc -l
1
Genial. Ara ens fem la idea de com podem recollir tota la informació necessària. Automatitzem-lo. Per fer el nostre codi net i extensible, creem algunes funcions d’ajuda:
funció exec_out (cmd)
fitxer local = io.popen (cmd) si no és el fitxer, retornar zero final sortida local = fitxer: llegir ('* tot') fitxer: close () print ("Executar:"..cmd.. "->".. sortida) retorna la funció final de la sortida fitxer_lllegit (camí) fitxer local = io.open (camí, "rb") si no és fitxer, retornar nul contingut local = fitxer: llegir fitxer "* a": tancar () imprimir ("Llegir: "..path.." -> "..content) retorna el contingut
Mitjançant aquestes utilitats, ara podem implementar les funcions de recuperació de dades reals:
funció getArpClients ()
return tonumber (exec_out ("cat / proc / net / arp | grep br-lan | grep 0x2 | wc -l")) funció final getUptime () return tonumber (exec_out ("cat / proc / uptime | awk '{print $ 1 } '")) funció final getWanIP () retorna exec_out (" ifconfig eth0.2 | grep' inet addr: '| cut -d: -f2 | awk' {print $ 1} '") end
Podeu executar parts d’aquestes ordres d’intèrpret d’ordres, per obtenir una comprensió més profunda del seu funcionament i ajustar-les a les vostres necessitats.
El més senzill és enviar les dades a l'aplicació Blynk. L'exemple predeterminat ja configura el temporitzador, que executa algun codi cada 5 segons, de manera que només el tornem a utilitzar:
local tmr1 = Temporitzador: nou {interval = 5000, func = function ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime () / 60/60)) blynk: virtualWrite (12, getWanIP ()) end}
A l'aplicació, afegim 3 widgets d'etiquetes i els assignem als pins virtuals 10, 11 i 12 en conseqüència.
Tot i que això funciona, és bastant ineficient, ja que la IP WAN o el nombre de clients no s’actualitzen tan sovint. Fixem-ho
Per a IP WAN, el passem al controlador connectat. S’executarà cada vegada que el router estableixi la connexió amb Blynk Cloud. Això hauria de ser suficient:
blynk: on ("connectat", function ()
print ("A punt") blynk: virtualWrite (12, getWanIP ()) end)
Per al temps d’activitat i el nombre de clients, creem un temporitzador independent amb 5 minuts. interval:
local tmr2 = Temporitzador: nou {interval = 5 * 60 * 1000, func = function ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime () / 60/60)) end}
Pas 5: control WiFi: ON / OFF
Fins ara, només rebíem informació del dispositiu. Intentem controlar-la.
blynk: on ("V20", funció (param)
if param [1] == "1" then os.execute ("wifi up") else os.execute ("wifi down") end end)
A l’aplicació, acabo d’afegir un widget Button (mode: Switch) i l’he assignat a V20.
Això és. Increïble.
Pas 6: gràfic d'estadístiques del sistema
funció getCpuLoad ()
return tonumber (exec_out ("top -bn1 | grep 'CPU:' | head -n1 | awk '{print $ 2 + $ 4}'")) funció final getRamUsage () return tonumber (exec_out ("free | grep Mem | awk ' {print ($ 3- $ 7) / $ 2 * 100,0} '")) final
També hem d’enviar les dades a Blynk (tornem a utilitzar tmr1):
local tmr1 = Temporitzador: nou {interval = 5000, func = function ()
blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) end}
Al costat de l'aplicació, afegiu el widget SuperChart. Afegiu transmissions de dades de CPU, RAM i assigneu-les a V5, V6.
Pas 7: Estat de gir del disc dur
El meu enrutador té una unitat HDD externa connectada com a dispositiu d’emmagatzematge connectat a la xarxa, és a dir, aquesta unitat està configurada per començar a girar quan algú hi accedeix i per suspendre-la després d’un temps d’espera.
Viouslybviament, seria genial saber quantes vegades s’encén al llarg d’un dia. Així que he afegit un altre flux de dades al meu gràfic del sistema.
És una mica més complicat obtenir l’estat de la unitat de disc dur, però he trobat una manera. Primer de tot, instal·leu smartmontools des de la consola SSH:
actualització opkg
opkg instal·la smartmontools
Aleshores, al nostre codi, hem d’executar una ordre especial i comprovar el codi de sortida:
funció exec_ret (cmd)
local exit = os.execute (cmd) print ("Run:"..cmd.. "-> exit:".. exit) return exit end function getHddSpinning () if exec_ret ("smartctl --nocheck = standby --info / dev / sda> / dev / null ") == 0 i després torna 1 altra vegada torna 0 final
Nota: el meu disc dur és / dev / sda
Pas 8: gràfic d'activitat en xarxa
Creem un altre giny de SuperChart (similar a l’anterior), afegim transmissions de dades TX i RX i assignem a V1 i V2. Nota: Vull mostrar el statc del port WAN i el meu port WAN és eth0.2
Funcions d'assistència:
funció getWanRxBytes ()
return tonumber (read_file ("/ sys / class / net / eth0.2 / statistics / rx_bytes")) funció final getWanTxBytes () return tonumber (read_file ("/ sys / class / net / eth0.2 / statistics / tx_bytes")) final
A continuació, afegiu un codi al mateix tmr1. Això és més complicat, ja que només cal calcular i mostrar la diferència de bytes transmesos / rebuts:
prevTx local, prevRx
local tmr1 = Temporitzador: nou {interval = 5000, func = function () local tx = getWanTxBytes () local rx = getWanRxBytes () si prevTx i prevTx ~ = tx llavors blynk: virtualWrite (1, tx - prevTx) finalitza si prevRx i prevRx ~ = rx després blynk: virtualWrite (2, rx - prevRx) final prevTx = tx prevRx = rx blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) blynk: virtualWrite (7, getHddSpinning ()) final}
Pas 9: notificacions
També volia rebre notificacions quan el meu router perd l'alimentació o la connexió a Internet. Per a això, necessitem un widget de notificació.
A la configuració del widget, activeu la "notificació fora de línia". No cal cap codi. Però també podem enviar notificacions personalitzades des del nostre codi.
Pas 10: execució automàtica en segon pla
De moment, l'script s'ha d'executar manualment, però vull fer-lo executar en segon pla automàticament quan s'encengui l'encaminador.
Això es fa creant un servei. Creeu un fitxer /etc/init.d/blynkmon:
#! / bin / sh /etc/rc.common
START = 99 STOP = pidfile = "/ var / run / blynkmon.pid" start () {si [-f $ pidfile]; llavors ressona "blynkmon ja s'està executant" sortida 0 fi cd / root / lua-blynk lua blynkmon.lua to-auth-token> / dev / null & echo $! > $ pidfile} stop () {if [! -f $ pidfile]; llavors feu ressò de "blynkmon no s'executa" sortida 0 fi kill -9 $ (cat $ pidfile) rm $ pidfile}
Nota: no oblideu substituir el vostre token d'autenticació
A continuació, activeu el servei blynkmon:
servei blynkmon habilitar
Pas 11: Conclusió i idees addicionals
Podeu escanejar aquest QR per obtenir el clon del meu Projecte Blynk. Requereix alguns punts d’energia (4600), ja que utilitza molts widgets.
Trobeu el codi Lua complet aquí:
Fins ara està bé, però aquí hi ha algunes idees que voldria afegir en un futur proper.
- Afegiu l'ordre Reinicia. Eviteu fer-hi clic accidentalment.
- Afegiu el giny de Terminal per executar qualsevol ordre de Linux.
-
Afegiu un gràfic de temperatura de la CPU.
ACTUALITZACIÓ: Malauradament OpenWrt actualment no disposa d'alguns controladors per al meu model de router. Però està disponible per a molts altres routers
- Afegiu una notificació quan un dispositiu concret s’incorpori / surti de la xarxa. Ja tenim informació d’arp, ara només comproveu l’adreça MAC.
D'aquesta manera, podem controlar i controlar impressores 3D, robots, ordinadors portàtils, Arduino / ESP8266 / ESP32 / RaspberryPi, dispositius Smart Home i pràcticament qualsevol cosa al voltant. Feu-me saber si teniu alguna altra idea interessant. Què en penseu de tot això?
Recomanat:
Steam Punk del vostre SAI per obtenir hores de funcionament del vostre router Wi-Fi: 4 passos (amb imatges)
Steam Punk del vostre SAI per obtenir hores de funcionament del vostre router Wi-Fi: hi ha alguna cosa fonamentalment desagradable que el vostre SAI converti la potència de la bateria de 12V CC en 220V CA perquè els transformadors que funcionen amb el vostre enrutador i la fibra ONT puguin convertir-lo de nou en 12 V CC! També esteu contra els [normalment
Monitorització remota de temperatura i humitat amb l'aplicació ESP8266 i Blynk: 15 passos
Monitorització remota de temperatura i humitat amb ESP8266 i l’aplicació Blynk: va ser el meu primer projecte amb xip ESP8266. Acabo de construir un nou hivernacle a prop de casa i em va resultar interessant què hi passés durant un dia? Vull dir com canvien la temperatura i la humitat? L’hivernacle està prou ventilat? Així que dec
Com activar de forma remota qualsevol dispositiu, per exemple un ordinador (amb un telèfon mòbil): 5 passos
Com activar qualsevol dispositiu per exemple, per exemple un ordinador (amb un telèfon mòbil): en aquest instructiu us mostraré com convertir un mòbil antic en un interruptor d’alimentació remot per al vostre ordinador. Per a altres dispositius, consulteu el darrer pas. Això és gairebé gratuït si teniu un mòbil antic i una targeta SIM. Què necessiteu: - Telèfon mòbil antic (w
8 control de relés amb receptor NodeMCU i IR mitjançant aplicació WiFi i remota IR i Android: 5 passos (amb imatges)
Control de relés 8 amb receptor NodeMCU i IR mitjançant aplicació WiFi i control remot IR i Android: control de 8 commutadors de relés mitjançant receptor nodemcu i ir a través de wifi i control remot i aplicació per a Android. El control remot funciona independentment de la connexió wifi. AQUÍ
Ús de Parallax Basic Stamp II per fer sonar un timbre de forma remota: 4 passos (amb imatges)
Ús de Parallax Basic Stamp II per fer sonar un timbre de forma remota: el problema? Un gos que s’emociona massa quan sona el timbre. La solució? Toqueu el timbre a l’atzar quan ningú no hi sigui i ningú no hi respongui, per tal de contracondicionar el gos, per trencar l’associació que un timbre de timbre és