Мазмұны:

OpenWrt маршрутизаторына қашықтан кіруге арналған Android/iOS қосымшасы: 11 қадам
OpenWrt маршрутизаторына қашықтан кіруге арналған Android/iOS қосымшасы: 11 қадам

Бейне: OpenWrt маршрутизаторына қашықтан кіруге арналған Android/iOS қосымшасы: 11 қадам

Бейне: OpenWrt маршрутизаторына қашықтан кіруге арналған Android/iOS қосымшасы: 11 қадам
Бейне: Обзор роутера Asus RT-AX53U. Тест скоростей, прошивка на OpenWrt, разбор 2024, Маусым
Anonim
OpenWrt маршрутизаторына қашықтан қатынасу үшін Android/iOS қосымшасы
OpenWrt маршрутизаторына қашықтан қатынасу үшін Android/iOS қосымшасы
OpenWrt маршрутизаторына қашықтан қол жеткізуге болатын Android/iOS қосымшасы
OpenWrt маршрутизаторына қашықтан қол жеткізуге болатын Android/iOS қосымшасы

Мен жақында жаңа маршрутизатор сатып алдым (Xiaomi Mi Router 3G). Әрине, бұл жаңа, керемет аппараттық құрал мені осы жобада жұмыс істеуге шабыттандырды;)

1 -қадам: Сізде OpenWrt бар деп ойлаймын

Менің ойымша, сізде OpenWrt бар
Менің ойымша, сізде OpenWrt бар

Мен алдымен OpenWrt-ті орнатуым керек болды … Көбінесе мен осы нұсқаулықты ұстандым (бұл маршрутизатордың үлгісі үшін): https://dzone.com/articles/hacking-into-xiaomi-mi-… Бұл жұмыс кезінде мен бұл керемет бейнені таптым.: Openwrt орнату, WiFi эталоны, Қыз жыпылықтауы. Мен қатты күлдім!:)

Назар аударыңыз! OpenWrt орнату маршрутизаторды кірпіштендіруі мүмкін. Бірақ аяқталғаннан кейін ол толық қуат пен бақылауды ашады. Мен мұнда нұсқаулық беруге батыл емеспін, себебі олар маршрутизатордың әр моделі үшін әр түрлі болуы мүмкін.

Бірақ егер сізде маршрутизаторда OpenWrt бар болса, сіз бұл оқулықты уақыт бойынша бастай аласыз

BTW, кейбір даму тақталары OpenWrt-пен бірге келеді, мысалы, Onion Omega, VoCore, LinkIt Smart 7688 және басқалары. Бұл оқулық сонымен қатар мұндай қосымшаларды құрудың негізгі идеяларын түсіндіреді, сондықтан сіз оны 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 дүкенінен)
  • Жаңа жоба жасаңыз және растау белгісін алыңыз
  • OpenWrt үшін Blynk Lua орнату нұсқауларын орындаңыз.

Маршрутизатор консоліне кіру үшін SSH пайдаланыңыз. Әдепкі мысалды іске қосқаннан кейін:

lua./examples/client.lua

Біз келесідей нәрсені көруіміз керек:

Қосылуда…

SSL қол алысу… дайын.

Бұл дегеніміз, қосымшамен қауіпсіз, екі бағытты байланыс орнатылды! YAY!

Біз енді берілген мысалды оңай кеңейте аламыз, сондықтан ол қызықты нәрсе жасайды. Мен оны өңдеу үшін осы мысалдың көшірмесін жасадым:

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

4 -қадам: Кейбір ақпаратты қосу: Клиенттер саны, WAN IP мекенжайы, жұмыс уақыты

Негізгі идея - ОЖ туралы ақпаратты мезгіл -мезгіл алу, қажет болған жағдайда қарапайым есептеулерді орындау, содан кейін нәтижені көрсету үшін Blynk -ке жіберу.

