#!/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 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