# -*- coding: utf-8 -*- # Python script (runs on 2 and 3) to monitor cpu load, temperature, frequency, free space etc. # on a Raspberry Pi or Ubuntu computer and publish the data to a MQTT server. # RUN sudo apt-get install python-pip # RUN pip install paho-mqtt from __future__ import division import subprocess import time import socket import paho.mqtt.client as paho import json import config import os import argparse import update # get device host name - used in mqtt topic hostname = socket.gethostname() def check_wifi_signal(format): try: full_cmd = "ls /sys/class/ieee80211/*/device/net/" interface = subprocess.Popen(full_cmd, shell=True, stdout=subprocess.PIPE).communicate()[0].strip().decode("utf-8") full_cmd = "/sbin/iwconfig {} | grep -i quality".format(interface) wifi_signal = subprocess.Popen(full_cmd, shell=True, stdout=subprocess.PIPE).communicate()[0] if format == 'dbm': wifi_signal = wifi_signal.decode("utf-8").strip().split(' ')[4].split('=')[1] else: wifi_signal = wifi_signal.decode("utf-8").strip().split(' ')[1].split('=')[1].split('/')[0] wifi_signal = round((int(wifi_signal) / 70)* 100) except Exception: wifi_signal = 0 return wifi_signal def check_used_space(path): st = os.statvfs(path) free_space = st.f_bavail * st.f_frsize total_space = st.f_blocks * st.f_frsize used_space = int(100 - ((free_space / total_space) * 100)) return used_space def check_cpu_load(): p = subprocess.Popen("uptime", shell=True, stdout=subprocess.PIPE).communicate()[0] cores = subprocess.Popen("nproc", shell=True, stdout=subprocess.PIPE).communicate()[0] cpu_load = str(p).split("average:")[1].split(", ")[0].replace(' ', '').replace(',', '.') cpu_load = float(cpu_load) / int(cores) * 100 cpu_load = round(float(cpu_load), 1) return cpu_load def check_voltage(): try: full_cmd = "vcgencmd measure_volts | cut -f2 -d= | sed 's/000//'" voltage = subprocess.Popen(full_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0] voltage = voltage.strip()[:-1] except Exception: voltage = 0 return voltage.decode('utf8') def check_swap(): full_cmd = "free -t |grep -i swap | awk 'NR == 1 {print $3/$2*100}'" swap = subprocess.Popen(full_cmd, shell=True, stdout=subprocess.PIPE).communicate()[0] swap = round(float(swap.decode("utf-8").replace(",", ".")), 1) return swap def check_memory(): full_cmd = "free -t | awk 'NR == 2 {print $3/$2*100}'" memory = subprocess.Popen(full_cmd, shell=True, stdout=subprocess.PIPE).communicate()[0] memory = round(float(memory.decode("utf-8").replace(",", "."))) return memory def check_cpu_temp(): full_cmd = "cat /sys/class/thermal/thermal_zone*/temp 2> /dev/null | sed 's/\(.\)..$//' | tail -n 1" try: p = subprocess.Popen(full_cmd, shell=True, stdout=subprocess.PIPE).communicate()[0] cpu_temp = p.decode("utf-8").strip() except Exception: cpu_temp = 0 return cpu_temp def check_sys_clock_speed(): full_cmd = "awk '{printf (\"%0.0f\",$1/1000); }'