Linux/OpenWrt -те жүйелік деректерді алудың бірнеше әдісі бар:

  • Пәрменді іске қосыңыз және шығатын мәтінді талдаңыз
  • Пәрменді іске қосыңыз және ол шығатын кодты қараңыз
  • /Proc/және/sys/class/каталогтарында орналасқан жүйелік файлды оқыңыз

Енді мен қосылған құрылғылардың санын көрсеткім келеді.

Мен консольде cat/proc/net/arp іске қосқанда, ол MAC және IP мекенжайларымен бірге белгілі құрылғылардың тізімін шығарады:

IP мекенжайы HW түрі жалаушалар HW мекенжайы маска құрылғысы

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

Біз оны тікелей Lua тілінде талдай аламыз, бірақ мамандандырылған утилиталарды қолдану көбінесе оңай. Linux жүйесінде бұл grep, head, tail, cut, wc, awk.

Клиенттердің санын arp шығарудан алу үшін кестені сүзу керек (байланысты емес элементтерді алып тастау) және кесте жолдарын санау керек, нәтижесінде келесі пәрмен шығады:

cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l

Байқап көрейік:

root@router: ~/lua-blynk# cat/proc/net/arp | grep br-lan | grep 0x2 | wc -l

1

Тамаша. Енді біз барлық қажетті ақпаратты қалай жинауға болатынын білеміз. Біздің кодты таза және кеңейту үшін кейбір көмекші функцияларды жасайық:

exec_out функциясы (cmd)

жергілікті файл = 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: «» a «файлын оқыңыз: close () print (» Оқыңыз: «..path..» -> «..content) мазмұнның соңын қайтарады

Осы утилиталарды қолдана отырып, біз нақты деректерді алу функцияларын іске асыра аламыз:

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' {print $ 1} '«) соңы

Сіз бұл қабық командаларының бөліктерін іске қосуға, оның қалай жұмыс істейтінін тереңірек түсінуге және оны сіздің қажеттіліктеріңізге қарай реттеуге болады.

Ең оңай бөлігі - деректерді Blynk қосымшасына жіберу. Әдепкі мысал таймерді орнатады, ол әр 5 секунд сайын кодты іске қосады, сондықтан біз оны қайта қолданамыз:

local tmr1 = Таймер: жаңа {interval = 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 = function ()

blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format («%. 1f с», getUptime ()/60/60)) соңы}

5 -қадам: WiFi басқару: ҚОСУ/ӨШІРУ

WiFi басқару: ҚОСУ/ӨШІРУ
WiFi басқару: ҚОСУ/ӨШІРУ

Осы уақытқа дейін біз тек құрылғыдан ғана ақпарат алатын едік, оны басқаруға тырысайық!

blynk: қосулы («V20», функция (параметр)

егер парам [1] == «1» болса, онда os.execute («wifi жоғары»), басқасы os.execute («WiFi төмен») соңы)

Қолданбаның жағында мен батырмалы виджетті (режим: ауысу) қосып, оны V20 -ға тағайындадым.

Міне бітті. Ғажайып.

6 -қадам: Жүйелік статистикалық диаграмма

Жүйелік статистикалық диаграмма
Жүйелік статистикалық диаграмма
Жүйелік статистикалық диаграмма
Жүйелік статистикалық диаграмма

getCpuLoad () функциясы

tonumber қайтару (exec_out («top -bn1 | grep 'CPU:' | head -n1 | awk '{print $ 2+$ 4}'»)) getRamUsage () функциясының соңғы функциясы (exec_out («тегін | grep Mem | awk '') {басып шығару ($ 3- $ 7)/$ 2 * 100.0} '«)) соңы

Біз сондай -ақ деректерді Blynk -ке жіберуіміз керек (tmr1 қайтадан қолданайық):

local tmr1 = Таймер: жаңа {interval = 5000, func = function ()

blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) end}

Қолданбалы жағында SuperChart виджетін қосыңыз. CPU, RAM деректер ағынын қосыңыз және V5, V6 тағайындаңыз.

