Cách nhận cảnh báo Discord hoặc Slack nếu Raspberry Pi của bạn quá nóng

Tác giả sysadmin, T.M.Một 05, 2023, 02:32:59 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Cách nhận cảnh báo Discord hoặc Slack nếu Raspberry Pi của bạn quá nóng


Đừng ở trong bóng tối khi mọi thứ đang nóng lên. Sử dụng lệnh "vcgencmd Measure_temp" để lấy nhiệt độ của Raspberry Pi. Thiết lập webhook trên Discord hoặc Slack, sau đó sử dụng tập lệnh Bash để kiểm tra nhiệt độ và gửi cảnh báo qua webhook nếu nhiệt độ quá cao. Chạy nó thường xuyên với bộ đếm thời gian systemd.


Thiết kế rút gọn của Raspberry Pi có nghĩa là nó không có hệ thống làm mát tích hợp. Nhưng sẽ tuyệt biết bao nếu nó gửi cho bạn tin nhắn Discord hoặc Slack nếu trời quá nóng?

1. Tại sao Raspberry Pi của bạn lại nóng lên

Raspberry Pi là một câu chuyện thành công to lớn. Đó là một loạt các máy tính bảng đơn, giá rẻ, có thể được sử dụng cho mọi mục đích sử dụng ở nhà hoặc nơi làm việc. Nó được các nhà sản xuất và những người có sở thích sử dụng để tạo ra vô số dự án thú vị và khéo léo.

Nhiều dự án trong số này yêu cầu Raspberry Pi chạy ở cấu hình không đầu. Tức là nó không có màn hình, bàn phím hoặc chuột kèm theo. Bạn sẽ thấy chúng được cất giấu trong tủ hoặc dưới bàn làm việc, âm thầm thực hiện vai trò và nhiệm vụ của mình giống như bất kỳ thiết bị mạng nào khác.

Nhưng bạn không muốn quên chúng hoàn toàn. Giống như tất cả các thiết bị điện toán, Raspberry Pi tạo ra nhiệt. Nhưng không có hệ thống làm mát trên bo mạch. Vì tất cả các linh kiện được xếp chặt chẽ với nhau trên một bo mạch duy nhất nên nhiệt lượng tập trung ở một khu vực nhỏ.

Nếu bạn đang sử dụng vỏ Raspberry Pi tiêu chuẩn, tác dụng làm mát duy nhất là đối lưu. Bạn có thể cải thiện vấn đề một chút bằng cách thêm một bộ tản nhiệt hoặc, nếu tiếng ồn không phải là vấn đề, bằng cách lắp một chiếc quạt. Một số vỏ Raspberry Pi tích hợp một quạt tích hợp.

Với hệ thống không đầu, sẽ thuận tiện hơn khi thiết bị liên lạc với bạn khi có điều gì đó xảy ra thay vì bạn cần phải nhớ kiểm tra định kỳ. Tất cả chúng ta đều mang theo điện thoại thông minh, vậy tại sao chúng ta không làm điều thông minh là để Raspberry Pi theo dõi nhiệt độ của nó và gửi tin nhắn đến điện thoại thông minh nếu nhiệt độ của nó gần đến vùng nguy hiểm?

Hãy xem cách chúng tôi có thể thực hiện điều này cho hai nền tảng nhắn tin phổ biến là Discord và Slack.

2. Lấy nhiệt độ CPU trên Raspberry Pi

Bước đầu tiên trong quy trình là lấy nhiệt độ CPU của Raspberry Pi. Trên thực tế, bạn có thể sử dụng các kỹ thuật nhắn tin được mô tả ở đây để cảnh báo nếu có bất kỳ đặc điểm quan trọng nào của Raspberry Pi vượt quá mức cho phép có thể chấp nhận được.

Lệnh lấy nhiệt độ CPU trên Raspberry Pi là:

Mã nguồn [Chọn]
vcgencmd measure_temp

