Repository
Munin (contrib)
Last change
2019-08-14
Graph Categories
Family
auto
Capabilities
Keywords
Language
Shell
License
GPL-2.0-only
Authors

w1_multi

Name

w1_multi - Plugin to monitor multiple 1-wire temperature sensors (DS1820)

Configuration

The following environment variables are used by this plugin

warning         - Warning limit for alarm notification
critical        - Critical limit for alarm notification
sensor_*_label  - Human readable name of a sensor

The warning/critical ranges for specific sensors can be overridden individually (e.g. “sensor_foo_warning”).

Author

Copyright (C) 2016 Roland Steinbach Copyright (C) 2019 Lars Kruse

License

GPLv2

Magic Markers

#%# family=auto
#%# capabilities=autoconf
#!/bin/sh
# -*- sh -*-

: << =cut

=head1 NAME

w1_multi - Plugin to monitor multiple 1-wire temperature sensors (DS1820)


=head1 CONFIGURATION

The following environment variables are used by this plugin

 warning         - Warning limit for alarm notification
 critical        - Critical limit for alarm notification
 sensor_*_label  - Human readable name of a sensor

The warning/critical ranges for specific sensors can be overridden
individually (e.g. "sensor_foo_warning").


=head1 AUTHOR

Copyright (C) 2016 Roland Steinbach
Copyright (C) 2019 Lars Kruse


=head1 LICENSE

GPLv2


=head1 MAGIC MARKERS

 #%# family=auto
 #%# capabilities=autoconf
=cut

set -eu

# shellcheck disable=SC1090
. "$MUNIN_LIBDIR/plugins/plugin.sh"


get_all_sensor_ids() {
    [ -r /sys/bus/w1/devices ] || return
    find /sys/bus/w1/devices -maxdepth 1 -mindepth 1 -type f -not -path "*bus_master*" -print0 \
        | xargs -0 -r -n 1 basename
}


do_autoconf() {
        if [ -r /sys/bus/w1/devices ]; then
            echo yes
        else
            echo "no (/sys/bus/w1/devices not found)"
        fi
}


do_config() {
    local sensor_id fieldname custom_label
    echo "graph_title Temperature Sensors"
    echo 'graph_args --base 1000 -l 0'
    echo 'graph_vlabel temperature (°C)'
    echo 'graph_category sensors'
    echo 'graph_info This graph shows 1-wire sensor temperatures.'
    get_all_sensor_ids | while read -r sensor_id; do
        fieldname=$(clean_fieldname "sensor_$sensor_id")
        # retrieve an optional custom label (fallback: the sensor ID)
        custom_label=$(eval "echo \"\${${fieldname}_label}\"")
        echo "${fieldname}.label ${custom_label:-$fieldname}"
        print_warning "$fieldname"
        print_critical "$fieldname"
    done
}


do_fetch() {
    local sensor_id
    get_all_sensor_ids | while read -r sensor_id; do
        fieldname=$(clean_fieldname "sensor_$sensor_id")
        sed  -n '/t=/ s/.*t=//p' "/sys/bus/w1/devices/$sensor_id/w1_slave" \
            | awk '{print "'"$fieldname"'.value", $1/1000}'
    done
}


case "${1:-}" in
    autoconf)
        do_autoconf
        ;;
    config)
        do_config
        if [ "${MUNIN_CAP_DIRTYCONFIG:-0}" = "1" ]; then do_fetch; fi
        ;;
    ""|fetch)
        do_fetch
        ;;
    *)
        echo 2> "Invalid action requested: $1"
        ;;
esac
exit 0