Բովանդակություն:

Android/iOS հավելված ՝ ձեր OpenWrt երթուղիչին հեռակա մուտք գործելու համար ՝ 11 քայլ
Android/iOS հավելված ՝ ձեր OpenWrt երթուղիչին հեռակա մուտք գործելու համար ՝ 11 քայլ

Video: Android/iOS հավելված ՝ ձեր OpenWrt երթուղիչին հեռակա մուտք գործելու համար ՝ 11 քայլ

Video: Android/iOS հավելված ՝ ձեր OpenWrt երթուղիչին հեռակա մուտք գործելու համար ՝ 11 քայլ
Video: Xiaomi Smart Speaker - խելացի բարձրախոսի գլոբալ տարբերակ, Ok Google: Ձայնային դերասան տնային օգնական 2024, Հունիսի
Anonim
Android/iOS հավելված ՝ ձեր OpenWrt երթուղիչին հեռակա մուտք գործելու համար
Android/iOS հավելված ՝ ձեր OpenWrt երթուղիչին հեռակա մուտք գործելու համար
Android/iOS հավելված ՝ ձեր OpenWrt երթուղիչին հեռակա մուտք գործելու համար
Android/iOS հավելված ՝ ձեր OpenWrt երթուղիչին հեռակա մուտք գործելու համար

Վերջերս ես գնեցի նոր երթուղիչ (Xiaomi Mi Router 3G): Եվ, իհարկե, այս նոր, սարսափելի ապարատը ոգեշնչեց ինձ սկսել աշխատել այս նախագծի վրա;)

Քայլ 1: Ենթադրում եմ, որ դուք արդեն ունեք OpenWrt…

Ենթադրում եմ, որ դուք արդեն ունեք OpenWrt…
Ենթադրում եմ, որ դուք արդեն ունեք OpenWrt…

Նախ պետք է տեղադրեի OpenWrt- ը… Հիմնականում հետևեցի այս ուղեցույցին (հատուկ այս երթուղիչի մոդելի համար). Openwrt տեղադրում, WiFi նշաձող, ընկերուհու ingրամեկուսացում: Վա Iյ, ես այնքան ծիծաղեցի::)

Ուշադրություն. OpenWrt- ի տեղադրումը կարող է աղյուսացնել ձեր երթուղիչը: Բայց ավարտելուց հետո այն բացում է ամբողջ հզորությունն ու վերահսկողությունը: Ես այնքան համարձակ չեմ, որ այստեղ որևէ ցուցում տամ, քանի որ դրանք կարող են տարբեր լինել յուրաքանչյուր երթուղիչի մոդելի համար:

Բայց եթե դուք արդեն ունեք OpenWrt ձեր երթուղղիչում, ապա կկարողանաք սկսել այս ձեռնարկը notime- ում:

BTW- ն, որոշ զարգացման տախտակներ գալիս են OpenWrt- ով, ինչպես օրինակ ՝ Onion Omega- ն, VoCore- ը, LinkIt Smart 7688- ը և այլն: Այս ձեռնարկը նաև բացատրում է նման ծրագրեր ստեղծելու մի քանի հիմնական գաղափարներ, այնպես որ կարող եք հեշտությամբ հարմարեցնել այն Raspberry Pi- ի և նմանատիպ ծրագրերի հետ աշխատելու համար:

Այս նախագծի համար ես հիմնականում կօգտագործեմ նախապես տեղադրված ծրագրակազմ (հասանելի է OpenWrt- ով միացված ցանկացած երթուղիչում): Բայց որոշ առաջադեմ ֆունկցիոնալության համար ես ստիպված էի տեղադրել լրացուցիչ փաթեթներ: Սա արվում է ընդամենը մի քանի կտտոցով, այնպես որ ես այստեղ կներառեմ հրահանգները:

Բացի այդ, ես ենթադրում եմ, որ դուք արդեն գիտեք.

  • Ինչպես բացել/օգտագործել SSH տերմինալը ձեր OpenWrt երթուղիչին
  • Ինչպես բեռնել/խմբագրել ֆայլեր ձեր երթուղղիչում (օգտագործել FileZilla կամ scp/sftp)
  • Ինչպես աշխատել Linux վահանակի հետ

Քայլ 2: Softwareրագրակազմ և գործիքներ

Softwareրագրային ապահովում և գործիքներ
Softwareրագրային ապահովում և գործիքներ

Սմարթֆոնի կողմից ես օգտագործում եմ Blynk- ը: Այն տրամադրում է iOS և Android ծրագրեր ՝ վերահսկելու ցանկացած սարքավորում: Դուք կարող եք հեշտությամբ կառուցել գեղեցիկ գրաֆիկական ինտերֆեյսեր ձեր բոլոր նախագծերի համար ՝ պարզապես քաշելով և թողնելով վիջեթները ՝ անմիջապես ձեր սմարթֆոնի վրա: Blynk- ը հիմնականում օգտագործվում է Arduino- ի, Raspberry Pi- ի և այլնի հետ: Բայց ինչու՞ այն չաշխատել հենց երթուղղիչի վրա:;)

Սարքի կողմից ես Lua- ն կօգտագործեմ անհրաժեշտ ֆունկցիոնալությունը: Ես կարող եմ օգտագործել նաև Python կամ Node.js, բայց, ցավոք, այս տարբերակները միշտ չէ, որ հասանելի են, որոշ երթուղիչներում ռեսուրսների բացակայության պատճառով: Կամ C/C ++, բայց դրա հետ աշխատելը այնքան էլ հարմար չէ (յուրաքանչյուր փոփոխության համար վերակազմավորում և այլն): Մյուս կողմից, Lua- ն նախապես տեղադրված է, պարզ է օգտագործման և սովորելու համար: Այն օգտագործվում է որպես կանխադրված վեբ ինտերֆեյս ՝ LuCI:

Քայլ 3: Ստեղծեք նվազագույն ծրագիր

Blynk- ի և Lua- ի հետ սկսելն այնքան հեշտ է, որքան.

  • Ներբեռնեք Blynk ծրագիրը (App Store- ից, Google Play)
  • Ստեղծեք նոր նախագիծ և ստացեք Auth Token- ը
  • Հետևեք Blynk Lua- ի տեղադրման հրահանգներին OpenWrt- ի համար:

Օգտագործեք SSH ՝ ձեր երթուղիչի վահանակ մուտք գործելու համար: Լռելյայն օրինակը գործարկելուց հետո.

լուա./ օրինակներ/հաճախորդ.լուա

Մենք պետք է տեսնենք այսպիսի բան.

Միացում…

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 արտադրանքից հաճախորդների թիվը ստանալու համար ես պետք է զտեմ աղյուսակը (հեռացնեմ անկապ տարրերը) և հաշվեմ աղյուսակի տողերը, որից ստացվում է հետևյալ հրամանը.

կատու/պրոկ/ցանց/արփ | գրեպ բր-լան | grep 0x2 | wc -l

Եկեք փորձենք.

root@router: ~/lua-blynk# cat/proc/net/arp | գրեպ բր-լան | grep 0x2 | wc -l

1

Հոյակապ Այժմ մենք ստանում ենք այն գաղափարը, թե ինչպես կարող ենք հավաքել բոլոր անհրաժեշտ տվյալները: Եկեք ավտոմատացնենք այն: Մեր կոդը մաքուր և ընդարձակելի դարձնելու համար եկեք ստեղծենք որոշ օգնական գործառույթներ.

գործառույթ exec_out (սմդ)

տեղական ֆայլ = io.popen (cmd), եթե ոչ ֆայլ, ապա վերադարձեք զրոյական տեղական ելք = ֆայլ. կարդալ ('*բոլորը') ֆայլը `փակել () print (" Run: "..cmd.." -> ".. output) վերադարձնել ելքային ավարտի գործառույթը read_file (path) տեղական ֆայլ = io.open (path, "rb"), եթե ոչ ֆայլ, ապա վերադարձնել զրոյական տեղական բովանդակություն = ֆայլ. կարդալ "*a" ֆայլը `close () print (" Read: "..path.." -> "..բովանդակություն) վերադարձնել բովանդակության ավարտը

Օգտագործելով այս կոմունալ ծառայությունները, մենք այժմ կարող ենք իրականացնել տվյալների հավաքման իրական գործառույթները.

getArpClients գործառույթը ()

վերադարձի թվաքանակ (exec_out ("cat/proc/net/arp | grep br -lan | grep 0x2 | wc -l")) վերջնական գործառույթ getUptime () վերադարձ տոննա (exec_out ("cat/proc/uptime | awk '{տպել $ 1 } '")) վերջնական գործառույթը getWanIP () վերադարձնել exec_out (" ifconfig eth0.2 | grep' inet addr: '| cut -d: -f2 | awk' {print $ 1} '") ավարտ

Դուք կարող եք գործարկել այս պատյանների հրահանգների մասերը ՝ ավելի խորը հասկանալու, թե ինչպես է այն աշխատում և հարմարեցնելու այն ձեր կարիքներին:

Ամենահեշտ մասը տվյալների ուղարկումն է Blynk հավելված: Լռելյայն օրինակը արդեն կարգավորում է ժամաչափը, որն ամեն 5 վայրկյանը մեկ գործարկում է ինչ -որ կոդ, այնպես որ մենք պարզապես նորից օգտագործում ենք այն.

