Mündəricat:
- Addım 1: Hesab edirəm ki, artıq OpenWrt -ə sahibsiniz …
- Addım 2: Proqram və Alətlər
- Addım 3: Minimal Tətbiq Yarat
- Addım 4: Bəzi məlumatlar əlavə edin: Müştəri sayı, WAN IP ünvanı, İş vaxtı
- Addım 5: WiFi İdarəetmə: ON/OFF
- Addım 6: Sistem Statistikası Cədvəli
- Addım 7: HDD Dönmə Vəziyyəti
- Addım 8: Şəbəkə Aktivliyi Qrafiki
- Addım 9: Bildirişlər
- Addım 10: Arxa planda avtomatik işə salın
- Addım 11: Nəticə və Əlavə Fikirlər
Video: OpenWrt Routerinizə Uzaqdan Giriş üçün Android/iOS Tətbiqi: 11 Addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:46
Bu yaxınlarda yeni bir yönləndirici aldım (Xiaomi Mi Router 3G). Əlbəttə ki, bu yeni, zəhmli aparat məni bu layihə üzərində işləməyə ilhamlandırdı;)
Addım 1: Hesab edirəm ki, artıq OpenWrt -ə sahibsiniz …
Əvvəlcə OpenWrt-i qurmalı idim … Əsasən bu təlimatı izlədim (bu yönləndirici modelinə xasdır): https://dzone.com/articles/hacking-into-xiaomi-mi-… Bunun üzərində işləyərkən bu zəhmli videonu tapdım: Openwrt quraşdırılması, WiFi kriteriyası, Qız yoldaşının yanıp sönməsi. Vay o qədər güldüm ki!:)
Diqqət! OpenWrt -in quraşdırılması marşrutlaşdırıcınızı kərpicləndirə bilər. Ancaq tamamlandıqdan sonra tam güc və nəzarəti açar. Hər bir yönlendirici modeli üçün fərqli ola biləcəyi üçün burada heç bir təlimat verməyə cəsarətim çatmır.
Routerinizdə artıq OpenWrt varsa, bu dərsdən notime ilə başlaya bilərsiniz
BTW, bəzi inkişaf lövhələri, Onion Omega, VoCore, LinkIt Smart 7688 və digərləri kimi OpenWrt ilə birlikdə gəlir. Bu təlimat, bu cür tətbiqlər yaratmağın arxasındakı bəzi əsas fikirləri də izah edir, buna görə də Raspberry Pi və bənzərləri ilə işləməyə asanlıqla uyğunlaşdıra bilərsiniz.
Bu layihə üçün əsasən əvvəlcədən quraşdırılmış proqramlardan istifadə edəcəyəm (hər hansı bir OpenWrt aktiv routerdə mövcuddur). Ancaq bəzi inkişaf etmiş funksiyalar üçün əlavə paketlər quraşdırmalı oldum. Bu bir neçə kliklə edilir, buna görə təlimatları bura daxil edəcəyəm.
Həm də güman edirəm ki, artıq bilirsiniz:
- OpenWrt yönlendiricinize SSH terminalını necə açmaq/istifadə etmək olar
- Routerinizə faylları necə yükləmək/redaktə etmək olar (FileZilla və ya scp/sftp istifadə edin)
- Linux konsolu ilə necə işləmək olar
Addım 2: Proqram və Alətlər
Smartfon tərəfində Blynk istifadə edirəm. Hər hansı bir cihazı idarə etmək üçün iOS və Android tətbiqləri təmin edir. Smartfonunuzda widgetları sürükləyərək ataraq bütün layihələriniz üçün asanlıqla gözəl qrafik interfeyslər qura bilərsiniz. Blynk əsasən Arduino, Raspberry Pi və s. İlə birlikdə istifadə olunur. Amma niyə marşrutlaşdırıcının özündə işləmir?;)
Cihaz tərəfində ehtiyac duyulan funksiyanı yazmaq üçün Lua -dan istifadə edəcəyəm. Python və ya Node.js -dən də istifadə edə bilərdim, amma təəssüf ki, bəzi marşrutlaşdırıcılarda resursların olmaması səbəbindən bu variantlar həmişə mövcud olmur. Və ya C/C ++, amma işləmək o qədər də rahat deyil (hər dəyişiklik üçün yenidən tərtib etmək və s.) Digər tərəfdən, Lua əvvəlcədən quraşdırılmışdır, istifadəsi və öyrənilməsi sadədir. Varsayılan veb interfeysi LuCI tərəfindən istifadə olunur.
Addım 3: Minimal Tətbiq Yarat
Blynk və Lua ilə işə başlamaq çox asandır:
- Blynk Tətbiqini yükləyin (App Store, Google Play -dən)
- Yeni bir layihə yaradın və Doğrulama Tokenini əldə edin
- OpenWrt üçün Blynk Lua quraşdırma təlimatlarına əməl edin.
Router konsolunuza daxil olmaq üçün SSH istifadə edin. Varsayılan nümunəni işlədikdən sonra:
lua./ misallar/müştəri.lua
Bənzər bir şey görməliyik:
Qoşulur…
SSL əl sıxışması… Hazırdır.
Bu, tətbiqə etibarlı, iki yönlü bir əlaqə qurulduğunu göstərir! YAY!
İndi verilən nümunəni asanlıqla uzada bilərik, buna görə maraqlı bir şey edir. Düzəltmək üçün bu nümunənin bir nüsxəsini yaratdım:
cp./examples/client.lua./blynkmon.lua
Addım 4: Bəzi məlumatlar əlavə edin: Müştəri sayı, WAN IP ünvanı, İş vaxtı
Əsas fikir, OS -dən məlumatları vaxtaşırı almaq, lazım olduqda bir neçə sadə hesablama aparmaq və nəticəni göstərmək üçün Blynk -ə göndərməkdir.
Linux/OpenWrt -də sistem məlumatlarını əldə etməyin bir neçə yolu var:
- Bir əmri işlədin və çıxardığı mətni təhlil edin
- Bir əmr işlədin və geri döndüyü çıxış kodunu izləyin
- /Proc/və/sys/class/dizinlərində yerləşən bir sistem faylını oxuyun
İndi bağlı cihazların sayını göstərmək istəyirəm.
Konsolda cat/proc/net/arp işlədərkən, MAC və IP ünvanları ilə birlikdə tanınmış cihazların siyahısını çıxarır:
IP ünvanı HW növü Bayraqlar HW ünvanı Mask Cihazı
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
Bunu birbaşa Lua -da təhlil edə bilərik, lakin xüsusi yardım proqramlarından istifadə etmək çox vaxt daha asandır. Linux -da bunlar grep, head, tail, cut, wc, awk -dir.
Müştəri sayını arp çıxışından əldə etmək üçün cədvəli süzgəcdən keçirməliyəm (əlaqəsiz maddələri sil) və aşağıdakı satırla nəticələnən cədvəl satırlarını saymalıyam:
cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l
Gəlin sınayaq:
kök@yönləndirici: ~/lua-blynk# cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l
1
Əla. İndi bütün lazımi məlumatları necə toplaya biləcəyimizi başa düşürük. Kodumuzu təmiz və genişləndirmək üçün bəzi köməkçi funksiyalar yaradaq:
exec_out funksiyası (cmd)
local file = io.popen (cmd) fayl deyilsə, nil end local output = file: read ('*all') file: close () print ("Run:"..cmd.. " ->".. çıxış) çıxış sonu funksiyasını qaytarın read_file (yol) yerli fayl = io.open (yol, "rb") fayl deyilsə, nil son yerli məzmun = fayl: "*a" faylını oxuyun: close () çap ("Oxu: "..yol.." -> ".. məzmun) məzmun sonunu qaytarın
Bu yardım proqramlarından istifadə edərək, indi faktiki məlumat gətirmə funksiyalarını həyata keçirə bilərik:
getArpClients funksiyası ()
geri tonumber (exec_out ("cat/proc/net/arp | grep br -lan | grep 0x2 | wc -l")) son funksiyası getUptime () tonumber qaytar (exec_out ("cat/proc/uptime | awk '{print $ 1) } '")) son funksiyası getWanIP () qaytar exec_out (" ifconfig eth0.2 | grep' inet addr: '| cut -d: -f2 | awk' {print $ 1} '") end
Bunun necə işlədiyini daha yaxşı başa düşmək və ehtiyaclarınıza uyğunlaşdırmaq üçün bu qabıq əmrlərinin bir hissəsini işlədə bilərsiniz.
Ən asan hissəsi məlumatları Blynk Tətbiqinə göndərməkdir. Varsayılan nümunə, hər 5 saniyədə bir kod işlədən taymer qurur, buna görə yenidən istifadə edirik:
yerli tmr1 = Zamanlayıcı: yeni {interval = 5000, func = funksiya ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) blynk: virtualWrite (12, getWanIP ()) end}
Tətbiqdə 3 etiket vidceti əlavə edirik və onları müvafiq olaraq Virtual Pins 10, 11, 12 -ə təyin edirik.
Bu işləyərkən WAN IP və ya müştəri sayı o qədər də tez -tez yeniləmədiyi üçün olduqca səmərəsizdir
WAN IP üçün onu əlaqəli idarəçiyə köçürürük. Router Blynk Cloud ilə əlaqə quranda hər dəfə işləyəcək. Bu kifayət etməlidir:
blynk: on ("bağlı", funksiya ()
print ("Hazırdır.") blynk: virtualWrite (12, getWanIP ()) sonu)
Uptime və Müştəri Nömrələri üçün 5 dəqiqəlik ayrı bir taymer yaradırıq. interval:
local tmr2 = Zamanlayıcı: yeni {interval = 5*60*1000, func = funksiya ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) son}
Addım 5: WiFi İdarəetmə: ON/OFF
İndiyə qədər cihazdan yalnız bəzi məlumatlar alırdıq. Nəzarət etməyə çalışaq!
blynk: açıq ("V20", funksiya (parametr)
əgər param [1] == "1", onda os.execute ("wifi yuxarı") başqa os.execute ("wifi aşağı") sonu)
Tətbiq tərəfində bir Düymə vidceti əlavə etdim (rejim: Keçid) və V20 -yə təyin etdim.
Bu belədir. İnanılmaz.
Addım 6: Sistem Statistikası Cədvəli
getCpuLoad () funksiyası
tonumber qaytarın (exec_out ("top -bn1 | grep 'CPU:' | head -n1 | awk '{print $ 2+$ 4}'")) son funksiyası getRamUsage () tonumber qaytarın (exec_out ("pulsuz | grep Mem | awk '') {çap ($ 3- $ 7)/$ 2 * 100.0} '")) son
Məlumatları da Blynk -ə göndərməliyik (yenidən tmr1 istifadə edək):
local tmr1 = Zamanlayıcı: yeni {interval = 5000, func = funksiya ()
blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) son}
Tətbiq tərəfində SuperChart vidceti əlavə edin. CPU, RAM məlumat axınlarını əlavə edin və V5, V6 -ya təyin edin.
Addım 7: HDD Dönmə Vəziyyəti
Marşrutlaşdırıcımda Şəbəkəyə Bağlı Yaddaş Cihazı olaraq bağlanan xarici bir HDD sürücüsü var. Məsələ burasındadır ki, bu sürücü kimsə ona daxil olduqda fırlanmağa başlayacaq və zaman aşımından sonra dayandıracaq.
Gün ərzində neçə dəfə açıldığını bilmək çox gözəl olardı. Beləliklə, sistem qrafikimə başqa bir məlumat axını əlavə etdim.
HDD sürücüsünün statusunu əldə etmək bir az çətindir, amma bir yol tapdım! Əvvəlcə SSH konsolundan smartmontools quraşdırın:
opkg yeniləməsi
opkg smartmontools quraşdırın
Sonra kodumuzda xüsusi bir əmr işə salmalı və çıxış kodunu yoxlamalıyıq:
exec_ret funksiyası (cmd)
local exit = os.execute (cmd) print ("Run:"..cmd.. " -> exit:".. exit) return end end function getHddSpinning () if exec_ret ("smartctl --nocheck = standby --info") /dev/sda>/dev/null ") == 0 sonra 1 geri qayıdın, 0 geri qayıdın 0 son
Qeyd: HDD /dev /sda
Addım 8: Şəbəkə Aktivliyi Qrafiki
Başqa bir SuperChart vidjeti yaradırıq (əvvəlkisinə bənzər), TX və RX məlumat axınlarını əlavə edirik və V1 və V2 -yə təyin edirik. Qeyd: WAN port statcini göstərmək istəyirəm və WAN portum eth0.2
Köməkçi funksiyaları:
getWanRxBytes funksiyası ()
tonu qaytar) son
Sonra, eyni tmr1 -ə bir neçə kod əlavə edin. Bu daha mürəkkəbdir, çünki yalnız ötürülən/alınan baytlar arasındakı fərqi hesablamalı və göstərməliyik:
yerli prevTx, prevRx
local tmr1 = Timer: new {interval = 5000, func = function () local tx = getWanTxBytes () local rx = getWanRxBytes () if prevTx and prevTx ~ = tx then blynk: virtualWrite (1, tx - prevTx) prevRx və prevRx ~ = rx sonra blynk: virtualWrite (2, rx - prevRx) son prevTx = tx prevRx = rx blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) blynk: virtualWrSpinning (7, getHedH))) son}
Addım 9: Bildirişlər
Routerim güc və ya internet bağlantısı kəsildikdə də xəbərdar olmaq istədim. Bunun üçün Bildiriş widgetına ehtiyacımız var.
Widget ayarlarında "offline bildiriş" i aktiv edin. Heç bir kod lazım deyil. Ancaq kodumuzdan xüsusi bildirişlər də göndərə bilərik.
Addım 10: Arxa planda avtomatik işə salın
Hələlik skript əl ilə icra edilməlidir, ancaq router işə salındıqda avtomatik olaraq arxa planda işləməsini təmin etmək istəyirəm.
Bu xidmət yaratmaqla edilir. Bir fayl yaradın /etc/init.d/blynkmon:
#!/bin/sh /etc/rc.common
START = 99 DUR = pidfile = "/var/run/blynkmon.pid" start () {if [-f $ pidfile]; sonra "blynkmon artıq işləyir" echo 0 fi cd /root /lua-blynk lua blynkmon.lua your-auth-token> /dev /null & echo $! > $ pidfile} stop () {if [! -f $ pidfile]; sonra echo "blynkmon işləmir" çıxışı 0 fi kill -9 $ (cat $ pidfile) rm $ pidfile}
Qeyd: auth-tokeninizi dəyişdirməyi unutmayın
Sonra, blynkmon xidmətini aktiv edin:
blynkmon xidmətini aktiv edin
Addım 11: Nəticə və Əlavə Fikirlər
Blynk Layihəmin klonunu əldə etmək üçün bu QR -i skan edə bilərsiniz. Bir çox widget istifadə etdiyi üçün bəzi enerji nöqtələri (4600) tələb edir!
Tam Lua kodunu burada tapın:
İndiyə qədər çox yaxşıdır, amma yaxın gələcəkdə əlavə etmək istədiyim fikirlər var.
- Yenidən başladın əmrini əlavə edin. Təsadüfən tıklamağın qarşısını alın.
- İstənilən linux əmrini yerinə yetirmək üçün Terminal vidceti əlavə edin.
-
CPU temperatur cədvəli əlavə edin.
UPD: Təəssüf ki, OpenWrt -də hazırda router modelim üçün bəzi sürücülər yoxdur. Ancaq bir çox digər marşrutlaşdırıcılar üçün mövcuddur
- Müəyyən bir cihaz şəbəkəyə qoşulduqda/ayrıldıqda bildiriş əlavə edin. Artıq arp məlumatımız var, indi yalnız MAC ünvanını yoxlayın.
Bu şəkildə, 3D Yazıcıları, Robotları, adi bir PC/Laptopu, Arduino/ESP8266/ESP32/RaspberryPi materiallarını, Ağıllı Ev cihazlarını və ətrafdakı hər şeyi izləyə və idarə edə bilərik. Başqa maraqlı fikirləriniz varsa mənə bildirin. Bütün bunlar haqqında nə düşünürsünüz?
Tövsiyə:
AmbiBox IOS Uzaqdan İdarəetmə Tətbiqi: 5 addım
AmbiBox IOS Uzaqdan İdarəetmə Tətbiqi: Bu iOS tətbiqi ilə iPhone və ya iPad -dən AmbiBox -a nəzarət edə bilərsiniz. Tətbiqdən və AmbiBox serveri ilə necə əlaqə quracağından danışacağam, AmbiBox və led şeritlərin necə qurulacağını bilmək istəyirsinizsə, bir neçə dərslik var
Ios və Android üçün 15 dollarlıq Uzaqdan İdarə olunan ESP8266 Robot Butler / Avtomobil / Tank yaradın: 4 addım
Ios və Android üçün 15 dollarlıq Uzaqdan İdarə olunan ESP8266 Robot Butler / Avtomobil / Tank hazırlayın: Qəlyanaltı almaq üçün mətbəxə getməyi xoşlamırsınız? Yoxsa yeni bir içki almaq üçün? Bütün bunlar bu 15 dollarlıq uzaqdan idarə olunan uşağın köməyi ilə düzəldilə bilər. Daha irəli getməzdən əvvəl səsli RGB ledstrip üçün hazırda Kickstarter layihəsi həyata keçirirəm
Amazon Fire Uzaqdan Uzaqdan TV Uzaqdan sürüşdürün: 3 Addım (Şəkillərlə birlikdə)
Amazon Fire Uzaqdan Uzaqdan TV Uzaqdan Sürüşdürün: Oh Amazon, Fire TV'niz çox gözəldir, niyə bizə pultunuzda səs idarəetməsini vermədiniz? Yaxşı ki, Amazon -da 5 dollardan aşağı qiymətə bu sevimli kiçik uzaqdan, güc, səssiz satın ala bilərsiniz. , həcmi və hamısı kiçik bir paketdə. 3d printerə daxil edin
BLE Modulları üçün sadə IOS Tətbiqi: 4 addım
BLE Modulları üçün Sadə IOS Tətbiqi: Bu Təlimat, çox əsas funksionallığı olan bir iOS tətbiqini necə yarada biləcəyinizi izah edir. Bu Təlimat, iOS BLE tətbiqi hazırlamaq üçün bütün prosesi keçməyəcək. Yalnız bəzi vacib elementlərə yüksək səviyyəli bir baxış verəcək
IR Uzaqdan Uzaqdan Uzaqdan Çevirin: 9 Addım (Şəkillərlə birlikdə)
IR Uzaqdan Uzaqdan Uzaqdan RF -yə çevirin: Bugünkü Təlimat kitabında, ümumi bir RF modulunu mikro nəzarətçi olmadan necə istifadə edə biləcəyinizi sizə göstərəcəyəm ki, nəticədə hər hansı bir cihazın IR uzaqdan idarəetmə cihazını RF -yə çevirə biləcəyiniz bir layihə hazırlayaq. Uzaqdan. Çevirmənin əsas üstünlüyü