Мониторинг интернет-соединения на Raspberry Pi: Python-скрипт для автоматических уведомлений по почте — HmHm.WTF

Мониторинг интернет-соединения на Raspberry Pi: Python-скрипт для автоматических уведомлений по почте

Python-скрипт для мониторинга интернет-соединения на Raspberry Pi и получения email-уведомлений при восстановлении связи. Пошаговое руководство и полный код.

Обзор кода

Скрипт выполняет следующие основные функции:
1. Проверяет наличие интернет-соединения
1. Отправляет email-уведомление при восстановлении соединения
1. Работает в бесконечном цикле, выполняя проверки каждую минуту

Импорт необходимых библиотек

import smtplib
import time
from datetime import datetime
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

import requests

Эти библиотеки используются для отправки email (smtplib), выполнения HTTP-запросов (requests), создания email-сообщений (email.mime), работы с датой и временем (datetime) и для создания задержек (time).

Проверка интернет-соединения

def check_internet():
    try:
        response = requests.get('http://www.google.com', timeout=5)
        return True
    except requests.ConnectionError:
        return False

Эта функция пытается подключиться к Google.com с таймаутом в 5 секунд. Если подключение успешно, возвращается True, иначе — False.

Отправка email-уведомления

def send_email():
    from_email = 'echo@e3d16f303c46.spectrum.myjino.ru'
    to_email = 'check@e3d16f303c46.spectrum.myjino.ru'
    password = '@Af7Z4tiqA#XEYeJDvJs'

    msg = MIMEMultipart()
    msg['From'] = from_email
    msg['To'] = to_email
    msg['Subject'] = "Malina online"

    body = f"When: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
    msg.attach(MIMEText(body, 'plain'))

    try:
        server = smtplib.SMTP('smtp.abcde.ru', 587)
        server.starttls()
        server.login(from_email, password)
        text = msg.as_string()
        server.sendmail(from_email, to_email, text)
        server.quit()
        print("Имейл отправлен")
        return True
    except Exception as e:
        print(f"Имейл не отправлен: {e}")
        return False

Эта функция создает и отправляет email-уведомление. Она использует SMTP-сервер для отправки сообщения. В теле письма указывается текущее время.

Основной цикл

def main():
    connection_lost = False
    while True:
        if check_internet():
            if connection_lost:
                if send_email():
                    connection_lost = False
        else:
            connection_lost = True
        time.sleep(60)


if __name__ == "__main__":
    main()

Основной цикл программы выполняется бесконечно. Он проверяет наличие интернет-соединения каждую минуту. Если соединение было потеряно и затем восстановлено, отправляется email-уведомление.

Применение

Этот скрипт может быть полезен в следующих сценариях:
1. Мониторинг удаленных устройств Raspberry Pi
1. Отслеживание стабильности интернет-соединения
1. Автоматическое уведомление о восстановлении связи после сбоев

Полный код

Полный код в репозитории на Гитхабе.

Статья по теме

Автозапуск Python-скриптов на Linux: настройка systemd