# Summary

Battery Chart contains a widget that records the battery usage as well as information that might influence this usage.

The app that comes with provides a graph that accumulates this information in a single screen.

## How the widget works

The widget records data in a fixed interval of ten minutes.

When this timespan has passed, it saves the following information to a file called `bclogx` where `x` is

the current day retrieved by `new Date().getDay()`:

- Battery percentage
- Temperature (of the die)
- LCD state
- Compass state
- HRM state
- GPS state

After seven days the logging rolls over and the previous data is overwritten.

To properly handle the roll-over, the day of the previous logging operation is stored in `bcprvday`.

The value is changed with the first recording operation of the new day.

## How the App works

### Events

The app charts the last 144 (6/h * 24h) datapoints that have been recorded.

If for the current day the 144 events have not been reached the list is padded with

events from the previous `bclog` file(s).

### Graph

The graph then contains the battery percentage (left y-axis) and the temperature (right y-axis).

In case the recorded temperature is outside the limits of the graph, the value is set to a minimum of 19 or a maximum of 41 and thus should be clearly visible outside of the graph's boundaries for the y-axis.

The states of the various SoC devices are depicted below the graph. If at the time of recording the device was enabled a marker in the respective color is set, if not the pixels for this point in time stay black.

If a device was not enabled during the 144 selected events, the name is not displayed.

## File schema

You can download the `bclog` files for your own analysis. They are `CSV` files without header rows and contain

```
timestamp,batteryPercentage,temperatureInDegreeC,deviceStates
```

with the `deviceStates` resembling a flag set consisting of 

```
const switchableConsumers = {
 none: 0,
 lcd: 1,
 compass: 2,
 bluetooth: 4,
 gps: 8,
 hrm: 16
};
```