Nếu cách này không hiệu quả, hãy thử sử dụng đường dẫn thư mục đầy đủ tới lệnh. Trên Raspberry Pi của tôi chạy bản phát hành Raspberry Pi OS ngày 10 tháng 10 năm 2023, lệnh này nằm trong thư mục "/usr/bin/". Điều này tạo nên phiên bản dài của lệnh:
 
Mã nguồn [Chọn]
/usr/bin/vcgencmd measure_temp

Có ba điều cần lưu ý về đầu ra của lệnh.

Thứ nhất, nó bao gồm "temp=" và "'C", nhiều hơn những gì chúng ta mong muốn. Chúng tôi muốn có nhiệt độ dưới dạng một con số mà chúng tôi có thể so sánh với một ngưỡng. Nếu nhiệt độ tăng lên trên ngưỡng, nó sẽ kích hoạt gửi tin nhắn. Điểm thứ hai là, nhiệt độ được tính bằng độ C. Cuối cùng, đó là số dấu phẩy động. Chúng tôi sẽ chuyển đổi giá trị đó thành giá trị số nguyên trong tập lệnh của chúng tôi.

Để tự trích xuất giá trị nhiệt độ, chúng ta có thể sử dụng awk. Chúng tôi đang sử dụng tùy chọn -F (dấu phân cách trường) để yêu cầu awk coi các dấu bằng "=" và dấu nháy đơn "'" là cờ đánh dấu điểm bắt đầu và kết thúc của một trường. Sau đó, chúng tôi yêu cầu nó in trường thứ hai, trong chuỗi của chúng tôi, là thông số nhiệt độ CPU.

Mã nguồn [Chọn]
vcgencmd measure_temp | awk -F "[=']" '{print($2)}'

Điều này tách biệt giá trị số và cho phép chúng ta gán nó cho một biến.

Mã nguồn [Chọn]
pi_temp=$(vcgencmd measure_temp | awk -F "[=']" '{print($2)}')

echo $pi_temp


Nếu bạn thấy vui hơn khi làm việc với Fahrenheit, chúng ta có thể thêm một số phép toán để chuyển đổi giá trị cho chúng ta.
 
Mã nguồn [Chọn]
pi_temp=$(vcgencmd measure_temp | awk -F "[=']" '{print($2 * 1.8)+32}')

echo $pi_temp


Để đặt ngưỡng, chúng ta cần biết phạm vi hoạt động của Raspberry Pi là gì. Tôi đã kiểm tra bảng dữ liệu Raspberry Pi cho Raspberry Pi 4, Model BI đang thử nghiệm.

Trong phần có tiêu đề "Phạm vi nhiệt độ và nhiệt độ" có ghi rằng "Phạm vi nhiệt độ hoạt động xung quanh được khuyến nghị là 0 đến 50 độ C." Điều đó tương đương với phạm vi nhiệt độ từ 32-122 độ F. Đây là nhiệt độ mà toàn bộ bo mạch hài lòng và nhiệt độ CPU có thể cao hơn một cách an toàn. Tuy nhiên, giá trị từ biểu dữ liệu là một giá trị rất an toàn để chúng tôi sử dụng vì chúng tôi đang mắc lỗi ở phía mát hơn chứ không phải phía nóng hơn.

3. Thiết lập Discord để chấp nhận tin nhắn

Việc kích hoạt tính năng nhắn tin vào Discord yêu cầu một thứ gọi là webhook, thiết lập này rất đơn giản. Chúng tôi sẽ tạo một máy chủ mới để nhận thông báo của mình, sau đó kích hoạt webhook mà chúng tôi có thể gọi từ tập lệnh trên Raspberry Pi.

Trong Discord, nhấp vào nút "+" màu xanh lục để tạo máy chủ mới.


Trong hộp thoại "Tạo máy chủ", nhấp vào "Tạo của riêng tôi".


Trong hộp thoại "Cho chúng tôi biết thêm về máy chủ của bạn", hãy nhấp vào "Dành cho tôi và bạn bè của tôi".


Cung cấp tên cho máy chủ mới của bạn trong hộp thoại "Tùy chỉnh máy chủ của bạn". Sản phẩm của chúng tôi được gọi là "PiNotifications".