7 -қадам: HDD айналдыру күйі

Менің маршрутизаторымда сыртқы бекітілген сақтау құрылғысы ретінде жалғанған сыртқы HDD дискісі бар, себебі бұл диск біреу кірген кезде айналуды бастауға және күту уақытынан кейін тоқтатуға арналған.

Бір күн ішінде қанша рет қосылатынын білу керемет болар еді. Сондықтан мен жүйелік диаграммаға басқа деректер ағынын қостым.

HDD дискісінің мәртебесін алу қиынырақ, бірақ мен оның жолын таптым! Ең алдымен, SSH консолінен smartmontools орнатыңыз:

opkg жаңарту

opkg smartmontools орнатыңыз

Содан кейін, біздің кодта арнайы пәрменді іске қосу және шығу кодын тексеру қажет:

exec_ret функциясы (cmd)

жергілікті шығу = os.execute (cmd) басып шығару («Іске қосу:»..cmd.. « -> шығу:».. шығу) қайтару шығу функциясын getHddSpinning () егер exec_ret («smartctl --nocheck = күту режимі -ақпарат) /dev/sda>/dev/null «) == 0 содан кейін 1 қайтару 1 басқа қайтару 0 соңы соңы

Ескерту: менің қатты дискім /dev /sda

8 -қадам: Желілік белсенділік диаграммасы

Желілік белсенділік диаграммасы
Желілік белсенділік диаграммасы

Біз басқа SuperChart виджетін құрамыз (алдыңғыға ұқсас), TX және RX деректер ағындарын қосамыз және V1 мен V2 -ге тағайындаймыз. Ескерту: Мен WAN портының статикасын көрсеткім келеді, ал менің WAN портым - eth0.2

Көмекші функциялары:

getWanRxBytes () функциясы

қайтару саны (read_file («/sys/class/net/eth0.2/статистика/rx_bytes»)) getWanTxBytes () функциясының соңғы функциясы () readumfile («/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) соңы prevTx = tx prevRx = rx blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) blynk: virtualWrSp (7, getHr))) Соңы}

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]; содан кейін echo «blynkmon іске қосылмайды» шығу 0 fi kill -9 $ (cat $ pidfile) rm $ pidfile}

Ескерту: auth-token ауыстыруды ұмытпаңыз

Содан кейін blynkmon қызметін қосыңыз:

blynkmon қызметін қосады

11 -қадам: Қорытынды және қосымша идеялар

Қорытынды және қосымша ойлар
Қорытынды және қосымша ойлар

Blynk жобасының клонын алу үшін осы QR сканерлеуге болады, ол үшін көптеген энергия нүктелері қажет (4600), себебі ол көптеген виджеттерді қолданады!

Толық Lua кодын мына жерден табыңыз:

Әзірше жақсы, бірақ мен жақын арада қосқым келетін кейбір идеялар.

  • Қайта жүктеу пәрменін қосыңыз. Кездейсоқ басуды болдырмаңыз.
  • Кез келген Linux пәрменін іске қосу үшін Терминал виджетін қосыңыз.
  • CPU температурасының кестесін қосыңыз.

    UPD: Өкінішке орай, OpenWrt -те қазіргі уақытта менің маршрутизаторымның кейбір драйверлері жоқ. Бірақ бұл көптеген басқа маршрутизаторлар үшін қол жетімді

  • Белгілі бір құрылғы желіге қосылғанда/кеткенде хабарландыру қосу Бізде arp ақпараты бар, енді тек MAC мекенжайын тексеріңіз.

Осылайша біз 3D принтерлерді, роботтарды, қарапайым компьютер/ноутбукты, Arduino/ESP8266/ESP32/RaspberryPi материалдарын, Smart Home құрылғыларын және іс жүзінде кез келген нәрсені бақылай аламыз. Егер сізде басқа қызықты идеялар болса, маған хабарлаңыз. Осының бәрі туралы не ойлайсыз?

Ұсынылған: