Thursday, 12 March 2020

Environmental monitoring with Nagios, Raspberry Pi 3 and BME680 sensor

Raspberry Pi 3 with BME680 attached (left) and Nagios web interface (above and right)
Nagios, now known as Nagios Core, is a free and open-source computer-software application that monitors systems, networks and infrastructure. Nagios offers monitoring and alerting services for servers, switches, applications and services

Raspberry Pi's are a series of small cheap single-board computers.

Below is Nagios Core  / NRPE plugin (written in Python 3) for monitoring of environment (e.g. in a Server room or elsewhere) using a Raspberry Pi (3) and the BME 680 sensor attached:

Code on GitHub:

https://github.com/tuathano/check_temp_pres_hum_gas/blob/master/check_temp_pres_hum_gas.py

Nagios Core:

https://www.nagios.org/downloads/nagios-core/ 

The BME 680 sensor which can be attached to the Raspberry Pi 3:

https://www.adafruit.com/product/3660



# check_temp_pres_hum_gas.py
#
# python 3 script to poll BME680 enviromental sensor and return Nagios exit codes
# T. O'Shea / R. Trouncer 2020
#
# v1: 22/01/2020: Initial version
# v1.1: 24/01/2020: Minor edit; changed - to : in output string to avoid confusion with minus sign.
# v2: 28/01/2020: Added median filtering of raw sensor data. User can input 2 additional arguments from command
# line to modify the total length and time interval (s) between points for the filter.
# v3: 29/01/2020: Combine all sensor checks into one serial god-awful check as the BME680 chip cannot cope with lots of seperate polling.
# v3.1: 30/01/2020: Minor bug fix in WARNING condition
#
# Nagios exit codes:
# 0 - Service is OK
# 1 - Service is WARNING
# 2 - Service is in a CRITICAL status
# 3 - Service status is UNKNOWN
#
# Usage example:
#
# check_temp_pres_hum_gas.py <selected_meas> (<crit_min> <crit_max> <warn_min> <warn_max> x4) <filt_pts> <filt_int>
#
# e.g. check_temp_pres_hum_gas.py 12 28 18 25 10 100 20 80 10000 10000000 500000 9000000 900 1070 920 1060 5 1
#
# The first set of crit_min/max and warn_min/max values are for temperature, then humidity, then gas and finally pressure.
# <filt_pts> is the number of points to use when median filtering the raw data and <filt_int> is the time interval (in seconds) between the points.

# Required libraries
import sys
import board
import busio
import adafruit_bme680
import time
import statistics
#!/usr/bin/env python

No comments:

Post a Comment