#!/bin/bash # -*- sh -*- : << =cut =head1 NAME switchbotplugmini - Munin plugin to monitor power consumption from Switchbot Plug Mini =head1 CONFIGURATION Obtain a token and deviceid for SwitchBot API. See the following website. https://github.com/OpenWonderLabs/SwitchBotAPI =head1 ENVIRONMENT VARIABLES env.token : Token to access SwitchBot API. (Required) env.deviceid : Device ID(s) of SwitchBot Plug Mini. (Required) Multiple device IDs can be set by separating with white space. env.interval : Interval in seconds for API access. (Optional, default is 0) =head1 NOTES The amount of SwitchBot API calls per day is limited to 10000 times. If munin-node executes this plugin every 5 minutes, the API will be called 288 times a day. You can use env.interval parameter to prevent frequent API access. For example, if you set env.interval 900, the API response will be cached to local file for 900 seconds(15 minutes). =head1 AUTHOR K.Cima https://github.com/shakemid =head1 LICENSE GPLv2 SPDX-License-Identifier: GPL-2.0-only =head1 Magic markers #%# family=contrib #%# capabilities= =cut . "${MUNIN_LIBDIR}/plugins/plugin.sh" set -o nounset set -o pipefail # Token to access SwitchBot API token=${token:?} # Device ID(s) of SwitchBot Plug Mini deviceid=${deviceid:?} # Interval for API access (second) interval=${interval:-0} config() { cat < "${MUNIN_STATEFILE}" fi for i in ${deviceid}; do weight=$( fetch_api "${i}" ) echo "weight${i}.value ${weight}" if [ "${do_store_cache}" -eq 1 ]; then echo "weight${i}.value ${weight}" >> "${MUNIN_STATEFILE}" fi done fi } fetch_api() { local deviceid=$1 response=$( curl -s -H "Authorization:${token}" "https://api.switch-bot.com/v1.0/devices/${deviceid}/status" ) statusCode=$( echo "${response}" | jq '.statusCode' ) if [ "${statusCode}" -ne 100 ]; then echo Error with statusCode = "${statusCode}" 1>&2 exit 1 fi echo "${response}" | jq '.body.weight' } # Main case ${1:-} in config) config if [ "${MUNIN_CAP_DIRTYCONFIG:-}" = "1" ]; then fetch fi ;; *) fetch ;; esac exit 0