#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Plugin installation:
# wget "https://pasternok.org/sources/sensehat.py?raw" -O /etc/munin/plugins/sensehat
# chmod +x /etc/munin/plugins/sensehat
# echo -e "\n[sensehat]\nuser root" >> /etc/munin/plugin-conf.d/munin-node
# systemctl restart munin-node
### config
ADJUSTMENT_FACTOR = -9.5
### code - do not change anything below here
__author__ = "Damian Pasternok <my_forename at pasternok.org>"
__version__ = "0.1.1"
__date__ = "2016/10/17"
__copyright__ = "Copyright (C) 2016 Damian Pasternok"
__license__ = "GPL"
import argparse
from sense_hat import SenseHat
from time import sleep
class Sensors(object):
def __init__(self):
sense = SenseHat()
self.temp_humidity = sense.get_temperature_from_humidity()
# pressure temperature sensor spikes workaround
temp_pressure = sense.get_temperature_from_pressure()
self.temp_pressure = temp_pressure
for i in range(5):
sleep(0.5)
temp_pressure = sense.get_temperature_from_pressure()
if temp_pressure < self.temp_pressure:
self.temp_pressure = temp_pressure
self.temp_average = (self.temp_humidity + self.temp_pressure) / 2
self.temp_adjusted = self.temp_average + ADJUSTMENT_FACTOR
self.pressure = sense.get_pressure()
self.humidity = sense.get_humidity()
class Munin(Sensors):
def __init__(self):
pass
def config(self):
return """multigraph sensehat_temperature
graph_category sensehat
graph_title Sense HAT Temperature
graph_vlabel temperature (C)
temp_humidity.label temperature (humidity sensor)
temp_pressure.label temperature (pressure sensor)
temp_average.label average temperature
temp_adjusted.label adjusted temperature
temp_adjusted.draw LINE2
multigraph sensehat_pressure
graph_args --units-exponent 0 --lower-limit 900 --upper-limit 1100
graph_scale no
graph_category sensehat
graph_title Sense HAT Pressure
graph_vlabel pressure (hPA)
pressure.label pressure
multigraph sensehat_humidity
graph_category sensehat
graph_title Sense HAT Humidity
graph_vlabel relative humidity (%)
humidity.label humidity"""
def data(self):
super(Munin, self).__init__()
return """multigraph sensehat_temperature
temp_humidity.value %.2f
temp_pressure.value %.2f
temp_average.value %.2f
temp_adjusted.value %.2f
multigraph sensehat_pressure
pressure.value %.2f
multigraph sensehat_humidity
humidity.value %.2f""" % (
self.temp_humidity, self.temp_pressure,
self.temp_average, self.temp_adjusted,
self.pressure, self.humidity)
def main():
munin = Munin()
parser = argparse.ArgumentParser(description="Raspberry PI Sense HAT Munin Plugin.")
parser.add_argument("config", help="print graph configuration", nargs="?")
args = parser.parse_args()
if args.config == "config":
print munin.config()
elif not args.config:
print munin.data()
else:
parser.print_help()
if __name__ == "__main__":
main()