տեղական tmr1 = erամաչափ. նոր {interval = 5000, func = գործառույթ ()

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

Հավելվածում մենք ավելացնում ենք 3 պիտակի վիջեթ և համապատասխանաբար դրանք վերագրում ենք վիրտուալ կապում 10, 11, 12:

Թեև դա աշխատում է, այն բավականին անարդյունավետ է, քանի որ WAN IP- ը կամ հաճախորդների թիվը այդքան հաճախ չեն թարմացվում: Եկեք շտկենք դա:

WAN IP- ի համար մենք այն տեղափոխում ենք միացված կարգավորիչ: Այն գործարկվելու է ամեն անգամ, երբ երթուղիչը կապ է հաստատում Blynk Cloud- ի հետ: Սա պետք է բավարար լինի.

blynk: միացված («միացված», գործառույթ ()

տպել («Պատրաստ է») blynk: virtualWrite (12, getWanIP ()) վերջ)

Uptime- ի և հաճախորդների համարի համար մենք ստեղծում ենք առանձին ժամաչափ ՝ 5 րոպե տևողությամբ: ընդմիջում:

տեղական tmr2 = erամաչափ. նոր {interval = 5*60*1000, func = գործառույթ ()

blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime ()/60/60)) վերջ}

Քայլ 5: WiFi վերահսկում `միացված/անջատված

WiFi վերահսկում ՝ միացված/անջատված
WiFi վերահսկում ՝ միացված/անջատված

Մինչ այժմ մենք միայն որոշ տեղեկություններ էինք ստանում սարքից: Փորձենք վերահսկել այն:

blynk: միացված («V20», գործառույթ (պարամետր)

եթե param [1] == "1" ապա os.execute ("wifi up") այլապես os.execute ("wifi down") վերջի վերջ)

Հավելվածի կողմից ես պարզապես ավելացրեցի «Կոճակ» վիջեթը (ռեժիմ ՝ անջատիչ) և այն հանձնարարեցի V20- ին:

Վերջ: Ingարմանալի է:

Քայլ 6: Համակարգային վիճակագրության գծապատկեր

Համակարգային վիճակագրության գծապատկեր
Համակարգային վիճակագրության գծապատկեր
Համակարգային վիճակագրության գծապատկեր
Համակարգային վիճակագրության գծապատկեր

գործառույթը getCpuLoad ()

վերադարձի թվաքանակ (exec_out ("top -bn1 | grep 'CPU:' | head -n1 | awk '{print $ 2+$ 4}'")) վերջնական գործառույթ getRamUsage () վերադարձ տոննա (exec_out ("free | grep Mem | awk ') {print ($ 3- $ 7)/$ 2 * 100.0} '")) վերջ

Մենք նաև պետք է տվյալները ուղարկենք Blynk (եկեք նորից օգտագործենք tmr1).

տեղական tmr1 = erամաչափ. նոր {interval = 5000, func = գործառույթ ()

blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) վերջ}

Հավելվածի կողքին ավելացրեք SuperChart վիջեթը: Ավելացրեք պրոցեսոր, RAM տվյալների հոսքեր և նշանակեք V5, V6:

Քայլ 7: HDD- ի պտտման կարգավիճակը

Իմ երթուղիչն ունի արտաքին HDD սկավառակ, որը միացված է որպես ցանցին կից պահեստավորման սարք: Բանն այն է, որ այս սկավառակը կազմաձևված է, որպեսզի այն սկսի պտտվել, երբ ինչ -որ մեկը մուտք է գործում դրան և դադարեցնել ժամանակի ընդմիջումից հետո:

Ակնհայտ է, որ լավ կլինի իմանալ, թե քանի անգամ է այն միանում ամբողջ օրվա ընթացքում: Այսպիսով, ես ավելացրեցի մեկ այլ տվյալների հոսք իմ Համակարգի գծապատկերում:

HDD սկավառակի կարգավիճակ ստանալը մի փոքր ավելի բարդ է, բայց ես գտա մի տարբերակ: Նախևառաջ, տեղադրեք խելացի գործիքներ SSH վահանակից.

opkg թարմացում

opkg տեղադրել smartmontools

Այնուհետև, մեր ծածկագրում մենք պետք է գործարկենք հատուկ հրաման և ստուգենք ելքի ծածկագիրը.

գործառույթը exec_ret (cmd)

տեղական ելք = os.execute (cmd) print ("Run:"..cmd.. " -> exit:".. exit) return exit end function getHddSpinning () if exec_ret ("smartctl --nocheck = standby -info /dev/sda>/dev/null ") == 0 ապա վերադարձնել 1 այլ վերադարձը 0 վերջի վերջը

Նշում. Իմ HDD- ն /dev /sda է

Քայլ 8. Networkանցի գործունեության գծապատկեր

Networkանցային գործունեության գծապատկեր
Networkանցային գործունեության գծապատկեր

Մենք ստեղծում ենք մեկ այլ SuperChart վիջեթ (նման է նախորդին), ավելացնում ենք TX և RX տվյալների հոսքեր և հանձնարարում V1- ին և V2- ին: Նշում. Ես ուզում եմ ցուցադրել WAN նավահանգստի վիճակագրություն, և իմ WAN պորտը eth0.2 է

Օգնականի գործառույթները.

գործառույթը getWanRxBytes ()

վերադարձնել թվաքանակը (կարդալ_ ֆայլը ("/sys/class/net/eth0.2/վիճակագրություն/rx_bytes")) վերջնական գործառույթը getWanTxBytes () վերադարձնել թվաքանակը (կարդալ_ ֆայլը ("/sys/class/net/eth0.2/վիճակագրություն/tx_bytes")) վերջ

Հաջորդը, մի քանի կոդ ավելացրեք նույն tmr1- ին: Սա ավելի բարդ է, քանի որ մեզ անհրաժեշտ է միայն հաշվարկել և ցուցադրել փոխանցված/ստացված բայթերի տարբերությունը.

տեղական prevTx, prevRx

local tmr1 = erամաչափ. նոր {interval = 5000, func = գործառույթ () local tx = getWanTxBytes () local rx = getWanRxBytes () եթե prevTx և prevTx ~ = tx ապա 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: virtualWdS (7, ստանալ,)) վերջ}

Քայլ 9: ificationsանուցումներ

Անուցումներ
Անուցումներ

Ես նաև ցանկանում էի տեղեկացվել, երբ իմ երթուղիչը հոսանքազրկվի կամ միանա ինտերնետին: Դրա համար մեզ անհրաժեշտ է ծանուցման վիջեթ:

Վիջեթների կարգավորումներում միացրեք «անցանց ծանուցումը»: Կոդի կարիք չկա: Բայց մենք կարող ենք նաև մաքսային ծանուցումներ ուղարկել մեր ծածկագրից:

Քայլ 10: Ավտոմատ գործարկում ֆոնին

Առայժմ սցենարը պետք է ձեռքով կատարվի, բայց ես ուզում եմ այն ինքնաբերաբար գործարկել, երբ երթուղիչը միացված է:

Դա արվում է ՝ ծառայություն ստեղծելով: Ստեղծեք ֆայլ /etc/init.d/blynkmon:

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

START = 99 STOP = pidfile = "/var/run/blynkmon.pid" start () {if [-f $ pidfile]; ապա արձագանքեք «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}

Նշում. Մի մոռացեք փոխարինել ձեր հեղինակած նշանը

Այնուհետև միացրեք blynkmon ծառայությունը.

ծառայություն blynkmon միացնել

Քայլ 11: Եզրակացություն և հետագա գաղափարներ

Եզրակացություն և հետագա գաղափարներ
Եզրակացություն և հետագա գաղափարներ

Դուք կարող եք սկանավորել այս QR- ը ՝ իմ Blynk Project- ի կլոնը ստանալու համար: Այն պահանջում է էներգիայի որոշ միավորներ (4600), քանի որ այն օգտագործում է բազմաթիվ վիդջեթներ:

Գտեք Լուայի ամբողջական կոդը այստեղ ՝

Առայժմ ամեն ինչ լավ է, բայց ահա որոշ գաղափարներ, որոնք ես կցանկանայի ավելացնել մոտ ապագայում:

  • Ավելացնել Reboot հրաման: Կանխել դրա պատահական սեղմումը:
  • Լինուքսի ցանկացած հրաման գործարկելու համար ավելացրեք տերմինալ վիջեթ:
  • Ավելացնել պրոցեսորի ջերմաստիճանի գծապատկեր:

    UPD. Unfortunatelyավոք, OpenWrt- ին ներկայումս բացակայում են որոշ երթուղիչներ իմ երթուղիչի մոդելի համար: Բայց այն հասանելի է շատ այլ երթուղիչների համար

  • Ավելացրեք ծանուցում, երբ որևէ սարք միանում/լքում է ցանցը: Մենք արդեն ունենք arp տեղեկատվություն, այժմ միայն ստուգեք MAC հասցեն:

Այս կերպ մենք կարող ենք վերահսկել և վերահսկել 3D տպիչներ, ռոբոտներ, սովորական համակարգիչ/նոթբուք, Arduino/ESP8266/ESP32/RaspberryPi իրեր, Smart Home սարքեր և գրեթե ամեն ինչ շուրջը: Տեղեկացրեք ինձ, եթե ունեք որևէ այլ հետաքրքիր գաղափար: Ի՞նչ եք կարծում այս ամենի մասին:

Խորհուրդ ենք տալիս: