57 lines
1.5 KiB
Plaintext
57 lines
1.5 KiB
Plaintext
|
#!/bin/bash
|
||
|
# Copyright 2018 The Chromium OS Authors. All rights reserved.
|
||
|
# Use of this source code is governed by a BSD-style license that can be
|
||
|
# found in the LICENSE file.
|
||
|
#
|
||
|
# Description: Read and output temperature of device's primary battery in
|
||
|
# degrees Celsius.
|
||
|
#
|
||
|
# TODO(tbroch) revisit for detachables with multiple batteries.
|
||
|
|
||
|
# Read battery temperature from sysfs power_supply and return in degC.
|
||
|
batt_temp_sysfs() {
|
||
|
local temp=""
|
||
|
|
||
|
for psdir in /sys/class/power_supply/* ; do
|
||
|
if [[ -e "${psdir}/temp" ]] ; then
|
||
|
pstype=$(cat $psdir/type)
|
||
|
if [[ "${pstype}" -eq "Battery" ]] ; then
|
||
|
temp=$(bc <<< "scale=2; $(cat ${psdir}/temp)/10")
|
||
|
break
|
||
|
fi
|
||
|
fi
|
||
|
done
|
||
|
echo ${temp}
|
||
|
}
|
||
|
|
||
|
# Read battery temperature from EC and return in degC.
|
||
|
batt_temp_ec() {
|
||
|
local temp=""
|
||
|
|
||
|
local sensor_str=$(ectool tempsinfo all 2>/dev/null | grep Battery)
|
||
|
if [[ $? -eq 0 ]] && [[ ! -z "${sensor_str}" ]] ; then
|
||
|
local idx=$(echo ${sensor_str} | cut -d: -f1)
|
||
|
# ectool temps <idx> looks like 'Reading temperature...298 K'
|
||
|
temp_str=$(ectool temps ${idx})
|
||
|
temp="${temp_str//[!0-9]/}"
|
||
|
if [[ -z "${temp}" ]] ; then
|
||
|
temp="error"
|
||
|
else
|
||
|
temp=$(bc <<< "scale=2; ${temp} - 273.15")
|
||
|
fi
|
||
|
fi
|
||
|
echo $temp
|
||
|
}
|
||
|
|
||
|
# Main
|
||
|
TEMP_DEGC=$(batt_temp_sysfs)
|
||
|
if [[ -z "${TEMP_DEGC}" ]] ; then
|
||
|
TEMP_DEGC=$(batt_temp_ec)
|
||
|
fi
|
||
|
|
||
|
if [[ -z "${TEMP_DEGC}" ]] ; then
|
||
|
echo "unknown"
|
||
|
else
|
||
|
echo ${TEMP_DEGC}
|
||
|
fi
|