Chúng tôi cũng nhấp vào biểu tượng máy ảnh và tải lên biểu tượng "chuông cảnh báo". (Sau khi bạn tải lên biểu tượng, biểu tượng đó sẽ che khuất biểu tượng máy ảnh.)

Nhấp vào nút "Tạo" màu xanh lam khi bạn sẵn sàng tiếp tục. Máy chủ mới của chúng tôi hiện xuất hiện trong danh sách máy chủ của chúng tôi.

Chọn máy chủ mới của bạn, sau đó nhấp vào mũi tên bên cạnh tên của nó.


Nhấp vào tùy chọn "Cài đặt máy chủ".


Trên trang "Cài đặt", hãy nhấp vào tùy chọn "Tích hợp" trong thanh bên. Nhấp vào nút "Tạo Webhook". Một webhook mới được tạo và đặt tên cho bạn.


Nhấp vào nút mũi tên ">" để chỉnh sửa webhook của bạn.


Chúng tôi đã đổi tên webhook của mình thành "Pi Alerts" và để nó trỏ đến kênh "#general" trên máy chủ của chúng tôi. Chúng tôi sẽ cần URL của webhook, vì vậy hãy nhấp vào nút "Sao chép URL Webhook" và dán URL vào trình chỉnh sửa rồi lưu tệp. Bạn sẽ cần truy cập dễ dàng vào URL sau này.


Khi bạn đã sẵn sàng tiếp tục, hãy nhấp vào nút "Lưu thay đổi" màu xanh lá cây ở cuối trang.


Nhấn phím "Esc" sẽ đưa bạn trở lại chế độ xem Discord bình thường trên màn hình.

4. Tạo tập lệnh của chúng tôi để gửi cảnh báo tới Discord

Kịch bản của chúng tôi bắt đầu bằng cách lấy nhiệt độ CPU. Nếu bạn muốn nhiệt độ tính bằng độ F, hãy xóa hoặc nhận xét dòng độ C và bỏ ghi chú dòng độ F.

Sau đó, chúng tôi sử dụng awk để trích xuất phần tử số nguyên của giá trị nhiệt độ (phần đứng trước dấu phẩy động ".") vì Bash trần trụi chỉ hỗ trợ số học số nguyên.

Sau đó, chúng tôi lấy tên máy chủ và gán nó cho một biến có tên "this_pi". Chúng tôi sẽ gửi tên máy chủ như một phần của thông báo cảnh báo để có thể biết Raspberry Pi nào đang gửi cảnh báo.

Bạn cần đặt biến "discord_pi_webhook" thành URL mà bạn đã sao chép và lưu trước đó. Khi bạn dán nó vào tập lệnh của mình, hãy đảm bảo bạn giữ lại dấu ngoặc kép.

Chúng tôi kiểm tra nhiệt độ CPU theo giá trị ngưỡng trong câu lệnh "if". Nếu nhiệt độ CPU cao hơn ngưỡng kích hoạt của chúng tôi, chúng tôi sẽ sử dụng tính năng cuộn tròn để gửi tin nhắn đến URL webhook. Cảnh báo sau đó sẽ xuất hiện trong máy chủ Discord của chúng tôi.

Để có thể kiểm tra tập lệnh của mình, chúng tôi đã đặt giá trị ngưỡng thành 15. Điều này có nghĩa là vòng lặp "if" chắc chắn sẽ được thực thi. Khi bạn hài lòng vì tập lệnh hoạt động, bạn có thể nâng giá trị này lên giá trị trong thế giới thực. Ở độ C, nhiệt độ đó sẽ là khoảng 44 độ đối với Raspberry Pi 4 của tôi.

Mã nguồn [Chọn]
#!/bin/bash

# get CPU temperature in Celsius
pi_temp=$(vcgencmd measure_temp | awk -F "[=']" '{print($2)}')

# for Fahrenheit temperatures, use this line instead
# pi_temp=$(vcgencmd measure_temp | awk -F "[=']" '{print($2 * 1.8)+32}')

# round down to an integer value
pi_temp=$(echo $pi_temp | awk -F "[.]" '{print($1)}')

