Агуулгын хүснэгт:

Андройд/iOS програм нь OpenWrt чиглүүлэгчидээ алсаас хандах боломжтой: 11 алхам
Андройд/iOS програм нь OpenWrt чиглүүлэгчидээ алсаас хандах боломжтой: 11 алхам

Видео: Андройд/iOS програм нь OpenWrt чиглүүлэгчидээ алсаас хандах боломжтой: 11 алхам

Видео: Андройд/iOS програм нь OpenWrt чиглүүлэгчидээ алсаас хандах боломжтой: 11 алхам
Видео: Прошивка OpenWRT ▲ Подари свободу своему WiFi роутеру! 2024, Оны зургадугаар сарын
Anonim
Android/iOS апп нь OpenWrt чиглүүлэгч рүүгээ алсаас хандах боломжтой
Android/iOS апп нь OpenWrt чиглүүлэгч рүүгээ алсаас хандах боломжтой
Android/iOS апп нь OpenWrt чиглүүлэгч рүүгээ алсаас хандах боломжтой
Android/iOS апп нь OpenWrt чиглүүлэгч рүүгээ алсаас хандах боломжтой

Би саяхан шинэ чиглүүлэгч худалдаж авсан (Xiaomi Mi Router 3G). Мэдээжийн хэрэг, энэхүү шинэ, гайхалтай тоног төхөөрөмж нь намайг энэ төсөл дээр ажиллах урам зориг өгсөн;)

Алхам 1: Танд OpenWrt аль хэдийн бий болсон гэж бодож байна

Танд OpenWrt аль хэдийн бий болсон гэж бодож байна
Танд OpenWrt аль хэдийн бий болсон гэж бодож байна

Би эхлээд OpenWrt-ийг суулгах ёстой байсан … Ихэнхдээ би энэ гарын авлагыг дагасан (энэ чиглүүлэгчийн загварт зориулагдсан): https://dzone.com/articles/hacking-into-xiaomi-mi-… Үүн дээр ажиллаж байхдаа энэ гайхалтай видеог оллоо.: Openwrt суулгалт, WiFi -ийн жишиг үзүүлэлт, Охин найз бүсгүйн гэрэл гэгээ. Би үнэхээр их инээсэн!:)

Анхаар! OpenWrt -ийг суулгах нь таны чиглүүлэгчийг тоосго болгож чадна. Гэхдээ үүнийг дуусгасны дараа бүрэн хүч, хяналтыг нээдэг. Би чиглүүлэгчийн загвар бүрт өөр өөр байж болох тул энд заавар өгөх зоригтой биш байна.

Гэхдээ хэрэв та чиглүүлэгч дээрээ OpenWrt -ийг аль хэдийн суулгасан бол энэ хичээлийг notime -ээс эхлүүлэх боломжтой болно

BTW, зарим хөгжлийн самбарууд нь Onion Omega, VoCore, LinkIt Smart 7688 гэх мэт OpenWrt-ийг ашигладаг. Энэхүү гарын авлагад ийм аппликейшн үүсгэх үндсэн санаануудыг тайлбарласан тул та үүнийг Raspberry Pi болон бусад програмуудтай ажиллахад хялбархан дасан зохицуулж чадна.

Энэ төслийн хувьд би ихэвчлэн урьдчилан суулгасан програм хангамжийг ашиглах болно (OpenWrt-ийг дэмждэг аливаа чиглүүлэгч дээр байдаг). Гэхдээ зарим дэвшилтэт функцүүдийн хувьд би нэмэлт багц суулгах шаардлагатай болсон. Энэ нь хэдхэн товшилтоор хийгддэг тул би энд зааврыг оруулах болно.

Түүнчлэн, та аль хэдийн мэдэж байсан гэж бодож байна:

  • OpenWrt чиглүүлэгч дээрээ SSH терминалыг хэрхэн нээх/ашиглах талаар
  • Файлуудыг чиглүүлэгч дээрээ хэрхэн байршуулах/засах (FileZilla эсвэл scp/sftp ашиглана уу)
  • Linux консол дээр хэрхэн ажиллах талаар

