Cách sử dụng Raspberry Pi để theo dõi tốc độ Broadband

Trong bài viết này, SEV TEAM sẽ hướng dẫn bạn cách sử dụng Raspberry Pi để theo dõi tốc độ Broadband (băng thông rộng). Dự án này liên quan đến một chút thiết lập hợp lý, bao gồm tải xuống và cài đặt một số gói, viết script Python, v.v… Nhưng một khi đã thiết lập xong những thứ cơ bản, bạn có thể tự động hóa việc theo dõi kết nối băng thông rộng của mình, để nó tiếp tục bao lâu tùy thích.

File CSV sẽ được tạo (các giá trị được phân tách bằng dấu phẩy) vào Google Drive và cập nhật mỗi giờ một lần. CSV là một định dạng file rất đơn giản có thể được mở trong Microsoft Excel hoặc nhập vào Google Sheets. Nghe có vẻ như một thứ tiện dụng? Bài viết này giả sử bạn đã cài đặt Raspbian trên Pi của mình.

Cách sử dụng Raspberry Pi để theo dõi tốc độ Broadband

Bước 1: Kiểm tra các bản cập nhật

Như thường lệ, hãy bắt đầu với việc kiểm tra các bản cập nhật mới nhất. Chạy các lệnh sau trong Terminal:

sudo apt-get update
 sudo apt-get upgrade

Bước 2: Cài đặt speedtest-cli

Có nhiều phương pháp khác nhau để đo tốc độ kết nối băng thông rộng. Bài viết sẽ sử dụng speedtest-cli, “một giao diện dòng lệnh để kiểm tra băng thông Internet bằng speedtest.net”.

speedtest-cli không khả dụng ngay từ kho lưu trữ Raspbian, nhưng bạn có thể cài đặt nó từ Python Package Index (PyPI). Điều đó thật dễ dàng thực hiện bằng cách sử dụng một công cụ có tên là pip được cài đặt sẵn trên Raspbian Jessie và Stretch. Bạn có thể đảm bảo rằng bạn có pip bằng cách chạy lệnh này:

sudo apt-get install python-pip

Nếu bạn nhận được thông báo “python-pip đã là phiên bản mới nhất”, điều đó có nghĩa là nó đã sẵn sàng để sử dụng.

Tiếp theo, hãy sử dụng pip để cài đặt speedtest-cli:

sudo pip install speedtest-cli

Với speedtest-cli hiện đã được cài đặt, bạn có thể đo tốc độ băng thông rộng của mình một cách dễ dàng bằng lệnh sau:

speedtest-cli

Mặc dù vậy, đối với mục đích trong bài này, việc sử dụng Simple mode của speedtest-cli sẽ thuận tiện hơn:

speedtest-cli --simple

Bạn sẽ thấy một kết quả như thế này:

Ping: 47.943 ms
 Download: 40.93 Mbit/s
 Upload: 2.33 Mbit/s

Tuy nhiên, đầu ra đó không tuân theo cú pháp CSV. Do đó, bạn sẽ cần phân tích cú pháp dữ liệu và làm cho nó phù hợp.

Bước 3: Tạo script Python

Hãy tạo một file Python mới:

sudo nano speedtest.py

Đây là những gì bạn nên có bên trong file (tất nhiên, bạn có thể sao chép và dán những dòng này):

import os
 import re
 import subprocess
 import time
 
 response = subprocess.Popen('speedtest-cli --simple', shell=True, stdout=subprocess.PIPE).stdout.read()
 
 ping = re.findall('Ping:s(.*?)s', response, re.MULTILINE)
 download = re.findall('Download:s(.*?)s', response, re.MULTILINE)
 upload = re.findall('Upload:s(.*?)s', response, re.MULTILINE)
 
 ping[0] = ping[0].replace(',', '.')
 download[0] = download[0].replace(',', '.')
 upload[0] = upload[0].replace(',', '.')
 
 try:
     if os.stat('/home/pi/speedtest/speedtest.csv').st_size == 0:
         print 'Date,Time,Ping (ms),Download (Mbit/s),Upload (Mbit/s)'
 except:
     pass
 
 print '{},{},{},{},{}'.format(time.strftime('%m/%d/%y'), time.strftime('%H:%M'), ping[0], download[0], upload[0])

(Giả sử rằng bạn đang lưu script trong thư mục /home/pi/ – nếu không, chỉ cần thay đổi đường dẫn tại đây: if os.stat(‘/home/pi/speedtest/speedtest.csv’).st_size == 0:).

Sau khi bạn có các dòng ở đúng vị trí, bạn có thể lưu file và thoát khỏi trình chỉnh sửa bằng cách nhấn Ctrl + X, Y và Enter.

Script chạy speedtest-cli ở Simple mode, phân tích cú pháp đầu ra và xuất ra ở định dạng CSV. Bạn có thể chạy script bằng lệnh sau:

python speedtest.py

Và nếu bạn làm vậy, bạn sẽ thấy một dòng như thế này:

10/26/17,10:18,47.943,40.93,2.33

Bước 4: Tạo thư mục

Hãy tạo một thư mục cho file CSV:

mkdir speedtest

Nếu bạn đang thắc mắc tại sao lại cần thư mục cho một file, thì đó là vì bạn sẽ đồng bộ thư mục đó với Google Drive. Sau khi được đồng bộ, mọi thứ bên trong thư mục sẽ tương ứng với nội dung của thư mục Google Drive.

Bây giờ, nếu bạn chạy script Python của mình như thế này:

