From e4920f5210cbd4829c6d77a52c28afee012bbcdb Mon Sep 17 00:00:00 2001 From: David Schroeder Date: Tue, 12 Aug 2025 21:00:04 -0500 Subject: [PATCH] Update power.inc.sh --- inc/power.inc.sh | 228 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 190 insertions(+), 38 deletions(-) diff --git a/inc/power.inc.sh b/inc/power.inc.sh index 5f6cf3da..a76d2e21 100644 --- a/inc/power.inc.sh +++ b/inc/power.inc.sh @@ -580,47 +580,199 @@ CHECKPOWER(){ fi ########## KYLE ############# - if ([ "${STYPE}" = "" ] || [ "${STYPE}" = "kyle" ]) && [ "${PTYPE}" != "esxi" ] && [[ "${IP}" != "10.6.1"* ]]; then - echo - DIVIDER . yellow ${PRI_WIDTH} - echo -en "${idsCL[Yellow]}Kyle's Power Information" - [ "${avgdays}" != "" ] && echo -e " ${idsCL[LightYellow]}--${avgdays_disp}-Averages---" || echo - DIVIDER . yellow ${PRI_WIDTH} - echo -en "${idsCL[LightCyan]} Amps Watts" - [ "${avgdays}" != "" ] && echo -e " Amps Watts" || echo - DIVIDER . lightCyan ${PRI_WIDTH} - [ ${REPORT} -eq 0 ] && echo -en "${idsCL[Yellow]}Pulling data from Kyle's Equipment ... " + # if ([ "${STYPE}" = "" ] || [ "${STYPE}" = "kyle" ]) && [ "${PTYPE}" != "esxi" ] && [[ "${IP}" != "10.6.1"* ]]; then + # echo + # DIVIDER . yellow ${PRI_WIDTH} + # echo -en "${idsCL[Yellow]}Kyle's Power Information" + # [ "${avgdays}" != "" ] && echo -e " ${idsCL[LightYellow]}--${avgdays_disp}-Averages---" || echo + # DIVIDER . yellow ${PRI_WIDTH} + # echo -en "${idsCL[LightCyan]} Amps Watts" + # [ "${avgdays}" != "" ] && echo -e " Amps Watts" || echo + # DIVIDER . lightCyan ${PRI_WIDTH} + # [ ${REPORT} -eq 0 ] && echo -en "${idsCL[Yellow]}Pulling data from Kyle's Equipment ... " + # + # KYLE_INFO=$(curl -m 3 -s http://${PW_REMOTE_SENSORS['KP-Power']}:8888/status/${PW_SENSOR_DEVICEID['KP-Power']} | jq '.dps') + # if [ "${KYLE_INFO}" != "" ]; then + # KYLE_AMP=$(echo "${KYLE_INFO}" | grep '"18":' | cut -d' ' -f 4 | sed 's/,//g') + # KYLE_AMP=$(ROUND_NUMBER $(echo "scale=3; ${KYLE_AMP}/1000" | tr -d $'\r' | bc -l) 2) + # KYLE_WATT=$(echo "${KYLE_INFO}" | grep '"19":' | cut -d' ' -f 4 | sed 's/,//g') + # KYLE_WATT=$(echo "scale=1; ${KYLE_WATT}/10" | tr -d $'\r' | bc -l) + # else + # KYLE_AMP=0 + # KYLE_WATT=0 + # fi + # [ ${REPORT} -eq 0 ] && echo -en "\r\033[K" + # + # AD=$(IDS_NUMBER_FORMAT ${KYLE_AMP} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done + # MSG="${idsCL[White]}Outlet #7 Power ${idsCL[Default]}: ${idsCL[White]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${KYLE_WATT} 1 yes`'W ${idsCL[Default]}" + # echo -en "${MSG}" + # if [ "${avgdays}" != "" ]; then + # echo -en "${idsCL[Yellow]} Calculating Kyle's Total Power Averages ... " + # + # KYLE_POWER_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['KP-Power']} ${avgdays} both) + # KYLE_AMP_avg=$(echo ${KYLE_POWER_avg} | cut -d'~' -f 1) + # KYLE_WATT_avg=$(echo ${KYLE_POWER_avg} | cut -d'~' -f 2) + # echo -en "\r\033[K" + # + # AS=$(IDS_NUMBER_FORMAT ${KYLE_WATT} 1 yes); c=0; spcA=''; spc1=`expr ${wspc} - ${#AS} + 4`; until [ ${c} = ${spc1} ]; do spcA="${spcA} "; ((c++)); done + # AD=$(IDS_NUMBER_FORMAT ${KYLE_AMP_avg} 2 yes); c=0; spcB=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spcB="${spcB} "; ((c++)); done + # echo -e "${MSG}${spcA}${idsCL[LightYellow]}${AD}'A${spcB}`IDS_NUMBER_FORMAT ${KYLE_WATT_avg} 1 yes`'W ${idsCL[Default]}" + # else + # echo -e "${idsCL[Default]}" + # fi + # fi + + echo + DIVIDER . yellow ${PRI_WIDTH} + echo -en "${idsCL[Yellow]}Kyle's Power Information" + [ "${avgdays}" != "" ] && echo -e " ${idsCL[LightYellow]}--${avgdays_disp}-Averages---" || echo + DIVIDER . yellow ${PRI_WIDTH} + [ ${REPORT} -eq 0 ] && echo -en "${idsCL[Yellow]}Pulling data from Kyle's UPS ... " + + + if [ "$(CHECK_HOST ${PW_KP_UPS_IP})" != "false" ]; then + ## VERTIV + # UPS_STATUS=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.4.1.476.1.42.3.5.3.9 | sed 's/.*: //') + # UPS_VOLTIN=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.2.1.33.1.3.3.1.3.1 | sed 's/.*: //') + # UPS_VOLTOUT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.2.1.33.1.4.4.1.2.1 | sed 's/.*: //') + # UPS_LOAD=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.4.1.476.1.42.3.5.2.2.1.11.3 | sed 's/.*: //') + # UPS_LOAD=`echo "scale=2; ${UPS_LOAD}/10" | tr -d $'\r' | bc` + # UPS_AMPSIN=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} iso.3.6.1.2.1.33.1.3.3.1.4.1 | sed 's/.*: //')\ + # UPS_AMPSIN=`echo "scale=2; ${UPS_AMPSIN}/10" | tr -d $'\r' | bc` + # UPS_AMPSOUT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} iso.3.6.1.2.1.33.1.4.4.1.3.1 | sed 's/.*: //')\ + # UPS_AMPSOUT=`echo "scale=2; ${UPS_AMPSOUT}/10" | tr -d $'\r' | bc` + # UPS_WATTS=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.4.1.476.1.42.3.5.2.2.1.8.3 | sed 's/.*: //') + # UPS_BATT_RUNTIME=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.4.1.476.1.42.3.5.1.18.0 | sed 's/.*: //') + # UPS_BATT_VOLT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.4.1.476.1.42.3.5.1.10.0 | sed 's/.*: //') + # UPS_BATT_CAP=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.4.1.476.1.42.3.5.1.19.0 | sed 's/.*: //') - KYLE_INFO=$(curl -m 3 -s http://${PW_REMOTE_SENSORS['KP-Power']}:8888/status/${PW_SENSOR_DEVICEID['KP-Power']} | jq '.dps') - if [ "${KYLE_INFO}" != "" ]; then - KYLE_AMP=$(echo "${KYLE_INFO}" | grep '"18":' | cut -d' ' -f 4 | sed 's/,//g') - KYLE_AMP=$(ROUND_NUMBER $(echo "scale=3; ${KYLE_AMP}/1000" | tr -d $'\r' | bc -l) 2) - KYLE_WATT=$(echo "${KYLE_INFO}" | grep '"19":' | cut -d' ' -f 4 | sed 's/,//g') - KYLE_WATT=$(echo "scale=1; ${KYLE_WATT}/10" | tr -d $'\r' | bc -l) - else - KYLE_AMP=0 - KYLE_WATT=0 - fi - [ ${REPORT} -eq 0 ] && echo -en "\r\033[K" + ## APC + UPS_STATUS=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_KP_UPS_IP} iso.3.6.1.2.1.33.1.4.1.0 | sed 's/.*: //') + UPS_VOLTIN=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_KP_UPS_IP} .1.3.6.1.2.1.33.1.3.3.1.3.1 | sed 's/.*: //') + UPS_VOLTOUT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_KP_UPS_IP} .1.3.6.1.2.1.33.1.4.4.1.2.1 | sed 's/.*: //') + UPS_LOAD=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_KP_UPS_IP} .1.3.6.1.2.1.33.1.4.4.1.5.1 | sed 's/.*: //') + UPS_AMPSIN=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_KP_UPS_IP} iso.3.6.1.2.1.33.1.3.3.1.4.1 | sed 's/.*: //')\ + UPS_AMPSOUT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_KP_UPS_IP} iso.3.6.1.2.1.33.1.4.4.1.3.1 | sed 's/.*: //')\ + UPS_AMPSOUT=`echo "scale=2; ${UPS_AMPSOUT}/10" | tr -d $'\r' | bc` + UPS_WATTS=`echo "scale=2; ${UPS_VOLTOUT}*${UPS_AMPSOUT}" | tr -d $'\r' | bc` + UPS_BATT_RUNTIME=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_KP_UPS_IP} .1.3.6.1.2.1.33.1.2.3.0 | sed 's/.*: //') + UPS_BATT_VOLT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_KP_UPS_IP} .1.3.6.1.2.1.33.1.2.5.0 | sed 's/.*: //') + UPS_BATT_VOLT=`echo "scale=2; ${UPS_BATT_VOLT}/10" | tr -d $'\r' | bc` + UPS_BATT_CAP=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_KP_UPS_IP} .1.3.6.1.2.1.33.1.2.4.0 | sed 's/.*: //') - AD=$(IDS_NUMBER_FORMAT ${KYLE_AMP} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done - MSG="${idsCL[White]}Outlet #7 Power ${idsCL[Default]}: ${idsCL[White]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${KYLE_WATT} 1 yes`'W ${idsCL[Default]}" - echo -en "${MSG}" - if [ "${avgdays}" != "" ]; then - echo -en "${idsCL[Yellow]} Calculating Kyle's Total Power Averages ... " - - KYLE_POWER_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['KP-Power']} ${avgdays} both) - KYLE_AMP_avg=$(echo ${KYLE_POWER_avg} | cut -d'~' -f 1) - KYLE_WATT_avg=$(echo ${KYLE_POWER_avg} | cut -d'~' -f 2) - echo -en "\r\033[K" - - AS=$(IDS_NUMBER_FORMAT ${KYLE_WATT} 1 yes); c=0; spcA=''; spc1=`expr ${wspc} - ${#AS} + 4`; until [ ${c} = ${spc1} ]; do spcA="${spcA} "; ((c++)); done - AD=$(IDS_NUMBER_FORMAT ${KYLE_AMP_avg} 2 yes); c=0; spcB=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spcB="${spcB} "; ((c++)); done - echo -e "${MSG}${spcA}${idsCL[LightYellow]}${AD}'A${spcB}`IDS_NUMBER_FORMAT ${KYLE_WATT_avg} 1 yes`'W ${idsCL[Default]}" - else - echo -e "${idsCL[Default]}" - fi + ([ "${PW_UPS_STATES[${UPS_STATUS}]}" != "" ] && [ "${PW_KP_UPS_IP}" = "" ]) && UPS_DISP_STATUS=${PW_UPS_STATES[${UPS_STATUS}]} || UPS_DISP_STATUS=${UPS_STATUS} + + declare -A UPS_MISC + for mSENSOR in "${PW_KP_POWERSENSOR_MISC[@]}"; do + UPS_MISC[${mSENSOR}]=$(GET_TUYA_POWER ${mSENSOR}) + done + fi + + [ ${REPORT} -eq 0 ] && echo -en "\r\033[K" + + echo -e "${idsCL[White]}UPS Status ${idsCL[Default]}: ${idsCL[LightCyan]}${UPS_DISP_STATUS}${idsCL[Default]}" + if [ ${REPORT} -eq 0 ]; then + echo + echo -en "${idsCL[LightCyan]} Amps Volts" + [ "${avgdays}" != "" ] && echo -e " Amps" || echo "" + + AD1=$(IDS_NUMBER_FORMAT ${UPS_AMPSIN} 2 yes); c=0; spc1=''; spca=`expr ${wspc} - ${#AD1}`; until [ ${c} = ${spca} ]; do spc1="${spc1} "; ((c++)); done + echo -en "${idsCL[White]}UPS Input ${idsCL[Default]}: ${idsCL[Green]}${AD1}'A${spc1}`IDS_NUMBER_FORMAT ${UPS_VOLTIN}`'V${idsCL[Default]}" + if [ "${avgdays}" != "" ]; then + echo -en "${idsCL[Yellow]} Calculating ${avgdays_disp} Average ... " + AMP_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['ups-input']} ${avgdays} amp) + [ ${REPORT} -eq 0 ] && echo -en "\r\033[K" + echo -e "${idsCL[White]}UPS Input ${idsCL[Default]}: ${idsCL[Green]}${AD1}'A${spc1}`IDS_NUMBER_FORMAT ${UPS_VOLTIN}`'V${idsCL[LightYellow]} ${AMP_avg}'A${idsCL[Default]}" + else + echo "" + fi + + AD2=$(IDS_NUMBER_FORMAT ${UPS_AMPSOUT} 2 yes); c=0; spc2=''; spca=`expr ${wspc} - ${#AD2}`; until [ ${c} = ${spca} ]; do spc2="${spc2} "; ((c++)); done + echo -en "${idsCL[White]}UPS Output ${idsCL[Default]}: ${idsCL[Green]}${AD2}'A${spc1}`IDS_NUMBER_FORMAT ${UPS_VOLTOUT}`'V${idsCL[Default]}" + if [ "${avgdays}" != "" ]; then + echo -en "${idsCL[Yellow]} Calculating ${avgdays_disp} Average ... " + AMP_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['ups-output']} ${avgdays} amp) + [ ${REPORT} -eq 0 ] && echo -en "\r\033[K" + echo -e "${idsCL[White]}UPS Output ${idsCL[Default]}: ${idsCL[Green]}${AD2}'A${spc1}`IDS_NUMBER_FORMAT ${UPS_VOLTOUT}`'V${idsCL[LightYellow]} ${AMP_avg}'A${idsCL[Default]}" + else + echo "" + fi + + echo + fi + echo -en "${idsCL[White]}UPS Load Usage ${idsCL[Default]}: ${idsCL[Green]}${UPS_LOAD}'%${idsCL[Default]}" + [ "${avgdays}" != "" ] && echo -e "${idsCL[LightCyan]} Watts" || echo "" + + echo -en "${idsCL[White]}UPS Watts ${idsCL[Default]}: ${idsCL[Green]}${UPS_WATTS}'W${idsCL[Default]}" + if [ "${avgdays}" != "" ]; then + echo -en "${idsCL[Yellow]} Calculating ${avgdays_disp} Average ... " + WATT_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['ups-output']} ${avgdays} watt) + [ ${REPORT} -eq 0 ] && echo -en "\r\033[K" + echo -e "${idsCL[White]}UPS Watts ${idsCL[Default]}: ${idsCL[Green]}${UPS_WATTS}'W${idsCL[LightYellow]} ${WATT_avg}'W${idsCL[Default]}" + else + echo "" + fi + [ ${REPORT} -eq 0 ] && echo + [ ${REPORT} -eq 0 ] && echo -e "${idsCL[White]}UPS Battery Voltage ${idsCL[Default]}: ${idsCL[Green]}${UPS_BATT_VOLT}'V${idsCL[Default]}" + echo -e "${idsCL[White]}UPS Battery Capacity ${idsCL[Default]}: ${idsCL[Green]}`IDS_NUMBER_FORMAT ${UPS_BATT_CAP}`'%${idsCL[Default]}" + echo -e "${idsCL[White]}UPS Battery Runtime ${idsCL[Default]}: ${idsCL[Green]}${UPS_BATT_RUNTIME}'mins${idsCL[Default]}" + [ ${REPORT} -eq 0 ] && echo + + TOTAL_MISC_WATTS=0; TOTAL_MISC_AMPS=0 + if [ ${REPORT} -eq 0 ]; then + echo -en "${idsCL[LightCyan]}Misc Sensors Amps Watts" + [ "${avgdays}" != "" ] && echo -e " Amps Watts" || echo -e " Volts" + fi + for mSENSOR in "${!UPS_MISC[@]}"; do + IFS=: read -r AMP WATT VOLT <<< ${UPS_MISC[${mSENSOR}]}; unset IFS + TOTAL_MISC_WATTS=`echo "scale=2; ${TOTAL_MISC_WATTS}+${WATT}" | tr -d $'\r' | bc` + TOTAL_MISC_AMPS=`echo "scale=2; ${TOTAL_MISC_AMPS}+${AMP}" | tr -d $'\r' | bc` + AD1="${PW_MISCSENSOR_DESC[${mSENSOR}]}"; c=0; spc1=''; spca=`expr 25 - ${#AD1}`; until [ ${c} = ${spca} ]; do spc1="${spc1} "; ((c++)); done + AD2=$(IDS_NUMBER_FORMAT ${AMP} 2 yes); c=0; spc2=''; spca=`expr ${wspc} - ${#AD2}`; until [ ${c} = ${spca} ]; do spc2="${spc2} "; ((c++)); done + AD3=$(IDS_NUMBER_FORMAT ${WATT} 1 yes) + + [ ${REPORT} -eq 0 ] && echo -en "${idsCL[Default]}${AD1}${spc1}: ${idsCL[Green]}${AD2}'A${spc2}${AD3}'W" + if [ "${avgdays}" == "" ]; then + c=0; spc3=''; spca=`expr ${wspc} - ${#AD3}`; until [ ${c} = ${spca} ]; do spc3="${spc3} "; ((c++)); done + [ ${REPORT} -eq 0 ] && echo -e "${spc3}${VOLT}'V${idsCL[Default]}" + else + echo -en "${idsCL[Yellow]} Calculating ${avgdays_disp} Average ... " + avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID[${mSENSOR}]} ${avgdays} both) + AMP_avg=$(echo ${avg} | cut -d'~' -f 1) + WATT_avg=$(echo ${avg} | cut -d'~' -f 2) + [ ${REPORT} -eq 0 ] && echo -en "\r\033[K" + echo -en "${idsCL[Default]}${AD1}${spc1}: ${idsCL[Green]}${AD2}'A${spc2}${AD3}'W" + + AD=$(IDS_NUMBER_FORMAT ${AMP_avg} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done + echo -e "${idsCL[LightYellow]} ${AD}'A${spc}`IDS_NUMBER_FORMAT ${WATT_avg} 1 yes`'W" + fi + done + + # DIVIDER . lightCyan ${PRI_WIDTH} + # [ "${avgdays}" != "" ] && echo -e " --${idsCL[LightYellow]}${avgdays_disp}-Averages---" + # echo -en "${idsCL[LightCyan]}Totals Amps Watts" + # [ "${avgdays}" != "" ] && echo -e " Amps Watts" || echo + # AW=${TOTAL_MISC_WATTS} + # AD=$(IDS_NUMBER_FORMAT ${TOTAL_MISC_AMPS} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done + # echo -en "${idsCL[White]}Mainsite Equipment ${idsCL[Default]}: ${idsCL[Green]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${AW} 1 yes`'W" + # if [ "${avgdays}" != "" ]; then + # echo -en "${idsCL[Yellow]} Calculating Mainsite Equipment Total Averages ... " + # UPS_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['mainsite-ups']} ${avgdays} both) + # UPS_AMP_avg=$(echo ${UPS_avg} | cut -d'~' -f 1) + # UPS_WATT_avg=$(echo ${UPS_avg} | cut -d'~' -f 2) + # echo -en "\r\033[K" + # echo -en "${idsCL[White]}Mainsite Equipment ${idsCL[Default]}: ${idsCL[Green]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${AW} 1 yes`'W" + # + # AD=$(IDS_NUMBER_FORMAT ${OFFSITE_AMP_avg} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done + # echo -e "${idsCL[LightYellow]} ${AD}'A${spc}`IDS_NUMBER_FORMAT ${OFFSITE_WATT_avg} 1 yes`'W" + # else + # echo + # fi + + + + [ ${REPORT} -eq 0 ] && echo -e "${idsCL[Default]}"