Алхам 2: Програм хангамж ба хэрэгсэл

Програм хангамж ба хэрэгсэл
Програм хангамж ба хэрэгсэл

Ухаалаг гар утасны хувьд би Blynk ашиглаж байна. Энэ нь ямар ч техник хангамжийг хянах iOS болон Android програмуудыг өгдөг. Та ухаалаг гар утсан дээрээ виджетүүдийг чирж, буулгах замаар бүх төслүүддээ зориулж үзэсгэлэнтэй график интерфэйсийг хялбархан бүтээх боломжтой. Blynk -ийг ихэвчлэн Arduino, Raspberry Pi гэх мэт төхөөрөмжүүдэд ашигладаг боловч яагаад үүнийг чиглүүлэгч дээр өөрөө ажиллуулж болохгүй гэж?;)

Төхөөрөмжийн тал дээр би Lua -г ашиглан шаардлагатай функцүүдийг скрипт болгон ашиглах болно, би Python эсвэл Node.js -ийг ашиглаж болох боловч харамсалтай нь зарим чиглүүлэгчид нөөц байхгүйн улмаас эдгээр сонголтууд үргэлж байдаггүй. түүнтэй ажиллах нь тийм ч тохиромжтой биш (өөрчлөлт бүрт дахин эмхэтгэх гэх мэт) Нөгөө талаас Луаг урьдчилан суулгасан, ашиглах, сурахад хялбар байдаг. Үүнийг анхдагч вэб интерфейс LuCI ашигладаг.

Алхам 3: Хамгийн бага програм үүсгэх

Блинк, Луа хоёрыг эхлүүлэх нь дараахь байдлаар хялбар юм.

  • Blynk програмыг татаж авах (App Store, Google Play дээрээс)
  • Шинэ төсөл үүсгээд Auth Token аваарай
  • OpenWrt -ийн Blynk Lua суулгах зааврыг дагана уу.

Чиглүүлэгчийн консол руу нэвтрэхийн тулд SSH ашиглана уу. Анхдагч жишээг ажиллуулсны дараа:

lua./examples/client.lua

Бид иймэрхүү зүйлийг харах ёстой:

Холбож байна…

SSL гар барих … Бэлэн байна.

Энэ нь програмтай аюулгүй, хоёр чиглэлтэй холболт бий болсон гэсэн үг юм! YAY!

Бид одоо өгсөн жишээг хялбархан сунгах боломжтой болсон тул энэ нь сонирхолтой зүйл хийх болно. Үүнийг засахын тулд би энэ жишээг хуулбарласан болно.

cp./examples/client.lua./blynkmon.lua

Алхам 4: Зарим мэдээлэл нэмэх: Үйлчлүүлэгчдийн тоо, WAN IP хаяг, Uptime

Үндсэн санаа бол OS -ээс мэдээллийг үе үе авах, шаардлагатай бол энгийн тооцоолол хийж, үр дүнг Blynk руу илгээх явдал юм.

Linux/OpenWrt дээр системийн өгөгдлийг авах хэд хэдэн арга байдаг:

  • Командыг ажиллуулж, гарч буй текстийг задлан шинжилнэ үү
  • Команд ажиллуулаад буцах кодыг харна уу
  • /Proc/ба/sys/class/лавлах хэсэгт байрлах системийн файлыг уншина уу

Одоо би холбогдсон төхөөрөмжүүдийн тоог харуулахыг хүсч байна.

Би консол дээр cat/proc/net/arp ажиллуулахад энэ нь мэдэгдэж буй төхөөрөмжүүдийн жагсаалтыг MAC болон IP хаягийн хамт гаргадаг.

IP хаяг HW төрөл Flags HW address 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

Бид үүнийг Луа хэл дээр шууд задлан шинжлэх боломжтой боловч тусгай хэрэгслүүдийг ашиглах нь ихэвчлэн хялбар байдаг. Линукс дээр эдгээр нь grep, head, tail, cut, wc, awk юм.

