/**
  * 
  * @param IMETOS $BD
  * @param type $f_station_code is string
  */
 public function runQuery(IMETOS $BD, Station $station)
 {
     $f_station_code = $station->getStationCode();
     // periodo a descargar
     // valores: periodo, mes_actual, todos, fijo
     switch ($this->getPeriodo()) {
         case 'periodo':
             // fecha inicial
             $fecha_inicial = $this->getPeriodoMkFechaInicial();
             $fecha_final = $this->getPeriodoMkFechaFinal();
             $date_start = new DateTime(date('Y-m-d', $fecha_inicial));
             $date_final = new DateTime(date('Y-m-d', $fecha_final));
             break;
             //
         //
         case 'mes_actual':
             // mes actual
             $mes_actual = date('n');
             $anio_actual = date('Y');
             $days_number = cal_days_in_month(CAL_GREGORIAN, $mes_actual, $anio_actual);
             $fecha_inicial = mktime(0, 0, 0, $mes_actual, 1, $anio_actual);
             $date_start = new DateTime(date('Y-m-d', $fecha_inicial));
             $fecha_final = mktime(0, 0, 0, $mes_actual, $days_number, $anio_actual);
             $date_final = new DateTime(date('Y-m-d', $fecha_final));
             break;
             //
         //
         case 'todos':
             // todos los datos
             $query = "SELECT MIN(`f_read_time`) as min,\n                                 MAX(`f_read_time`) as max  \n                          FROM `seedclima_sensor_data_retrieve_stats_day`\n                          WHERE `f_station_code`={$this->f_station_code}";
             if (!$BD->sql_select($query, $results)) {
                 error_log(date('Y-m-d H:i:s') . chr(9) . "ERROR. No se puede determinar minimo y maximo en las fechas", 3, ERROR_LOG);
             }
             if ($min_max = $results->fetch(PDO::FETCH_ASSOC)) {
                 $date_start = new DateTime(date('Y-m-d', $min_max['min']));
                 $date_final = new DateTime(date('Y-m-d', $min_max['max']));
             } else {
                 $date_start = new DateTime(date('Y-m-d'));
                 $date_final = new DateTime(date('Y-m-d'));
             }
             break;
             //
         //
         case 'fijo':
             // periodo fijo en dias
             $periodo_dias = $this->getPeriodoDias();
             $date_final = new DateTime(date('Y-m-d'));
             $date_start = new DateTime(date('Y-m-d'));
             $date_start->sub(new DateInterval('P' . $periodo_dias . 'D'));
             break;
     }
     $date_start2 = $date_start->format('Y-m-d');
     $date_final2 = $date_final->format('Y-m-d');
     //
     $date_start3 = $date_start->getTimestamp();
     $date_final3 = $date_final->getTimestamp();
     //
     // sensores
     $query = array();
     $enca1 = "{$this->getSeparador2()}";
     $enca2 = "fecha" . chr($this->getSeparador2());
     foreach ($this->sensores as $key_sensor => $sensor) {
         $select = '`f_read_time`,';
         $where = "`f_station_code`={$f_station_code} AND (`f_read_time`>={$date_start3} AND `f_read_time`<={$date_final3}) AND";
         // sensor contiene code_ch
         $partes = explode("_", $sensor);
         if (count($partes) == 2) {
             $f_sensor_code = $partes[0];
             $f_sensor_ch = $partes[1];
             $qsensor = $station->getSensor($f_sensor_code, $f_sensor_ch, 1);
             $enca1 .= "{$qsensor->getSensorUserName()}{$this->getSeparador2()}";
             if ($qsensor->getValMin()) {
                 $select .= '`min`,';
                 $enca2 .= "min" . chr($this->getSeparador2());
             }
             if ($qsensor->getValMax()) {
                 $select .= '`max`,';
                 $enca2 .= "max" . chr($this->getSeparador2());
             }
             if ($qsensor->getValSum()) {
                 $select .= '`sum`,';
                 $enca2 .= "sum" . chr($this->getSeparador2());
             }
             if ($qsensor->getValAver()) {
                 $select .= '`aver`,';
                 $enca2 .= "aver" . chr($this->getSeparador2());
             }
             if ($qsensor->getValLast()) {
                 $select .= '`last`,';
                 $enca2 .= "last" . chr($this->getSeparador2());
             }
             $where .= " `f_sensor_code`={$f_sensor_code} AND `f_sensor_ch`={$f_sensor_ch}";
         }
         if (substr($select, -1 == ',')) {
             $select = substr($select, 0, -1);
         }
         if (substr($where, -3) == 'AND') {
             // saco el AND
             $where = substr($where, 0, -3);
         }
         // hago la consulta
         $query[$sensor] = "\n                    SELECT {$select}\n                    FROM `seedclima_sensor_data_retrieve_stats_day` \n                    WHERE {$where}\n                    ORDER BY `f_read_time` ASC";
     }
     if (substr($enca1, -strlen($this->getSeparador2()) == $this->getSeparador2())) {
         $enca1 = substr($enca1, 0, -strlen(chr($this->getSeparador2())));
     }
     if (substr($enca2, -strlen(chr($this->getSeparador2())) == chr($this->getSeparador2()))) {
         $enca2 = substr($enca2, 0, -strlen(chr($this->getSeparador2())));
     }
     return array($query, $enca1, $enca2);
 }