Trong bài viết này, Quantrimang.com 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:
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):
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).
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…).