Arp гаралтаас үйлчлүүлэгчдийн тоог авахын тулд би хүснэгтийг шүүж (хамааралгүй зүйлсийг устгаж), хүснэгтийн мөрүүдийг тоолох шаардлагатай бөгөөд ингэснээр дараах тушаал гарч ирнэ.

муур/proc/net/arp | grep бр-лан | grep 0x2 | wc -l

Үүнийг туршиж үзье:

root@чиглүүлэгч: ~/lua-blynk# cat/proc/net/arp | grep бр-лан | grep 0x2 | wc -l

1

Агуу их. Шаардлагатай бүх мэдээллийг хэрхэн яаж цуглуулах талаар бид одоо ойлголттой боллоо. Кодоо цэвэр, өргөтгөх боломжтой болгохын тулд туслах функцуудыг бий болгоё.

exec_out функц (cmd)

local file = io.popen (cmd), хэрэв файл биш бол буцааж nil end local output = file: read ('*all') file: close () print ("Run:"..cmd.. " ->".. гаралт) буцаах гаралтын төгсгөлийн функц read_file (зам) локал файл = io.open (зам, "rb") хэрэв файл биш бол nil end local content = file: read "*a" file: close () print ("Унших: ".. зам.." -> ".. агуулга) агуулгын төгсгөлийг буцаана

Эдгээр хэрэгслүүдийг ашиглан бид одоо өгөгдөл авах бодит функцийг хэрэгжүүлж чадна.

getArpClients функц ()

буцах tonumber (exec_out ("cat/proc/net/arp | grep br -lan | grep 0x2 | wc -l")) төгсгөлийн функц getUptime () tonumber -ийг буцаах (exec_out ("cat/proc/uptime | awk '{хэвлэх $ 1) } '")) төгсгөлийн функц getWanIP () буцах exec_out (" ifconfig eth0.2 | grep' inet addr: '| cut -d: -f2 | awk' {$ 1 хэвлэх '") төгсгөл

Та эдгээр бүрхүүлийн командуудын зарим хэсгийг ажиллуулж, хэрхэн ажилладаг талаар илүү гүнзгий ойлголттой болж, өөрийн хэрэгцээнд нийцүүлж болно.

Хамгийн хялбар хэсэг бол өгөгдлийг Blynk App руу илгээх явдал юм. Анхдагч жишээ нь таймерыг 5 секунд тутамд ажиллуулдаг тул бид үүнийг дахин ашигладаг.

local tmr1 = Таймер: шинэ {интервал = 5000, func = function ()

blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) blynk: virtualWrite (12, getWanIP ()) end}

Аппликешн дээр бид 3 шошгоны виджет нэмж, тэдгээрийг виртуал зүү 10, 11, 12 -т оноож өгнө.

Энэ нь ажилладаг боловч WAN IP эсвэл үйлчлүүлэгчдийн тоо байнга шинэчлэгддэггүй тул үр ашиг багатай байдаг

WAN IP -ийн хувьд бид үүнийг холбогдсон зохицуулагч руу шилжүүлдэг. Энэ нь чиглүүлэгч Blynk Cloud -тэй холбоо тогтоох бүрт ажиллах болно. Энэ нь хангалттай байх ёстой:

blynk: асаалттай ("холбогдсон", функц ()

хэвлэх ("Бэлэн.") blynk: virtualWrite (12, getWanIP ()) төгсгөл)

Ажиллах цаг ба үйлчлүүлэгчдийн хувьд бид 5 минутын хугацаатай тусдаа таймер үүсгэдэг. интервал:

local tmr2 = Таймер: шинэ {интервал = 5*60*1000, func = функц ()

blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) төгсгөл}

Алхам 5: WiFi хяналт: ON/OFF

WiFi хяналт: ON/OFF
WiFi хяналт: ON/OFF

Өнөөг хүртэл бид төхөөрөмжөөс зөвхөн мэдээлэл авч байсан. Үүнийг хянахыг хичээцгээе!

