Python-скрипт для мониторинга интернет-соединения на Raspberry Pi и получения email-уведомлений при восстановлении связи. Пошаговое руководство и полный код.
Обзор кода
Скрипт выполняет следующие основные функции:
- Проверяет наличие интернет-соединения
- Отправляет email-уведомление при восстановлении соединения
- Работает в бесконечном цикле, выполняя проверки каждую минуту
Импорт необходимых библиотек
import smtplib
import requests
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from datetime import datetime
import time
Эти библиотеки используются для отправки 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-уведомление.
Применение
Этот скрипт может быть полезен в следующих сценариях:
- Мониторинг удаленных устройств Raspberry Pi
- Отслеживание стабильности интернет-соединения
- Автоматическое уведомление о восстановлении связи после сбоев
Полный код
Полный код в репозитории на Гитхабе.