Мониторинг RaspberryPi при помощи Python и MQTT.

Завел себе недавно домашнюю RaspberryPi. И захотелось иметь какой-никакой мониторинг, да не просто мониторинг, а чтобы данные попадали напрямую в IoBroker. Для передачи данных в IoBroker я стараюсь по максимуму использовать MQTT. Следовательно передавать параметры Raspberry мы будем через него же.

Есть отличная библиотека для Python которая позволяет реализовать обмен данными по протоколу MQTT. Называется она  Paho-MQTT , установить можно через PIP. Не будем углубляться в установку и представим, что Python и Paho-MQTT у нас уже установлены.

Теперь напишем скрипт который будет собирать данные о температуре/загрузке процессора и объеме свободного места на диске:

import paho.mqtt.publish as publish
import os
import time

# Функция публикации данных. В функцию необходимо передать название топика и значение.
def pub (topic, val):
        publish.single("raspberry/hardware/"+topic, val, client_id="RasPI", hostname="%IP%", auth={'username':"%Username%",'password':"%Password%"})

# Получаем температуру процессора
def getCPUtemperature():
    res = os.popen('vcgencmd measure_temp').readline()
    return(res.replace("temp=","").replace("'C\n",""))

# Получаем загрузку процессора
def getCPUuse():
    return(str(os.popen("top -b -n1 | awk '/Cpu\(s\):/ {print $2}'").readline().strip(\
)))

# Получаем информацию о дисковом пространстве
# Index 0: Объем диска
# Index 1: Занято на диске
# Index 2: Свободное место
# Index 3: Занято на диске в процентах 
def getDiskSpace():
    p = os.popen("df -h /")
    i = 0
    while 1:
        i = i +1
        line = p.readline()
        if i==2:
            return(line.split()[1:5])

# Бесконечный цикл в котором раз в 5 минут собираются данные 
# и отправляются MQTT брокеру
while True:
        disk = getDiskSpace()
        pub("CPU_temp",getCPUtemperature())
        pub("CPU_load",getCPUuse())
        pub("Disk_used",disk[3])
        time.sleep(300)

В функции публикации данных нужно указать IP, login и password для доступа к MQTT брокеру. Возможны 4 различных варианта вывода информации о диске. В скрипте я использую вывод в процентах.

Для запуска в фоне и автоматического запуска скрипта при загрузке системы я использую supervisord.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *