Files
powerwall/inc/power.inc.sh
2025-08-16 16:09:02 -05:00

1765 lines
103 KiB
Bash

AVERAGEPOWER(){
sensorid=${1}
daysback=${2}
if [[ "${daysback^^}" = *"M"* ]]; then
interval="${daysback::-1} MINUTE"
elif [[ "${daysback^^}" = *"H"* ]]; then
interval="${daysback::-1} HOUR"
elif [[ "${daysback^^}" = *"D"* ]]; then
interval="${daysback::-1} DAY"
elif [[ "${daysback}" =~ ^[0-9]+$ ]]; then
interval="${daysback} DAY"
fi
if [ "${3}" = "both" ]; then
logsfound_amp=0;
logsfound_watt=0;
total_amp=0
total_watt=0
while IFS=$'\t' read date amp watt ;do
if [ "${amp}" != "" ] && [ "${amp}" != "0" ] && [ "${amp}" != "0.00" ] && [ "${amp}" != "NULL" ] && [[ "${amp}" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
total_amp=$(bc <<< "scale=2; ${total_amp}+${amp}")
((logsfound_amp++))
# echo "A:${amp}-${total_amp}=${average_amp}"
fi
if [ "${watt}" != "" ] && [ "${watt}" != "0" ] && [ "${watt}" != "0.00" ] && [ "${watt}" != "NULL" ] && [[ "${watt}" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
total_watt=$(bc <<< "scale=2; ${total_watt}+${watt}")
((logsfound_watt++))
# echo "W:${watt}-${total_watt}=${average_watt}"
fi
done < <(${mysql_conn} -se "USE servermonitor; SELECT date,amp,watt from power_data WHERE sensorid=${sensorid} AND date >= DATE_SUB(NOW(), INTERVAL ${interval}) ORDER BY id DESC;")
if [ "${logsfound_watt}" != "0" ]; then
average_amp=$(bc <<< "scale=2; ${total_amp}/${logsfound_amp}")
average_watt=$(bc <<< "scale=2; ${total_watt}/${logsfound_watt}")
else
average_amp=0
average_watt=0
fi
echo "${average_amp}~${average_watt}"
else
logsfound=0;
total=0
[ "${3}" != "" ] && ptype=${3} || ptype=watt
while IFS=$'\t' read date ${ptype} ;do
if [ "${!ptype}" != "" ] && [ "${!ptype}" != "NULL" ]; then
total=$(bc <<< "scale=2; ${total}+${!ptype}")
((logsfound++))
fi
done < <(${mysql_conn} -se "USE servermonitor; SELECT date,${ptype} from power_data WHERE sensorid=${sensorid} AND date >= DATE_SUB(NOW(), INTERVAL ${interval}) ORDER BY id DESC;")
[ "${logsfound}" != "0" ] && average=$(bc <<< "scale=2; ${total}/${logsfound}") || average=0
echo ${average}
fi
}
CHECKPOWER(){
rm -f ${PW_TMPFOLDER}/*.hostpower*
REPORT=0
wspc=10
[ ${REPORT} -eq 0 ] && modstart=$(date +%s)
while [ $# -gt 0 ]; do
case "$1" in
-a|-avg) avgdays=${2};;
-o|-offsite) STYPE=offsite;;
-m|-mainsite) STYPE=mainsite;;
-k|-kyle) STYPE=kyle;;
-e|-esxi) PTYPE=esxi;;
-p|-power) PTYPE=power;;
-r|-report)
REPORT=1
unset idsCL idsBG idsST
idsCL=('')
idsBG=('')
idsST=('')
;;
esac
shift 1
done
if [ "${avgdays}" != "" ]; then
if [ "${avgdays}" = "0" ]; then
unset avgdays
elif [[ "${avgdays^^}" = *"M"* ]]; then
avgdays_disp="${avgdays::-1}Min"
elif [[ "${avgdays^^}" = *"H"* ]]; then
avgdays_disp="${avgdays::-1}Hr"
elif [[ "${avgdays^^}" = *"D"* ]]; then
avgdays_disp="${avgdays::-1}Day"
elif [[ "${avgdays}" =~ ^[0-9]+$ ]]; then
avgdays_disp="${avgdays}Day"
fi
# else
# avgdays=noavg
fi
if ([ "${STYPE}" = "" ] || [ "${STYPE}" = "mainsite" ]) && [ "${PTYPE}" != "esxi" ]; then
[ ${REPORT} -eq 0 ] && echo
[ ${REPORT} -eq 0 ] && DIVIDER . yellow ${PRI_WIDTH}
echo -en "${idsCL[Yellow]}Mainsite Power Information"
[ "${avgdays}" != "" ] && echo -e " --${idsCL[LightYellow]}${avgdays_disp}-Averages---" || echo
DIVIDER . yellow ${PRI_WIDTH}
if [[ "${IP}" != "10.6.1"* ]]; then
[ ${REPORT} -eq 0 ] && echo -en "${idsCL[Yellow]}Pulling data from 'Powerwall' ... "
INVSTATSINFO=$(curl -m 3 -s "http://${PW_INVERTER_IP}/stats.json")
if [ "${INVSTATSINFO}" != "" ]; then
([ ${TESTMODE} -eq 1 ] && [ "${TEST_INPUTACV}" != "" ]) && INPUTV=${TEST_INPUTACV} || INPUTV=$(echo ${INVSTATSINFO} | jq '.inputs .inV')
INPUTA=`echo ${INVSTATSINFO} | jq '.inputs .inA'`
INV_ALARM=`echo ${INVSTATSINFO} | jq '.errors .Alms'`
[ "${INV_ALARM}" = "0" ] && INV_ALARM_disp="${idsCL[Green]}No Alarms (${INV_ALARM})" || INV_ALARM_disp="${idsCL[LightRed]}${PW_INVERTER_ALARMS[${INV_ALARM}]}"
INV_ERROR=`echo ${INVSTATSINFO} | jq '.errors .Err'`
[ "${INV_ERROR}" = "0" ] && INV_ERROR_disp="${idsCL[Green]}No Errors (${INV_ERROR})" || INV_ERROR_disp="${idsCL[LightRed]}${PW_INVERTER_ERRORS[${INV_ERROR}]}"
INV_STATE=`echo ${INVSTATSINFO} | jq '.stats .invSTATES'`
[ "${INV_STATE}" != "0" ] && INV_STATE_disp="${idsCL[Green]}${PW_INVERTER_STATES[${INV_STATE}]}" || INV_STATE_disp="${idsCL[LightRed]}${PW_INVERTER_STATES[${INV_STATE}]}"
INV_MODE=`echo ${INVSTATSINFO} | jq '.stats .power'`
([ "${INV_MODE}" != "3" ] && [ "${INV_MODE}" != "4" ] && [ "${INV_MODE}" != "E" ]) && INV_MODE_disp="${idsCL[Green]}${PW_INVERTER_MODES[${INV_MODE}]}" || INV_MODE_disp="${idsCL[LightRed]}${PW_INVERTER_MODES[${INV_MODE}]}"
OUTPUTV=`echo ${INVSTATSINFO} | jq '.outputs .outV'`
OUTPUTV2=`echo "scale=2; ${OUTPUTV}/2" | tr -d $'\r' | bc`
OUTPUTA=`echo ${INVSTATSINFO} | jq '.outputs .outA'`
OUTPUTA2=`echo "scale=2; ${OUTPUTA}*2" | tr -d $'\r' | bc`
OUTPUTW=`echo ${INVSTATSINFO} | jq '.outputs .outW'`
([ ${TESTMODE} -eq 1 ] && [ "${TEST_BATTVOLT}" != "" ]) && BATTV=${TEST_BATTVOLT} || BATTV=`echo ${INVSTATSINFO} | jq '.inputs .battV'`
BATTA=`echo ${INVSTATSINFO} | jq '.inputs .xfA'`
BATTLIFE=`echo "scale=2; (${BATTV}*100)/${BATT_FULL}" | tr -d $'\r' | bc`
if (( $(bc <<<"${BATTV} >= ${FLOAT_CHARGE}") )) || ([ "${PW_INVERTER_MODES[${INV_MODE}]}" == "AC Input" ] && (( $(bc <<<"${BATTA} < -2") ))); then
if (( $(bc <<<"${BATTV} >= ${BULK_CHARGE}") )) || ([ "${PW_INVERTER_MODES[${INV_MODE}]}" == "AC Input" ] && (( $(bc <<<"${BATTA} < -2") ))); then
BATTA_disp="${idsCL[Green]}`IDS_NUMBER_FORMAT ${BATTA}`'A ${idsCL[LightCyan]}- Bulk Charging"
else
BATTA_disp="${idsCL[Green]}`IDS_NUMBER_FORMAT ${BATTA}`'A ${idsCL[LightCyan]}- Float Charging"
fi
elif [ "${BATTA}" = "-0.1" ] || [ "${BATTA}" = "-0.2" ] || [ "${BATTA}" = "-0.3" ]; then
BATTA_disp="${idsCL[LightCyan]}`IDS_NUMBER_FORMAT ${BATTA}`'A ${idsCL[LightCyan]}- Standby"
else
BATTA_disp="${idsCL[LightRed]}`IDS_NUMBER_FORMAT ${BATTA}`'A ${idsCL[LightCyan]}- Discharging"
fi
fi
# if [ "$(CHECK_HOST ${PW_UPS_IP})" != "false" ]; then
SVRRM_VOLTIN=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} iso.3.6.1.4.1.850.1.1.3.1.3.2.2.1.3.1.1 | sed 's/.*: //')
SVRRM_VOLTIN=`echo "scale=2; ${SVRRM_VOLTIN}/10" | tr -d $'\r' | bc`
SVRRM_VOLTOUT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} iso.3.6.1.4.1.850.1.1.3.1.3.3.2.1.2.1.1 | sed 's/.*: //')
SVRRM_VOLTOUT=`echo "scale=2; ${SVRRM_VOLTOUT}/10" | tr -d $'\r' | bc`
SVRRM_WATT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} iso.3.6.1.4.1.850.1.1.3.1.3.3.2.1.4.1.1 | sed 's/.*: //')
SVRRM_AMP=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} iso.3.6.1.4.1.850.1.1.3.1.3.3.2.1.3.1.1 | sed 's/.*: //')
SVRRM_AMP=`echo "scale=2; ${SVRRM_AMP}/100" | tr -d $'\r' | bc`
AIRCON_INFO=$(curl -m 3 -s http://${PW_REMOTE_SENSORS['ServerRoom-AC']}:8888/status/${PW_SENSOR_DEVICEID['ServerRoom-AC']} | jq '.dps')
if [ "${AIRCON_INFO}" != "" ]; then
AIRCON_AMP=$(echo "${AIRCON_INFO}" | grep '"18":' | cut -d' ' -f 4 | sed 's/,//g')
AIRCON_AMP=$(ROUND_NUMBER $(echo "scale=3; ${AIRCON_AMP}/1000" | tr -d $'\r' | bc -l) 2)
AIRCON_WATT=$(echo "${AIRCON_INFO}" | grep '"19":' | cut -d' ' -f 4 | sed 's/,//g')
AIRCON_WATT=$(echo "scale=1; ${AIRCON_WATT}/10" | tr -d $'\r' | bc -l)
else
AIRCON_AMP=0
AIRCON_WATT=0
fi
SVRRM_AMP_WAC=$(echo "scale=2; ${SVRRM_AMP}+${AIRCON_AMP}" | tr -d $'\r' | bc -l)
SVRRM_WATT_WAC=$(echo "scale=2; ${SVRRM_WATT}+${AIRCON_WATT}" | tr -d $'\r' | bc -l)
# fi
#
# if [ "$(CHECK_HOST ${PW_APCPDU_IP})" != "false" ]; then
APCPDU_AMP=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_APCPDU_IP} .1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.1 | sed 's/.*: //')
APCPDU_AMP=`echo "scale=2; ${APCPDU_AMP}/10" | tr -d $'\r' | bc`
APCPDU_WATT2=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_APCPDU_IP} .1.3.6.1.4.1.318.1.1.12.1.16.0 | sed 's/.*: //')
APCPDU_WATT=`echo "scale=2; ${APCPDU_AMP}*${SVRRM_VOLTOUT}" | tr -d $'\r' | bc`
# fi
if [ "${SVRRM_VOLTOUT}" != "" ]; then
if [ "${APCPDU_AMP}" != "" ]; then
NETRK_AMP=`echo "scale=2; ${SVRRM_AMP}-${APCPDU_AMP}" | tr -d $'\r' | bc`
NETRK_WATT=`echo "scale=2; ${SVRRM_WATT}-${APCPDU_WATT}" | tr -d $'\r' | bc`
NETRK_WATT2=`echo "scale=2; ${SVRRM_WATT}-${APCPDU_WATT2}" | tr -d $'\r' | bc`
fi
VOLT_DROP=`echo "scale=1; ${OUTPUTV2}-${SVRRM_VOLTIN}" | tr -d $'\r' | bc`
fi
[ ${REPORT} -eq 0 ] && echo -en "\r\033[K"
echo -e "${idsCL[White]}Inverter State ${idsCL[Default]}: ${INV_STATE_disp}"
if [ ${REPORT} -eq 0 ]; then
echo -e "${idsCL[White]}Inverter Mode ${idsCL[Default]}: ${INV_MODE_disp}"
echo -e "${idsCL[White]}Inverter Alarms ${idsCL[Default]}: ${INV_ALARM_disp}"
echo -e "${idsCL[White]}Inverter Errors ${idsCL[Default]}: ${INV_ERROR_disp}"
echo
fi
echo -en "${idsCL[White]}Inverter Input Volts ${idsCL[Default]}: ${idsCL[Green]}`IDS_NUMBER_FORMAT ${INPUTV}`'V"
[ ${TESTMODE} -eq 1 ] && echo -e " ${idsCL[Yellow]}***TEST MODE***" || echo ""
echo -e "${idsCL[White]}Inverter Input Amps ${idsCL[Default]}: ${idsCL[Green]}`IDS_NUMBER_FORMAT ${INPUTA}`'A"
if [ ${REPORT} -eq 0 ]; then
echo
echo -e "${idsCL[White]}Inverter Output Volts ${idsCL[Default]}: ${idsCL[Green]}`IDS_NUMBER_FORMAT ${OUTPUTV}`'V / `IDS_NUMBER_FORMAT ${OUTPUTV2}`'V"
echo -e "${idsCL[White]}Inverter Output Amps ${idsCL[Default]}: ${idsCL[Green]}`IDS_NUMBER_FORMAT ${OUTPUTA}`'A / `IDS_NUMBER_FORMAT ${OUTPUTA2}`'A"
echo -e "${idsCL[White]}Inverter Output Watts ${idsCL[Default]}: ${idsCL[Green]}`IDS_NUMBER_FORMAT ${OUTPUTW} 0`'W"
echo
fi
echo -en "${idsCL[White]}Battery Voltage ${idsCL[Default]}: ${idsCL[Green]}`IDS_NUMBER_FORMAT ${BATTV}`'V ~ (`IDS_NUMBER_FORMAT ${BATTLIFE}`'% @ ${BATT_FULL}'V)"
([ ${TESTMODE} -eq 1 ] && [ "${TEST_BATTVOLT}" != "" ]) && echo -e " ${idsCL[Yellow]}***TEST MODE***" || echo ""
echo -e "${idsCL[White]}Battery Amps Chg/DChg ${idsCL[Default]}: ${BATTA_disp}${idsCL[Default]}"
echo
echo -e "${idsCL[White]}Server Room Voltage IN ${idsCL[Default]}: ${idsCL[Green]}${SVRRM_VOLTIN}'V${idsCL[Default]}"
echo -e "${idsCL[White]}Server Room Voltage OUT ${idsCL[Default]}: ${idsCL[Green]}${SVRRM_VOLTOUT}'V${idsCL[Default]}"
[ ${REPORT} -eq 0 ] && echo -e "${idsCL[White]}Voltage Drop ${idsCL[Default]}: ${idsCL[LightRed]}${VOLT_DROP}'V${idsCL[Default]}"
# echo
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
if [ ${REPORT} -eq 0 ]; then
echo -en "\r\033[K"
AD=$(IDS_NUMBER_FORMAT ${NETRK_AMP} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
MSG="${idsCL[White]}Network Rack ~est~ ${idsCL[Default]}: ${idsCL[Green]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${NETRK_WATT} 1 yes`'W"
echo -en "${MSG}"
if [ "${avgdays}" != "" ]; then
echo -en "${idsCL[Yellow]} Calculating NetworkRack Averages ... "
NETRK_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['network-rack']} ${avgdays} both)
NETRK_AMP_avg=$(echo ${NETRK_avg} | cut -d'~' -f 1)
NETRK_WATT_avg=$(echo ${NETRK_avg} | cut -d'~' -f 2)
echo -en "\r\033[K"
AS=$(IDS_NUMBER_FORMAT ${NETRK_WATT} 1 yes); c=0; spcA=''; spc1=`expr ${wspc} - ${#AS} + 5`; until [ ${c} = ${spc1} ]; do spcA="${spcA} "; ((c++)); done
AD=$(IDS_NUMBER_FORMAT ${NETRK_AMP_avg} 2 yes); c=0; spcB=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spcB="${spcB} "; ((c++)); done
echo -e "${MSG}${idsCL[LightYellow]}${spcA}${AD}'A${spcB}`IDS_NUMBER_FORMAT ${NETRK_WATT_avg} 1 yes`'W"
else
echo
fi
AD=$(IDS_NUMBER_FORMAT ${APCPDU_AMP} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
MSG="${idsCL[White]}Server Rack ${idsCL[Default]}: ${idsCL[Green]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${APCPDU_WATT} 1 yes`'W"
echo -en "${MSG}"
if [ "${avgdays}" != "" ]; then
echo -en "${idsCL[Yellow]} Calculating Server Rack Averages ... "
APCPDU_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['server-rack']} ${avgdays} both)
APCPDU_AMP_avg=$(echo ${APCPDU_avg} | cut -d'~' -f 1)
APCPDU_WATT_avg=$(echo ${APCPDU_avg} | cut -d'~' -f 2)
echo -en "\r\033[K"
AS=$(IDS_NUMBER_FORMAT ${APCPDU_WATT} 1 yes); c=0; spcA=''; spc1=`expr ${wspc} - ${#AS} + 5`; until [ ${c} = ${spc1} ]; do spcA="${spcA} "; ((c++)); done
AD=$(IDS_NUMBER_FORMAT ${APCPDU_AMP_avg} 2 yes); c=0; spcB=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spcB="${spcB} "; ((c++)); done
echo -e "${MSG}${idsCL[LightYellow]}${spcA}${AD}'A${spcB}`IDS_NUMBER_FORMAT ${APCPDU_WATT_avg} 1 yes`'W"
else
echo
fi
AD=$(IDS_NUMBER_FORMAT ${SVRRM_AMP} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
MSG="${idsBG[Blue]}${idsCL[White]}Equipment Subtotal ${idsCL[Default]}: ${idsCL[White]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${SVRRM_WATT} 1 yes`'W ${idsBG[Default]}"
echo -en "${MSG}"
if [ "${avgdays}" != "" ]; then
echo -en "${idsCL[Yellow]} Calculating Equipment Subtotal Averages ... "
SVRRM_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['total']} ${avgdays} both)
SVRRM_AMP_avg=$(echo ${SVRRM_avg} | cut -d'~' -f 1)
SVRRM_WATT_avg=$(echo ${SVRRM_avg} | cut -d'~' -f 2)
echo -en "\r\033[K"
AS=$(IDS_NUMBER_FORMAT ${SVRRM_WATT} 1 yes); c=0; spcA=''; spc1=`expr ${wspc} - ${#AS} + 4`; until [ ${c} = ${spc1} ]; do spcA="${spcA} "; ((c++)); done
AD=$(IDS_NUMBER_FORMAT ${SVRRM_AMP_avg} 2 yes); c=0; spcB=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spcB="${spcB} "; ((c++)); done
echo -e "${MSG}${idsBG[Blue]}${spcA}${idsCL[LightYellow]}${AD}'A${spcB}`IDS_NUMBER_FORMAT ${SVRRM_WATT_avg} 1 yes`'W ${idsBG[Default]}"
else
echo -e "${idsBG[Default]}"
fi
DIVIDER . lightCyan ${PRI_WIDTH}
AD=$(IDS_NUMBER_FORMAT ${AIRCON_AMP} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
MSG="${idsCL[White]}Air Conditioner ${idsCL[Default]}: ${idsCL[Green]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${AIRCON_WATT} 1 yes`'W"
echo -en "${MSG}"
if [ "${avgdays}" != "" ]; then
echo -en "${idsCL[Yellow]} Calculating Air Conditioner Averages ... "
AIRCON_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['ServerRoom-AC']} ${avgdays} both)
AIRCON_AMP_avg=$(echo ${AIRCON_avg} | cut -d'~' -f 1)
AIRCON_WATT_avg=$(echo ${AIRCON_avg} | cut -d'~' -f 2)
echo -en "\r\033[K"
AS=$(IDS_NUMBER_FORMAT ${AIRCON_WATT} 1 yes); c=0; spcA=''; spc1=`expr ${wspc} - ${#AS} + 5`; until [ ${c} = ${spc1} ]; do spcA="${spcA} "; ((c++)); done
AD=$(IDS_NUMBER_FORMAT ${AIRCON_AMP_avg} 2 yes); c=0; spcB=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spcB="${spcB} "; ((c++)); done
echo -e "${MSG}${idsCL[LightYellow]}${spcA}${AD}'A${spcB}`IDS_NUMBER_FORMAT ${AIRCON_WATT_avg} 1 yes`'W"
else
echo
fi
AD=$(IDS_NUMBER_FORMAT ${SVRRM_AMP_WAC} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
MSG="${idsBG[Blue]}${idsCL[White]}Server Room Total w/AIR ${idsCL[Default]}: ${idsCL[White]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${SVRRM_WATT_WAC} 1 yes`'W ${idsBG[Default]}"
echo -en "${MSG}"
if [ "${avgdays}" != "" ]; then
echo -en "${idsCL[Yellow]} Calculating Server Room w/AIR Total Averages ... "
SVRRM_WAC_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['total-wac']} ${avgdays} both)
SVRRM_AMP_WAC_avg=$(echo ${SVRRM_WAC_avg} | cut -d'~' -f 1)
SVRRM_WATT_WAC_avg=$(echo ${SVRRM_WAC_avg} | cut -d'~' -f 2)
echo -en "\r\033[K"
AS=$(IDS_NUMBER_FORMAT ${SVRRM_WATT_WAC} 1 yes); c=0; spcA=''; spc1=`expr ${wspc} - ${#AS} + 4`; until [ ${c} = ${spc1} ]; do spcA="${spcA} "; ((c++)); done
AD=$(IDS_NUMBER_FORMAT ${SVRRM_AMP_WAC_avg} 2 yes); c=0; spcB=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spcB="${spcB} "; ((c++)); done
echo -e "${MSG}${idsBG[Blue]}${spcA}${idsCL[LightYellow]}${AD}'A${spcB}`IDS_NUMBER_FORMAT ${SVRRM_WATT_WAC_avg} 1 yes`'W ${idsBG[Default]}"
else
echo -e "${idsBG[Default]}"
fi
DIVIDER . lightCyan ${PRI_WIDTH}
DIVIDER . lightCyan ${PRI_WIDTH}
fi
#########################################################################################################
else ############### KYLE #########################################################################################################
[ ${REPORT} -eq 0 ] && echo -en "${idsCL[Yellow]}Pulling data from 'UPS' ... "
if [ "$(CHECK_HOST ${PW_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/.*: //')
# ## APC
# UPS_STATUS=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_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_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.2.1.33.1.4.4.1.5.1 | sed 's/.*: //')
# 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} iso.3.6.1.2.1.33.1.4.4.1.4.1 | sed 's/.*: //')
# 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_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_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_UPS_IP} .1.3.6.1.2.1.33.1.2.4.0 | sed 's/.*: //')
[ "${PW_UPS_STATES[${UPS_STATUS}]}" != "" ] && UPS_DISP_STATUS=${PW_UPS_STATES[${UPS_STATUS}]} || UPS_DISP_STATUS=${UPS_STATUS}
declare -A UPS_MISC
for mSENSOR in "${PW_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
fi
[ ${REPORT} -eq 0 ] && echo -e "${idsCL[Default]}"
fi
if ([ "${STYPE}" = "" ] || [ "${STYPE}" = "offsite" ]) && [ "${PTYPE}" != "esxi" ] && [[ "${IP}" != "10.6.1"* ]]; then
DIVIDER . yellow ${PRI_WIDTH}
echo -en "${idsCL[Yellow]}Offsite 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 'Offsite' ... "
[ "${PW_OFFSITE_MONITOR}" == "${IP}" ] && upsinfo=$(upsc offsite-ups 2>&1) || upsinfo=$(${SSHCMD} root@${PW_OFFSITE_MONITOR} 'upsc offsite-ups 2>&1')
if [ "$(echo "${upsinfo}" | grep 'input.voltage:')" != "" ]; then
OFFSITE_STATUS=$(echo "${upsinfo}" | grep 'ups.status:' | sed 's/.*: //' | tr -d $'\r')
[ "${PW_OFFSITE_UPS_CODES[${OFFSITE_STATUS}]}" != "" ] && OFFSITE_STATUS=${PW_OFFSITE_UPS_CODES[${OFFSITE_STATUS}]} || OFFSITE_STATUS=${OFFSITE_STATUS}
OFFSITE_VOLTIN=$(echo "${upsinfo}" | grep 'input.voltage:' | sed 's/.*: //' | tr -d $'\r')
OFFSITE_VOLTOUT=$(echo "${upsinfo}" | grep 'output.voltage:' | sed 's/.*: //' | tr -d $'\r')
OFFSITE_LOAD=$(echo "${upsinfo}" | grep 'ups.load:' | sed 's/.*: //' | tr -d $'\r')
# OFFSITE_WATTS=`echo "scale=2; $(echo "scale=2; ${OFFSITE_LOAD}/100" | tr -d $'\r' | bc)*$(echo "${upsinfo}" | grep 'ups.realpower.nominal:' | sed 's/.*: //')" | tr -d $'\r' | bc`
# OFFSITE_AMPS=`echo "scale=2; ${OFFSITE_WATTS}/${OFFSITE_VOLTOUT}" | tr -d $'\r' | bc`
# (( $(bc <<<"${OFFSITE_AMPS} < 1") )) && [[ "${OFFSITE_AMPS}" = *"."* ]] && OFFSITE_AMPS="0${OFFSITE_AMPS}"
OFFSITE_BATT_RUNTIME=$(echo "${upsinfo}" | grep 'battery.runtime:' | sed 's/.*: //' | tr -d $'\r')
OFFSITE_BATT_RUNTIME=`echo "scale=2; ${OFFSITE_BATT_RUNTIME}/60" | tr -d $'\r' | bc`
OFFSITE_BATT_VOLT=$(echo "${upsinfo}" | grep 'battery.voltage:' | sed 's/.*: //' | tr -d $'\r')
OFFSITE_BATT_CAP=$(echo "${upsinfo}" | grep 'battery.charge:' | sed 's/.*: //' | tr -d $'\r')
POWER_STRIP_DATA=$(kasa --type strip --json --host ${PW_OFFSITE_POWER_STRIP} energy)
OFFSITE_WATTS=$(echo "scale=2; $(echo ${POWER_STRIP_DATA} | jq '.power_mw')/1000" | tr -d $'\r' | bc -l)
OFFSITE_AMPS=$(echo $(echo "scale=2; $(echo ${POWER_STRIP_DATA} | jq '.current_ma')/1000" | tr -d $'\r' | bc -l))
OFFSITE_VOLTS=$(echo $(echo "scale=2; $(echo ${POWER_STRIP_DATA} | jq '.voltage_mv')/1000" | tr -d $'\r' | bc -l))
declare -A OFFSITE_MISC
for mSENSOR in "${PW_POWERSENSOR_MISC[@]}"; do
OFFSITE_MISC[${mSENSOR}]=$(GET_KASA_POWER ${mSENSOR})
done
fi
[ ${REPORT} -eq 0 ] && echo -en "\r\033[K"
echo -e "${idsCL[White]}UPS Status ${idsCL[Default]}: ${idsCL[LightCyan]}${OFFSITE_STATUS}${idsCL[Default]}"
if [ ${REPORT} -eq 0 ]; then
echo
echo -e "${idsCL[White]}UPS Voltage In ${idsCL[Default]}: ${idsCL[Green]}`IDS_NUMBER_FORMAT ${OFFSITE_VOLTIN}`'V${idsCL[Default]}"
echo -e "${idsCL[White]}UPS Voltage Out ${idsCL[Default]}: ${idsCL[Green]}`IDS_NUMBER_FORMAT ${OFFSITE_VOLTOUT}`'V${idsCL[Default]}"
fi
echo -e "${idsCL[White]}UPS Load Usage ${idsCL[Default]}: ${idsCL[Green]}${OFFSITE_LOAD}'%${idsCL[Default]}"
[ ${REPORT} -eq 0 ] && echo
echo -e "${idsCL[White]}UPS Battery Capacity ${idsCL[Default]}: ${idsCL[Green]}`IDS_NUMBER_FORMAT ${OFFSITE_BATT_CAP}`'%${idsCL[Default]}"
echo -e "${idsCL[White]}UPS Battery Runtime ${idsCL[Default]}: ${idsCL[Green]}${OFFSITE_BATT_RUNTIME}'mins${idsCL[Default]}"
if [ ${REPORT} -eq 0 ]; then
echo -e "${idsCL[White]}UPS Battery Voltage ${idsCL[Default]}: ${idsCL[Green]}${OFFSITE_BATT_VOLT}'V${idsCL[Default]}"
echo
fi
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 "${!OFFSITE_MISC[@]}"; do
IFS=: read -r AMP WATT VOLT <<< ${OFFSITE_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} 2 yes)
if [ ${REPORT} -eq 0 ]; then
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 ... "
# AVERAGEPOWER ${PW_POWERSENSOR_ID[${mSENSOR}]} ${avgdays} both
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} 2 yes`'W"
fi
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 -e " Volts"
if (( $(bc <<<"${OFFSITE_WATTS} < ${TOTAL_MISC_WATTS}") )); then
AW=$(IDS_NUMBER_FORMAT ${TOTAL_MISC_WATTS} 2 yes)
AD=${TOTAL_MISC_AMPS}
else
AW=$(IDS_NUMBER_FORMAT ${OFFSITE_WATTS} 2 yes)
AD=${OFFSITE_AMPS}
fi
AD=$(IDS_NUMBER_FORMAT ${AD} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
echo -en "${idsCL[White]}Offsite Equipment ${idsCL[Default]}: ${idsCL[Green]}${AD}'A${spc}${AW}'W"
if [ "${avgdays}" != "" ]; then
echo -en "${idsCL[Yellow]} Calculating Offsite Equipment Total Averages ... "
OFFSITE_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['offsite-ups']} ${avgdays} both)
OFFSITE_AMP_avg=$(echo ${OFFSITE_avg} | cut -d'~' -f 1)
OFFSITE_WATT_avg=$(echo ${OFFSITE_avg} | cut -d'~' -f 2)
echo -en "\r\033[K"
echo -en "${idsCL[White]}Offsite Equipment ${idsCL[Default]}: ${idsCL[Green]}${AD}'A${spc}${AW}'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} 2 yes`'W"
else
c=0; spc3=''; spca=`expr ${wspc} - ${#AW}`; until [ ${c} = ${spca} ]; do spc3="${spc3} "; ((c++)); done
echo -e "${spc3}${OFFSITE_VOLTS}'V${idsCL[Default]}"
fi
# echo -en "${idsCL[White]}Total Amps ${idsCL[Default]}: ${idsCL[Green]}${AD}'A ${idsCL[Default]}~ est${idsCL[Green]}${idsCL[Default]}"
# [ "${avgdays}" != "" ] && echo -e "${idsCL[LightYellow]} `IDS_NUMBER_FORMAT ${OFFSITE_AMP_avg}`'A" || echo -e "${idsCL[Default]}"
# echo -en "${idsCL[White]}Total Wattage ${idsCL[Default]}: ${idsCL[Green]}`IDS_NUMBER_FORMAT ${OFFSITE_WATTS} 0`'W ${idsCL[Default]}~ est"
# [ "${avgdays}" != "" ] && echo -e "${idsCL[LightYellow]} `IDS_NUMBER_FORMAT ${OFFSITE_WATT_avg} 0`'W" || echo -e "${idsCL[Default]}\n"
#
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 ... "
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 Total 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 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
KYLE_SASINFO=$(curl -m 3 -s http://${PW_REMOTE_SENSORS['KP-SAS']}:8888/status/${PW_SENSOR_DEVICEID['KP-SAS']} | jq '.dps')
if [ "${KYLE_INFO}" != "" ]; then
KYLE_SASAMP=$(echo "${KYLE_SASINFO}" | grep '"18":' | cut -d' ' -f 4 | sed 's/,//g')
KYLE_SASAMP=$(ROUND_NUMBER $(echo "scale=3; ${KYLE_SASAMP}/1000" | tr -d $'\r' | bc -l) 2)
KYLE_SASWATT=$(echo "${KYLE_SASINFO}" | grep '"19":' | cut -d' ' -f 4 | sed 's/,//g')
KYLE_SASWATT=$(echo "scale=1; ${KYLE_SASWATT}/10" | tr -d $'\r' | bc -l)
else
KYLE_SASAMP=0
KYLE_SASWATT=0
fi
AD=$(IDS_NUMBER_FORMAT ${KYLE_SASAMP} 2 yes); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
MSG="${idsCL[White]}Outlet #8 KP SAS Power ${idsCL[Default]}: ${idsCL[White]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${KYLE_SASWATT} 1 yes`'W ${idsCL[Default]}"
echo -en "${MSG}"
if [ "${avgdays}" != "" ]; then
echo -en "${idsCL[Yellow]} Calculating Power Averages ... "
KYLE_SASPOWER_avg=$(AVERAGEPOWER ${PW_POWERSENSOR_ID['KP-SAS']} ${avgdays} both)
KYLE_SASAMP_avg=$(echo ${KYLE_SASPOWER_avg} | cut -d'~' -f 1)
KYLE_SASWATT_avg=$(echo ${KYLE_SASPOWER_avg} | cut -d'~' -f 2)
echo -en "\r\033[K"
AS=$(IDS_NUMBER_FORMAT ${KYLE_SASWATT} 1 yes); c=0; spcA=''; spc1=`expr ${wspc} - ${#AS} + 4`; until [ ${c} = ${spc1} ]; do spcA="${spcA} "; ((c++)); done
AD=$(IDS_NUMBER_FORMAT ${KYLE_SASAMP_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_SASWATT_avg} 1 yes`'W ${idsCL[Default]}"
else
echo -e "${idsCL[Default]}"
fi
fi
[ ${REPORT} -eq 0 ] && echo -e "${idsCL[Default]}"
if [ "${PTYPE}" != "power" ]; then
DIVIDER . yellow ${PRI_WIDTH}
echo -e "${idsCL[Yellow]}ESXi Host Power Information"
DIVIDER . yellow ${PRI_WIDTH}
[ "${avgdays}" != "" ] && echo -e " --${idsCL[LightYellow]}${avgdays_disp}-Averages---"
echo -en "${idsCL[LightCyan]} Amps Watts"
[ "${avgdays}" != "" ] && echo -e " Amps Watts" || echo
DIVIDER . lightCyan ${PRI_WIDTH}
SENSOR_TOTAL_WATTS_MAINSITE=0
SENSOR_TOTAL_AMPS_MAINSITE=0
SENSOR_TOTAL_WATTS_OFFSITE=0
SENSOR_TOTAL_AMPS_OFFSITE=0
SENSOR_TOTAL_WATTS_KYLE=0
SENSOR_TOTAL_AMPS_KYLE=0
SENSOR_TOTAL_WATTS=0
SENSOR_TOTAL_AMPS=0
if [ "${avgdays}" != "" ]; then
AVERAGE_WATTS_MAINSITE=0
AVERAGE_AMPS_MAINSITE=0
AVERAGE_WATTS_OFFSITE=0
AVERAGE_AMPS_OFFSITE=0
AVERAGE_WATTS_KYLE=0
AVERAGE_AMPS_KYLE=0
AVERAGE_TOTAL_WATTS=0
AVERAGE_TOTAL_AMPS=0
fi
for SENSOR in ${PW_SENSOR_ORD[@]}; do
if [ "${PW_HOST_IDRACS[${SENSOR}]}" != "" ]; then
[[ "${PW_HOST_IDRACS[${SENSOR}]}" = "10.6."* ]] && ESXI_PASS=${PW_ESXI_PASS_KP} || ESXI_PASS=${PW_ESXI_PASS}
if [ "${STYPE}" = "" ] || ([ "${STYPE}" = "mainsite" ] && [[ "${PW_HOST_IDRACS[${SENSOR}]}" = *"10.10."* ]]) || ([ "${STYPE}" = "offsite" ] && [[ "${PW_HOST_IDRACS[${SENSOR}]}" = *"10.2.1."* ]]) || ([ "${STYPE}" = "kyle" ] && [[ "${PW_HOST_IDRACS[${SENSOR}]}" = *"10.6."* ]]); then
[ ${REPORT} -eq 0 ] && echo -en "${idsCL[Yellow]}Pulling data for '${SENSOR}' ... "
HOST_WATT_SENSORS=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.8.1 -O vq 2> /dev/null | sed -e 's/"//g')
IFS=$'\n'
read -rd '' -a HOST_WATT_SENSORS <<<"${HOST_WATT_SENSORS}"
unset IFS
PS1='0.0'; PS2='0.0'; HOST_WATTS=0
if [ "${HOST_WATT_SENSORS}" != "" ]; then
found=0
for s in {1..5}; do
DP=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.8.1.${s} | sed 's/.*: //')
if [[ "${DP}" = *"System Board"* ]]; then
found=1
HOST_WATTS=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.6.1.${s} | sed 's/.*: //')
elif [[ "${DP}" = *"PS1"* ]]; then
PS1=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.6.1.${s} | sed 's/.*: //')
elif [[ "${DP}" = *"PS2"* ]]; then
PS2=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.6.1.${s} | sed 's/.*: //')
fi
done
PS1V=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.12.1.16.1.1 | sed 's/.*: //')
PS2V=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.12.1.16.1.2 | sed 's/.*: //')
if [ ${found} -eq 1 ] && [ "${HOST_WATTS}" != "0" ] && [ "${HOST_WATTS}" != "" ]; then
[ "${PS1}" != "0.0" ] && PS1=`echo "scale=1; ${PS1}/10" | tr -d $'\r' | bc` && (( $(bc <<<"${PS1} < 1") )) && [[ "${PS1}" = *"."* ]] && PS1="0${PS1}"
[ "${PS2}" != "0.0" ] && PS2=`echo "scale=1; ${PS2}/10" | tr -d $'\r' | bc` && (( $(bc <<<"${PS2} < 1") )) && [[ "${PS2}" = *"."* ]] && PS2="0${PS2}"
HOST_AMPS=`echo "scale=1; ${PS1}+${PS2}" | tr -d $'\r' | bc`
AD=$(IDS_NUMBER_FORMAT ${HOST_AMPS} 1 true); c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
HOST_WATTS_disp="${idsCL[Green]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${HOST_WATTS} 0`'W"
elif [ ! -f ${PW_TMPFOLDER}/${SENSOR}.down ] && [ "$(ipmitool -I lanplus -H ${PW_HOST_IDRACS[${SENSOR}]} -U ${PW_ESXI_USER} -P "${ESXI_PASS}" chassis power status | grep off)" != "" ]; then
HOST_WATTS_disp="${idsCL[LightRed]}Host powered down"
HOST_WATTS=-1
elif [ "${HOST_WATTS}" = "0" ]; then
HOST_WATTS_disp="${idsCL[Yellow]}Host PSU not capable"
HOST_WATTS=-2
else
HOST_WATTS_disp="${idsCL[LightRed]}Could not pull data"
fi
[ "${HOST_WATTS}" = "" ] && HOST_WATTS=0
else
HOST_WATTS_disp="${idsCL[LightRed]}Host offline"
fi
[ ${REPORT} -eq 0 ] && echo -en "\r\033[K"
c=0; spc=''; spc1=`expr 25 - ${#SENSOR}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
MSG="${idsCL[White]}${SENSOR}${spc}${idsCL[Default]}: ${HOST_WATTS_disp}"
echo -en "${MSG}"
if [ "${avgdays}" != "" ] && [ ${HOST_WATTS} -ne -2 ] && [ "${SENSOR}" != "iDS-vMS-Host6" ]; then
echo -en "${idsCL[LightYellow]} Calculating average ...${idsCL[Default]}"
# AVERAGEPOWER ${PW_POWERSENSOR_ID[${SENSOR}]} ${avgdays} both
average=$(AVERAGEPOWER ${PW_POWERSENSOR_ID[${SENSOR}]} ${avgdays} both)
average_amp=$(echo ${average} | cut -d'~' -f 1)
average_watt=$(echo ${average} | cut -d'~' -f 2)
AD=${average_amp}; c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
average_disp=" `IDS_NUMBER_FORMAT ${AD} 1 true`'A${spc}`IDS_NUMBER_FORMAT ${average_watt} 0`'W"
echo -en "\r\033[K"
echo -e "${MSG}${idsCL[LightYellow]}${average_disp}${idsCL[Default]}"
if [[ "${PW_HOST_IDRACS[${SENSOR}]}" = *"10.10."* ]]; then
AVERAGE_WATTS_MAINSITE=`echo "scale=2; ${AVERAGE_WATTS_MAINSITE}+${average_watt}" | tr -d $'\r' | bc`
AVERAGE_AMPS_MAINSITE=`echo "scale=2; ${AVERAGE_AMPS_MAINSITE}+${average_amp}" | tr -d $'\r' | bc`
elif [[ "${PW_HOST_IDRACS[${SENSOR}]}" = *"10.2.1."* ]]; then
AVERAGE_WATTS_OFFSITE=`echo "scale=2; ${AVERAGE_WATTS_OFFSITE}+${average_watt}" | tr -d $'\r' | bc`
AVERAGE_AMPS_OFFSITE=`echo "scale=2; ${AVERAGE_AMPS_OFFSITE}+${average_amp}" | tr -d $'\r' | bc`
elif [[ "${PW_HOST_IDRACS[${SENSOR}]}" = *"10.6."* ]]; then
AVERAGE_WATTS_KYLE=`echo "scale=2; ${AVERAGE_WATTS_KYLE}+${average_watt}" | tr -d $'\r' | bc`
AVERAGE_AMPS_KYLE=`echo "scale=2; ${AVERAGE_AMPS_KYLE}+${average_amp}" | tr -d $'\r' | bc`
fi
AVERAGE_TOTAL_WATTS=`echo "scale=2; ${AVERAGE_TOTAL_WATTS}+${average_watt}" | tr -d $'\r' | bc`
AVERAGE_TOTAL_AMPS=`echo "scale=2; ${AVERAGE_TOTAL_AMPS}+${average_amp}" | tr -d $'\r' | bc`
else
echo -e "${idsCL[Default]}"
fi
if [ ${HOST_WATTS} -gt 0 ]; then
DIVIDER . darkGray ${PRI_WIDTH}
echo -e " PS1 : ${idsCL[Green]}`IDS_NUMBER_FORMAT ${PS1} 1 true`'A ${idsCL[Default]}@${idsCL[LightCyan]} ${PS1V}'V${idsCL[Default]}"
echo -e " PS2 : ${idsCL[Green]}`IDS_NUMBER_FORMAT ${PS2} 1 true`'A ${idsCL[Default]}@${idsCL[LightCyan]} ${PS2V}'V${idsCL[Default]}"
fi
[ "${SENSOR}" != "KP-vMS-Host1" ] && DIVIDER . lightCyan ${PRI_WIDTH}
if [ "${HOST_WATT_SENSORS}" != "" ] && [ ${HOST_WATTS} -gt 0 ]; then
if [[ "${IP}" != "10.6.1"* ]]; then
if [[ "${PW_HOST_IDRACS[${SENSOR}]}" = *"10.10."* ]]; then
SENSOR_TOTAL_WATTS_MAINSITE=$(expr ${SENSOR_TOTAL_WATTS_MAINSITE} + ${HOST_WATTS})
SENSOR_TOTAL_AMPS_MAINSITE=$(echo "scale=1; ${SENSOR_TOTAL_AMPS_MAINSITE}+${HOST_AMPS}" | tr -d $'\r' | bc)
elif [[ "${PW_HOST_IDRACS[${SENSOR}]}" = *"10.2.1."* ]]; then
SENSOR_TOTAL_WATTS_OFFSITE=$(expr ${SENSOR_TOTAL_WATTS_OFFSITE} + ${HOST_WATTS})
SENSOR_TOTAL_AMPS_OFFSITE=$(echo "scale=1; ${SENSOR_TOTAL_AMPS_OFFSITE}+${HOST_AMPS}" | tr -d $'\r' | bc)
elif [[ "${PW_HOST_IDRACS[${SENSOR}]}" = *"10.6."* ]]; then
SENSOR_TOTAL_WATTS_KYLE=$(expr ${SENSOR_TOTAL_WATTS_KYLE} + ${HOST_WATTS})
SENSOR_TOTAL_AMPS_KYLE=$(echo "scale=1; ${SENSOR_TOTAL_AMPS_KYLE}+${HOST_AMPS}" | tr -d $'\r' | bc)
fi
fi
SENSOR_TOTAL_WATTS=$(expr ${SENSOR_TOTAL_WATTS} + ${HOST_WATTS})
SENSOR_TOTAL_AMPS=$(echo "scale=1; ${SENSOR_TOTAL_AMPS}+${HOST_AMPS}" | tr -d $'\r' | bc)
fi
fi
fi
done
if [[ "${IP}" != "10.6.1"* ]]; then
DIVIDER . lightCyan ${PRI_WIDTH}
echo -en "${idsCL[LightCyan]}TOTALS Amps Watts"
[ "${avgdays}" != "" ] && echo -e " Amps Watts" || echo
DIVIDER . lightCyan ${PRI_WIDTH}
if [ "${STYPE}" = "" ] || [ "${STYPE}" = "mainsite" ]; then
AD=`IDS_NUMBER_FORMAT ${SENSOR_TOTAL_AMPS_MAINSITE} 1 true`; c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
echo -en "${idsCL[LightCyan]}Mainsite ESXi Total ${idsCL[Default]}: ${idsCL[LightGreen]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${SENSOR_TOTAL_WATTS_MAINSITE} 0`'W "
[ "${avgdays}" != "" ] && AD=`IDS_NUMBER_FORMAT ${AVERAGE_AMPS_MAINSITE} 1 true`; c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
[ "${avgdays}" != "" ] && echo -e "${idsCL[LightYellow]} ${AD}'A${spc}`IDS_NUMBER_FORMAT ${AVERAGE_WATTS_MAINSITE} 0`'W" || echo
fi
if [ "${STYPE}" = "" ] || [ "${STYPE}" = "offsite" ]; then
AD=`IDS_NUMBER_FORMAT ${SENSOR_TOTAL_AMPS_OFFSITE} 1 true`; c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
echo -en "${idsCL[LightCyan]}Offsite ESXi Total ${idsCL[Default]}: ${idsCL[LightGreen]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${SENSOR_TOTAL_WATTS_OFFSITE} 0`'W "
[ "${avgdays}" != "" ] && AD=${AVERAGE_AMPS_OFFSITE}; c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
[ "${avgdays}" != "" ] && echo -e "${idsCL[LightYellow]} ${AD}'A${spc}`IDS_NUMBER_FORMAT ${AVERAGE_WATTS_OFFSITE} 0`'W" || echo
fi
if [ "${STYPE}" = "" ] || [ "${STYPE}" = "kyle" ]; then
AD=`IDS_NUMBER_FORMAT ${SENSOR_TOTAL_AMPS_KYLE} 1 true`; c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
echo -en "${idsCL[LightCyan]}Kyle ESXi Total ${idsCL[Default]}: ${idsCL[LightGreen]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${SENSOR_TOTAL_WATTS_KYLE} 0`'W "
[ "${avgdays}" != "" ] && AD=${AVERAGE_AMPS_KYLE}; c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
[ "${avgdays}" != "" ] && echo -e "${idsCL[LightYellow]} ${AD}'A${spc}`IDS_NUMBER_FORMAT ${AVERAGE_WATTS_KYLE} 0`'W" || echo
fi
fi
if [ "${STYPE}" = "" ]; then
DIVIDER . yellow ${PRI_WIDTH}
AD=`IDS_NUMBER_FORMAT ${SENSOR_TOTAL_AMPS} 1 true`; c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
echo -en "${idsBG[Blue]}${idsCL[White]}ESXi Total ${idsCL[Default]}: ${idsCL[White]}${AD}'A${spc}`IDS_NUMBER_FORMAT ${SENSOR_TOTAL_WATTS} 0`'W "
[ "${avgdays}" != "" ] && AD=${AVERAGE_TOTAL_AMPS}; c=0; spc=''; spc1=`expr ${wspc} - ${#AD}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
[ "${avgdays}" != "" ] && echo -e "${idsBG[Blue]}${idsCL[LightYellow]} ${AD}'A${spc}`IDS_NUMBER_FORMAT ${AVERAGE_TOTAL_WATTS} 0`'W${idsBG[Default]}" || echo -e "${idsBG[Default]}"
fi
fi
if [ ${REPORT} -eq 0 ]; then
# if [ "${avgdays}" != "" ]; then
modend=`date +%s`; modruntime=$((modend-modstart)); echo -e "\n${idsCL[Default]}script runtime: ${modruntime}s"
# fi
[ "${PW_ACTION}" != "" ] && echo -e "${idsCL[Default]}"
fi
}
CHECKPOWER_SERVICE(){
touch ${PW_TMPFOLDER}/power.ac.start
touch ${PW_TMPFOLDER}/power.dc.start
[ "${PW_SERVICE_POWER_SCANRATE}" != "" ] && runEvery=${PW_SERVICE_POWER_SCANRATE} || runEvery=10
while true; do
start=$(date +%s)
log_start=$(date "+%Y-%m-%d %H:%M:%S")
source ${PW_FOLDER}/defaults.inc
if [[ "${IP}" != "10.6.1"* ]]; then
INVSTATSINFO=$(curl -m 3 -s "http://${PW_INVERTER_IP}/stats.json")
SVRRM_UPS_INPUTACV=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} iso.3.6.1.4.1.850.1.1.3.1.3.2.2.1.3.1.1 | sed 's/.*: //')
if (( $(bc <<<"${SVRRM_UPS_INPUTACV} < ${min_acvolt}") )); then
if [ ! -f ${PW_TMPFOLDER}/power.ups.low ]; then
touch ${PW_TMPFOLDER}/power.ups.low
elif [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/power.ups.low)) -ge 60 ]; then
SENDNOTICE "POWER ALERT - UPS POWER OFF/LOW POWER!!" "UPS has no power for 1min, shutting all servers down!" 1
######################### FINISH
fi
elif [ -f ${PW_TMPFOLDER}/power.ups.low ]; then
rm -f ${PW_TMPFOLDER}/power.ups.low
fi
else
[ "$(CHECK_HOST ${PW_UPS_IP})" != "false" ] && INVSTATSINFO=1
fi
if [ "${INVSTATSINFO}" != "" ] || [ ${TESTMODE} -eq 1 ]; then
if [[ "${IP}" == "10.6.1"* ]]; then
## VERTIV
([ ${TESTMODE} -eq 1 ] && [ "${TEST_INPUTACV}" != "" ]) && INPUTACV=${TEST_INPUTACV} || INPUTACV=$(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/.*: //')
([ ${TESTMODE} -eq 1 ] && [ "${TEST_BATTVOLT}" != "" ]) && BATTVOLT=${TEST_BATTVOLT} || BATTVOLT=$(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/.*: //')
# ## APC
# ([ ${TESTMODE} -eq 1 ] && [ "${TEST_INPUTACV}" != "" ]) && INPUTACV=${TEST_INPUTACV} || INPUTACV=$(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/.*: //')
# ([ ${TESTMODE} -eq 1 ] && [ "${TEST_BATTVOLT}" != "" ]) && BATTVOLT=${TEST_BATTVOLT} || BATTVOLT=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_UPS_IP} .1.3.6.1.2.1.33.1.2.5.0 | sed 's/.*: //')
BATTLIFE=`echo "scale=2; (${BATTVOLT}*100)/${BATT_FULL}" | tr -d $'\r' | bc`
else
([ ${TESTMODE} -eq 1 ] && [ "${TEST_INPUTACV}" != "" ]) && INPUTACV=${TEST_INPUTACV} || INPUTACV=$(echo ${INVSTATSINFO} | jq '.inputs .inV' | tr -d $'\r')
([ ${TESTMODE} -eq 1 ] && [ "${TEST_BATTVOLT}" != "" ]) && BATTVOLT=${TEST_BATTVOLT} || BATTVOLT=$(echo ${INVSTATSINFO} | jq '.inputs .battV' | tr -d $'\r')
BATTA=`echo ${INVSTATSINFO} | jq '.inputs .xfA'`
BATTLIFE=`echo "scale=2; (${BATTVOLT}*100)/${BATT_FULL}" | tr -d $'\r' | bc`
fi
PW_DISCHARGE=0
if [ ${TESTMODE} -eq 1 ] && [ ! -f ${PW_TMPFOLDER}/power.testmode.enabled ]; then
touch ${PW_TMPFOLDER}/power.testmode.enabled
SENDNOTICE "TEST MODE" "***TEST MODE*** ENABLED!"
echo "($(date +'%Y-%m-%d %H:%M:%S')) - Input: ${INPUTACV}'V - Battery: ${BATTVOLT}'V - ***TEST MODE*** ENABLED" >> ${PW_LOGFILE}
echo "($(date +'%Y-%m-%d %H:%M:%S')) - Input: ${INPUTACV}'V - Battery: ${BATTVOLT}'V - ***TEST MODE*** ENABLED" >> ${PW_LOGPOWER}
elif [ ${TESTMODE} -eq 0 ] && [ -f ${PW_TMPFOLDER}/power.testmode.enabled ]; then
rm -f ${PW_TMPFOLDER}/power.testmode.enabled
SENDNOTICE "TEST MODE" "***TEST MODE*** DISABLED!"
echo "($(date +'%Y-%m-%d %H:%M:%S')) - Input: ${INPUTACV}'V - Battery: ${BATTVOLT}'V - ***TEST MODE*** DISABLED" >> ${PW_LOGFILE}
echo "($(date +'%Y-%m-%d %H:%M:%S')) - Input: ${INPUTACV}'V - Battery: ${BATTVOLT}'V - ***TEST MODE*** DISABLED" >> ${PW_LOGPOWER}
fi
[ ! "${last_battvolt}" ] && last_battvolt=${BATTVOLT}
if (( $(bc <<<"${INPUTACV} >= ${min_acvolt}") )) && [ "${PW_DISCHARGE}" != "1" ]; then
[ "${last_battvolt}" != "${BATTVOLT}" ] && last_battvolt=${BATTVOLT}
if [ -f ${PW_TMPFOLDER}/power.ac.low ]; then
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${INPUTACV}'V / ${BATTVOLT}'V - Back to Normal Voltage" >> ${PW_LOGPOWER}
SENDNOTICE "POWER NOMINAL AGAIN" "Normal voltage detected
GRID VOLTAGE: ${INPUTACV}'V
BATT VOLTAGE: `IDS_NUMBER_FORMAT ${BATTVOLT}`'V ~ (`IDS_NUMBER_FORMAT ${BATTLIFE}`'% @ ${BATT_FULL}'V)"
else
[ $(expr `date +%s` - $(stat -c %Y ${PW_LOGPOWER})) -ge $(echo "scale=0; ${PW_LOG_INTERVAL_NORMAL}*60" | tr -d $'\r' | bc) ] && echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${INPUTACV}'V - Normal Voltage" >> ${PW_LOGPOWER}
if [ -f ${PW_TMPFOLDER}/power.ac.start ]; then
[ ! -f ${PW_TMPFOLDER}/.nosend_update ] && SENDNOTICE "POWER Startup - Nominal" "Service Startup
Normal voltage detected
GRID VOLTAGE: ${INPUTACV}'V
BATT VOLTAGE: `IDS_NUMBER_FORMAT ${BATTVOLT}`'V ~ (`IDS_NUMBER_FORMAT ${BATTLIFE}`'% @ ${BATT_FULL}'V)"
echo "($(date +'%Y-%m-%d %H:%M:%S')) - 'Check Power' Service Startup - Normal voltage detected - Input: ${INPUTACV}'V" >> ${PW_LOGPOWER}
rm -f ${PW_TMPFOLDER}/power.ac.start
fi
fi
if [ ! -f ${PW_TMPFOLDER}/power.ac.good ]; then
if [[ "${IP}" != "10.6.1"* ]] && ([ -f ${PW_TMPFOLDER}/shutdown.SYS ] || [ -f ${PW_TMPFOLDER}/shutdown.MAIN ] || [ -f ${PW_TMPFOLDER}/power.ac.conserve ]); then
SENDNOTICE "HOSTS POWER" "Power restored! Will wait ${PW_WAIT_TO_POWER_SERVERS}'mins before turning host(s) back on"
touch ${PW_TMPFOLDER}/.power.restored
fi
rm -f ${PW_TMPFOLDER}/power.ac.*
touch ${PW_TMPFOLDER}/power.ac.good
elif [ -f ${PW_TMPFOLDER}/.power.restored ] && [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/.power.restored)) -ge $(echo "scale=0; ${PW_WAIT_TO_POWER_SERVERS}*60" | tr -d $'\r' | bc) ]; then
HOSTMGMT mainsite -p on >/dev/null 2>&1 &
rm -f ${PW_TMPFOLDER}/.power.restored
fi
else
[ $(expr `date +%s` - $(stat -c %Y ${PW_LOGPOWER})) -ge 300 ] && echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${INPUTACV}'V / ${BATTVOLT}'V - Power OFF or LOW" >> ${PW_LOGPOWER}
if [ -f ${PW_TMPFOLDER}/power.ac.start ]; then
[ ! -f ${PW_TMPFOLDER}/.nosend_update ] && SENDNOTICE "POWER Startup - POWER OFF/LOW -${PW_DISCHARGE}- !!" "Service Startup
Power off or low voltage detected
GRID VOLTAGE: ${INPUTACV}'V
BATT VOLTAGE: `IDS_NUMBER_FORMAT ${BATTVOLT}`'V ~ (`IDS_NUMBER_FORMAT ${BATTLIFE}`'% @ ${BATT_FULL}'V)" 1
echo "($(date +'%Y-%m-%d %H:%M:%S')) - 'Check Power' Service Startup - OWER OFF/LOW - Input: ${INPUTACV}'V" >> ${PW_LOGPOWER}
rm -f ${PW_TMPFOLDER}/power.ac.start
rm -f ${PW_TMPFOLDER}/power.ac.good
touch ${PW_TMPFOLDER}/power.ac.low
elif [ -f ${PW_TMPFOLDER}/power.ac.good ]; then
if (( $(bc <<<"${INPUTACV} < ${min_acvolt}") )); then
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${INPUTACV}'V / ${BATTVOLT}'V - Power OFF or LOW voltage detected" >> ${PW_LOGPOWER}
SENDNOTICE "POWER ALERT - POWER OFF/LOW" "Power off or low voltage detected
GRID VOLTAGE: ${INPUTACV}'V
BATT VOLTAGE: `IDS_NUMBER_FORMAT ${BATTVOLT}`'V ~ (`IDS_NUMBER_FORMAT ${BATTLIFE}`'% @ ${BATT_FULL}'V)" 1
else
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${INPUTACV}'V / ${BATTVOLT}'V - Running on Batteries" >> ${PW_LOGPOWER}
SENDNOTICE "POWER ALERT - RUNNING ON BATTERIES!!" "Running on Batteries
GRID VOLTAGE: ${INPUTACV}'V
BATT VOLTAGE: `IDS_NUMBER_FORMAT ${BATTVOLT}`'V ~ (`IDS_NUMBER_FORMAT ${BATTLIFE}`'% @ ${BATT_FULL}'V)" 1
fi
rm -f ${PW_TMPFOLDER}/power.ac.good
touch ${PW_TMPFOLDER}/power.ac.low
fi
if [ "${PW_CONSERVE_HOSTS}" != "" ] && [ ! -f ${PW_TMPFOLDER}/power.ac.conserve ] && [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/power.ac.low)) -ge $(echo "scale=0; ${PW_CONSERVE_AFTER}*60/1" | tr -d $'\r' | bc) ]; then
echo -e "($(date +'%Y-%m-%d %H:%M:%S')) - ${INPUTACV}'V / ${BATTVOLT}'V - Shutting down iSCSI VM's and Host to conserve power" >> ${PW_LOGPOWER}
SENDNOTICE "POWER ALERT - Conserving Power" "Shutting down iSCSI VM's and Host to conserve power" 1
# SHUTDOWN_SERVER ${PW_MAIN_ISCSI} -esxi off &
CONSERVE_POWER &
touch ${PW_TMPFOLDER}/power.ac.conserve
fi
fi
if (( $(bc <<<"${BATTVOLT} >= ${min_battvolt}") )); then
[ $(expr `date +%s` - $(stat -c %Y ${PW_LOGPOWER})) -ge $(echo "scale=0; ${PW_LOG_INTERVAL_NORMAL}*60" | tr -d $'\r' | bc) ] && echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${BATTVOLT}'V - Battery Voltage" >> ${PW_LOGPOWER}
if [ -f ${PW_TMPFOLDER}/power.dc.start ]; then
echo "($(date +'%Y-%m-%d %H:%M:%S')) - Battery: ${BATTVOLT}'V - Service Startup - Normal voltage detected" >> ${PW_LOGPOWER}
rm -f ${PW_TMPFOLDER}/power.dc.start
fi
if [ ! -f ${PW_TMPFOLDER}/power.dc.good ]; then
rm -f ${PW_TMPFOLDER}/power.dc.*
touch ${PW_TMPFOLDER}/power.dc.good
fi
else
[ -f ${PW_TMPFOLDER}/power.dc.good ] && rm -f ${PW_TMPFOLDER}/power.dc.good
[ $(expr `date +%s` - $(stat -c %Y ${PW_LOGPOWER})) -ge $(echo "scale=0; ${PW_LOG_INTERVAL_ABNORMAL}*60" | tr -d $'\r' | bc) ] && echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${BATTVOLT}'V - LOW BATTERY Voltage" >> ${PW_LOGPOWER}
if (( $(bc <<<"${BATTVOLT} <= ${min_battvolt_sys}") )); then
[ ! -f ${PW_TMPFOLDER}/power.dc.critlow ] && touch ${PW_TMPFOLDER}/power.dc.critlow
if [ ! -f ${PW_TMPFOLDER}/shutdown.SYS.started ] && [ ! -f ${PW_TMPFOLDER}/shutdown.MAINSITE.started ] && [ ! -f ${PW_TMPFOLDER}/shutdown.ALL.started ] && (( $(bc <<<"${INPUTACV} < ${min_acvolt}") )) && [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/power.dc.critlow)) -ge 30 ]; then
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${BATTVOLT}'V - Shutting down all remaining servers..." >> ${PW_LOGFILE}
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${BATTVOLT}'V - Shutting down all remaining servers..." >> ${PW_LOGPOWER}
SENDNOTICE "BATT-VOLT REALLY LOW: SHUTDOWN SYS SERVERS" "Battery Voltage REALLY LOW: ${BATTVOLT}'V
Shutting down all remaining servers" 1
SHUTDOWN_SYS POWER &
fi
elif (( $(bc <<<"${BATTVOLT} < ${min_battvolt}") )); then
[ ! -f ${PW_TMPFOLDER}/power.dc.low ] && touch ${PW_TMPFOLDER}/power.dc.low
[ -f ${PW_TMPFOLDER}/power.dc.critlow ] && rm -f ${PW_TMPFOLDER}/power.dc.critlow
if [ ! -f ${PW_TMPFOLDER}/shutdown.MAIN.started ] && [ ! -f ${PW_TMPFOLDER}/shutdown.MAINSITE.started ] && [ ! -f ${PW_TMPFOLDER}/shutdown.ALL.started ] && (( $(bc <<<"${INPUTACV} < ${min_acvolt}") )) && [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/power.dc.low)) -ge 30 ]; then
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${BATTVOLT}'V - Shutting down main servers..." >> ${PW_LOGFILE}
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${BATTVOLT}'V - Shutting down main servers..." >> ${PW_LOGPOWER}
SENDNOTICE "BATT-VOLT LOW: SHUTDOWN MAIN SERVERS" "Battery Voltage LOW: ${BATTVOLT}'V
Shutting down main servers" 1
SHUTDOWN_MAIN POWER &
fi
elif [ ! -f ${PW_TMPFOLDER}/shutdown.MAIN.started ] && [ ! -f ${PW_TMPFOLDER}/shutdown.MAINSITE.started ] && [ ! -f ${PW_TMPFOLDER}/shutdown.ALL.started ] && [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/power.ac.low)) -ge $(echo "scale=0; ${PW_SHUTDOWN_MAINSERVERS_AFTER}*60" | tr -d $'\r' | bc) ]; then
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${BATTVOLT}'V - Shutting down main servers..." >> ${PW_LOGFILE}
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${BATTVOLT}'V - Shutting down main servers..." >> ${PW_LOGPOWER}
SENDNOTICE "BATT-VOLT LOW: SHUTDOWN MAIN SERVERS" "Battery Voltage LOW: ${BATTVOLT}'V
Shutting down main servers" 1
SHUTDOWN_MAIN POWER &
fi
fi
if [ -f ${PW_TMPFOLDER}/power.ac.low ] || [ -f ${PW_TMPFOLDER}/power.dc.low ]; then
volt_diff=`echo "scale=1; ${last_battvolt}-${BATTVOLT}" | tr -d $'\r' | bc`
(( $(bc <<<"${volt_diff} < 0") )) && volt_diff=`echo "scale=2; ${volt_diff} * -1" | tr -d $'\r' | bc`
if (( $(bc <<<"${volt_diff} >= 0.5") )); then
SENDNOTICE "BATTERY VOLTAGE CHANGE" "Battery Voltage: ${BATTVOLT}'V"
echo -e "($(date +'%Y-%m-%d %H:%M:%S')) - ${BATTVOLT}'V - Battery Voltage Change" >> ${PW_LOGPOWER}
last_battvolt=${BATTVOLT}
fi
fi
else
sleep 20s
fi
end=`date +%s`; runtime=$((end-start))
# echo -e "script runtime: ${runtime}s"; [ ${runtime} -lt ${runEvery} ] && echo "Sleeping for $(expr ${runEvery} - ${runtime})s"
echo "${log_start}~${runtime}~power" >> ${PW_LOGFOLDER}/service.scantimes
[ ${runtime} -lt ${runEvery} ] && sleep $(expr ${runEvery} - ${runtime})s ###|| echo "Not sleeping, ran for ${runtime}s previsoulsy"
done # &
}
OFFSITE_CHECKPOWER_SERVICE(){
startup=true
[ "${PW_SERVICE_POWER_SCANRATE}" != "" ] && runEvery=${PW_SERVICE_POWER_SCANRATE} || runEvery=10
while true; do
start=$(date +%s)
log_start=$(date "+%Y-%m-%d %H:%M:%S")
source ${PW_FOLDER}/defaults.inc
PW_OFFSITEHOSTS=$(echo ${PW_OFFSITE_HOSTS} | tr ',' ' ')
[ "${TEST_OFFSITE}" != "" ] && TEST=${TEST_OFFSITE} || TEST=''
if [ "${TEST}" != "" ]; then
PW_OFFSITE_SHUTDOWNSERVERS_AT_BATTCAP=98 #percent
PW_OFFSITE_SHUTDOWNSERVERS_AFTER=1 #minutes
PW_OFFSITE_WAIT_TO_POWER_SERVERS=1 #minutes
TESTMSG="### TEST MODE ACTIVE ###
"
else
TESTMSG=""
fi
[ "${PW_OFFSITE_MONITOR}" == "${IP}" ] && upsinfo=$(upsc offsite-ups 2>&1) || upsinfo=$(${SSHCMD} root@${PW_OFFSITE_MONITOR} 'upsc offsite-ups 2>&1')
if [ "$(echo "${upsinfo}" | grep 'input.voltage:' | sed 's/.*: //' | tr -d $'\r')" != "" ]; then
rm -f ${PW_TMPFOLDER}/power.offsite.ups.losscomm
OFFSITE_VOLTIN=$(echo "${upsinfo}" | grep 'input.voltage:' | sed 's/.*: //' | tr -d $'\r')
OFFSITE_LOAD=$(echo "${upsinfo}" | grep 'ups.load:' | sed 's/.*: //' | tr -d $'\r')
OFFSITE_LOAD=`echo "scale=2; ${OFFSITE_LOAD}/100" | tr -d $'\r' | bc`
OFFSITE_BATT_RUNTIME=$(echo "${upsinfo}" | grep 'battery.runtime:' | sed 's/.*: //' | tr -d $'\r')
OFFSITE_BATT_RUNTIME=`echo "scale=2; ${OFFSITE_BATT_RUNTIME}/60" | tr -d $'\r' | bc`
OFFSITE_BATT_CAP=$(echo "${upsinfo}" | grep 'battery.charge:' | sed 's/.*: //' | tr -d $'\r')
POWER_STRIP_DATA=$(kasa --type strip --json --host ${PW_OFFSITE_POWER_STRIP} energy)
OFFSITE_WATTS=$(echo "scale=2; $(echo ${POWER_STRIP_DATA} | jq '.power_mw')/1000" | tr -d $'\r' | bc -l)
if (( $(bc <<<"${OFFSITE_WATTS} < 100") )); then
TOTAL_MISC_WATTS=0
for mSENSOR in "${PW_POWERSENSOR_MISC[@]}"; do
TOTAL_MISC_WATTS=`echo "scale=2; ${TOTAL_MISC_WATTS}+$(GET_KASA_POWER ${mSENSOR})" | tr -d $'\r' | bc`
done
(( $(bc <<<"${OFFSITE_WATTS} < ${TOTAL_MISC_WATTS}") )) && OFFSITE_WATTS=${TOTAL_MISC_WATTS}
fi
if [ "${PW_OFFSITE_MONITOR}" == "${IP}" ]; then
if [ ! -d /sys/devices/w1_bus_master1/${PW_SENSOR_DEVICEID['Offsite-ServerRoom']} ]; then
/bin/dtoverlay w1-gpio gpiopin=4
sleep 2s
fi
if [ -d /sys/devices/w1_bus_master1/${PW_SENSOR_DEVICEID['Offsite-ServerRoom']} ]; then
temp_c=$(cat /sys/devices/w1_bus_master1/${PW_SENSOR_DEVICEID['Offsite-ServerRoom']}/w1_slave | tail -n1 | cut -d "=" -f2)
OFFSITE_TEMP=$(bc <<< "scale=2; ((${temp_c}/1000)*(9/5))+32")
else
OFFSITE_TEMP=ERR
fi
else
if ${SSHCMD} root@${PW_OFFSITE_MONITOR} [ ! -d /sys/devices/w1_bus_master1/${PW_SENSOR_DEVICEID['Offsite-ServerRoom']} ]; then
${SSHCMD} root@${PW_OFFSITE_MONITOR} '/bin/dtoverlay w1-gpio gpiopin=4'
sleep 2s
fi
if ${SSHCMD} root@${PW_OFFSITE_MONITOR} [ -d /sys/devices/w1_bus_master1/${PW_SENSOR_DEVICEID['Offsite-ServerRoom']} ]; then
temp_c=$(${SSHCMD} root@${PW_OFFSITE_MONITOR} cat /sys/devices/w1_bus_master1/${PW_SENSOR_DEVICEID['Offsite-ServerRoom']}/w1_slave | tail -n1 | cut -d "=" -f2)
OFFSITE_TEMP=$(bc <<< "scale=2; ((${temp_c}/1000)*(9/5))+32")
else
OFFSITE_TEMP=ERR
fi
fi
SENDNOTICE2(){
MESSAGE="${TESTMSG}${2}
BATTERY CHARGE: ${OFFSITE_BATT_CAP}'%
BATT RUNTIME: ${OFFSITE_BATT_RUNTIME}'mins
AC VOLTAGE: ${OFFSITE_VOLTIN}'V
WATT USAGE: ${OFFSITE_WATTS}'W
AMBIENT TEMP: ${OFFSITE_TEMP}'F"
[ "${3}" != "" ] && PRIORITY=${3} || PRIORITY=0
SENDNOTICE "${1}" "${MESSAGE}" ${PRIORITY} cosmic
}
if [ "${startup}" = "true" ]; then
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${OFFSITE_VOLTIN}'V - ${OFFSITE_WATTS}'W - ${OFFSITE_BATT_CAP}'% Battery - ${OFFSITE_BATT_RUNTIME}'mins - Service startup" >> ${PW_LOGPOWER}
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${OFFSITE_VOLTIN}'V - ${OFFSITE_BATT_CAP}'% Battery - Service startup" >> ${PW_LOGFILE}
[ ! -f ${PW_TMPFOLDER}/.nosend_update ] && OFFSITE_SENDPOWER "OFFSITE MONITOR Service Startup" &
startup=false
fi
if [ ${OFFSITE_VOLTIN%.*} -gt 105 ]; then
if [ -f ${PW_TMPFOLDER}/power.offsite.charging ] && [ ${OFFSITE_BATT_CAP%.*} -eq 100 ]; then
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${OFFSITE_VOLTIN}'V - ${OFFSITE_BATT_CAP}'% Battery - Charging Complete" >> ${PW_LOGFILE}
SENDNOTICE2 "OFFSITE POWER" "Batteries are fully recharged"
rm -f ${PW_TMPFOLDER}/power.offsite.charging
# elif [ ${OFFSITE_BATT_CAP%.*} -lt 100 ] && [ ! -f ${PW_TMPFOLDER}/power.offsite.charging ]; then
elif [ ${OFFSITE_BATT_CAP%.*} -lt 100 ] && ([ ! -f ${PW_TMPFOLDER}/power.offsite.charging ] || [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/power.offsite.charging)) -gt 60 ]); then
# touch ${PW_TMPFOLDER}/power.offsite.charging
echo "${OFFSITE_BATT_CAP%.*}'%" >| ${PW_TMPFOLDER}/power.offsite.charging
fi
if [ -f ${PW_TMPFOLDER}/power.offsite.ac.low ]; then
if [ -f ${PW_TMPFOLDER}/shutdown.OFFSITE ]; then
touch ${PW_TMPFOLDER}/power.offsite.restored
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${OFFSITE_VOLTIN}'V - ${OFFSITE_BATT_CAP}'% Battery - Offsite Power Restored" >> ${PW_LOGFILE}
SENDNOTICE2 "OFFSITE POWER" "Power restored! Will wait ${PW_OFFSITE_WAIT_TO_POWER_SERVERS}'mins before turning host(s) back on"
fi
rm -f ${PW_TMPFOLDER}/power.offsite.ac.*
fi
if [ -f ${PW_TMPFOLDER}/shutdown.OFFSITE ]; then
if [ -f ${PW_TMPFOLDER}/power.offsite.restored ] && [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/power.offsite.restored)) -gt $(echo "scale=2; ${PW_OFFSITE_WAIT_TO_POWER_SERVERS}*60" | tr -d $'\r' | bc) ]; then
if [ "$(CHECK_HOST ${PW_IP})" != "false" ]; then
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${OFFSITE_VOLTIN}'V - ${OFFSITE_BATT_CAP}'% Battery - Powering Hosts ON After Power Outage" >> ${PW_LOGFILE}
if [ -f ${PW_TMPFOLDER}/power.offsite.nohomeconn ]; then
SENDNOTICE2 "OFFSITE HOST POWER" "Powerwall connections has been established, powering offsite host(s) back ONLINE after power outage"
else
SENDNOTICE2 "OFFSITE HOST POWER" "Powering offsite host(s) back ONLINE after power outage"
fi
for host in ${PW_OFFSITEHOSTS_IDRAC}; do
if [ "${TEST}" = "" ] || [ "${TEST}" = "full" ]; then
ipmitool -I lanplus -H ${host} -U ${PW_ESXI_USER} -P "${PW_ESXI_PASS}" chassis power on &
else
echo "TESTMODE: Powering up '${host}'"
fi
done
rm -f ${PW_TMPFOLDER}/power.offsite.restored ${PW_TMPFOLDER}/power.offsite.nohomeconn ${PW_TMPFOLDER}/shutdown.OFFSITE
else
if [ ! -f ${PW_TMPFOLDER}/power.offsite.nohomeconn ]; then
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${OFFSITE_VOLTIN}'V - ${OFFSITE_BATT_CAP}'% Battery - Will wait to power on offsite host(s) until powerwall connection is regained" >> ${PW_LOGFILE}
touch ${PW_TMPFOLDER}/power.offsite.nohomeconn
SENDNOTICE2 "OFFSITE HOST POWER" "Will wait to power on offsite host(s) until powerwall connection is regained"
elif [ -f ${PW_TMPFOLDER}/power.offsite.nohomeconn ] && [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/power.offsite.nohomeconn)) -gt $(echo "scale=2; ${PW_OFFSITE_WAIT_TO_POWER_SERVERS}*60" | tr -d $'\r' | bc) ]; then
touch ${PW_TMPFOLDER}/power.offsite.nohomeconn
SENDNOTICE2 "OFFSITE HOST POWER" "Still waiting for connection to powerwall before powering offsite host(s) back on"
fi
fi
fi
fi
logtime=$(expr `date +%s` - $(stat -c %Y ${PW_LOGPOWER}))
if [ ${logtime} -ge $(echo "scale=0; ${PW_LOG_INTERVAL_NORMAL}*60" | tr -d $'\r' | bc) ] || ([ ${OFFSITE_BATT_CAP%.*} -lt 100 ] && [ ${logtime} -gt ${PW_LOG_INTERVAL_CHARGING} ]); then
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${OFFSITE_VOLTIN}'V - ${OFFSITE_WATTS}'W - ${OFFSITE_BATT_CAP}'% Battery - ${OFFSITE_BATT_RUNTIME}'mins - Normal" >> ${PW_LOGPOWER}
fi
else
[ ! -f ${PW_TMPFOLDER}/power.offsite.ac.low ] && touch ${PW_TMPFOLDER}/power.offsite.ac.low
if [ ! -f ${PW_TMPFOLDER}/power.offsite.ac.low.notice ] || [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/power.offsite.ac.low.notice)) -gt $(echo "scale=2; ${PW_RENOTIFY_LOWPOWER}*60" | tr -d $'\r' | bc) ]; then
# echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${OFFSITE_VOLTIN}'V - ${OFFSITE_BATT_CAP}'% Battery - Powering LOW/OFF!" >> ${PW_LOGFILE}
SENDNOTICE2 "OFFSITE POWER - POWER OFF/LOW!!" "Power off or low voltage detected" 1
touch ${PW_TMPFOLDER}/power.offsite.ac.low.notice
fi
if [ ! -f ${PW_TMPFOLDER}/shutdown.OFFSITE ] && [ ${OFFSITE_WATTS%.*} -gt 100 ] && ([ ${OFFSITE_BATT_CAP%.*} -le ${PW_OFFSITE_SHUTDOWNSERVERS_AT_BATTCAP} ] || [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/power.offsite.ac.low)) -ge $(echo "scale=2; ${PW_OFFSITE_SHUTDOWNSERVERS_AFTER}*60" | tr -d $'\r' | bc) ]); then
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${OFFSITE_VOLTIN}'V - ${OFFSITE_BATT_CAP}'% Battery - Powering Down Hosts!" >> ${PW_LOGFILE}
SENDNOTICE2 "OFFSITE HOST POWER" "Powering DOWN offsite host(s) due to power outage" 1
touch ${PW_TMPFOLDER}/shutdown.OFFSITE
for host in ${PW_OFFSITEHOSTS}; do
if [ "${TEST}" = "" ] || [ "${TEST}" = "full" ]; then
SHUTDOWN_SERVER ${host} -esxi off &
fi
done
fi
if [ $(expr `date +%s` - $(stat -c %Y ${PW_LOGPOWER})) -gt ${PW_LOG_INTERVAL_ABNORMAL} ]; then
echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${OFFSITE_VOLTIN}'V - ${OFFSITE_WATTS}'W - ${OFFSITE_BATT_CAP}'% Battery - ${OFFSITE_BATT_RUNTIME}'mins - OFF/LOW POWER!!" >> ${PW_LOGPOWER}
fi
fi
else
if [ ! -f ${PW_TMPFOLDER}/power.offsite.ups.losscomm ]; then
touch ${PW_TMPFOLDER}/power.offsite.ups.losscomm
elif [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/power.offsite.ups.losscomm)) -ge 120 ]; then
echo "($(date +'%Y-%m-%d %H:%M:%S')) - 0.0'V - 0'% Battery - Restarting NUT service" >> ${PW_LOGFILE}
[ "${PW_OFFSITE_MONITOR}" == "${IP}" ] && systemctl restart nut-driver || ${SSHCMD} root@${PW_OFFSITE_MONITOR} 'systemctl restart nut-driver'
sleep 10s
touch ${PW_TMPFOLDER}/power.offsite.ups.losscomm
fi
fi
end=`date +%s`; runtime=$((end-start))
# echo -e "script runtime: ${runtime}s"; [ ${runtime} -lt ${runEvery} ] && echo "Sleeping for $(expr ${runEvery} - ${runtime})s"
echo "${log_start}~${runtime}~offsite-power" >> ${PW_LOGFOLDER}/service.scantimes
[ ${runtime} -lt ${runEvery} ] && sleep $(expr ${runEvery} - ${runtime})s ###|| echo "Not sleeping, ran for ${runtime}s previsoulsy"
done
}
POWERLOGGER_SERVICE(){
[ ! -f ${PW_TMPFOLDER}/.nosend_update ] && SENDPOWER "POWER LOGGING Service Startup" &
while true; do
start=$(date +%s)
log_start=$(date "+%Y-%m-%d %H:%M:%S")
LogDataTime=`date +'%Y-%m-%d %H:%M:%S'`
source ${PW_FOLDER}/defaults.inc
if [[ "${IP}" != "10.6.1"* ]]; then
INVSTATSINFO=$(curl -m 3 -s "http://${PW_INVERTER_IP}/stats.json")
if [ "${INVSTATSINFO}" != "" ]; then
INPUTV=`echo ${INVSTATSINFO} | jq '.inputs .inV' | tr -d $'\r'`
INPUTA=`echo ${INVSTATSINFO} | jq '.inputs .inA' | tr -d $'\r'`
OUTPUTV=`echo ${INVSTATSINFO} | jq '.outputs .outV' | tr -d $'\r'`
OUTPUTA=`echo ${INVSTATSINFO} | jq '.outputs .outA' | tr -d $'\r'`
OUTPUTW=`echo ${INVSTATSINFO} | jq '.outputs .outW' | tr -d $'\r'`
BATTV=`echo ${INVSTATSINFO} | jq '.inputs .battV' | tr -d $'\r'`
BATTA=`echo ${INVSTATSINFO} | jq '.inputs .xfA' | tr -d $'\r'`
QRY="INSERT INTO power_data (sensorid, date, volt, amp) VALUES ('${PW_POWERSENSOR_ID['inv-in']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${INPUTV}','${INPUTA}')"
${mysql_conn} -e "USE servermonitor; ${QRY}"
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID['inv-out']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${OUTPUTV}','${OUTPUTA}','${OUTPUTW}')"
${mysql_conn} -e "USE servermonitor; ${QRY}"
QRY="INSERT INTO power_data (sensorid, date, volt, amp) VALUES ('${PW_POWERSENSOR_ID['battery']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${BATTV}','${BATTA}')"
${mysql_conn} -e "USE servermonitor; ${QRY}"
${mysql_conn} -e "USE servermonitor; UPDATE latest_sensor_data SET date = CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'), volt = '${INPUTV}', amp = '${INPUTA}' WHERE sensorid='${PW_POWERSENSOR_ID['inv-in']}'"
${mysql_conn} -e "USE servermonitor; UPDATE latest_sensor_data SET date = CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'), volt = '${OUTPUTV}', amp = '${OUTPUTA}' WHERE sensorid='${PW_POWERSENSOR_ID['inv-out']}'"
${mysql_conn} -e "USE servermonitor; UPDATE latest_sensor_data SET date = CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'), volt = '${BATTV}', amp = '${BATTA}' WHERE sensorid='${PW_POWERSENSOR_ID['battery']}'"
QRY="INSERT INTO inv_jsonstats (date, data) VALUES (CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${INVSTATSINFO}')"
${mysql_conn} -e "USE servermonitor; ${QRY}"
fi
if [ "$(CHECK_HOST ${PW_UPS_IP})" != "false" ]; then
SVRRM_VOLT=$(snmpwalk -v 1 -c public ${PW_UPS_IP} iso.3.6.1.4.1.850.1.1.3.1.3.3.2.1.2.1.1 | sed 's/.*: //')
SVRRM_VOLT=`echo "scale=1; ${SVRRM_VOLT}/10" | tr -d $'\r' | bc`
SVRRM_WATT=$(snmpwalk -v 1 -c public ${PW_UPS_IP} iso.3.6.1.4.1.850.1.1.3.1.3.3.2.1.4.1.1 | sed 's/.*: //')
SVRRM_AMP=$(snmpwalk -v 1 -c public ${PW_UPS_IP} iso.3.6.1.4.1.850.1.1.3.1.3.3.2.1.3.1.1 | sed 's/.*: //')
SVRRM_AMP=`echo "scale=2; ${SVRRM_AMP}/100" | tr -d $'\r' | bc`
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID['total']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${SVRRM_VOLT}','${SVRRM_AMP}','${SVRRM_WATT}')"
${mysql_conn} -e "USE servermonitor; ${QRY}"
${mysql_conn} -e "USE servermonitor; UPDATE latest_sensor_data SET date = CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'), watt = '${SVRRM_WATT}' WHERE sensorid='${PW_POWERSENSOR_ID['total']}'"
fi
if [ "$(CHECK_HOST ${PW_APCPDU_IP})" != "false" ]; then
APCPDU_AMP=$(snmpwalk -v 1 -c public ${PW_APCPDU_IP} .1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.1 | sed 's/.*: //')
APCPDU_AMP=`echo "scale=1; ${APCPDU_AMP}/10" | tr -d $'\r' | bc`
if [ "${SVRRM_VOLT}" != "" ]; then
APCPDU_WATT=`echo "scale=2; ${APCPDU_AMP}*${SVRRM_VOLT}" | tr -d $'\r' | bc`
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID['server-rack']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${SVRRM_VOLT}','${APCPDU_AMP}','${APCPDU_WATT}')"
${mysql_conn} -e "USE servermonitor; UPDATE latest_sensor_data SET date = CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'), watt = '${APCPDU_WATT}' WHERE sensorid='${PW_POWERSENSOR_ID['server-rack']}'"
else
QRY="INSERT INTO power_data (sensorid, date, amp) VALUES ('12',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${APCPDU_AMP}')"
fi
${mysql_conn} -e "USE servermonitor; ${QRY}"
fi
if [ "${SVRRM_VOLT}" != "" ] && [ "${APCPDU_AMP}" != "" ]; then
NETRK_AMP=`echo "scale=2; ${SVRRM_AMP}-${APCPDU_AMP}" | tr -d $'\r' | bc`
NETRK_WATT=$(ROUND_NUMBER `echo "scale=2; ${SVRRM_WATT}-${APCPDU_WATT}" | tr -d $'\r' | bc` 0)
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID['network-rack']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${SVRRM_VOLT}','${NETRK_AMP}','${NETRK_WATT}')"
${mysql_conn} -e "USE servermonitor; ${QRY}"
${mysql_conn} -e "USE servermonitor; UPDATE latest_sensor_data SET date = CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'), watt = '${NETRK_WATT}' WHERE sensorid='${PW_POWERSENSOR_ID['network-rack']}'"
fi
AIRCON_INFO=$(curl -m 3 -s http://${PW_REMOTE_SENSORS['ServerRoom-AC']}:8888/status/${PW_SENSOR_DEVICEID['ServerRoom-AC']} | jq '.dps')
if [ "${AIRCON_INFO}" != "" ]; then
AIRCON_AMP=$(echo "${AIRCON_INFO}" | grep '"18":' | cut -d' ' -f 4 | sed 's/,//g' | tr -d $'\r')
AIRCON_AMP=$(ROUND_NUMBER $(echo "scale=3; ${AIRCON_AMP}/1000" | tr -d $'\r' | bc -l) 2)
AIRCON_WATT=$(echo "${AIRCON_INFO}" | grep '"19":' | cut -d' ' -f 4 | sed 's/,//g' | tr -d $'\r')
AIRCON_WATT=$(echo "scale=1; ${AIRCON_WATT}/10" | tr -d $'\r' | bc -l)
AIRCON_VOLT=$(echo "${AIRCON_INFO}" | grep '"20":' | cut -d' ' -f 4 | sed 's/,//g' | tr -d $'\r')
AIRCON_VOLT=$(echo "scale=3; ${AIRCON_VOLT}/10" | tr -d $'\r' | bc -l)
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID['ServerRoom-AC']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${AIRCON_VOLT}','${AIRCON_AMP}','${AIRCON_WATT}')"
${mysql_conn} -e "USE servermonitor; ${QRY}"
${mysql_conn} -e "USE servermonitor; UPDATE latest_sensor_data SET date = CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'), watt = '${AIRCON_WATT}' WHERE sensorid='${PW_POWERSENSOR_ID['ServerRoom-AC']}'"
else
AIRCON_WATT=0
AIRCON_AMP=0
fi
if [ "${SVRRM_WATT}" != "" ]; then
SVRRM_AMP_WAC=$(echo "scale=2; ${SVRRM_AMP}+${AIRCON_AMP}" | tr -d $'\r' | bc -l)
SVRRM_WATT_WAC=$(echo "scale=2; ${SVRRM_WATT}+${AIRCON_WATT}" | tr -d $'\r' | bc -l)
QRY="INSERT INTO power_data (sensorid, date, amp, watt) VALUES ('${PW_POWERSENSOR_ID['total-wac']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${SVRRM_AMP_WAC}','${SVRRM_WATT_WAC}')"
${mysql_conn} -e "USE servermonitor; ${QRY}"
${mysql_conn} -e "USE servermonitor; UPDATE latest_sensor_data SET date = CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'), watt = '${SVRRM_WATT_WAC}' WHERE sensorid='${PW_POWERSENSOR_ID['total-wac']}'"
fi
### KYLE
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' | tr -d $'\r')
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' | tr -d $'\r')
KYLE_WATT=$(echo "scale=1; ${KYLE_WATT}/10" | tr -d $'\r' | bc -l)
KYLE_VOLT=$(echo "${KYLE_INFO}" | grep '"20":' | cut -d' ' -f 4 | sed 's/,//g' | tr -d $'\r')
KYLE_VOLT=$(echo "scale=3; ${KYLE_VOLT}/10" | tr -d $'\r' | bc -l)
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID['KP-Power']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${KYLE_VOLT}','${KYLE_AMP}','${KYLE_WATT}')"
${mysql_conn} -e "USE servermonitor; ${QRY}"
${mysql_conn} -e "USE servermonitor; UPDATE latest_sensor_data SET date = CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'), watt = '${KYLE_WATT}' WHERE sensorid='${PW_POWERSENSOR_ID['KP-Power']}'"
else
KYLE_AMP=0
KYLE_WATT=0
fi
KYLE_INFO=$(curl -m 3 -s http://${PW_REMOTE_SENSORS['KP-SAS']}:8888/status/${PW_SENSOR_DEVICEID['KP-SAS']} | jq '.dps')
if [ "${KYLE_INFO}" != "" ]; then
KYLE_AMP=$(echo "${KYLE_INFO}" | grep '"18":' | cut -d' ' -f 4 | sed 's/,//g' | tr -d $'\r')
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' | tr -d $'\r')
KYLE_WATT=$(echo "scale=1; ${KYLE_WATT}/10" | tr -d $'\r' | bc -l)
KYLE_VOLT=$(echo "${KYLE_INFO}" | grep '"20":' | cut -d' ' -f 4 | sed 's/,//g' | tr -d $'\r')
KYLE_VOLT=$(echo "scale=3; ${KYLE_VOLT}/10" | tr -d $'\r' | bc -l)
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID['KP-SAS']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${KYLE_VOLT}','${KYLE_AMP}','${KYLE_WATT}')"
${mysql_conn} -e "USE servermonitor; ${QRY}"
else
KYLE_AMP=0
KYLE_WATT=0
fi
[ "${PW_OFFSITE_MONITOR}" == "${IP}" ] && upsinfo=$(upsc offsite-ups 2>&1) || upsinfo=$(${SSHCMD} root@${PW_OFFSITE_MONITOR} 'upsc offsite-ups' 2>&1)
if [ "$(echo "${upsinfo}" | grep 'input.voltage:')" != "" ]; then
OFFSITE_VOLTOUT=$(echo "${upsinfo}" | grep 'output.voltage:' | sed 's/.*: //' | tr -d $'\r')
OFFSITE_LOAD=$(echo "${upsinfo}" | grep 'ups.load:' | sed 's/.*: //' | tr -d $'\r')
OFFSITE_LOAD=`echo "scale=2; ${OFFSITE_LOAD}/100" | tr -d $'\r' | bc`
OFFSITE_WATTS=`echo "scale=2; ${OFFSITE_LOAD}*$(echo "${upsinfo}" | grep 'ups.realpower.nominal:' | sed 's/.*: //')" | tr -d $'\r' | bc`
OFFSITE_AMPS=`echo "scale=2; ${OFFSITE_WATTS}/${OFFSITE_VOLTOUT}" | tr -d $'\r' | bc`
POWER_STRIP_DATA=$(kasa --type strip --json --host ${PW_OFFSITE_POWER_STRIP} energy)
OFFSITE_STRIP_WATTS=$(echo "scale=2; $(echo ${POWER_STRIP_DATA} | jq '.power_mw')/1000" | tr -d $'\r' | bc -l)
OFFSITE_STRIP_AMPS=$(echo $(echo "scale=2; $(echo ${POWER_STRIP_DATA} | jq '.current_ma')/1000" | tr -d $'\r' | bc -l))
OFFSITE_STRIP_VOLTS=$(echo $(echo "scale=2; $(echo ${POWER_STRIP_DATA} | jq '.voltage_mv')/1000" | tr -d $'\r' | bc -l))
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID['offsite-strip']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${OFFSITE_STRIP_VOLTS}','${OFFSITE_STRIP_AMPS}','${OFFSITE_STRIP_WATTS}')"
${mysql_conn} -e "USE servermonitor; ${QRY}"
if (( $(bc <<<"${OFFSITE_WATTS} < 100") )); then
TOTAL_MISC_WATTS=0; TOTAL_MISC_AMPS=0
for mSENSOR in "${PW_POWERSENSOR_MISC[@]}"; do
IFS=: read -r AMP WATT VOLT <<< $(GET_KASA_POWER ${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`
done
if (( $(bc <<<"${OFFSITE_WATTS} < ${TOTAL_MISC_WATTS}") )); then
OFFSITE_WATTS=${TOTAL_MISC_WATTS}
OFFSITE_AMPS=${TOTAL_MISC_AMPS}
fi
fi
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID['offsite-ups']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${OFFSITE_VOLTOUT}','${OFFSITE_AMPS}','${OFFSITE_WATTS}')"
${mysql_conn} -e "USE servermonitor; ${QRY}"
fi
for mSENSOR in "${PW_POWERSENSOR_MISC[@]}"; do
IFS=: read -r AMP WATT VOLT <<< $(GET_KASA_POWER ${mSENSOR}); unset IFS
if [ "${VOLT}" != "" ] && [ "${PW_POWERSENSOR_ID[${mSENSOR}]}" != "" ]; then
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID[${mSENSOR}]}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${VOLT}','${AMP}','${WATT}')"
${mysql_conn} -e "USE servermonitor; ${QRY}"
fi
done
for SENSOR in ${PW_SENSOR_ORD[@]}; do
[[ "${PW_HOST_IDRACS[${SENSOR}]}" = "10.6."* ]] && ESXI_PASS=${PW_ESXI_PASS_KP} || ESXI_PASS=${PW_ESXI_PASS}
if [ "${PW_HOST_IDRACS[${SENSOR}]}" != "" ] && [ ! -f ${PW_TMPFOLDER}/${SENSOR}.down ] && [ "$(ipmitool -I lanplus -H ${PW_HOST_IDRACS[${SENSOR}]} -U ${PW_ESXI_USER} -P "${ESXI_PASS}" chassis power status | grep 'Power is on')" != "" ]; then
HOST_WATT_SENSORS=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.8.1 -O vq | sed -e 's/"//g')
if [[ "${HOST_WATTS}" != *"Timeout"* ]] && [ "${HOST_WATT_SENSORS}" != "" ]; then
IFS=$'\n'
read -rd '' -a HOST_WATT_SENSORS <<<"${HOST_WATT_SENSORS}"
unset IFS
if [ ! -f ${PW_TMPFOLDER}/${SENSOR}.disable ] || ([ -f ${PW_TMPFOLDER}/${SENSOR}.disable ] && [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/${SENSOR}.disable)) -ge 120 ]); then
[ -f ${PW_TMPFOLDER}/${SENSOR}.shutdown ] && rm -f ${PW_TMPFOLDER}/${SENSOR}.shutdown
[ -f ${PW_TMPFOLDER}/shutdown.ALL ] && rm -f ${PW_TMPFOLDER}/shutdown.ALL
[[ "${PW_OFFSITE_HOSTS}" = *"${PW_HOST_ADDRESSES[${SENSOR}]}"* ]] && rm -f ${PW_TMPFOLDER}/shutdown.OFFSITE
[[ "${PW_MAINSITE_HOSTS}" = *"${PW_HOST_ADDRESSES[${SENSOR}]}"* ]] && rm -f ${PW_TMPFOLDER}/shutdown.MAINSITE
[[ "${PW_MAIN_HOSTS}" = *"${PW_HOST_ADDRESSES[${SENSOR}]}"* ]] && rm -f ${PW_TMPFOLDER}/shutdown.MAIN
[[ "${PW_SYS_HOSTS}" = *"${PW_HOST_ADDRESSES[${SENSOR}]}"* ]] && rm -f ${PW_TMPFOLDER}/shutdown.SYS
rm -f ${PW_TMPFOLDER}/${SENSOR}.disable
fi
PS1='0.0'; PS2='0.0'; HOST_WATTS=0
for s in {1..5}; do
DP=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.8.1.${s} | sed 's/.*: //')
if [[ "${DP}" = *"System Board"* ]]; then
found=1
HOST_WATTS=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.6.1.${s} | sed 's/.*: //')
elif [[ "${DP}" = *"PS1"* ]]; then
PS1=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.6.1.${s} | sed 's/.*: //')
elif [[ "${DP}" = *"PS2"* ]]; then
PS2=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.6.1.${s} | sed 's/.*: //')
fi
done
if [ ${found} -eq 1 ] && [ "${HOST_WATTS}" != "0" ] && [ "${HOST_WATTS}" != "" ] && [[ "${HOST_WATTS}" != *"Timeout"* ]]; then
[ "${PS1}" != "0.0" ] && PS1=`echo "scale=1; ${PS1}/10" | tr -d $'\r' | bc` && (( $(bc <<<"${PS1} < 1") )) && [[ "${PS1}" = *"."* ]] && PS1="0${PS1}"
[ "${PS2}" != "0.0" ] && PS2=`echo "scale=1; ${PS2}/10" | tr -d $'\r' | bc` && (( $(bc <<<"${PS2} < 1") )) && [[ "${PS2}" = *"."* ]] && PS2="0${PS2}"
HOST_AMPS=`echo "scale=1; ${PS1}+${PS2}" | tr -d $'\r' | bc`
QRY="INSERT INTO power_data (sensorid, date, amp, watt) VALUES ('${PW_POWERSENSOR_ID[${SENSOR}]}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${HOST_AMPS}','${HOST_WATTS}')"
${mysql_conn} -e "USE servermonitor; ${QRY}"
fi
fi
fi
done
#############################################################
else ################# KYLE #########################
if [ "$(CHECK_HOST ${PW_UPS_IP})" != "false" ]; then
## VERTIV
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/.*: //')
# ## APC
# 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.2.1.33.1.4.4.1.5.1 | sed 's/.*: //')
# 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} iso.3.6.1.2.1.33.1.4.4.1.4.1 | sed 's/.*: //')
# 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_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_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_UPS_IP} .1.3.6.1.2.1.33.1.2.4.0 | sed 's/.*: //')
QRY="INSERT INTO power_data (sensorid, date, volt, amp) VALUES ('${PW_POWERSENSOR_ID['ups-input']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${UPS_VOLTIN}','${UPS_AMPSIN}')"
${mysql_conn} -e "USE servermonitor; ${QRY}"
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID['ups-output']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${UPS_VOLTOUT}','${UPS_AMPSOUT}','${UPS_WATTS}')"
${mysql_conn} -e "USE servermonitor; ${QRY}"
QRY="INSERT INTO power_data (sensorid, date, volt) VALUES ('${PW_POWERSENSOR_ID['ups-battery']}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${UPS_BATT_VOLT}')"
${mysql_conn} -e "USE servermonitor; ${QRY}"
fi
for mSENSOR in "${PW_POWERSENSOR_MISC[@]}"; do
IFS=: read -r AMP WATT VOLT <<< $(GET_TUYA_POWER ${mSENSOR}); unset IFS
if [ "${VOLT}" != "" ] && [ "${PW_POWERSENSOR_ID[${mSENSOR}]}" != "" ]; then
QRY="INSERT INTO power_data (sensorid, date, volt, amp, watt) VALUES ('${PW_POWERSENSOR_ID[${mSENSOR}]}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${VOLT}','${AMP}','${WATT}')"
${mysql_conn} -e "USE servermonitor; ${QRY}"
fi
done
for SENSOR in ${PW_SENSOR_ORD[@]}; do
[[ "${PW_HOST_IDRACS[${SENSOR}]}" = "10.6."* ]] && ESXI_PASS=${PW_ESXI_PASS_KP} || ESXI_PASS=${PW_ESXI_PASS}
if [ "${PW_HOST_IDRACS[${SENSOR}]}" != "" ] && [ ! -f ${PW_TMPFOLDER}/${SENSOR}.down ] && [ "$(ipmitool -I lanplus -H ${PW_HOST_IDRACS[${SENSOR}]} -U ${PW_ESXI_USER} -P "${ESXI_PASS}" chassis power status | grep 'Power is on')" != "" ]; then
HOST_WATT_SENSORS=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.8.1 -O vq | sed -e 's/"//g')
if [[ "${HOST_WATTS}" != *"Timeout"* ]] && [ "${HOST_WATT_SENSORS}" != "" ]; then
IFS=$'\n'
read -rd '' -a HOST_WATT_SENSORS <<<"${HOST_WATT_SENSORS}"
unset IFS
if [ ! -f ${PW_TMPFOLDER}/${SENSOR}.disable ] || ([ -f ${PW_TMPFOLDER}/${SENSOR}.disable ] && [ $(expr `date +%s` - $(stat -c %Y ${PW_TMPFOLDER}/${SENSOR}.disable)) -ge 120 ]); then
[ -f ${PW_TMPFOLDER}/${SENSOR}.shutdown ] && rm -f ${PW_TMPFOLDER}/${SENSOR}.shutdown
[ -f ${PW_TMPFOLDER}/shutdown.ALL ] && rm -f ${PW_TMPFOLDER}/shutdown.ALL
[[ "${PW_OFFSITE_HOSTS}" = *"${PW_HOST_ADDRESSES[${SENSOR}]}"* ]] && rm -f ${PW_TMPFOLDER}/shutdown.OFFSITE
[[ "${PW_MAINSITE_HOSTS}" = *"${PW_HOST_ADDRESSES[${SENSOR}]}"* ]] && rm -f ${PW_TMPFOLDER}/shutdown.MAINSITE
[[ "${PW_MAIN_HOSTS}" = *"${PW_HOST_ADDRESSES[${SENSOR}]}"* ]] && rm -f ${PW_TMPFOLDER}/shutdown.MAIN
[[ "${PW_SYS_HOSTS}" = *"${PW_HOST_ADDRESSES[${SENSOR}]}"* ]] && rm -f ${PW_TMPFOLDER}/shutdown.SYS
rm -f ${PW_TMPFOLDER}/${SENSOR}.disable
fi
PS1='0.0'; PS2='0.0'; HOST_WATTS=0
for s in {1..5}; do
DP=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.8.1.${s} | sed 's/.*: //')
if [[ "${DP}" = *"System Board"* ]]; then
found=1
HOST_WATTS=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.6.1.${s} | sed 's/.*: //')
elif [[ "${DP}" = *"PS1"* ]]; then
PS1=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.6.1.${s} | sed 's/.*: //')
elif [[ "${DP}" = *"PS2"* ]]; then
PS2=$(snmpwalk -t 1 -r 0 -v 1 -c public ${PW_HOST_IDRACS[${SENSOR}]} iso.3.6.1.4.1.674.10892.5.4.600.30.1.6.1.${s} | sed 's/.*: //')
fi
done
if [ ${found} -eq 1 ] && [ "${HOST_WATTS}" != "0" ] && [ "${HOST_WATTS}" != "" ] && [[ "${HOST_WATTS}" != *"Timeout"* ]]; then
[ "${PS1}" != "0.0" ] && PS1=`echo "scale=1; ${PS1}/10" | tr -d $'\r' | bc` && (( $(bc <<<"${PS1} < 1") )) && [[ "${PS1}" = *"."* ]] && PS1="0${PS1}"
[ "${PS2}" != "0.0" ] && PS2=`echo "scale=1; ${PS2}/10" | tr -d $'\r' | bc` && (( $(bc <<<"${PS2} < 1") )) && [[ "${PS2}" = *"."* ]] && PS2="0${PS2}"
HOST_AMPS=`echo "scale=1; ${PS1}+${PS2}" | tr -d $'\r' | bc`
QRY="INSERT INTO power_data (sensorid, date, amp, watt) VALUES ('${PW_POWERSENSOR_ID[${SENSOR}]}',CONVERT_TZ('${LogDataTime}', 'America/Chicago', 'UTC'),'${HOST_AMPS}','${HOST_WATTS}')"
${mysql_conn} -e "USE servermonitor; ${QRY}"
fi
fi
fi
done
fi
if ([ "$(compgen -G "${PW_TMPFOLDER}/temp.*")" != "" ] && [ "$(compgen -G "${PW_TMPFOLDER}/temp.*CPU*")" = "" ]) || [ "$(compgen -G "${PW_TMPFOLDER}/power.*.low")" != "" ]; then
runEvery=${PW_MYSQL_LOG_INTERVAL_ABNORMAL}
else
runEvery=${PW_MYSQL_LOG_INTERVAL_NORMAL}
fi
end=`date +%s`; runtime=$((end-start))
# echo -e "script runtime: ${runtime}s"; echo "Sleeping for $(( (runEvery*60) - runtime ))s"
echo "${log_start}~${runtime}~powerlogger" >> ${PW_LOGFOLDER}/service.scantimes
[ ${runtime} -lt $((runEvery*60)) ] && sleep $(( (runEvery*60) - runtime ))s
done
}
HOSTPOWER(){
if [ "${PW_iDRACHOST_SHORTNAMES[${1}]}" != "" ]; then
idracip=${1}
elif [ "${PW_ESXI_HOST_NAMES[${1}]}" != "" ]; then
tmp=${PW_ESXI_HOST_NAMES[${1}]}
idracip=${PW_HOST_IDRACS[${tmp}]}
elif [ "${PW_HOST_IDRACS[iDS-vMS-Host${1}]}" != "" ]; then
idracip=${PW_HOST_IDRACS[iDS-vMS-Host${1}]}
elif ([ "${1::1}" = "o" ] || [ "${1::1}" = "O" ]) && [ "${PW_HOST_ADDRESSES[OFF-vMS-Host${1: -1}]}" != "" ]; then
idracip=${PW_HOST_IDRACS[OFF-vMS-Host${1: -1}]}
elif [ "${PW_HOST_IDRACS[${1}]}" != "" ]; then
idracip=${PW_HOST_IDRACS[${1}]}
else
idracip=''
fi
[[ "${idracip}" = "10.6.1."* ]] && ESXI_PASS=${PW_ESXI_PASS_KP} || ESXI_PASS=${PW_ESXI_PASS}
echo -e "\n${idsCL[Yellow]}POWERING ${2^^} '${PW_iDRACHOST_SHORTNAMES[${idracip}]}'"
DIVIDER . yellow ${PRI_WIDTH}
if [ "${idracip}" != "" ]; then
if [ "${2^^}" = "ON" ] || [ "${2^^}" = "OFF" ] || [ "${2^^}" = "STATUS" ]; then
if [ "${idracip}" = "${PW_HOST_IDRACS[${PW_ESXI_HOST_NAMES[${PW_ISCSI_PRI_HOST}]}]}" ] && [ "${2^^}" = "ON" ]; then
MSG="Powering ON the SAS Enclosure"
c=0; MSG_SPC=''; spc1=`expr ${HC_CW} - ${#MSG}`; until [ ${c} = ${spc1} ]; do MSG_SPC="${MSG_SPC} "; ((c++)); done
echo -en "\n${idsCL[LightCyan]}${MSG}${MSG_SPC}: "
if [ ${TESTMODE} -eq 0 ]; then
current_status=$(snmpwalk -t 3 -r 0 -v 1 -c public ${PW_APCPDU_IP} .1.3.6.1.4.1.318.1.1.12.3.3.1.1.4.14 | sed 's/.*: //')
if [ "${current_status}" != "" ] && [ "${current_status}" != "1" ]; then
run=$(snmpset -v 1 -c private ${PW_APCPDU_IP} .1.3.6.1.4.1.318.1.1.12.3.3.1.1.4.14 i 1 >/dev/null 2>&1)
sleep 3s
echo -e "${idsCL[Green]}Done${idsCL[Default]}\n"
elif [ "${current_status}" = "1" ]; then
echo -e "${idsCL[Green]}SAS Enclosure Already Powered ON${idsCL[Default]}\n"
fi
else
echo -e "${idsCL[Yellow]}(TEST MODE)${idsCL[Default]}"
fi
fi
if [ ${TESTMODE} -eq 0 ]; then
current_status=$(ipmitool -I lanplus -H ${idracip} -U ${PW_ESXI_USER} -P "${ESXI_PASS}" chassis power status | grep "Power is ${2,,}")
if [ "${current_status}" = "" ]; then
echo -e "${idsCL[Green]}"
ipmitool -I lanplus -H ${idracip} -U ${PW_ESXI_USER} -P "${ESXI_PASS}" chassis power ${2,,}
else
echo -e "\n${idsCL[LightCyan]}Host is already Powered ${2^^}${idsCL[Default]}"
fi
else
echo -e "\n${idsCL[Yellow]}(TEST MODE)"
fi
echo -e "${idsCL[Default]}"
if [ "${idracip}" = "${PW_HOST_IDRACS[${PW_ESXI_HOST_NAMES[${PW_ISCSI_PRI_HOST}]}]}" ] && [ "${2^^}" = "OFF" ]; then
MSG="Powering OFF the SAS Enclosure"
c=0; MSG_SPC=''; spc1=`expr ${HC_CW} - ${#MSG}`; until [ ${c} = ${spc1} ]; do MSG_SPC="${MSG_SPC} "; ((c++)); done
echo -en "${idsCL[LightCyan]}${MSG}${MSG_SPC}: "
if [ ${TESTMODE} -eq 0 ]; then
if [ "$(CHECK_HOST ${PW_ISCSI_PRI_HOST})" = "false" ]; then
run=$(snmpset -v 1 -c private ${PW_APCPDU_IP} .1.3.6.1.4.1.318.1.1.12.3.3.1.1.4.14 i 2 >/dev/null 2>&1)
sleep 3s
echo -e "${idsCL[Green]}Done${idsCL[Default]}\n"
else
echo -e "${idsCL[LightRed]}'${PW_iDRACHOST_SHORTNAMES[${idracip}]}' is not offline, not powering down\n"
fi
else
echo -e "${idsCL[Yellow]}(TEST MODE)${idsCL[Default]}"
fi
fi
else
echo -e "${idsCL[LightRed]}'${2^^}' command is not recognized${idsCL[Default]}"
fi
else
echo -e "${idsCL[LightRed]}Host cannot be found for '${1}'${idsCL[Default]}"
fi
echo -e "${idsCL[Default]}\n"
}
PDUCONTROL(){
function exitspacing {
echo -e "\n\033[K\n\033[K"
exit 0
}
trap exitspacing EXIT
while [ $# -gt 0 ]; do
case "$1" in
-port) PORT_SEL=${2};;
esac
shift 1
done
echo
DIVIDER . yellow ${PRI_WIDTH}
echo -e "${idsCL[Yellow]}APC-PDU Power Control"
DIVIDER true yellow ${PRI_WIDTH}
until [ "${PORTSEL^^}" = "E" ]; do
[ "${PORT_SEL}" != "" ] && PORTSEL=${PORT_SEL}
if [ "${PORTSEL}" = "" ]; then
PORT_DESC=$(snmpwalk -t 3 -r 0 -v 1 -c public ${PW_APCPDU_IP} .1.3.6.1.4.1.318.1.1.12.3.3.1.1.2 -O vq 2> /dev/null | sed -e 's/"//g')
PORT_POWER=$(snmpwalk -t 3 -r 0 -v 1 -c public ${PW_APCPDU_IP} .1.3.6.1.4.1.318.1.1.12.3.3.1.1.4 -O vq 2> /dev/null | sed -e 's/"//g')
IFS=$'\n'
read -rd '' -a PORT_DESC <<<"${PORT_DESC}"
read -rd '' -a PORT_POWER <<<"${PORT_POWER}"
unset IFS
for p in "${!PORT_DESC[@]}"; do
port=$(expr ${p} + 1)
[ ${PORT_POWER[${p}]} -eq 1 ] && portpower_disp="${idsCL[Green]}ON" || portpower_disp="${idsCL[LightRed]}OFF"
[ ${port} -lt 10 ] && pp=" ${port}" || pp=${port}
c=0; spc=''; spc1=`expr 28 - ${#PORT_DESC[${p}]}`; until [ ${c} = ${spc1} ]; do spc="${spc} "; ((c++)); done
echo -e "${pp}) ${idsCL[LightCyan]}${PORT_DESC[${p}]}${spc}${idsCL[Default]}: ${portpower_disp}${idsCL[Default]}"
done
echo -e ""
echo -e ""
echo -e "(${idsCL[Yellow]}E${idsCL[Default]})xit"
echo -e ""
echo -e "\033[5A"
# until [ "${PORTSEL}" != "" ]; do
echo -en "\n${idsCL[LightCyan]}Enter the port number to control: ${idsCL[Default]}"
read PORTSEL
echo
# done
fi
[ "${PORTSEL^^}" = "E" ] && exit 0
[ "${PORTSEL}" != "" ] && tp=$(expr ${PORTSEL} - 1)
if [ "${PORTSEL}" != "" ] && [[ "${PORTSEL}" =~ ^[0-9]+$ ]] && [ "${PORT_DESC[${tp}]}" != "" ] && [ ${PORTSEL} -ne 0 ]; then
# portsel_power=$(snmpwalk -t 3 -r 0 -v 1 -c public ${PW_APCPDU_IP} .1.3.6.1.4.1.318.1.1.12.3.3.1.1.4.${PORTSEL} -O vq 2> /dev/null | sed -e 's/"//g')
[ ${PORT_POWER[${tp}]} -eq 1 ] && portsel_power_disp="${idsCL[Green]}ON" || portsel_power_disp="${idsCL[LightRed]}OFF"
[ ${PORT_POWER[${tp}]} -eq 2 ] && portsel_change_power_disp="${idsCL[Green]}ON" || portsel_change_power_disp="${idsCL[LightRed]}OFF"
# portdesc=$(snmpwalk -t 3 -r 0 -v 1 -c public ${PW_APCPDU_IP} .1.3.6.1.4.1.318.1.1.12.3.3.1.1.2.${PORTSEL} -O vq 2> /dev/null | sed -e 's/"//g')
DIVIDER . yellow 60
echo -e "${idsCL[Yellow]}Port ${idsCL[LightYellow]}${PORTSEL}${idsCL[Default]}) ${idsCL[LightCyan]}${PORT_DESC[${tp}]} ${idsCL[Default]}: ${portsel_power_disp}${idsCL[Default]}\n"
echo -en "${idsCL[LightCyan]}Are you sure you wish to turn ${portsel_change_power_disp}${idsCL[LightCyan]} (port ${PORTSEL}) ${idsCL[Yellow]}${PORT_DESC[${tp}]}${idsCL[Default]} (y/N): "
read -n 1 portchange_confirm
case "${portchange_confirm}" in
[Yy])
[ ${PORT_POWER[${tp}]} -eq 1 ] && portsel_change=2 || portsel_change=1
echo -en "\n\n${idsCL[LightCyan]}Turning ${portsel_change_power_disp}${idsCL[LightCyan]} port ${idsCL[Yellow]}${PORTSEL}${idsCL[Default]} ... "
run=$(snmpset -v 1 -c private ${PW_APCPDU_IP} .1.3.6.1.4.1.318.1.1.12.3.3.1.1.4.${PORTSEL} i ${portsel_change} >/dev/null 2>&1)
echo -e "${idsCL[Green]}Done${idsCL[Default]}"
echo
;;
esac
[ "${PORT_SEL}" = "" ] && unset PORTSEL
else
echo -e "\n${idsCL[LightRed]}Not a valid port number${idsCL[Default]}"
unset PORTSEL
fi
[ "${PORT_SEL}" != "" ] && exit 0 || echo
done
}
SENDPOWER(){
st_power=`${PW_SCRIPT} check power -m -p -r`
SENDNOTICE "${1}" "${st_power}"
}
OFFSITE_SENDPOWER(){
st_power=$(${PW_SCRIPT} check temp -o -S -r -x usage; ${PW_SCRIPT} check power -o -p -r)
SENDNOTICE "${1}" "${st_power}" 0 cosmic
}
GET_TUYA_POWER(){
INFO=$(curl -m 3 -s http://${PW_REMOTE_SENSORS[${1}]}:8888/status/${PW_SENSOR_DEVICEID[${1}]} | jq '.dps')
if [ "${INFO}" != "" ]; then
WATT=-1
if [ "$(echo "${INFO}" | grep '"18":')" != "" ]; then
AMP=$(echo "${INFO}" | grep '"18":' | cut -d' ' -f 4 | sed 's/,//g')
AMP=$(ROUND_NUMBER $(echo "scale=3; ${AMP}/1000" | tr -d $'\r' | bc -l) 2)
WATT=$(echo "${INFO}" | grep '"19":' | cut -d' ' -f 4 | sed 's/,//g')
WATT=$(echo "scale=1; ${WATT}/10" | tr -d $'\r' | bc -l)
VOLT=$(echo "${INFO}" | grep '"20":' | cut -d' ' -f 4 | sed 's/,//g')
VOLT=$(echo "scale=1; ${VOLT}/10" | tr -d $'\r' | bc -l)
elif [ "$(echo "${INFO}" | grep '"6":')" != "" ]; then
AMP=$(echo "${INFO}" | grep '"4":' | cut -d' ' -f 4 | sed 's/,//g')
AMP=$(ROUND_NUMBER $(echo "scale=3; ${AMP}/1000" | tr -d $'\r' | bc -l) 2)
WATT=$(echo "${INFO}" | grep '"5":' | cut -d' ' -f 4 | sed 's/,//g')
WATT=$(echo "scale=1; ${WATT}/10" | tr -d $'\r' | bc -l)
VOLT=$(echo "${INFO}" | grep '"6":' | cut -d' ' -f 4 | sed 's/,//g')
VOLT=$(echo "scale=1; ${VOLT}/10" | tr -d $'\r' | bc -l)
fi
[ "${WATT}" != "-1" ] && echo "${AMP}:${WATT}:${VOLT}" || echo "0:0:0"
fi
}
GET_KASA_POWER(){
INFO=$(/usr/local/bin/kasa --type strip --json --verbose --host ${PW_REMOTE_SENSORS[${1}]} energy --child-index ${PW_SENSOR_DEVICEID[${1}]})
if [ "${INFO}" != "" ]; then
AMP=$(echo $(echo "scale=2; $(echo ${INFO} | jq '.current_ma')/1000" | tr -d $'\r' | bc -l))
WATT=$(echo $(echo "scale=2; $(echo ${INFO} | jq '.power_mw')/1000" | tr -d $'\r' | bc -l))
VOLT=$(echo $(echo "scale=2; $(echo ${INFO} | jq '.voltage_mv')/1000" | tr -d $'\r' | bc -l))
echo "${AMP}:${WATT}:${VOLT}"
fi
}