float _sensor_battery_saveMode = ENERGY_SAVE_MODE_DISABLED;
uint16_t energySavingIterations = 0;

// Copied from https://arduinodiy.wordpress.com/2016/12/25/monitoring-lipo-battery-voltage-with-wemos-d1-minibattery-shield-and-thingspeak/
float battery_voltage() {
  // ESP8266 ADC pin input voltage range ist 0V .. 1V
  // The Wemos D1 mini does already contain a voltage divider circuit: A0(Wemos PCB) -- [220kOhm] -- ADC (ESP8266)-- [100kOhm] -- GND
  // The (+) pole of the battery is connected to the A0 pin of the Wemos board through a additional 100kOhm resistance.
  // The battery voltage of 4.2V max is measured as 1.0V on ESP8266 ADC pin.
  uint16_t raw = analogRead(A0);
  float volt = raw / 1023.0;
  return volt * 4.2;
}

float battery_charging() {
  //debug("charging pin=" + String(digitalRead(BAT_CHARGING_PIN)));
  //debug("charged pin=" + String(digitalRead(BAT_CHARGED_PIN)));

  if (LOW == digitalRead(BAT_CHARGING_PIN)) {
    return BAT_CHARGE_STATE_CHARGING;
  } else if (LOW == digitalRead(BAT_CHARGED_PIN)) {
    return BAT_CHARGE_STATE_CHARGED;
  }

  return BAT_CHARGE_STATE_NOTCHARGING;
}

int energySavingMode() {
  // Give the solar panel some time to load the cell to prevent
  // flapping.
  if (energySavingIterations > 0) {
    energySavingIterations--;
    _sensor_battery_saveMode = ENERGY_SAVE_MODE_ENABLED;
    return 1;
  }

  // Is the battery low?
  if (currentSensorData[SENSOR_BAT_VOLTAGE] <= BAT_LOW_VOLTAGE) {
    // Entering energy saving
    energySavingIterations = ENERGY_SAVING_ITERATIONS;
    _sensor_battery_saveMode = ENERGY_SAVE_MODE_ENABLED;
    return 1;
  }

  _sensor_battery_saveMode = ENERGY_SAVE_MODE_DISABLED;
  return 0;
}

float isEnergySavingMode() {
  return _sensor_battery_saveMode;
}