blynk: асаалттай ("V20", функц (параметр)

хэрэв param [1] == "1" бол os.execute ("wifi дээш") өөр os.execute ("wifi доош") төгсгөлийн төгсгөл)

Програмын тал дээр би дөнгөж Button виджет (горим: Switch) нэмж V20 -д оноосон.

Ингээд л боллоо. Гайхалтай.

Алхам 6: Статистикийн хүснэгт

Системийн статистик хүснэгт
Системийн статистик хүснэгт
Системийн статистик хүснэгт
Системийн статистик хүснэгт

getCpuLoad () функц

буцах tonumber (exec_out ("top -bn1 | grep 'CPU:' | head -n1 | awk '{хэвлэх $ 2+$ 4}'")) төгсгөлийн функц getRamUsage () tonumber -ийг буцаана (exec_out ("үнэгүй | grep Mem | awk '') {хэвлэх ($ 3- $ 7)/$ 2 * 100.0} '")) төгсгөл

Бид мөн өгөгдлийг Blynk руу илгээх хэрэгтэй (tmr1 -ийг дахин ашиглацгаая):

local tmr1 = Таймер: шинэ {интервал = 5000, func = function ()

blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) төгсгөл}

App талд SuperChart виджет нэмнэ үү. CPU, RAM өгөгдлийн урсгалыг нэмж, V5, V6 -д онооно уу.

Алхам 7: HDD ээрэх байдал

Миний чиглүүлэгч нь гадаад HDD хөтөчийг сүлжээнд холбогдсон хадгалах төхөөрөмжөөр холбосон бөгөөд энэ драйверыг хэн нэгэн нэвтрэх үед эргүүлж эхлэх бөгөөд хэсэг хугацааны дараа түдгэлзүүлэхээр тохируулсан болно.

Мэдээжийн хэрэг, өдрийн турш хэдэн удаа асаахыг мэдэх нь үнэхээр сайхан байх болно. Тиймээс би системийн диаграмд өөр нэг өгөгдлийн урсгалыг нэмсэн.

HDD дискний статусыг олж авах нь арай илүү төвөгтэй боловч би нэг арга олсон! Юуны өмнө, smarthontools -ийг SSH консолоос суулгаарай.

opkg шинэчлэлт

opkg smartmontools суулгаарай

Дараа нь манай кодонд бид тусгай командыг ажиллуулж, гарах кодыг шалгах хэрэгтэй.

exec_ret функц (cmd)

local exit = os.execute (cmd) print ("Ажиллуулах:"..cmd.. " -> гарах:".. гарах) буцах гаралтын төгсгөлийн функцийг getHddSpinning () бол exec_ret ("smartctl --nocheck = standby --info /dev/sda>/dev/null ") == 0 дараа нь 1 -ийг буцаана уу, өөр 0 төгсгөлийг буцаана

Тэмдэглэл: миний HDD бол /dev /sda

Алхам 8: Сүлжээний үйл ажиллагааны график

Сүлжээний үйл ажиллагааны график
Сүлжээний үйл ажиллагааны график

Бид өөр SuperChart виджет (өмнөхтэй төстэй) үүсгэж, TX ба RX өгөгдлийн урсгалыг нэмж, V1 ба V2 -д хуваарилна уу. Би WAN портын статусыг харуулахыг хүсч байна, миний WAN порт нь eth0.2 юм.

Туслах функцууд:

getWanRxBytes () функц

буцаах дугаар (read_file ("/sys/class/net/eth0.2/статистик/rx_bytes")) төгсгөлийн функц getWanTxBytes () буцааж өгөх тоо (read_file ("/sys/class/net/eth0.2/статистик/tx_bytes")) Төгсгөл

Дараа нь ижил tmr1 дээр хэдэн код нэмээрэй. Энэ нь илүү төвөгтэй, учир нь бид дамжуулсан/хүлээн авсан байтын ялгааг тооцоолж, харуулах хэрэгтэй болно.