# get the hostname, so we know which Pi is sending the alert
this_pi=$(hostname)

discord_pi_webhook="Paste your webhook URL here"

if [[ "$pi_temp" -ge 15 ]]; then
  curl -H "Content-Type: application/json" -X POST -d '{"content":"'"Pi ${this_pi} CPU temp is: ${pi_temp}"'"}' $discord_pi_webhook
fi

Sao chép tập lệnh vào trình chỉnh sửa, dán URL webhook của bạn, lưu dưới dạng "cpu_temp.sh" và đóng trình chỉnh sửa của bạn. Chúng ta sẽ cần làm cho tập lệnh của mình có thể thực thi được.

Mã nguồn [Chọn]
chmod +x cpu_temp.sh

Để kiểm tra tập lệnh của chúng tôi, chúng tôi sẽ gọi nó từ dòng lệnh.

Mã nguồn [Chọn]
./cpu_temp.sh

Một lúc sau, tin nhắn của chúng tôi xuất hiện trong Discord.


Raspberry Pi của chúng tôi có tên là "htg-pi-server" và nhiệt độ CPU của nó là 33 độ C. Sau khi bạn đã kiểm tra tập lệnh của mình, hãy nhớ chỉnh sửa giá trị ngưỡng trong câu lệnh "if" thành giá trị thực tế.

5. Thiết lập Webhook trên Slack

Chúng tôi đã có thông tin chi tiết về cách thiết lập webhook trên Slack. Quá trình này rất giống với các bước bạn cần thực hiện với Discord. Bạn sẽ cần sao chép URL webhook và khóa bí mật.

Mã nguồn [Chọn]
#!/bin/bash

# get CPU temperature in Celsius
pi_temp=$(vcgencmd measure_temp | awk -F "[=']" '{print($2)}')

# for Fahrenheit temperatures, use this line instead
# pi_temp=$(vcgencmd measure_temp | awk -F "[=']" '{print($2 * 1.8)+32}')

# round down to an integer value
pi_temp=$(echo $pi_temp | awk -F "[.]" '{print($1)}')

# get the hostname, so we know which Pi is sending the alert
this_pi=$(hostname)

slack_pi_webhook="https://hooks.slack.com/services/paste-your-key-here"

if [[ "$pi_temp" -ge 15 ]]; then
  curl -X POST --data-urlencode "payload={'channel': '#support', 'text': 'Pi ${this_pi} CPU temp is: ${pi_temp}'}" $slack_pi_webhook
fi

Dán khóa bí mật của bạn vào tập lệnh có nội dung "paste-your-key-here". Đảm bảo có dấu ngoặc kép xung quanh toàn bộ URL.

Ngoài ra, có rất ít thay đổi cần thiết để tập lệnh hoạt động với Slack thay vì Discord.

Chúng tôi đã đổi tên biến "discord_pi_webhook" thành "slack_pi_webhook" và thay đổi lệnh "curl" thành lệnh hoạt động với Slack. Nó được đặt để đăng lên kênh có tên "#support", nhưng bạn có thể thay đổi kênh đó thành tên kênh bạn đang sử dụng trên máy chủ Slack của mình.


Tin nhắn từ Raspberry Pi sẽ xuất hiện trong kênh Slack được chỉ định của bạn.

6. Tự động hóa việc kiểm tra nhiệt độ

Để làm cho tập lệnh "cpu_temp.sh" chạy định kỳ, bạn có thể biến nó thành bộ đếm thời gian systemd.

Chạy tập lệnh cứ sau 15 phút hoặc lâu hơn là điểm khởi đầu tốt. Bạn luôn có thể điều chỉnh điều đó sau nếu bạn nghĩ mình cần kiểm tra thường xuyên hơn hoặc ít thường xuyên hơn.

7.Giám sát vui vẻ

Hãy nhớ thay đổi giá trị kích hoạt câu lệnh "if" thành giá trị thực tế hơn giá trị kiểm tra. Nếu không, Raspberry Pi sẽ khiến bạn gặp phải những kết quả dương tính giả.