Мониторинг 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.