My MQTT server also has some basic systems management capabilities - means the MQTT server can emit the following data to the MQTT broker:
- CPU temperature
- Power supply temperature
- Average CPU load
- Uptime of server
CPU temperature
The CPU temperature is read from the internal CPU sensor and published to the MQTT broker with this simple script:
mosquitto_pub -h 127.0.0.1 -q 1 -u xxxxx -P yyyy \
-t "dl2sba.de/sensorData/40000/3" \
-m `cat /sys/class/thermal/thermal_zone0/temp | awk -F" " '{ print $1 }'`
The script ist called on a regulare base via cron.
Power supply temperature
A simple 1-wire sensor DS18B20 is attached to the one wire bus. The temperature is read by the follwoing script:
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# aus http://www.netzmafia.de/skripten/hardware/RasPi/Projekt-Onewire/index.html
# http://www.python-kurs.eu/os_modul_shell.php
#
# Import der Module
import sys
import os
# Fuer jeden 1-Wire Slave aktuelle Temperatur ausgeben
# 1-wire Slave Datei lesen
file = open('/sys/bus/w1/devices/28-0000074bd9e4/w1_slave')
filecontent = file.read()
file.close()
# Temperaturwerte auslesen und konvertieren
stringvalue = filecontent.split("\n")[1].split(" ")[9]
temperature = float(stringvalue[2:]) / 1000
user = "xxxx"
passw = "yyyy"
host = "127.0.0.1"
topic = "dl2sba.de/sensorData/40000/10"
command = "mosquitto_pub -h " + host + " -q 1 -u " + user + " -P " + passw + " -t '" + topic + "' -m " + str(temperature)
os.system(command>
which sends the temperature to the defined topic. The script ist called on a regulare base via cron.
Average CPU load
mosquitto_pub -h 127.0.0.1 -q 1 -u xxxx -P yyyy \
-t "dl2sba.de/sensorData/40000/2" \
-m ` top -b -n2 -d1 | grep "Cpu(s)" | \
sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
awk '{print 100 - $1}' | tail -n1`
The script ist called on a regulare base via cron.
Uptime of server
mosquitto_pub -h 127.0.0.1 -q 1 -u xxxx -P yyyy\
-t "dl2sba.de/sensorData/40000/1" \
-m `cat /proc/uptime | \
awk -F" " '{ print $1 }'`
The script ist called on a regulare base via cron.