#!/bin/sh
#    ipmievt.sh - generate an IPMI temperature event
#
# Baseboard Temp is usually index 0d, 0e or 15, & sensor num 0x30
# Note that values displayed/used are in hex.
#
# sensor |grep -i "Baseboard Temp" 
# 000d SDR Full 01 39 20 a 01 snum 30 Baseboard Temp   = 2f OK   47.00 degrees C
#   ^^=ibasetemp                   ^^=nbasetemp                  ^^+4=lotemp
#
pattn="Temp"
sensorfil=/var/lib/ipmiutil/sensor_out.txt
if [ ! -f $sensorfil ]; then
   sensorfil=/usr/share/ipmiutil/sensor_out.txt
fi
# get sensor readings again, since current temp may have changed
ipmiutil sensor >$sensorfil
#ibasetemp=0d
#nbasetemp=30   # usually snum 30 on my test unit
#lotemp=33
nbasetemp=`grep -i "$pattn" $sensorfil |head -n1|awk '{print $10}'`
ibasetemp=`grep "snum $nbasetemp" $sensorfil |awk '{print $1}'`
curtemp=`grep "snum $nbasetemp" $sensorfil| cut -f2 -d'=' |awk '{print $3}'|cut -f1 -d'.'`
lotemp=`expr $curtemp + 4`
hitemp=`expr $curtemp - 4`
hinorm=`expr $curtemp + 25`

if [ "x$curtemp" = "x" ]; then
   echo "Cannot find sensor reading for /$pattn/ in $sensorfil"
   exit 1
fi

echo "Setting $pattn upper threshold to $hitemp - current temp = $curtemp"
# cause a crit-hi for Baseboard Temp
ipmiutil sensor -i $ibasetemp -t -n $nbasetemp -h $hitemp

# give it 2 secs before clearing to OK
sleep 2
# put Baseboard Temp back to OK
ipmiutil sensor -i $ibasetemp -t -n $nbasetemp -h $hinorm 

sleep 1
# show the SEL events
ipmiutil sel -l6