Indholdsfortegnelse:
- Trin 1: Jeg antager, at du allerede har OpenWrt…
- Trin 2: Software og værktøjer
- Trin 3: Oprettelse af en minimal app
- Trin 4: Tilføjelse af nogle oplysninger: Antal klienter, WAN IP -adresse, oppetid
- Trin 5: WiFi -kontrol: TIL/FRA
- Trin 6: Diagram over systemstatistik
- Trin 7: HDD -spinningsstatus
- Trin 8: Netværksaktivitetskort
- Trin 9: Meddelelser
- Trin 10: Autorun i baggrunden
- Trin 11: Konklusion og yderligere ideer
![Android/iOS -app til fjernadgang til din OpenWrt -router: 11 trin Android/iOS -app til fjernadgang til din OpenWrt -router: 11 trin](https://i.howwhatproduce.com/images/004/image-10073-15-j.webp)
Video: Android/iOS -app til fjernadgang til din OpenWrt -router: 11 trin
![Video: Android/iOS -app til fjernadgang til din OpenWrt -router: 11 trin Video: Android/iOS -app til fjernadgang til din OpenWrt -router: 11 trin](https://i.ytimg.com/vi/DDVjJNq6R-8/hqdefault.jpg)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
![Android/iOS -app til fjernadgang til din OpenWrt -router Android/iOS -app til fjernadgang til din OpenWrt -router](https://i.howwhatproduce.com/images/004/image-10073-16-j.webp)
![Android/iOS -app til fjernadgang til din OpenWrt -router Android/iOS -app til fjernadgang til din OpenWrt -router](https://i.howwhatproduce.com/images/004/image-10073-17-j.webp)
Jeg har for nylig købt en ny router (Xiaomi Mi Router 3G). Og selvfølgelig inspirerede dette nye, fantastiske stykke hardware mig til at begynde at arbejde på dette projekt;)
Trin 1: Jeg antager, at du allerede har OpenWrt…
![Jeg formoder, at du allerede har OpenWrt… Jeg formoder, at du allerede har OpenWrt…](https://i.howwhatproduce.com/images/004/image-10073-18-j.webp)
Jeg var nødt til at installere OpenWrt først … For det meste fulgte jeg denne vejledning (specifik for denne routermodel): https://dzone.com/articles/hacking-into-xiaomi-mi-… Mens jeg arbejdede på dette, fandt jeg denne fantastiske video: Openwrt -installation, WiFi -benchmark, Kæreste blinker. Hvor grinede jeg så meget!:)
Opmærksomhed! Installation af OpenWrt kan tegne din router. Men når den er færdig, låser den fuld kraft og kontrol op. Jeg er ikke modig nok til at give nogen instruktioner her, da de kan være forskellige for hver routermodel.
Men hvis du allerede har OpenWrt på din router, kan du starte med denne vejledning om ikke så længe
BTW, nogle udviklingsbrætter leveres med OpenWrt out-of-the-box, som Onion Omega, VoCore, LinkIt Smart 7688 og andre. Denne vejledning forklarer også nogle grundlæggende ideer bag oprettelse af sådanne apps, så du nemt kan tilpasse den til at arbejde med Raspberry Pi og lignende.
Til dette projekt vil jeg mest bruge forudinstalleret software (tilgængelig på enhver OpenWrt-aktiveret router). Men for nogle avancerede funktioner skulle jeg installere yderligere pakker. Dette gøres med bare et par klik, så jeg vil inkludere instruktionerne her.
Jeg antager også, at du allerede ved:
- Sådan åbnes/bruges SSH -terminal til din OpenWrt -router
- Sådan uploades/redigeres filer på din router (brug FileZilla eller scp/sftp)
- Sådan arbejder du med Linux -konsol
Trin 2: Software og værktøjer
![Software og værktøjer Software og værktøjer](https://i.howwhatproduce.com/images/004/image-10073-19-j.webp)
På smartphonesiden bruger jeg Blynk. Det giver iOS- og Android -apps til at styre enhver hardware. Du kan nemt bygge smukke grafiske grænseflader til alle dine projekter ved blot at trække og slippe widgets direkte på din smartphone. Blynk bruges mest med Arduino, Raspberry Pi osv. Men hvorfor ikke køre det på selve routeren?;)
På enhedsiden vil jeg bruge Lua til at scripte den nødvendige funktionalitet. Jeg kunne også bruge Python eller Node.js, men desværre er disse muligheder ikke altid tilgængelige på grund af mangel på ressourcer på nogle routere. Eller C/C ++, men det er ikke så praktisk at arbejde med (omkompilering for hver ændring osv.) På den anden side er Lua forudinstalleret, let at bruge og lære. Det bruges af standardwebgrænsefladen, LuCI.
Trin 3: Oprettelse af en minimal app
Det er lige så let at komme i gang med Blynk og Lua som:
- Download Blynk -appen (fra App Store, Google Play)
- Opret et nyt projekt, og få Auth Token
- Følg Blynk Lua installationsvejledningen til OpenWrt.
Brug SSH til at få adgang til din router -konsol. Efter at have kørt standardeksemplet:
lua./examples/client.lua
Vi skulle se noget i stil med dette:
Tilslutning…
SSL håndtryk … Klar.
Hvilket betyder, at den sikre, tovejsforbindelse til appen er etableret! YAY!
Vi kan nu let udvide det angivne eksempel, så det gør noget interessant. Jeg har oprettet en kopi af dette eksempel for at redigere det:
cp./examples/client.lua./blynkmon.lua
Trin 4: Tilføjelse af nogle oplysninger: Antal klienter, WAN IP -adresse, oppetid
Den grundlæggende idé er at få informationen fra operativsystemet med jævne mellemrum, udføre nogle enkle beregninger, hvis det er nødvendigt, og derefter sende resultatet til Blynk til visning.
I Linux/OpenWrt har vi flere måder at hente systemdata på:
- Kør en kommando, og analyser den tekst, den udsender
- Kør en kommando, og se den exit -kode, den returnerer
- Læs en systemfil, der findes i/proc/og/sys/class/directories
Nu vil jeg vise antallet af tilsluttede enheder.
Når jeg kører cat/proc/net/arp på konsollen, udsender den listen over kendte enheder sammen med deres MAC- og IP -adresser:
IP -adresse HW -type Flag HW -adresse 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
Vi kan analysere det direkte i Lua, men det er ofte lettere at bruge specialiserede værktøjer. På Linux er disse grep, hoved, hale, snit, wc, awk.
For at få antallet af klienter fra arp -output skal jeg filtrere tabellen (fjerne ikke -relaterede elementer) og tælle tabelrækkerne, hvilket resulterer i følgende kommando:
kat/proc/net/arp | grep br-lan | grep 0x2 | wc -l
Lad os prøve det:
root@router: ~/lua-blynk# cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l
1
Store. Vi får nu ideen om, hvordan vi kan indsamle alle de nødvendige oplysninger. Lad os automatisere det. For at gøre vores kode ren og udvidelig, lad os oprette nogle hjælperfunktioner:
funktion exec_out (cmd)
lokal fil = io.popen (cmd) hvis ikke fil, returner nul end lokal output = fil: læs ('*alle') fil: luk () print ("Kør:"..cmd.. " ->".. output) return output output end function read_file (sti) lokal fil = io.open (sti, "rb") hvis ikke fil så returner nul end lokalt indhold = fil: læs "*a" fil: close () print ("Læs: "..sti.." -> "..indhold) returnerer indholdsafslutning
Ved hjælp af disse værktøjer kan vi nu implementere de faktiske datahentningsfunktioner:
funktion getArpClients ()
returner tonumber (exec_out ("cat/proc/net/arp | grep br -lan | grep 0x2 | wc -l")) slut funktion getUptime () return tonumber (exec_out ("cat/proc/uptime | awk '{print $ 1 } '")) slutfunktion getWanIP () return exec_out (" ifconfig eth0.2 | grep' inet addr: '| cut -d: -f2 | awk' {print $ 1} '") end
Du kan køre dele af disse shell -kommandoer for at få en dybere forståelse af, hvordan det fungerer, og for at tilpasse det til dine behov.
Den letteste del er at sende dataene til Blynk -appen. Standardeksemplet konfigurerer allerede timeren, der kører en kode hvert 5. sekund, så vi genbruger den bare:
lokal tmr1 = Timer: ny {interval = 5000, func = funktion ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) blynk: virtualWrite (12, getWanIP ()) end}
I appen tilføjer vi 3 label -widgets og tildeler dem til Virtual Pins 10, 11, 12 i overensstemmelse hermed.
Selvom dette virker, er det ret ineffektivt, da WAN IP eller antallet af klienter ikke opdateres så ofte. Lad os rette dette
For WAN IP flytter vi det til tilsluttet handler. Det køres hver gang routeren opretter forbindelse til Blynk Cloud. Dette bør være tilstrækkeligt:
blynk: on ("tilsluttet", funktion ()
print ("Klar.") blynk: virtualWrite (12, getWanIP ()) ende)
For oppetid og klientnummer opretter vi en separat timer med 5 min. interval:
lokal tmr2 = Timer: ny {interval = 5*60*1000, func = funktion ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) end}
Trin 5: WiFi -kontrol: TIL/FRA
![WiFi -kontrol: TIL/FRA WiFi -kontrol: TIL/FRA](https://i.howwhatproduce.com/images/004/image-10073-20-j.webp)
Indtil nu fik vi kun nogle oplysninger fra enheden. Lad os prøve at kontrollere det!
blynk: on ("V20", funktion (param)
hvis param [1] == "1" derefter os.execute ("wifi up") ellers os.execute ("wifi down") ende ende)
På appsiden tilføjede jeg lige en Button -widget (tilstand: Switch) og tildelte den til V20.
Det er det. Fantastiske.
Trin 6: Diagram over systemstatistik
![Systemstatistik Systemstatistik](https://i.howwhatproduce.com/images/004/image-10073-21-j.webp)
![Systemstatistik Systemstatistik](https://i.howwhatproduce.com/images/004/image-10073-22-j.webp)
funktion getCpuLoad ()
return tonumber (exec_out ("top -bn1 | grep 'CPU:' | head -n1 | awk '{print $ 2+$ 4}'")) slutfunktion getRamUsage () return tonumber (exec_out ("free | grep Mem | awk ' {print ($ 3- $ 7)/$ 2 * 100,0} '")) slut
Vi skal også sende dataene til Blynk (lad os bruge tmr1 igen):
lokal tmr1 = Timer: ny {interval = 5000, func = funktion ()
blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) end}
På App -siden skal du tilføje SuperChart -widget. Tilføj CPU, RAM datastreams og tildel til V5, V6.
Trin 7: HDD -spinningsstatus
Min router har et eksternt HDD -drev tilsluttet som en netværkstilsluttet lagerenhed. Sagen er, at dette drev er konfigureret til at begynde at dreje, når nogen får adgang til det, og til at suspendere efter en timeout.
Det ville naturligvis være fedt at vide, hvor mange gange det tænder i løbet af en dag. Så jeg tilføjede endnu en datastream til mit systemdiagram.
Det er lidt mere vanskeligt at få status for HDD -drevet, men jeg fandt en måde! Først og fremmest skal du installere smartmontools fra SSH -konsollen:
opkg opdatering
opkg installer smartmontools
Derefter skal vi i vores kode køre en særlig kommando og kontrollere exitkoden:
funktion exec_ret (cmd)
lokal exit = os.execute (cmd) print ("Run:"..cmd.. " -> exit:".. exit) return exit exit function getHddSpinning () if exec_ret ("smartctl --nocheck = standby --info /dev/sda>/dev/null ") == 0 returner derefter 1 else returner 0 ende ende
Bemærk: min harddisk er /dev /sda
Trin 8: Netværksaktivitetskort
![Netværksaktivitetskort Netværksaktivitetskort](https://i.howwhatproduce.com/images/004/image-10073-23-j.webp)
Vi opretter en anden SuperChart -widget (ligner den forrige), tilføjer TX- og RX -datastreams, og tildeler V1 og V2. Bemærk: Jeg vil vise WAN -port statc, og min WAN -port er eth0.2
Hjælperfunktioner:
funktion getWanRxBytes ()
returner tonumber (read_file ("/sys/class/net/eth0.2/statistics/rx_bytes")) slutfunktion getWanTxBytes () return tonumber (read_file ("/sys/class/net/eth0.2/statistics/tx_bytes")) slut
Tilføj derefter en kode til den samme tmr1. Dette er mere kompliceret, da vi kun skal beregne og vise forskellen i transmitterede/modtagne bytes:
lokal prevTx, prevRx
lokal tmr1 = Timer: ny {interval = 5000, func = funktion () lokal tx = getWanTxBytes () lokal rx = getWanRxBytes () hvis prevTx og prevTx ~ = tx derefter blynk: virtualWrite (1, tx - prevTx) slutter hvis prevRx og prevRx ~ = rx derefter blynk: virtualWrite (2, rx - prevRx) ende prevTx = tx prevRx = rx blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) blynk: virtualWrite (7, getHddSpinning ()) slut}
Trin 9: Meddelelser
![Meddelelser Meddelelser](https://i.howwhatproduce.com/images/004/image-10073-24-j.webp)
Jeg ville også have besked, når min router mister strøm eller internetforbindelse. Til dette har vi brug for meddelelseswidget.
Aktiver "offline -meddelelse" i widgetindstillinger. Ingen kode nødvendig. Men vi kan også sende tilpassede meddelelser fra vores kode.
Trin 10: Autorun i baggrunden
For nu skal scriptet udføres manuelt, men jeg vil få det til at køre i baggrunden automatisk, når routeren tændes.
Dette gøres ved at oprette en service. Opret en fil /etc/init.d/blynkmon:
#!/bin/sh /etc/rc.common
START = 99 STOP = pidfile = "/var/run/blynkmon.pid" start () {if [-f $ pidfile]; ekko derefter "blynkmon kører allerede" exit 0 fi cd /root /lua-blynk lua blynkmon.lua your-auth-token> /dev /null & echo $! > $ pidfile} stop () {hvis [! -f $ pidfile]; ekko derefter "blynkmon ikke kører" exit 0 fi kill -9 $ (cat $ pidfile) rm $ pidfile}
Bemærk: glem ikke at udskifte dit-auth-token
Aktiver derefter blynkmon -service:
service blynkmon aktivere
Trin 11: Konklusion og yderligere ideer
![Konklusion og yderligere ideer Konklusion og yderligere ideer](https://i.howwhatproduce.com/images/004/image-10073-25-j.webp)
Du kan scanne denne QR for at få klonen af mit Blynk -projekt. Det kræver nogle energipunkter (4600), da det bruger mange widgets!
Find den fulde Lua -kode her:
Så langt så godt, men her er nogle ideer, jeg gerne vil tilføje i nær fremtid.
- Tilføj kommando om genstart. Undgå at klikke på det ved et uheld.
- Tilføj Terminal -widget for at køre enhver linux -kommando.
-
Tilføj CPU -temperaturdiagram.
UPD: Desværre mangler OpenWrt i øjeblikket nogle drivere til min routermodel. Men den er tilgængelig for mange andre routere
- Tilføj meddelelse, når en bestemt enhed slutter sig til/forlader netværket. Vi har allerede arp -oplysninger, tjek nu kun MAC -adressen.
På denne måde kan vi overvåge og styre 3D -printere, robotter, en almindelig pc/bærbar computer, Arduino/ESP8266/ESP32/RaspberryPi -ting, Smart Home -enheder og stort set alt omkring. Lad mig vide, hvis du har andre interessante ideer. Hvad synes du om alt dette?
Anbefalede:
Sådan laver du din egen WIFI -gateway til at forbinde din Arduino til IP -netværk?: 11 trin (med billeder)
![Sådan laver du din egen WIFI -gateway til at forbinde din Arduino til IP -netværk?: 11 trin (med billeder) Sådan laver du din egen WIFI -gateway til at forbinde din Arduino til IP -netværk?: 11 trin (med billeder)](https://i.howwhatproduce.com/images/004/image-10449-j.webp)
Sådan laver du din egen WIFI -gateway til at forbinde din Arduino til IP -netværk?: Som så mange mennesker synes du, at Arduino er en meget god løsning til hjemmeautomatisering og robotik! Men når det kommer til kommunikation, kommer Arduinos bare med serielle links. Jeg arbejder på en robot, der skal være permanent forbundet med en server, der kører ar
Fjernadgang til Raspberry Pi: SSH, Dekstop & FTP: 4 trin
![Fjernadgang til Raspberry Pi: SSH, Dekstop & FTP: 4 trin Fjernadgang til Raspberry Pi: SSH, Dekstop & FTP: 4 trin](https://i.howwhatproduce.com/images/005/image-14128-j.webp)
Fjernadgang til Raspberry Pi: SSH, Dekstop & FTP: I dette indlæg vil vi se på 3 forskellige metoder, som du kan få fjernadgang til Raspberry Pi for at gøre det lidt lettere at arbejde med det. Den første er SSH, som giver dig fjernadgang til terminalen. Den anden er en remo
Byg en $ 15 fjernbetjent ESP8266 Robot Butler / bil / tank til Ios og Android: 4 trin
![Byg en $ 15 fjernbetjent ESP8266 Robot Butler / bil / tank til Ios og Android: 4 trin Byg en $ 15 fjernbetjent ESP8266 Robot Butler / bil / tank til Ios og Android: 4 trin](https://i.howwhatproduce.com/images/010/image-28945-j.webp)
Byg en fjernbetjent ESP8266 Robot Butler / bil / tank til $ 15 til Ios og Android på $ 15: Hader du at gå til køkkenet for at få en snack? Eller for at få en ny drink? Alt dette kan løses med denne enkle $ 15 fjernbetjente butler. Inden vi går videre, kører jeg et Kickstarter -projekt lige nu til en stemmestyret RGB -ledstrip
Lav en sikker zone til Android/IOS/WIN10 -enheder, så de forbliver ulåste: 6 trin
![Lav en sikker zone til Android/IOS/WIN10 -enheder, så de forbliver ulåste: 6 trin Lav en sikker zone til Android/IOS/WIN10 -enheder, så de forbliver ulåste: 6 trin](https://i.howwhatproduce.com/images/002/image-5760-12-j.webp)
Lav en sikker zone til Android/IOS/WIN10 -enheder, der skal forblive ulåste: I denne artikel vil vi lave en sej gadget, der kan skabe en sikker zone, hvor dine enheder kan låses op. I slutningen af dette projekt lærer du: hvordan du bruger en fingeraftrykssensor. Vil lære at parre dine enheder med din gadget til sikker zone. Vil
Sådan gør du din LG EnV 2 -mobiltelefon til et bærbart opkaldsmodem til din bærbare computer (eller skrivebord): 7 trin
![Sådan gør du din LG EnV 2 -mobiltelefon til et bærbart opkaldsmodem til din bærbare computer (eller skrivebord): 7 trin Sådan gør du din LG EnV 2 -mobiltelefon til et bærbart opkaldsmodem til din bærbare computer (eller skrivebord): 7 trin](https://i.howwhatproduce.com/images/005/image-14549-28-j.webp)
Sådan gør du din LG EnV 2 -mobiltelefon til et bærbart opkaldsmodem til din bærbare computer (eller skrivebord): Vi har alle på et tidspunkt haft brug for at bruge internettet, hvor det bare ikke har været muligt, f.eks. I bilen , eller på ferie, hvor de opkræver et dyrt beløb i timen for at bruge deres wifi. endelig har jeg fundet på en simpel måde at få