Raspberry Pi: Hệ thống camera giám sát phát hiện chuyển động và thông báo qua Telegram
Trung cấp12/3/2024

Raspberry Pi: Hệ thống camera giám sát phát hiện chuyển động và thông báo qua Telegram

Xây dựng camera giám sát sử dụng Camera Module v3 của Raspberry Pi, tích hợp phát hiện chuyển động bằng OpenCV và gửi ảnh chụp tự động qua Telegram Bot.

CameraOpenCVTelegramSecurityRaspberry Pi
687 lượt thích445 người đã làm1 giờ6 bước4 linh kiện
← Quay lại dự án
Hướng dẫn chi tiết

Phần 4: Tích hợp Telegram Bot để gửi thông báo

1. Tạo và cấu hình Telegram Bot, 2. Lấy mã Token và ID chat, 3. Cài đặt thư viện python-telegram-bot, 4. Viết script Python để gửi ảnh qua Telegram, 5. Kết nối script phát hiện chuyển động với Telegram Bot để gửi thông báo khi có chuyển động.

Cập nhật 01/06/2026

Phần 4: Tích hợp Telegram Bot để gửi thông báo

Trong phần này, chúng ta sẽ tìm hiểu cách tích hợp Telegram Bot vào hệ thống camera giám sát của Raspberry Pi. Mục tiêu là khi phát hiện chuyển động, hệ thống sẽ tự động gửi ảnh chụp qua Telegram để người dùng nhận được thông báo ngay lập tức.

1. Tạo và cấu hình Telegram Bot

Để bắt đầu, bạn cần tạo một bot trên Telegram. Dưới đây là các bước thực hiện:

  1. Mở ứng dụng Telegram và tìm kiếm @BotFather.
  2. Bắt đầu cuộc trò chuyện với BotFather và gửi lệnh /newbot.
  3. BotFather sẽ yêu cầu bạn nhập tên cho bot. Bạn có thể đặt tên tùy ý.
  4. Tiếp theo, bạn sẽ cần cung cấp một tên người dùng (username) cho bot, tên này phải kết thúc bằng bot (ví dụ: my_cool_bot).
  5. Sau khi hoàn tất, BotFather sẽ cung cấp cho bạn một mã Token. Lưu lại mã này, vì chúng ta sẽ cần trong các bước tiếp theo.

2. Lấy mã Token và ID chat

Sau khi tạo bot, bạn cần lấy mã Token và ID chat của bạn để gửi thông báo.

  1. Mã Token đã được cung cấp trong bước trước. Hãy lưu lại nó.
  2. Để lấy ID chat, bạn có thể gửi một tin nhắn bất kỳ đến bot của mình và truy cập vào liên kết sau: https://api.telegram.org/bot/getUpdates.
  3. Tìm kiếm chat trong phản hồi JSON và ghi lại chat_id.

3. Cài đặt thư viện python-telegram-bot

Chúng ta sẽ sử dụng thư viện python-telegram-bot để dễ dàng tương tác với API của Telegram. Để cài đặt, bạn mở terminal trên Raspberry Pi và chạy lệnh sau:

pip install python-telegram-bot

4. Viết script Python để gửi ảnh qua Telegram

Tiếp theo, chúng ta sẽ viết một script Python để gửi ảnh qua Telegram. Dưới đây là mã mẫu:

import telegram
import time

# Thay thế bằng mã Token và ID chat của bạn
TOKEN = 'YOUR_TELEGRAM_BOT_TOKEN'
CHAT_ID = 'YOUR_CHAT_ID'

# Khởi tạo bot
bot = telegram.Bot(token=TOKEN)

def send_photo(photo_path):
    with open(photo_path, 'rb') as photo:
        bot.send_photo(chat_id=CHAT_ID, photo=photo)

# Gửi thử một bức ảnh
send_photo('path/to/your/photo.jpg')

Trong đoạn mã trên, bạn cần thay thế YOUR_TELEGRAM_BOT_TOKENYOUR_CHAT_ID bằng thông tin của bạn. Đường dẫn đến ảnh cũng cần được thay đổi cho phù hợp.

5. Kết nối script phát hiện chuyển động với Telegram Bot để gửi thông báo khi có chuyển động

Cuối cùng, chúng ta sẽ kết hợp mã phát hiện chuyển động với mã gửi ảnh qua Telegram. Dưới đây là một ví dụ mã hoàn chỉnh:

import cv2
import telegram
import time

# Thay thế bằng mã Token và ID chat của bạn
TOKEN = 'YOUR_TELEGRAM_BOT_TOKEN'
CHAT_ID = 'YOUR_CHAT_ID'

# Khởi tạo bot
bot = telegram.Bot(token=TOKEN)

# Khởi tạo camera
cap = cv2.VideoCapture(0)

# Thiết lập biến phát hiện chuyển động
last_frame = None

def send_photo(photo_path):
    with open(photo_path, 'rb') as photo:
        bot.send_photo(chat_id=CHAT_ID, photo=photo)

while True:
    ret, frame = cap.read()
    if not ret:
        break

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    gray = cv2.GaussianBlur(gray, (21, 21), 0)

    if last_frame is None:
        last_frame = gray
        continue

    # Tính toán sự khác biệt giữa khung hình hiện tại và khung hình trước đó
    delta_frame = cv2.absdiff(last_frame, gray)
    thresh_frame = cv2.threshold(delta_frame, 25, 255, cv2.THRESH_BINARY)[1]
    thresh_frame = cv2.dilate(thresh_frame, None, iterations=2)

    # Tìm các đối tượng chuyển động
    contours, _ = cv2.findContours(thresh_frame.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    for contour in contours:
        if cv2.contourArea(contour) < 500:
            continue

        # Lưu ảnh khi phát hiện chuyển động
        photo_path = 'motion_detected.jpg'
        cv2.imwrite(photo_path, frame)

        # Gửi ảnh qua Telegram
        send_photo(photo_path)

    last_frame = gray
    time.sleep(1)

cap.release()
cv2.destroyAllWindows()

Trong đoạn mã này, chúng ta đã kết hợp việc phát hiện chuyển động với việc gửi ảnh qua Telegram. Mỗi khi phát hiện chuyển động, hệ thống sẽ lưu ảnh và gửi ảnh đó đến bot Telegram của bạn.

Lưu ý: Đảm bảo rằng Raspberry Pi đang kết nối Internet để có thể gửi ảnh qua Telegram. Hãy kiểm tra quyền truy cập của bot vào các cuộc trò chuyện và đảm bảo rằng bot đã được thêm vào nhóm nếu bạn sử dụng trong nhóm.

Với các bước trên, bạn đã hoàn thành việc tích hợp Telegram Bot vào hệ thống camera giám sát. Hãy thử nghiệm và điều chỉnh để phù hợp với nhu cầu của bạn!