python speedtest.py >> speedtest/speedtest.csv

… bạn sẽ có một file CSV với dữ liệu tốc độ băng thông rộng trong thư mục mới.

Nếu bạn kiểm tra nội dung của file (ví dụ: cat speedtest/speedtest.csv), bạn có thể thấy các dòng như sau:

Date,Time,Ping (ms),Download (Mbit/s),Upload (Mbit/s)
 10/26/17,10:18,47.943,40.93,2.33

Bước 5: Tích hợp script với Google Drive

Để tích hợp script với Google Drive, bạn có thể sử dụng Google Drive CLI Client của người dùng GitHub Petter Rasmussen. Hãy tải xuống phiên bản Raspberry Pi của nó bằng cách chạy lệnh sau:

wget -O gdrive https://docs.google.com/uc?id=0B3X9GlR6EmbnVXNLanp4ZFRRbzg&export=download

Tiếp theo, hãy chỉ định các quyền thực thi file:

chmod +x gdrive

Bạn cần thông báo Google Drive cho phép Google Drive CLI Client kết nối với tài khoản. Có thể làm như vậy bằng cách chạy Google Drive CLI Client với bất kỳ thông số nào. Ví dụ, lệnh này liệt kê nội dung của tài khoản Google Drive:

./gdrive list

Bây giờ bạn sẽ thấy một yêu cầu xác thực như sau:

Cách sử dụng Raspberry Pi để theo dõi tốc độ Broadband
Yêu cầu xác thực

Chỉ cần làm theo hướng dẫn: Truy cập URL trong trình duyệt, đăng nhập vào tài khoản Google và cho phép “GDrive (…) to view and manage the files in your Google Drive.” (GDrive (…) xem và quản lý các file trong Google Drive của bạn). Sau đó, bạn đã sẵn sàng nhập mã xác minh.

Cuối cùng, gdrive sẽ liệt kê nội dung trong Google Drive của bạn.

Bây giờ, bạn đã có thư mục speedtest trên Raspberry Pi, hãy tạo một thư mục tương ứng cho Google Drive:

./gdrive mkdir speedtest

Chương trình trả về ID của thư mục mới. Hãy sao chép nó, vì bạn sẽ cần đến sau.

Tiếp theo, hãy đồng bộ hai thư mục speedtest:

./gdrive sync upload speedtest ID

Chỉ cần thay thế ID bằng ID thư mục speedtest.

Nếu mọi thứ diễn ra như mong đợi, bây giờ, bạn sẽ thấy một thư mục có tên là speedtest trong Google Drive của mình. Trong thư mục, có file đã tạo trước đó (speedtest.csv):

Cách sử dụng Raspberry Pi để theo dõi tốc độ Broadband
Trong thư mục có file speedtest.csv đã tạo trước đó

Bây giờ, nếu bạn chạy lại script Python, dữ liệu tốc độ băng thông rộng mới sẽ được thêm vào cuối file:

python speedtest.py >> speedtest/speedtest.csv

Và nếu chạy lại lệnh đồng bộ, bạn có thể thấy file đã cập nhật của mình trong Google Drive:

./gdrive sync upload speedtest ID

(Một lần nữa, hãy nhớ thay thế ID bằng ID của thư mục speedtest).

Cách sử dụng Raspberry Pi để theo dõi tốc độ Broadband
Bạn có thể thấy file đã cập nhật của mình trong Google Drive

Bước 6: Tự động hóa mọi thứ

Tất cả những gì còn lại là làm cho mọi thứ hoạt động tự động. Để thực hiện điều này, hãy sử dụng cron, giúp bạn có thể lên lịch các lệnh chạy vào những thời điểm cụ thể, chẳng hạn như mỗi giờ một lần.

Hãy tạo một shell script ngắn chứa các lệnh cần chạy mỗi giờ một lần:

sudo nano speedtest-cron.sh

Thêm các lệnh quen thuộc sau (Giả sử rằng bạn đã thực hiện mọi thứ trong thư mục /home/pi/ – nếu không, chỉ cần thay đổi đường dẫn):

sudo python /home/pi/speedtest.py >> /home/pi/speedtest/speedtest.csv
 /home/pi/gdrive sync upload speedtest ID

(Và, một lần nữa, hãy nhớ thay thế ID bằng ID của thư mục speedtest).

Sau đó, lưu và thoát bằng Ctrl + X, Y và Enter.

Hãy chỉ định quyền thực thi script:

sudo chmod +x speedtest-cron.sh

Bây giờ, bạn đã sẵn sàng để kiểm tra script:

./speedtest-cron.sh

Được rồi, hãy tạo nhiệm vụ cron:

crontab -e

Nhập dòng sau vào trình chỉnh sửa, lưu và thoát bằng cách nhấn Ctrl + X, Y, Enter:

0 * * * * /home/pi/speedtest-cron.sh

Bây giờ, tính năng theo dõi tốc độ băng thông rộng đã sẵn sàng. Kết quả của bài kiểm tra tốc độ sẽ được ghi lại mỗi giờ một lần. Bạn có thể mở file CSV trong Google Drive bằng Microsoft Excel hoặc Google Sheets. Nếu bạn thích tùy chọn sau, bạn sẽ phải nhập file (File > Import…).

Cách sử dụng Raspberry Pi để theo dõi tốc độ Broadband
Bạn có thể mở file CSV trong Google Drive bằng Microsoft Excel hoặc Google Sheets

Leave a Reply