249 lines
5.0 KiB
Plaintext
249 lines
5.0 KiB
Plaintext
|
#!/bin/bash
|
||
|
|
||
|
debug_flag=0
|
||
|
val=0
|
||
|
value=0
|
||
|
|
||
|
byte_hex_test()
|
||
|
{
|
||
|
if ! [[ $1 =~ ^[0-9A-Fa-f]{2}$ ]] ; then
|
||
|
return 0
|
||
|
else
|
||
|
return 1
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
byte_read(){
|
||
|
data=$(echo $val | awk '{print $'"$1"'}')
|
||
|
byte_hex_test $data
|
||
|
if [ $? -eq 0 ]; then
|
||
|
return 0
|
||
|
fi
|
||
|
data=$(printf "%d" 0x$data)
|
||
|
value=$data
|
||
|
return 1
|
||
|
|
||
|
}
|
||
|
add_byte(){
|
||
|
hi_byte=$(echo $val | awk '{print $'"$1"'}')
|
||
|
lo_byte=$(echo $val | awk '{print $'"$2"'}')
|
||
|
byte_hex_test $hi_byte
|
||
|
if [ $? -eq 0 ]; then
|
||
|
return 0
|
||
|
fi
|
||
|
byte_hex_test $lo_byte
|
||
|
if [ $? -eq 0 ]; then
|
||
|
return 0
|
||
|
fi
|
||
|
hi_byte=$(printf "%d" 0x$hi_byte)
|
||
|
lo_byte=$(printf "%d" 0x$lo_byte)
|
||
|
((hi_byte <<= 8))
|
||
|
value=$((($lo_byte+$hi_byte)))
|
||
|
return 1
|
||
|
}
|
||
|
# string_read [start byte] [length]
|
||
|
string_read(){
|
||
|
value=""
|
||
|
len=$(echo $val | awk '{print $'"$1"'}')
|
||
|
byte_hex_test $len
|
||
|
if [ $? -eq 0 ]; then
|
||
|
return 0
|
||
|
fi
|
||
|
len=$(printf "%d" 0x$len)
|
||
|
s=$(($1 + 1))
|
||
|
e=$(($1 + len - 1))
|
||
|
for i in $(seq $s $e)
|
||
|
do
|
||
|
data=$(echo $val | awk '{print $'"$i"'}')
|
||
|
byte_hex_test $data
|
||
|
if [ $? -eq 0 ]; then
|
||
|
return 0
|
||
|
fi
|
||
|
data=$(printf "%d" 0x$data)
|
||
|
if [ $data -ne 0 ];then
|
||
|
value=$value$(printf "$(printf '\\x%x' $data)")
|
||
|
else
|
||
|
data=0x20
|
||
|
value=$value$(printf "$(printf '\\x%x' $data)")
|
||
|
fi
|
||
|
done
|
||
|
return 1
|
||
|
}
|
||
|
#$1=dev_addr, $2=reg, $3=val
|
||
|
get_PSU_information()
|
||
|
{
|
||
|
val=$(ipmitool raw 0x30 0x89 2>>/dev/null)
|
||
|
if [ -e /sys/bus/i2c/devices/0-005a/vendor ] && [ -e /sys/bus/i2c/devices/0-0059/vendor ];then
|
||
|
#PSU1 Vin
|
||
|
add_byte 1 2
|
||
|
if [ $? -eq 1 ];then
|
||
|
value=$(($value * 10))
|
||
|
echo $value > /sys/bus/i2c/devices/0-005a/in1_input
|
||
|
fi
|
||
|
#PSU2 Vin
|
||
|
add_byte 3 4
|
||
|
if [ $? -eq 1 ];then
|
||
|
value=$(($value * 10))
|
||
|
echo $value > /sys/bus/i2c/devices/0-0059/in1_input
|
||
|
fi
|
||
|
#PSU 1 Vout
|
||
|
add_byte 5 6
|
||
|
if [ $? -eq 1 ];then
|
||
|
value=$(($value * 10))
|
||
|
echo $value > /sys/bus/i2c/devices/0-005a/in2_input
|
||
|
fi
|
||
|
#PSU 2 Vout
|
||
|
add_byte 7 8
|
||
|
if [ $? -eq 1 ];then
|
||
|
value=$(($value * 10))
|
||
|
echo $value > /sys/bus/i2c/devices/0-0059/in2_input
|
||
|
fi
|
||
|
#PSU 1 Iin
|
||
|
add_byte 9 10
|
||
|
if [ $? -eq 1 ];then
|
||
|
value=$(($value * 10))
|
||
|
echo $value > /sys/bus/i2c/devices/0-005a/curr1_input
|
||
|
fi
|
||
|
#PSU 2 Iin
|
||
|
add_byte 11 12
|
||
|
if [ $? -eq 1 ];then
|
||
|
value=$(($value * 10))
|
||
|
echo $value > /sys/bus/i2c/devices/0-0059/curr1_input
|
||
|
fi
|
||
|
#PSU 1 Iout
|
||
|
add_byte 13 14
|
||
|
if [ $? -eq 1 ];then
|
||
|
value=$(($value * 10))
|
||
|
echo $value > /sys/bus/i2c/devices/0-005a/curr2_input
|
||
|
fi
|
||
|
#PSU 2 Iout
|
||
|
add_byte 15 16
|
||
|
if [ $? -eq 1 ];then
|
||
|
value=$(($value * 10))
|
||
|
echo $value > /sys/bus/i2c/devices/0-0059/curr2_input
|
||
|
fi
|
||
|
#PSU 1 Pin
|
||
|
add_byte 17 18
|
||
|
if [ $? -eq 1 ];then
|
||
|
value=$(($value * 1000000))
|
||
|
echo $value > /sys/bus/i2c/devices/0-005a/power1_input
|
||
|
fi
|
||
|
#PSU 2 Pin
|
||
|
add_byte 19 20
|
||
|
if [ $? -eq 1 ];then
|
||
|
value=$(($value * 1000000))
|
||
|
echo $value > /sys/bus/i2c/devices/0-0059/power1_input
|
||
|
fi
|
||
|
#PSU 1 Pout
|
||
|
add_byte 21 22
|
||
|
if [ $? -eq 1 ];then
|
||
|
value=$(($value * 1000000))
|
||
|
echo $value > /sys/bus/i2c/devices/0-005a/power2_input
|
||
|
fi
|
||
|
#PSU 2 Pout
|
||
|
add_byte 23 24
|
||
|
if [ $? -eq 1 ];then
|
||
|
value=$(($value * 1000000))
|
||
|
echo $value > /sys/bus/i2c/devices/0-0059/power2_input
|
||
|
fi
|
||
|
#PSU 1 Temp1
|
||
|
byte_read 25
|
||
|
if [ $? -eq 1 ];then
|
||
|
value=$(($value * 1000))
|
||
|
echo $value > /sys/bus/i2c/devices/0-005a/temp1_input
|
||
|
fi
|
||
|
#PSU 2 Temp1
|
||
|
byte_read 26
|
||
|
if [ $? -eq 1 ];then
|
||
|
value=$(($value * 1000))
|
||
|
echo $value > /sys/bus/i2c/devices/0-0059/temp1_input
|
||
|
fi
|
||
|
|
||
|
byte_read 31
|
||
|
if [ $? -eq 1 ];then
|
||
|
echo $value > /sys/bus/i2c/devices/0-005a/present
|
||
|
fi
|
||
|
|
||
|
byte_read 32
|
||
|
if [ $? -eq 1 ];then
|
||
|
echo $value > /sys/bus/i2c/devices/0-0059/present
|
||
|
fi
|
||
|
|
||
|
#PSU 1 2 PSU power good
|
||
|
byte_read 33
|
||
|
if [ $? -eq 1 ];then
|
||
|
echo $value > /sys/bus/i2c/devices/0-005a/power_good
|
||
|
fi
|
||
|
|
||
|
byte_read 34
|
||
|
if [ $? -eq 1 ];then
|
||
|
echo $value > /sys/bus/i2c/devices/0-0059/power_good
|
||
|
fi
|
||
|
|
||
|
add_byte 35 36
|
||
|
if [ $? -eq 1 ];then
|
||
|
echo $value > /sys/bus/i2c/devices/0-005a/fault
|
||
|
fi
|
||
|
|
||
|
add_byte 37 38
|
||
|
if [ $? -eq 1 ];then
|
||
|
echo $value > /sys/bus/i2c/devices/0-0059/fault
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
#____________________________________________________________________________
|
||
|
|
||
|
val=$(ipmitool raw 0x30 0x8a 2>>/dev/null)
|
||
|
if [ -e /sys/bus/i2c/devices/0-005a/vendor ] && [ -e /sys/bus/i2c/devices/0-0059/vendor ];then
|
||
|
#PSU1 mfr_ID
|
||
|
string_read 1
|
||
|
if [ $? -eq 1 ];then
|
||
|
echo $value > /sys/bus/i2c/devices/0-005a/vendor
|
||
|
fi
|
||
|
#PSU2 mfr_ID
|
||
|
string_read 21
|
||
|
if [ $? -eq 1 ];then
|
||
|
echo $value > /sys/bus/i2c/devices/0-0059/vendor
|
||
|
fi
|
||
|
#PSU1 mfr_model
|
||
|
string_read 41
|
||
|
if [ $? -eq 1 ];then
|
||
|
echo $value > /sys/bus/i2c/devices/0-005a/model
|
||
|
fi
|
||
|
#PSU2 mfr_model
|
||
|
string_read 61
|
||
|
if [ $? -eq 1 ];then
|
||
|
echo $value > /sys/bus/i2c/devices/0-0059/model
|
||
|
fi
|
||
|
#PSU1 mfr_serial
|
||
|
string_read 81
|
||
|
if [ $? -eq 1 ];then
|
||
|
echo $value > /sys/bus/i2c/devices/0-005a/sn
|
||
|
fi
|
||
|
#PSU1 mfr_serial
|
||
|
string_read 111
|
||
|
if [ $? -eq 1 ];then
|
||
|
echo $value > /sys/bus/i2c/devices/0-0059/sn
|
||
|
fi
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
#$1=dev_addr, $2=reg, $3=len
|
||
|
|
||
|
PSU_monitor()
|
||
|
{
|
||
|
|
||
|
while true
|
||
|
do
|
||
|
|
||
|
get_PSU_information
|
||
|
if [ $debug_flag -eq 1 ];then
|
||
|
bmc_fan_speed_ctrl
|
||
|
fi
|
||
|
|
||
|
sleep 1
|
||
|
done
|
||
|
}
|
||
|
|
||
|
PSU_monitor
|