İçindekiler:
- Adım 1: Zaten OpenWrt'e Sahip Olduğunuzu Varsayıyorum…
- 2. Adım: Yazılım ve Araçlar
- 3. Adım: Minimal Bir Uygulama Oluşturma
- Adım 4: Bazı Bilgilerin Eklenmesi: İstemci Sayısı, WAN IP Adresi, Çalışma Süresi
- Adım 5: WiFi Kontrolü: AÇIK/KAPALI
- Adım 6: Sistem İstatistikleri Tablosu
- 7. Adım: HDD Dönme Durumu
- Adım 8: Ağ Etkinliği Tablosu
- 9. Adım: Bildirimler
- Adım 10: Arka Planda Otomatik Çalıştırma
- Adım 11: Sonuç ve Diğer Fikirler
Video: OpenWrt Yönlendiricinize Uzaktan Erişmek için Android/iOS Uygulaması: 11 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Geçenlerde yeni bir yönlendirici (Xiaomi Mi Router 3G) satın aldım. Ve elbette, bu yeni, harika donanım parçası, bu proje üzerinde çalışmaya başlamam için bana ilham verdi;)
Adım 1: Zaten OpenWrt'e Sahip Olduğunuzu Varsayıyorum…
Önce OpenWrt'i kurmam gerekiyordu… Çoğunlukla bu kılavuzu takip ettim (bu yönlendirici modeline özel):https://dzone.com/articles/hacking-into-xiaomi-mi-…Bunun üzerinde çalışırken bu harika videoyu buldum: Openwrt kurulumu, WiFi benchmark, Girlfriend Flashing. Wow çok güldüm!:)
Dikkat! OpenWrt'i yüklemek yönlendiricinizi engelleyebilir. Ancak tamamlandığında, tam güç ve kontrolün kilidini açar. Her yönlendirici modeli için farklı olabileceğinden, burada herhangi bir talimat verecek kadar cesur değilim.
Ancak yönlendiricinizde zaten OpenWrt varsa, bu eğitime hemen başlayabilirsiniz
BTW, Onion Omega, VoCore, LinkIt Smart 7688 ve diğerleri gibi bazı geliştirme kartları OpenWrt ile birlikte gelir. Bu eğitim ayrıca, bu tür uygulamaları oluşturmanın ardındaki bazı temel fikirleri açıklar, böylece onu Raspberry Pi ve benzerleriyle çalışmaya kolayca uyarlayabilirsiniz.
Bu proje için çoğunlukla önceden yüklenmiş yazılımı kullanacağım (herhangi bir OpenWrt özellikli yönlendiricide bulunur). Ancak bazı gelişmiş işlevler için ek paketler yüklemem gerekiyordu. Bu sadece birkaç tıklamayla yapılır, bu yüzden talimatları buraya ekleyeceğim.
Ayrıca, zaten bildiğinizi varsayıyorum:
- OpenWrt yönlendiricinize SSH terminali nasıl açılır/kullanılır
- Yönlendiricinize dosyalar nasıl yüklenir/düzenlenir (FileZilla veya scp/sftp kullanın)
- Linux konsolu ile nasıl çalışılır
2. Adım: Yazılım ve Araçlar
Akıllı telefon tarafında Blynk kullanıyorum. Herhangi bir donanımı kontrol etmek için iOS ve Android uygulamaları sağlar. Widget'ları doğrudan akıllı telefonunuzdan sürükleyip bırakarak tüm projeleriniz için kolayca güzel grafik arayüzler oluşturabilirsiniz. Blynk çoğunlukla Arduino, Raspberry Pi vb. ile kullanılır. Ama neden yönlendiricinin kendisinde çalıştırmıyorsunuz?;)
Cihaz tarafında, gerekli işlevselliği kodlamak için Lua kullanacağım. Python veya Node.js de kullanabilirim, ancak ne yazık ki bu seçenekler, bazı yönlendiricilerdeki kaynak eksikliğinden dolayı her zaman mevcut değildir. Veya C/C++, ancak (her değişiklik için yeniden derleme, vb.) ile çalışmak çok uygun değildir. Öte yandan, Lua önceden yüklenmiştir, kullanımı ve öğrenmesi kolaydır. Varsayılan web arayüzü LuCI tarafından kullanılır.
3. Adım: Minimal Bir Uygulama Oluşturma
Blynk ve Lua'yı kullanmaya başlamak şu kadar kolay:
- Blynk Uygulamasını indirin (App Store, Google Play'den)
- Yeni bir proje oluşturun ve Auth Token'ı alın
- OpenWrt için Blynk Lua kurulum talimatlarını izleyin.
Yönlendirici konsolunuza erişmek için SSH kullanın. Varsayılan örneği çalıştırdıktan sonra:
lua./examples/client.lua
Bunun gibi bir şey görmeliyiz:
Bağlanıyor…
SSL anlaşması… Hazır.
Bu, uygulamaya güvenli, çift yönlü bağlantı kurulduğu anlamına gelir! YAY!
Şimdi sağlanan örneği kolayca genişletebiliriz, böylece ilginç bir şey yapar. Düzenlemek için bu örneğin bir kopyasını oluşturdum:
cp./examples/client.lua./blynkmon.lua
Adım 4: Bazı Bilgilerin Eklenmesi: İstemci Sayısı, WAN IP Adresi, Çalışma Süresi
Temel fikir, işletim sisteminden periyodik olarak bilgi almak, gerekirse bazı basit hesaplamalar yapmak ve ardından sonucu görüntülemek için Blynk'e göndermektir.
Linux/OpenWrt'de sistem verilerini almanın birkaç yolu vardır:
- Bir komut çalıştırın ve çıkardığı metni ayrıştırın
- Bir komut çalıştırın ve döndürdüğü çıkış kodunu izleyin
- /proc/ ve /sys/class/ dizinlerinde bulunan bir sistem dosyasını okuyun
Şimdi bağlı cihazların sayısını görüntülemek istiyorum.
Konsolda cat /proc/net/arp çalıştırdığımda, MAC ve IP adresleriyle birlikte bilinen cihazların listesini çıkarıyor:
IP adresi HW tipi Bayraklar HW adresi Maske 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
Doğrudan Lua'da ayrıştırabiliriz, ancak özel yardımcı programları kullanmak genellikle daha kolaydır. Linux'ta bunlar grep, head, tail, cut, wc, awk'dir.
Arp çıktısından istemci sayısını almak için tabloyu filtrelemem (ilgisiz öğeleri kaldırmam) ve aşağıdaki komutla sonuçlanan tablo satırlarını saymam gerekiyor:
kedi /proc/net/arp | grep br-lan | grep 0x2 | wc -l
Hadi deneyelim:
root@router:~/lua-blynk# cat /proc/net/arp | grep br-lan | grep 0x2 | wc -l
1
Harika. Artık gerekli tüm bilgileri nasıl toplayabileceğimiz fikrine sahibiz. Hadi otomatikleştirelim. Kodumuzu temiz ve genişletilebilir hale getirmek için bazı yardımcı işlevler oluşturalım:
fonksiyon exec_out(cmd)
local file = io.popen(cmd) dosya değilse, o zaman nil end local output değerini döndürün: file:read('*all') file:close() print("Çalıştır: "..cmd.." -> ".. çıktı) çıktı döndür bitiş işlevi read_file(path) local file = io.open(path, "rb") dosya değilse, o zaman nil end local içerik döndür = dosya:oku "*a" file:close() print("Oku: "..path.." -> "..content) içerik sonu döndürür
Bu yardımcı programları kullanarak artık gerçek veri alma işlevlerini uygulayabiliriz:
function getArpClients()
dönüş tonumber(exec_out("cat /proc/net/arp | grep br-lan | grep 0x2 | wc -l")) bitiş işlevi getUptime() dönüş tonumber(exec_out("cat /proc/uptime | awk '{print $1 }'")) bitiş işlevi getWanIP() return exec_out("ifconfig eth0.2 | grep 'inet addr:' | cut -d: -f2 | awk '{print $1}'") end
Nasıl çalıştığını daha iyi anlamak ve ihtiyaçlarınıza göre ayarlamak için bu kabuk komutlarının bölümlerini çalıştırabilirsiniz.
En kolay kısım, verileri Blynk Uygulamasına göndermektir. Varsayılan örnek, her 5 saniyede bir kod çalıştıran zamanlayıcıyı zaten ayarlar, bu yüzden onu yeniden kullanırız:
yerel tmr1 = Zamanlayıcı:yeni{aralık = 5000, işlev = işlev()
blynk:virtualWrite(10, getArpClients()) blynk:virtualWrite(11, string.format("%.1f h", getUptime()/60/60)) blynk:virtualWrite(12, getWanIP()) end}
Uygulamada 3 etiket widget'ı ekliyoruz ve buna göre Sanal Pinlere 10, 11, 12 atadık.
Bu çalışırken, WAN IP'si veya istemci sayısı çok sık güncellenmediğinden oldukça verimsizdir. Bunu düzeltelim
WAN IP için onu bağlı işleyiciye taşıyoruz. Yönlendirici, Blynk Cloud ile her bağlantı kurduğunda çalıştırılacaktır. Bu yeterli olmalıdır:
blynk:on("bağlı", function()
print("Hazır.") blynk:virtualWrite(12, getWanIP()) sonu)
Uptime ve Clients Number için 5 dk ile ayrı bir timer oluşturuyoruz. Aralık:
yerel tmr2 = Zamanlayıcı:yeni{aralık = 5*60*1000, işlev = işlev()
blynk:virtualWrite(10, getArpClients()) blynk:virtualWrite(11, string.format("%.1f h", getUptime()/60/60)) end}
Adım 5: WiFi Kontrolü: AÇIK/KAPALI
Şu ana kadar cihazdan sadece bazı bilgiler alıyorduk. Kontrol etmeyi deneyelim!
blynk:on("V20", fonksiyon(param)
if param[1] == "1" o zaman os.execute("wifi up") else os.execute("wifi down") end end)
Uygulama tarafında, bir Düğme widget'ı (mod: Anahtar) ekledim ve onu V20'ye atadım.
Bu kadar. İnanılmaz.
Adım 6: Sistem İstatistikleri Tablosu
işlev getCpuLoad()
dönüş tonumber(exec_out("top -bn1 | grep 'CPU:' | head -n1 | awk '{print $2+$4}'")) end function getRamUsage() return tonumber(exec_out("ücretsiz | grep Mem | awk ') {baskı (3-$7$/$2 * 100.0}'")) bitiş
Ayrıca verileri Blynk'e göndermemiz gerekiyor (tekrar tmr1 kullanalım):
yerel tmr1 = Zamanlayıcı:yeni{aralık = 5000, işlev = işlev()
blynk:virtualWrite(5, getCpuLoad()) blynk:virtualWrite(6, getRamUsage()) bitiş}
Uygulama Tarafında, SuperChart widget'ını ekleyin. CPU, RAM veri akışları ekleyin ve V5, V6'ya atayın.
7. Adım: HDD Dönme Durumu
Yönlendiricimin, Ağa Bağlı Depolama aygıtı olarak bağlı harici bir HDD sürücüsü var. Mesele şu ki, bu sürücü, birisi ona eriştiğinde dönmeye başlayacak ve bir zaman aşımından sonra askıya alınacak şekilde yapılandırılmıştır.
Açıkçası, bir gün boyunca kaç kez açıldığını bilmek harika olurdu. Bu yüzden Sistem grafiğime başka bir veri akışı ekledim.
HDD sürücüsünün durumunu almak biraz daha zor ama bir yol buldum! Her şeyden önce, SSH konsolundan smartmontools'u kurun:
opkg güncellemesi
opkg smartmontools'u kurun
Ardından kodumuzda özel bir komut çalıştırmamız ve çıkış kodunu kontrol etmemiz gerekiyor:
fonksiyon exec_ret(cmd)
yerel çıkış = os.execute(cmd) print("Çalıştır: "..cmd.." -> çıkış:"..exit) exec_ret("smartctl --nocheck=standby --info ise) çıkış bitiş işlevi getHddSpinning() döndür /dev/sda > /dev/null") == 0 sonra 1 döndürür, aksi takdirde 0 döndürür
Not: HDD'm /dev/sda
Adım 8: Ağ Etkinliği Tablosu
Başka bir SuperChart widget'ı oluşturuyoruz (bir öncekine benzer), TX ve RX veri akışlarını ekliyor ve V1 ve V2'ye atadık. Not: WAN bağlantı noktası statc'sini görüntülemek istiyorum ve WAN bağlantı noktam eth0.2
Yardımcı fonksiyonlar:
işlev getWanRxBytes()
dönüş tonumber(read_file("/sys/class/net/eth0.2/statistics/rx_bytes")) bitiş işlevi getWanTxBytes() dönüş tonumber(read_file("/sys/class/net/eth0.2/statistics/tx_bytes")) son
Ardından, aynı tmr1'e biraz kod ekleyin. Bu, yalnızca iletilen/alınan baytlardaki farkı hesaplamamız ve görüntülememiz gerektiğinden daha karmaşıktır:
yerel prevTx, prevRx
local tmr1 = Timer:new{interval = 5000, func = function() local tx = getWanTxBytes() local rx = getWanRxBytes() eğer prevTx ve prevTx ~= tx ise blynk:virtualWrite(1, tx - prevTx) prevRx ise end ve prevRx ~= rx sonra blynk:virtualWrite(2, rx - prevRx) end prevTx = tx prevRx = rx blynk:virtualWrite(5, getCpuLoad()) blynk:virtualWrite(6, getRamUsage()) blynk:virtualHdd(S))) son}
9. Adım: Bildirimler
Ayrıca Router'ım güç veya internet bağlantısı kesildiğinde haberdar olmak istedim. Bunun için Bildirim widget'ına ihtiyacımız var.
Widget ayarlarında "çevrimdışı bildirimi" etkinleştirin. Kod gerekmez. Ancak kodumuzdan özel bildirimler de gönderebiliriz.
Adım 10: Arka Planda Otomatik Çalıştırma
Şimdilik betiğin manuel olarak yürütülmesi gerekiyor, ancak yönlendirici açıldığında otomatik olarak arka planda çalışmasını istiyorum.
Bu, bir hizmet oluşturarak yapılır. /etc/init.d/blynkmon dosyası oluşturun:
#!/bin/sh /etc/rc.common
START=99 STOP= pidfile="/var/run/blynkmon.pid" start() { if [-f $pidfile]; ardından yankı "blynkmon zaten çalışıyor" çıkış 0 fi cd /root/lua-blynk lua blynkmon.lua kimlik doğrulama belirteciniz > /dev/null & echo $! > $pidfile } stop() { if [! -f $pid dosyası]; sonra yankı "blynkmon çalışmıyor" çıkış 0 fi kill -9 $(cat $pidfile) rm $pidfile }
Not: auth-token'ınızı değiştirmeyi unutmayın
Ardından, blynkmon hizmetini etkinleştirin:
hizmet blynkmon etkinleştir
Adım 11: Sonuç ve Diğer Fikirler
Blynk Projemin klonunu almak için bu QR'yi tarayabilirsiniz. Çok sayıda widget kullandığı için bazı enerji noktaları (4600) gerektirir!
Tam Lua kodunu burada bulabilirsiniz:https://Gist.github.com/vshymanskyy/3d3388a4e17f44…
Buraya kadar çok iyi ama yakın gelecekte eklemek istediğim bazı fikirler var.
- Yeniden Başlat komutu ekleyin. Yanlışlıkla üzerine tıklamayı önleyin.
- Herhangi bir linux komutunu çalıştırmak için Terminal widget'ı ekleyin.
-
CPU sıcaklık tablosu ekleyin.
UPD: Maalesef OpenWrt şu anda yönlendirici modelim için bazı sürücülere sahip değil. Ancak diğer birçok yönlendirici için kullanılabilir
- Belirli bir cihaz ağa katıldığında/ayrıldığında bildirim ekleyin. Zaten arp bilgisine sahibiz, şimdi yalnızca MAC adresini kontrol edin.
Bu şekilde, 3D Yazıcıları, Robotları, normal bir PC/Dizüstü Bilgisayarı, Arduino/ESP8266/ESP32/RaspberryPi öğelerini, Akıllı Ev cihazlarını ve neredeyse her şeyi izleyebilir ve kontrol edebiliriz. Başka ilginç fikirleriniz varsa bana bildirin. Tüm bunlar hakkında ne düşünüyorsunuz?
Önerilen:
AmbiBox IOS Uzaktan Kumanda Uygulaması: 5 Adım
AmbiBox IOS Uzaktan Kumanda Uygulaması: Bu iOS uygulamasıyla AmbiBox'ınızı iPhone veya iPad'inizden kontrol edebilirsiniz. Uygulamadan ve AmbiBox sunucusuyla nasıl iletişim kurduğundan bahsedeceğim, AmbiBox ve led şeritlerin nasıl kurulacağını bilmek istiyorsanız, içinde birkaç öğretici var
Ios ve Android için 15 $'lık Uzaktan Kumandalı ESP8266 Robot Uşak / Araba / Tank Yapın: 4 Adım
Ios ve Android için 15 $'lık Uzaktan Kumandalı ESP8266 Robot Uşak / Araba / Tank Yapın: Atıştırmalık almak için mutfağa yürümekten nefret ediyor musunuz? Ya da yeni bir içki almak için? Bunların hepsi bu basit 15 dolarlık uzaktan kumandalı uşak ile düzeltilebilir. Daha ileri gitmeden önce şu anda ses kontrollü bir RGB led şerit için bir Kickstarter projesi yürütüyorum
Herhangi Bir Uzaktan Kumandalı Arabayı Bluetooth Uygulaması Kontrollü Uzaktan Kumandalı Arabaya Dönüştürme: 9 Adım
Herhangi Bir R/C Arabayı Bluetooth App Control R/C Arabasına Dönüştürme: Bu proje, sıradan bir uzaktan kumandalı arabayı Wombatics SAM01 robotik kartı, Blynk App ve MIT App Inventor ile bir Bluetooth (BLE) kontrol arabasına dönüştürme adımlarını gösterir. LED farlar ve LED farlar gibi birçok özelliğe sahip birçok düşük maliyetli RC araba
MIT APP ve Google Fusion Kullanarak Küçük İşletmeler İçin Android Uygulaması Yapma Tablosu: 7 Adım
MIT APP ve Google Fusion Table Kullanarak Küçük İşletmeler İçin Android Uygulaması Yapma: Hiç google play store'da bulunabilecek kendi Uygulamanızı yapmak istediniz mi !!! Bir işiniz varsa, bu eğitim hayatınızı değiştirecek. Bunu dikkatlice okuduktan sonra kendi Başvurunuzu yapabileceksiniz. Befo
BLE Modülleri için Basit IOS Uygulaması: 4 Adım
BLE Modülleri için Basit IOS Uygulaması: Bu Eğitilebilir Tablo, çok temel işlevselliğe sahip bir iOS uygulamasını nasıl oluşturabileceğinizi açıklar. Bu Eğitilebilir Tablo, bir iOS BLE uygulaması yapma sürecinin tamamından geçmeyecektir. Yalnızca bazı önemli unsurlara yüksek düzeyde bir genel bakış sunacaktır