орон нутгийн 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 болон prevRx ~ = rx дараа нь blynk: virtualWrite (2, rx - prevRx) end prevTx = tx prevRx = rx blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) blynk: virtualWrSpinning (7, getHp))) Төгсгөл}

Алхам 9: Мэдэгдэл

Мэдэгдэл
Мэдэгдэл

Миний чиглүүлэгч хүчгүй эсвэл интернет холболт тасарсан үед надад мэдэгдэхийг хүссэн бөгөөд үүнд бидэнд Мэдэгдлийн виджет хэрэгтэй болно.

Виджетийн тохиргоонд "офлайн мэдэгдэл" -ийг идэвхжүүлнэ үү. Код шаардлагагүй. Гэхдээ бид кодоосоо өөрчлөн мэдэгдэл илгээх боломжтой.

Алхам 10: Арын дэвсгэр дээр автоматаар ажиллуулах

Одоогийн байдлаар скриптийг гараар гүйцэтгэх ёстой, гэхдээ чиглүүлэгч асаалттай үед үүнийг автоматаар арын дэвсгэр дээр ажиллуулахыг хүсч байна.

Үүнийг үйлчилгээ бий болгох замаар хийдэг. Файл үүсгэх /etc/init.d/blynkmon:

#!/bin/sh /etc/rc.common

START = 99 STOP = pidfile = "/var/run/blynkmon.pid" start () {if [-f $ pidfile]; дараа нь echo "blynkmon аль хэдийн ажиллаж байна" гарах 0 fi cd /root /lua-blynk lua blynkmon.lua your-auth-token> /dev /null & echo $! > $ pidfile} stop () {if [! -f $ pidfile]; дараа нь цуурай "blynkmon ажиллахгүй байна" гарах 0 fi kill -9 $ (cat $ pidfile) rm $ pidfile}

Анхаарна уу: auth-token-ээ солихоо бүү мартаарай

Дараа нь blynkmon үйлчилгээг идэвхжүүлнэ үү.

blynkmon үйлчилгээг идэвхжүүлэх

Алхам 11: Дүгнэлт ба цаашдын санаа

Дүгнэлт ба нэмэлт санаа
Дүгнэлт ба нэмэлт санаа

Та энэ QR -ийг скан хийж миний Blynk төслийн клоныг авах боломжтой бөгөөд үүнд маш олон виджет ашигладаг тул эрчим хүчний зарим цэг (4600) шаардлагатай болно!

Бүрэн Луа кодыг эндээс олж болно:

Одоогийн байдлаар маш сайн байгаа боловч ойрын ирээдүйд нэмж оруулахыг хүсч буй хэдэн санаануудыг энд оруулав.

  • Дахин ачаалах командыг нэмнэ үү. Санамсаргүй байдлаар дарахаас сэргийлнэ үү.
  • Аливаа Linux командыг ажиллуулахын тулд Терминал виджет нэмнэ үү.
  • CPU -ийн температурын хүснэгтийг нэмнэ үү.

    UPD: Харамсалтай нь одоогоор OpenWrt -д миний чиглүүлэгчийн загварт зориулсан драйверууд дутагдаж байна. Гэхдээ үүнийг бусад олон чиглүүлэгчид ашиглах боломжтой

  • Тодорхой төхөөрөмж сүлжээнд нэгдэх/гарах үед мэдэгдэл нэмнэ үү. Бидэнд arp мэдээлэл байгаа, одоо зөвхөн MAC хаягийг шалгаарай.

Ингэснээр бид 3D принтер, робот, ердийн компьютер/зөөврийн компьютер, Arduino/ESP8266/ESP32/RaspberryPi зүйлс, Smart Home төхөөрөмжүүд болон эргэн тойрны бараг бүх зүйлийг хянах, хянах боломжтой болно. Өөр сонирхолтой санаа байвал надад хэлээрэй. Энэ бүхний талаар та юу гэж бодож байна вэ?

Зөвлөмж болгож буй: