Мазмуну:
- 1 -кадам: Менин оюмча, сизде OpenWrt мурунтан эле бар …
- 2 -кадам: Программалык камсыздоо жана куралдар
- 3 -кадам: Минималдуу колдонмону түзүү
- 4 -кадам: Кээ бир маалыматты кошуу: Кардарлардын саны, WAN IP дареги, Uptime
- 5 -кадам: WiFi Control: ON/OFF
- 6 -кадам: Системанын статистикалык диаграммасы
- 7 -кадам: HDD айлануу абалы
- 8 -кадам: Тармактын ишмердүүлүк диаграммасы
- 9 -кадам: Билдирмелер
- 10 -кадам: Фондо Autunun
- 11 -кадам: Корутунду жана андан аркы идеялар
Video: OpenWrt роутериңизге алыстан кирүү үчүн Android/iOS колдонмосу: 11 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:40
Мен жакында жаңы роутерди сатып алдым (Xiaomi Mi Router 3G). Жана, албетте, бул жаңы, укмуш аппараттык бөлүк мени бул долбоордо иштөөгө шыктандырды;)
1 -кадам: Менин оюмча, сизде OpenWrt мурунтан эле бар …
Мен алгач OpenWrtти орнотушум керек болчу … Негизинен, мен бул көрсөтмөнү (бул роутер моделине тиешелүү) аткардым: https://dzone.com/articles/hacking-into-xiaomi-mi-… Бул боюнча иштеп жатып, мен бул укмуш видеону таптым: Openwrt орнотуу, WiFi эталону, Girlfriend Flashing. Wow мен абдан күлдүм!:)
Көңүл буруңуз! OpenWrt орнотуу роутериңизди кирпичке салышы мүмкүн. Бирок аяктагандан кийин, ал толук бийликти жана көзөмөлдү ачат. Мен бул жерде эч кандай көрсөтмө берүүгө батым жетпейт, анткени алар роутердин ар бир моделинде ар кандай болушу мүмкүн.
Бирок роутериңизде OpenWrt мурунтан эле бар болсо, анда бул окуу куралын notime менен баштай аласыз
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 ж.б. менен колдонулат, бирок эмне үчүн аны роутердин өзүндө иштетпейсиз?;)
Түзмөк тарабында мен Луаны керектүү функцияларды сценарийлөө үчүн колдоном. Мен Python же Node.js колдоно алмакмын, бирок тилекке каршы кээ бир роутерлерде ресурстардын жоктугунан бул параметрлер дайыма эле боло бербейт. менен иштөө анчалык ыңгайлуу эмес (ар бир өзгөртүү үчүн кайра компиляциялоо, ж.б.) Экинчи жагынан, Луа алдын ала орнотулган, колдонууга жана үйрөнүүгө оңой. Бул демейки веб -интерфейс, LuCI тарабынан колдонулат.
3 -кадам: Минималдуу колдонмону түзүү
Blynk жана Lua менен баштоо оңой:
- Blynk тиркемесин жүктөп алыңыз (App Store, Google Playден)
- Жаңы долбоор түзүп, Auth Токенин алыңыз
- OpenWrt үчүн Blynk Lua орнотуу көрсөтмөлөрүн аткарыңыз.
Роутердин консолуна кирүү үчүн SSH колдонуңуз. Демейки мисалды иштеткенден кийин:
lua./examples/client.lua
Биз мындай нерсени көрүшүбүз керек:
Туташууда…
SSL кол алышуусу… Даяр.
Бул колдонмого коопсуз, эки багыттуу байланыш орнотулганын билдирет! YAY!
Биз азыр берилген мисалды оңой эле узарта алабыз, андыктан ал кызыктуу нерсе кылат. Мен аны өзгөртүү үчүн бул мисалдын көчүрмөсүн түздүм:
cp./examples/client.lua./blynkmon.lua
4 -кадам: Кээ бир маалыматты кошуу: Кардарлардын саны, WAN IP дареги, Uptime
Негизги идея - мезгил -мезгили менен ОСтен маалымат алуу, керек болсо бир нече жөнөкөй эсептөөлөрдү жүргүзүү жана андан кийин дисплей үчүн Блинкке жыйынтык жөнөтүү.
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@роутер: ~/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: read "*a" file: 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} ')) end
Сиз бул кабыктын буйруктарынын бөлүктөрүн иштете аласыз, анын кантип иштээрин тереңирээк түшүнүп, аны керектөөлөрүңүзгө ылайыкташтыра аласыз.
Эң оңой - бул маалыматтарды Blynk колдонмосуна жөнөтүү. Демейки мисал таймерди орнотот, ал 5 секундда бир кодду иштетет, ошондуктан биз аны кайра колдонобуз:
жергиликтүү tmr1 = Таймер: жаңы {интервал = 5000, func = function ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) blynk: virtualWrite (12, getWanIP ()) end}
Колдонмодо биз 3 энбелгиси бар виджеттерди кошуп, ошого жараша Virtual Pins 10, 11, 12ге дайындайбыз.
Бул иштесе да, бул натыйжасыз, анткени WAN IP же кардарлардын саны ушунчалык тез жаңыртылбайт
WAN IP үчүн, биз аны туташкан иштетүүчүгө жылдырабыз. Бул роутер Blynk Cloud менен туташкан сайын иштейт. Бул жетиштүү болушу керек:
blynk: күйүк ("туташкан", function ()
басып чыгаруу ("Даяр.") blynk: virtualWrite (12, getWanIP ()) аягы)
Uptime жана Кардарлардын саны үчүн биз 5 мүнөт менен өзүнчө таймерди түзөбүз. интервал:
жергиликтүү tmr2 = Таймер: жаңы {интервал = 5*60*1000, func = function ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) end}
5 -кадам: WiFi Control: ON/OFF
Буга чейин, биз түзмөктөн гана маалымат алчубуз. Келгиле, аны башкарууга аракет кылалы!
blynk: күйүк ("V20", функция (парам)
эгер парам [1] == "1" анда os.execute ("wifi өйдө") башка os.execute ("wifi ылдый") аягы)
Колдонмо тарабында мен жөн гана Button виджетин коштум (режим: которуштуруу) жана аны V20го дайындадым.
Дал ушул. Укмуш.
6 -кадам: Системанын статистикалык диаграммасы
getCpuLoad функциясы ()
tonumber кайтаруу (exec_out ("top -bn1 | grep 'CPU:' | head -n1 | awk '{print $ 2+$ 4}'")) getRamUsage () кайтаруу тонумбери (exec_out ("бекер | grep Mem | awk '') {print ($ 3- $ 7)/$ 2 * 100.0} '")) end
Биз ошондой эле маалыматтарды Blynkке жөнөтүшүбүз керек (tmr1 кайра колдонолу):
жергиликтүү tmr1 = Таймер: жаңы {интервал = 5000, func = function ()
blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) end}
Колдонмо тарабында SuperChart виджети кошулат. CPU, RAM маалымат агымдарын кошуп, V5, V6ге дайындоо.
7 -кадам: HDD айлануу абалы
Менин роутеримде тышкы HDD драйвы бар, ал тармакка тиркелген сактоочу түзмөк катары туташкан, бул диск кимдир бирөө ага жеткенде айланууну баштоо үчүн жана убакыт өткөндөн кийин токтотуу үчүн конфигурацияланган.
Албетте, бир күндүн ичинде канча жолу күйгүзүлгөнүн билүү сонун болмок. Ошентип, мен системалык диаграммага дагы бир маалымат агымын коштум.
HDD дискинин статусун алуу бир аз татаалыраак, бирок мен бир жолун таптым! Биринчи кезекте, SSM консолунан smartmontools орнотуңуз:
opkg жаңыртуу
opkg smartmontools орнотуу
Андан кийин, биздин коддо биз атайын буйрукту иштетип, чыгуу кодун текшеришибиз керек:
exec_ret функциясы (cmd)
жергиликтүү чыгуу = os.execute (cmd) басып чыгаруу ("Run:"..cmd.. " -> exit:".. exit) return end end function getHddSpinning () if exec_ret ("smartctl --nocheck = standby --info /dev/sda>/dev/null ") == 0 анда 1ди кайтарыңыз, дагы бирөөнү кайтарыңыз 0 аягы
Эскертүү: менин HDD /dev /sda
8 -кадам: Тармактын ишмердүүлүк диаграммасы
Биз башка SuperChart виджетин түзөбүз (мурунку окшош), TX жана RX маалымат агымдарын кошобуз жана V1 менен V2ге дайындайбыз.
Жардамчы функциялары:
getWanRxBytes функциясы ()
tonumber кайтаруу (read_file ("/sys/class/net/eth0.2/статистика/rx_bytes")) getWanTxBytes () функциясын кайтаруу () readumfile ("/sys/class/net/eth0.2/статистика/tx_bytes")) аяктоо
Андан кийин, ошол эле tmr1ге кээ бир кодду кошуңуз. Бул татаалыраак, анткени биз берилген/алынган байттагы айырманы эсептеп, көрсөтүшүбүз керек:
жергиликтүү prevTx, prevRx
жергиликтүү tmr1 = Таймер: жаңы {интервал = 5000, func = функция () жергиликтүү tx = getWanTxBytes () локалдык rx = getWanRxBytes () эгер prevTx жана prevTx ~ = tx болсо blynk: virtualWrite (1, tx - prevTx) endRex жана prevRx ~ = rx анда blynk: virtualWrite (2, rx - prevRx) end prevTx = tx prevRx = rx blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) blynk: virtualWrSpinning (7, getHetH))) аягы}
9 -кадам: Билдирмелер
Мен дагы роутеримдин кубаты же интернет байланышы үзүлгөндө кабарланууну кааладым. Бул үчүн бизге Эскертме виджети керек.
Виджет жөндөөлөрүндө "оффлайн эскертүүсүн" күйгүзүңүз. Эч кандай коддун кереги жок. Бирок биз дагы кодубуздан бажы эскертмелерин жөнөтө алабыз.
10 -кадам: Фондо Autunun
Азырынча скрипт кол менен аткарылышы керек, бирок роутер күйгүзүлгөндө аны автоматтык түрдө фондо иштетүүнү каалайм.
Бул кызмат түзүү аркылуу ишке ашат. /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 -кадам: Корутунду жана андан аркы идеялар
Сиз бул QRди сканерлеп, Blynk Project клонумун ала аласыз. Ал көптөгөн виджеттерди колдонгондуктан, кээ бир энергия пункттарын талап кылат (4600)!
Толук Луа кодун бул жерден табыңыз:
Азырынча жакшы, бирок бул жерде мен жакынкы келечекте кошкум келген кээ бир идеялар бар.
- Reboot командасын кошуу. Кокустан аны басып калбаңыз.
- Кандайдыр бир Linux буйругун иштетүү үчүн Терминал виджетин кошуңуз.
-
CPU температурасы диаграммасын кошуу.
UPD: Тилекке каршы, OpenWrt учурда менин роутер моделим үчүн кээ бир драйверлерди жок кылат. Бирок бул башка көптөгөн роутерлер үчүн жеткиликтүү
- Белгилүү бир түзмөк тармакка кошулганда/кеткенде кабарлоону кошуңуз. Бизде arp маалыматы бар, азыр MAC дарегин гана текшериңиз.
Ошентип, биз 3D принтерлерди, роботторду, кадимки ПК/ноутбукту, Arduino/ESP8266/ESP32/RaspberryPi нерселерин, Smart Home түзмөктөрүн жана дээрлик бардык нерсени көзөмөлдөп жана көзөмөлдөй алабыз. Башка кызыктуу ойлоруңуз болсо, мага кабарлаңыз. Мунун баары жөнүндө кандай ойдосуз?
Сунушталууда:
Arduino программалоосу мобилдик аркылуу -- Arduinodroid -- Android үчүн Arduino Ide -- Кирүү: 4 кадам
Arduino программалоосу мобилдик аркылуу || Arduinodroid || Android үчүн Arduino Ide || Blink: Көбүрөөк видеолор үчүн менин youtube каналыма жазылыңыз …… Arduino - бул түздөн -түз USB аркылуу программа боло турган такта. Бул колледж жана мектеп долбоорлору үчүн, атүгүл продукциянын прототипинде абдан жөнөкөй жана арзан. Көптөгөн продукциялар биринчи кезекте мен үчүн түзүлөт
Ios жана Android үчүн $ 15 Алыстан башкарылуучу ESP8266 робот Батлер / Машина / Танк куруңуз: 4 кадам
Ios жана Android үчүн $ 15 Remote Controlled ESP8266 Robot Butler / Car / Tank куруңуз: ашканага баруу үчүн ашканага барууну жек көрөсүзбү? Же жаңы суусундук алуу үчүнбү? Мунун бардыгын 15 долларлык алыстан башкарылуучу батлер менен чечсе болот. Биз мындан ары кете электе, мен азыр Kickstarter долбоорун иштеп жатам, үн менен башкарылган RGB лентасы үчүн
BLE модулдары үчүн жөнөкөй IOS колдонмосу: 4 кадам
BLE модулдары үчүн жөнөкөй IOS тиркемеси: Бул көрсөтмө сиз эң негизги функциялары бар iOS колдонмосун кантип түзө алсаңыз болот. Бул Instructable iOS BLE тиркемесин түзүүнүн бардык процессинен өтпөйт. Бул бир гана кээ бир маанилүү элементтерге жогорку деңгээлде обзор берет
Жакындыкта сүрөт бөлүшүү IOS колдонмосу: 6 кадам
Жакындыкта сүрөт бөлүшүү IOS тиркемеси: Бул көрсөтмөдө биз Swift менен iOS колдонмосун түзөбүз, ал сүрөттөрдү жакын жердеги эч ким менен бөлүшүүгө мүмкүндүк берет, эч кандай түзмөктү жупташтыруунун кереги жок. Биз үн менен маалыматтарды жөнөтүү үчүн Chirp Connectти колдонобуз, ал эми сүрөттөрдү clo'до сактоо үчүн Firebase
Кирүү Серверди же Windows Компьютерлерин Алыстан Башкаруу: 6 кадам
Кирүү Серверди же Көбүнчө Windows Компьютерлерин Алыстан Башкаруу .: Бул үйрөтмө бул жерде көрсөтмөлөрдө көрүнгөн бир нече идеялардын жыйындысы. Ha4xor4life жеке файл сервериңизди текшерүү деген көрсөтмөнү оңой эле чыгарды. Бул жакшы идея, бирок ага эки киргизүү менен монитор керек болчу