Battery consumption tracking

I’m thinking about battery consumption and detection of required battery change to prevent missing data in environment analysis.

Energizer provides good data sheet about lithium battery behavior while discharging and temperature affection.

But for good analysis we need also current measurement.

Eddystone telemetry provides battery voltage. Is there possibility to measure current?

Is it possible to add also current data to the Data Format 3 structure? If I understood right about Manufacture data max length, which is 31 byte. Currently Data Format 3’s length is 21 byte, so there is 10 byte free room for data :slight_smile:

And btw also time since power-up is good to have :slight_smile:

Measuring the current drain from battery is not trivial, you can have a look at the Nordic’s Power Profiler Kit for an example of hardware required for accurate measurement.

I think it would be easier to power profile the application and use power profile and battery voltage to estimate average and peak current consumption. For example the below profile is from stock Weather Station broadcasting at 2 Hz, +4dBm (if I recall correctly).


Eddystone TLM already has time since boot, the Sensortag format could accommodate timestamp. I’ll consider appending Eddystone-like time since boot to the data format.

I have previously implemented a battery watch on an embedded wireless system. It was powered by an Li-SOCl2 battery (3.6V) with a very steady discharge characteristic, i.e. it was of no use to measure the voltage drop. I ended up doing a power profile and measured the current with an DMM for the different states, in this case the standby current and the active current when transmitting. The easiest solution I came up with in the code was to count the time in standby and the number of activations. I defined the number of time-ticks or activations needed to consume 1mWh and each time that had passed I reduced the total capacity by 1 unit. E.g.
#define NUMBER_OF_TICKS_IN_STANDBY_TO_CONSUME_1mWh 5000
#define NUMBER_OF_ACTIVATIONS_TO_CONSUME_1mWh 150
#define TOTAL_CAPACITY 8000 //mWh

For this product it worked out quite good as a simple battery watch, of course with some safety margin. When the expected battery capacity is down to 20% it started to send a “batter low” warning message.
Could this be an approach to use for RuuviTag?

After little tinkering in battery specs, seems that it’s easy just to set warning trigger to 2.7V and emergency alert to 2.6V, when working conditions are above 0C. As voltage stays nicely at around 2.8V at 0-3mA currents.
If working temperature is little below 0C, constant voltage even on full battery is below 2.7V and start discharging very fast after 2.6V. So warning trigger is hard to set, instead we could set emergency alert to 2.65V just for sure.

For much colder temperatures like -20C, we have to measure battery’s behavior. As I didn’t find any test’s in freezing conditions.

If the battery voltage gives enough information together with temperature this must be a much easier solution to determine the remaining battery capacity. The problem in my case was that the voltage did not decrease until basically completely empty but a standard Li battery has a better behaviour in that regard.

This is from Energizer lithium battery specs. If this kind of behavior is expected also in RuuviTag’s 2450/2477 batteries, so triggers can be based simply on voltage data.