Mục lục:
- Bước 1: Tôi giả sử rằng bạn đã có OpenWrt…
- Bước 2: Phần mềm và Công cụ
- Bước 3: Tạo một ứng dụng tối thiểu
- Bước 4: Thêm một số thông tin: Số lượng khách hàng, Địa chỉ IP WAN, Thời gian hoạt động
- Bước 5: Điều khiển WiFi: BẬT / TẮT
- Bước 6: Biểu đồ thống kê hệ thống
- Bước 7: Trạng thái quay của HDD
- Bước 8: Biểu đồ hoạt động mạng
- Bước 9: Thông báo
- Bước 10: Tự động chạy trong nền
- Bước 11: Kết luận & Ý tưởng thêm
Video: Ứng dụng Android / iOS để truy cập từ xa bộ định tuyến OpenWrt của bạn: 11 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:33
Gần đây tôi đã mua một bộ định tuyến mới (Xiaomi Mi Router 3G). Và tất nhiên, phần cứng mới, tuyệt vời này đã truyền cảm hứng cho tôi bắt đầu làm việc với dự án này;)
Bước 1: Tôi giả sử rằng bạn đã có OpenWrt…
Tôi phải cài đặt OpenWrt trước… Hầu hết, tôi đã làm theo hướng dẫn này (cụ thể cho kiểu bộ định tuyến này): https://dzone.com/articles/hacking-into-xiaomi-mi-… Trong khi làm việc với điều này, tôi đã tìm thấy video tuyệt vời này: Cài đặt openwrt, điểm chuẩn WiFi, Nhấp nháy bạn gái. Thật là tôi đã cười rất tươi!:)
Chú ý! Cài đặt OpenWrt có thể đóng cục bộ định tuyến của bạn. Nhưng sau khi hoàn thành, nó mở ra toàn bộ quyền lực và quyền kiểm soát. Tôi không đủ can đảm để cung cấp bất kỳ hướng dẫn nào ở đây, vì chúng có thể khác nhau đối với mọi kiểu bộ định tuyến.
Nhưng nếu bạn đã có OpenWrt trên bộ định tuyến của mình, bạn sẽ có thể bắt đầu với hướng dẫn này ngay lập tức
BTW, một số bảng phát triển đi kèm với OpenWrt, như Onion Omega, VoCore, LinkIt Smart 7688 và những bảng khác. Hướng dẫn này cũng giải thích một số ý tưởng cơ bản đằng sau việc tạo các ứng dụng như vậy, vì vậy bạn có thể dễ dàng điều chỉnh nó để hoạt động với Raspberry Pi và các ứng dụng tương tự.
Đối với dự án này, tôi sẽ chủ yếu sử dụng phần mềm được cài đặt sẵn (có sẵn trên bất kỳ bộ định tuyến nào hỗ trợ OpenWrt). Nhưng đối với một số chức năng nâng cao, tôi phải cài đặt các gói bổ sung. Điều này được thực hiện chỉ trong một vài cú nhấp chuột, vì vậy tôi sẽ bao gồm các hướng dẫn ở đây.
Ngoài ra, tôi cho rằng bạn đã biết:
- Cách mở / sử dụng thiết bị đầu cuối SSH với bộ định tuyến OpenWrt của bạn
- Cách tải lên / chỉnh sửa tệp trên bộ định tuyến của bạn (sử dụng FileZilla hoặc scp / sftp)
- Cách làm việc với bảng điều khiển Linux
Bước 2: Phần mềm và Công cụ
Về mặt điện thoại thông minh, tôi đang sử dụng Blynk. Nó cung cấp các ứng dụng iOS và Android để kiểm soát bất kỳ phần cứng nào. Bạn có thể dễ dàng xây dựng các giao diện đồ họa đẹp mắt cho tất cả các dự án của mình chỉ bằng cách kéo và thả các widget ngay trên điện thoại thông minh của bạn. Blynk chủ yếu được sử dụng với Arduino, Raspberry Pi, v.v. Nhưng tại sao không chạy nó trên chính bộ định tuyến?;)
Về mặt thiết bị, tôi sẽ sử dụng Lua để tập lệnh cho các chức năng cần thiết. Tôi cũng có thể sử dụng Python hoặc Node.js, nhưng tiếc là không phải lúc nào các tùy chọn này cũng có sẵn do thiếu tài nguyên trên một số bộ định tuyến. Hoặc C / C ++, nhưng Nó không quá thuận tiện để làm việc (biên dịch lại cho mọi thay đổi, v.v.) Mặt khác, Lua được cài đặt sẵn, dễ sử dụng và học hỏi. Nó được sử dụng bởi giao diện web mặc định, LuCI.
Bước 3: Tạo một ứng dụng tối thiểu
Bắt đầu với Blynk và Lua dễ dàng như sau:
- Tải xuống ứng dụng Blynk (từ App Store, Google Play)
- Tạo một dự án mới và nhận Mã xác thực
- Làm theo hướng dẫn cài đặt Blynk Lua cho OpenWrt.
Sử dụng SSH để truy cập bảng điều khiển bộ định tuyến của bạn. Sau khi chạy ví dụ mặc định:
lua./examples/client.lua
Chúng ta sẽ thấy một cái gì đó như thế này:
Đang kết nối…
Bắt tay SSL… Sẵn sàng.
Điều đó có nghĩa là kết nối an toàn, hai chiều với ứng dụng đã được thiết lập! YAY!
Bây giờ chúng ta có thể dễ dàng mở rộng ví dụ được cung cấp, vì vậy nó thực hiện một điều gì đó thú vị. Tôi đã tạo một bản sao của ví dụ này để chỉnh sửa nó:
cp./examples/client.lua./blynkmon.lua
Bước 4: Thêm một số thông tin: Số lượng khách hàng, Địa chỉ IP WAN, Thời gian hoạt động
Ý tưởng cơ bản là lấy thông tin từ HĐH theo định kỳ, thực hiện một số phép tính đơn giản nếu cần, sau đó gửi kết quả đến Blynk để hiển thị.
Trong Linux / OpenWrt, chúng tôi có một số cách để lấy dữ liệu hệ thống:
- Chạy một lệnh và phân tích cú pháp văn bản mà nó xuất ra
- Chạy một lệnh và xem mã thoát mà nó trả về
- Đọc tệp hệ thống, nằm trong thư mục / proc / và / sys / class /
Bây giờ tôi muốn hiển thị số lượng thiết bị được kết nối.
Khi tôi chạy cat / proc / net / arp trên bảng điều khiển, nó sẽ xuất ra danh sách các thiết bị đã biết, cùng với địa chỉ MAC và IP của chúng:
Địa chỉ IP Loại HW Cờ Địa chỉ HW Mặt nạ Thiết bị
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
Chúng ta có thể phân tích cú pháp trực tiếp trong Lua, nhưng thường dễ dàng hơn khi sử dụng các tiện ích chuyên dụng. Trên Linux, đó là grep, head, tail, cut, wc, awk.
Để có được số lượng khách hàng từ đầu ra arp, tôi cần lọc bảng (loại bỏ các mục không liên quan) và đếm các hàng trong bảng, dẫn đến lệnh sau:
cat / proc / net / arp | grep br-lan | grep 0x2 | wc -l
Hãy thử nó:
root @ router: ~ / lua-blynk # cat / proc / net / arp | grep br-lan | grep 0x2 | wc -l
1
Tuyệt vời. Bây giờ chúng tôi có ý tưởng về cách chúng tôi có thể thu thập tất cả các thông tin cần thiết. Hãy tự động hóa nó. Để làm cho mã của chúng ta sạch sẽ và có thể mở rộng được, hãy tạo một số hàm trợ giúp:
hàm thực thi (cmd)
local file = io.popen (cmd) if not file then return nil end local output = file: read ('* all') file: close () print ("Run:"..cmd.. "->".. output) trả về kết thúc đầu ra hàm read_file (đường dẫn) local file = io.open (path, "rb") nếu không phải là file thì trả về nil end local content = file: read "* a" file: close () print ("Đọc: "..path.." -> "..content) trả về nội dung kết thúc
Sử dụng các tiện ích này, bây giờ chúng ta có thể triển khai các chức năng tìm nạp dữ liệu thực tế:
hàm getArpClients ()
return tonumber (execute_out ("cat / proc / net / arp | grep br-lan | grep 0x2 | wc -l")) end function getUptime () return tonumber (execute_out ("cat / proc / uptime | awk '{print $ 1 } '")) end function getWanIP () return execute_out (" ifconfig eth0.2 | grep' inet addr: '| cut -d: -f2 | awk' {print $ 1} '") end
Bạn có thể chạy các phần của các lệnh shell này, để hiểu sâu hơn về cách nó hoạt động và điều chỉnh nó theo nhu cầu của bạn.
Phần dễ nhất là gửi dữ liệu đến Ứng dụng Blynk. Ví dụ mặc định đã thiết lập bộ đếm thời gian, chạy một số mã sau mỗi 5 giây, vì vậy chúng tôi chỉ cần sử dụng lại nó:
local tmr1 = Timer: new {khoảng = 5000, func = function ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime () / 60/60)) blynk: virtualWrite (12, getWanIP ()) end}
Trong ứng dụng, chúng tôi thêm 3 tiện ích nhãn và gán chúng cho các Ghim ảo 10, 11, 12 tương ứng.
Mặc dù cách này hoạt động nhưng nó không hiệu quả vì IP WAN hoặc số lượng máy khách không cập nhật thường xuyên
Đối với IP WAN, chúng tôi chuyển nó sang trình xử lý được kết nối. Nó sẽ được chạy mỗi khi bộ định tuyến thiết lập kết nối với Blynk Cloud. Điều này phải đủ:
blynk: on ("được kết nối", hàm ()
print ("Sẵn sàng.") blynk: virtualWrite (12, getWanIP ()) end)
Đối với Thời gian hoạt động và Số lượng khách hàng, chúng tôi tạo một bộ hẹn giờ riêng với 5 phút. khoảng thời gian:
local tmr2 = Timer: new {khoảng = 5 * 60 * 1000, func = function ()
blynk: virtualWrite (10, getArpClients ()) blynk: virtualWrite (11, string.format ("%. 1f h", getUptime () / 60/60)) end}
Bước 5: Điều khiển WiFi: BẬT / TẮT
Cho đến bây giờ, chúng tôi chỉ nhận được một số thông tin từ thiết bị. Hãy thử kiểm soát nó!
blynk: on ("V20", function (param)
if param [1] == "1" then os.execute ("wifi up") else os.execute ("wifi down") end end)
Về phía ứng dụng, tôi vừa thêm tiện ích Nút (chế độ: Chuyển đổi) và gán nó cho V20.
Đó là nó. Kinh ngạc.
Bước 6: Biểu đồ thống kê hệ thống
hàm getCpuLoad ()
return tonumber (execute_out ("top -bn1 | grep 'CPU:' | head -n1 | awk '{print $ 2 + $ 4}'")) end function getRamUsage () return tonumber (execute_out ("free | grep Mem | awk" {print ($ 3- $ 7) / $ 2 * 100.0} '")) kết thúc
Chúng tôi cũng cần gửi dữ liệu đến Blynk (hãy sử dụng lại tmr1):
local tmr1 = Timer: new {khoảng = 5000, func = function ()
blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) end}
Trên App Side, thêm tiện ích SuperChart. Thêm luồng dữ liệu CPU, RAM và gán cho V5, V6.
Bước 7: Trạng thái quay của HDD
Bộ định tuyến của tôi có một ổ cứng HDD bên ngoài được kết nối như một Thiết bị lưu trữ đính kèm mạng, có điều là ổ này được định cấu hình để bắt đầu quay khi ai đó truy cập vào nó và tạm dừng sau một thời gian chờ.
Rõ ràng, sẽ rất tuyệt nếu biết nó bật bao nhiêu lần trong một ngày. Vì vậy, tôi đã thêm một luồng dữ liệu khác vào biểu đồ Hệ thống của mình.
Sẽ hơi phức tạp hơn một chút để xác định tình trạng của ổ cứng HDD, nhưng tôi đã tìm ra cách! Trước hết, hãy cài đặt smartmontools từ bảng điều khiển SSH:
cập nhật opkg
opkg cài đặt smartmontools
Sau đó, trong mã của chúng tôi, chúng tôi cần chạy một lệnh đặc biệt và kiểm tra mã thoát:
chức năng thực thi (cmd)
local exit = os.execute (cmd) print ("Run:"..cmd.. "-> exit:".. exit) trả về hàm kết thúc thoát getHddSpinning () if execute_ret ("smartctl --nocheck = standby --info / dev / sda> / dev / null ") == 0 then return 1 else return 0 end end
Lưu ý: ổ cứng của tôi là / dev / sda
Bước 8: Biểu đồ hoạt động mạng
Chúng tôi Tạo một tiện ích SuperChart khác (tương tự như trước đó), Thêm luồng dữ liệu TX và RX và gán cho V1 và V2.
Chức năng của người trợ giúp:
hàm getWanRxBytes ()
return tonumber (read_file ("/ sys / class / net / eth0.2 / Statistics / rx_bytes")) end function getWanTxBytes () return tonumber (read_file ("/ sys / class / net / eth0.2 / Statistics / tx_bytes")) kết thúc
Tiếp theo, thêm một số mã vào cùng một tmr1. Điều này phức tạp hơn, vì chúng tôi chỉ cần tính toán và hiển thị sự khác biệt về byte truyền / nhận:
preTx cục bộ, prevRx
cục bộ tmr1 = Bộ định thời: new {khoảng = 5000, func = function () cục bộ tx = getWanTxBytes () cục bộ rx = getWanRxBytes () nếu prevTx và prevTx ~ = tx thì blynk: virtualWrite (1, tx - prevTx) kết thúc nếu presRx và prevRx ~ = rx then blynk: virtualWrite (2, rx - prevRx) end prevTx = tx prevRx = rx blynk: virtualWrite (5, getCpuLoad ()) blynk: virtualWrite (6, getRamUsage ()) blynk: virtualWrite (7, getHddSpinning ()) kết thúc}
Bước 9: Thông báo
Tôi cũng muốn được thông báo khi Bộ định tuyến của tôi mất nguồn hoặc kết nối internet, vì vậy chúng ta cần tiện ích Thông báo.
Trong cài đặt tiện ích, hãy bật "thông báo ngoại tuyến". Không cần mã. Nhưng chúng tôi cũng có thể gửi thông báo tùy chỉnh từ mã của chúng tôi.
Bước 10: Tự động chạy trong nền
Hiện tại, tập lệnh phải được thực thi theo cách thủ công, nhưng tôi muốn làm cho nó tự động chạy trong nền khi bộ định tuyến được bật nguồn.
Điều này được thực hiện bằng cách tạo một dịch vụ. Tạo tệp /etc/init.d/blynkmon:
#! / bin / sh /etc/rc.common
START = 99 STOP = pidfile = "/ var / run / blynkmon.pid" start () {if [-f $ pidfile]; sau đó echo "blynkmon đã chạy" thoát 0 fi cd / root / lua-blynk lua blynkmon.lua your-auth-token> / dev / null & echo $! > $ pidfile} stop () {if [! -f $ pidfile]; sau đó echo "blynkmon not running" thoát 0 fi kill -9 $ (cat $ pidfile) rm $ pidfile}
Lưu ý: đừng quên thay thế your-auth-token
Sau đó, kích hoạt dịch vụ blynkmon:
dịch vụ blynkmon kích hoạt
Bước 11: Kết luận & Ý tưởng thêm
Bạn có thể quét mã QR này để lấy bản sao của Dự án Blynk của tôi. Nó yêu cầu một số điểm năng lượng (4600), vì nó sử dụng rất nhiều vật dụng!
Tìm mã Full Lua tại đây:
Cho đến nay rất tốt, nhưng đây là một số ý tưởng tôi muốn bổ sung trong tương lai gần.
- Thêm lệnh Khởi động lại. Ngăn chặn việc vô tình nhấp vào nó.
- Thêm tiện ích đầu cuối để chạy bất kỳ lệnh linux nào.
-
Thêm biểu đồ nhiệt độ CPU.
UPD: Rất tiếc là OpenWrt hiện thiếu một số trình điều khiển cho kiểu bộ định tuyến của tôi. Nhưng nó có sẵn cho nhiều bộ định tuyến khác
- Thêm thông báo khi một thiết bị cụ thể tham gia / rời khỏi mạng. Chúng tôi đã có thông tin arp, giờ chỉ cần kiểm tra địa chỉ MAC.
Bằng cách này, chúng tôi có thể giám sát và điều khiển Máy in 3D, Robot, PC / Máy tính xách tay thông thường, nội dung Arduino / ESP8266 / ESP32 / RaspberryPi, thiết bị Smart Home và hầu như mọi thứ xung quanh. Hãy cho tôi biết nếu có bất kỳ ý tưởng thú vị nào khác. Bạn nghĩ gì về tất cả những điều này?
Đề xuất:
Steam Punk UPS của bạn để có được hàng giờ hoạt động cho bộ định tuyến Wi-fi của bạn: 4 bước (có hình ảnh)
Steam Punk UPS của bạn để có được hàng giờ hoạt động cho bộ định tuyến Wi-fi của bạn: Có điều gì đó cơ bản không đồng ý về việc UPS của bạn chuyển đổi nguồn pin DC 12V thành nguồn AC 220V để các máy biến áp chạy bộ định tuyến và sợi quang ONT của bạn có thể chuyển đổi nó trở lại 12V DC! Bạn cũng chống lại [thường là
Sử dụng phần mở rộng lồng ngực của Hope để tìm Công việc chưa hoàn chỉnh của Sắc lệnh đền thờ trong cây gia đình của bạn về Tìm kiếm gia đình: 11 bước
Sử dụng phần mở rộng Rương của Hope để Tìm công việc pháp lệnh đền thờ chưa hoàn chỉnh trong cây gia đình của bạn trên Tìm kiếm gia đình: Mục đích của tài liệu hướng dẫn này là để trình bày cách tìm kiếm gia phả của bạn trong Tìm kiếm gia đình cho tổ tiên có công việc pháp lệnh đền thờ chưa hoàn thành bằng cách sử dụng phần mở rộng Rương của hy vọng. Sử dụng Hope's Chest có thể tăng tốc đáng kể tìm kiếm của bạn cho
Định hướng lại một Hộp Bộ định tuyến Cũ cho Dự án Arduino của bạn: 3 bước
Định lại mục đích một Hộp bộ định tuyến cũ cho Dự án Arduino của bạn: Dự án này xuất phát từ nhu cầu xây dựng dự án tự động hóa gia đình của tôi. Tôi quyết định sử dụng lại vỏ hộp từ một bộ định tuyến PlusNet cũ bị lỗi (bộ định tuyến Thomson TG585). bao vây là :: Hộp treo tường cấu hình thấp Chảo có nắp bật ra dễ dàng
Truy cập trực tuyến mà không bị gián đoạn: Tor (Bộ định tuyến củ hành): 4 bước (có hình ảnh)
Truy cập trực tuyến mà không bị gián đoạn: Tor (Bộ định tuyến củ hành): Khi bạn trực tuyến, bạn để lại dấu vết ở khắp nơi. Bạn có thể đi chơi với bạn bè trên IM, xem các trang web hoặc tải nhạc xuống. Nếu bạn sống ở một quốc gia nơi những kẻ rình mò đang dòm ngó những gì người dân bình thường làm trên mạng (lke, ừm, U
Chuyển đổi Bộ định tuyến không dây sang Bộ mở rộng không dây 2x Điểm truy cập: 5 bước
Chuyển đổi Bộ định tuyến không dây sang Bộ mở rộng không dây 2x Điểm truy cập: Tôi có kết nối Internet không dây kém trong nhà do có RSJ (dầm đỡ kim loại trên trần nhà) và muốn tăng tín hiệu hoặc thêm bộ mở rộng bổ sung cho phần còn lại của ngôi nhà. Tôi đã thấy bộ mở rộng khoảng £ 50 trong một điện