#!/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 " __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()