<commit_before>#include "kairos_sun.hpp"

#include <Wire.h>

/**
 * El constructor recibe el PIN donde se encuentra el relé, la hora de
 * inicio, los minutos de inicio y el intervalo en minutos que debe estar
 * encendido el sistema.
 */
KairosSun::KairosSun(const uint8_t relay, const int start_hour,
                     const int start_minute, const int interval) {
  this->relay = relay;
  this->start_hour = start_hour;
  this->start_minute = start_minute;
  this->interval = interval;
}

/**
 * Configura un cliente NTP para obtener la hora
 * @param timeClient Cliente NTP
 */
void KairosSun::SetNTPClient(NTPClient *timeClient) {
  this->timeClient = timeClient;
}

/**
 * Debe llamarse periódicamente en la función loop para ir comprobando
 * si se debe apagar o encender. Devuelve true si está encendido y false si
 * apagado.
 */
bool KairosSun::Update() {
  bool on;
  int start_time = this->start_hour * 60 + this->start_minute;
  int currentTime =
      this->timeClient->getHours() * 60 + this->timeClient->getMinutes();
  int endTime = (start_time + this->interval) % (24 * 60);

  // Enciendo si estamos entre la hora de encendido y de apagado
  if (currentTime >= start_time && currentTime <= endTime) {
    digitalWrite(this->relay, LOW);
    on = true;
    Serial.printf("Encendido\n");
  } else {
    digitalWrite(this->relay, HIGH);
    on = false;
    Serial.printf("Apagado\n");
  }

  return on;
}
<commit_msg>:bug: Fix time range<commit_after>#include "kairos_sun.hpp"

#include <Wire.h>

/**
 * El constructor recibe el PIN donde se encuentra el relé, la hora de
 * inicio, los minutos de inicio y el intervalo en minutos que debe estar
 * encendido el sistema.
 */
KairosSun::KairosSun(const uint8_t relay, const int start_hour,
                     const int start_minute, const int interval) {
  this->relay = relay;
  this->start_hour = start_hour;
  this->start_minute = start_minute;
  this->interval = interval;
}

/**
 * Configura un cliente NTP para obtener la hora
 * @param timeClient Cliente NTP
 */
void KairosSun::SetNTPClient(NTPClient *timeClient) {
  this->timeClient = timeClient;
}

/**
 * Debe llamarse periódicamente en la función loop para ir comprobando
 * si se debe apagar o encender. Devuelve true si está encendido y false si
 * apagado.
 */
bool KairosSun::Update() {
  bool on;
  int start_time = this->start_hour * 60 + this->start_minute;
  int currentTime =
      this->timeClient->getHours() * 60 + this->timeClient->getMinutes();
  int endTime = (start_time + this->interval) % (24 * 60);
  bool splited = (start_time + this->interval) / (24 * 60) > 1;

  // Enciendo si estamos entre la hora de encendido y de apagado
  if (!splited && (currentTime >= start_time && currentTime <= endTime) ||
      splited && (currentTime >= start_time || currentTime <= endTime)) {
    digitalWrite(this->relay, LOW);
    on = true;
    Serial.printf("Encendido\n");
  } else {
    digitalWrite(this->relay, HIGH);
    on = false;
    Serial.printf("Apagado\n");
  }

  return on;
}

{'fraction_non_alphanumeric': 0.11778290993071594, 'fraction_numerical': 0.007588254701418674, 'mean_word_length': 3.5253731343283583, 'pattern_counts': {'":': 0, '<': 8, '<?xml version=': 0, '>': 38, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5260820', 'n_tokens_mistral': 1051, 'n_tokens_neox': 1022, 'n_words': 304}