コード例 #1
0
 /**
  *
  * @param Integer $filterByStationCode
  * @param Integer $filterBySensorCode
  * @param Integer $filterBySensorChannel
  * @param Integer $filterByStatus 0|1
  * @return Array
  */
 public static function getAll(IMETOS $BD, $filterByStationCode = null, $filterBySensorCode = null, $filterBySensorChannel = null, $filterByStatus = null, array $filterById = null)
 {
     settype($response, 'array');
     settype($filters, 'array');
     if (isset($filterById)) {
         $filterById = implode(',', $filterById);
         $filters[] = " `row_id` IN ({$filterById})";
     }
     if (isset($filterByStationCode)) {
         $filters[] = " `f_station_code` = '{$filterByStationCode}'";
     }
     if (isset($filterBySensorCode)) {
         $filters[] = " `f_sensor_code` = '{$filterBySensorCode}'";
     }
     if (isset($filterBySensorChannel)) {
         $filters[] = " `f_sensor_ch` = '{$filterBySensorChannel}'";
     }
     if (isset($filterByStatus)) {
         $filters[] = " `enable_sensor` = '{$filterByStatus}'";
     }
     $whereCondition = count($filters) > 0 ? 'WHERE ' . implode(' AND ', $filters) : '';
     $query = "\n            SELECT  *\n            FROM    `seedclima_sensor_info`\n                {$whereCondition} \n            ORDER BY `priority`,`custom_name`,`f_sensor_user_name`";
     //echo "pase por aca 2<br>";
     //$BD=new IMETOS();
     if ($BD->sql_select($query, $result)) {
         if ($BD->getRowCount() > 0) {
             while ($sensorInfo = $result->fetch(PDO::FETCH_ASSOC)) {
                 $sensor = Sensor::load($BD, null, $sensorInfo);
                 $response[$sensor->getSensorCode() . '_' . $sensor->getSensorCh()] = $sensor;
             }
         }
         return $response;
     }
     return false;
 }
コード例 #2
0
 /**
  *
  * @param <type> $sensorDataByDatetime
  * @param <type> $f_station_code
  */
 private function _buildInsertSensorDataQuery($sensorDataByDatetime, $f_station_code)
 {
     $f_date = $sensorDataByDatetime->f_date;
     $sensor = false;
     $sensorId = false;
     $lastSensorDataRetrieveInfoTable = '';
     foreach ($sensorDataByDatetime as $key => $val) {
         if (preg_match("#sens_#i", $key)) {
             $fields = explode("_", $key);
             /* Cargar Sensor */
             if (!$sensor || $sensor->getId() != $sensorId) {
                 if (array_key_exists($f_station_code . '_' . $fields['3'] . '_' . $fields['2'], $this->_loadedSensors)) {
                     $sensor = $this->_loadedSensors[$f_station_code . '_' . $fields['3'] . '_' . $fields['2']];
                 } else {
                     $sensor = Sensor::load(false, false, $f_station_code, $fields['3'], $fields['2']);
                     $this->_loadedSensors[$f_station_code . '_' . $fields['3'] . '_' . $fields['2']] = $sensor;
                 }
             }
             /* Si no se puede cargar el sensor, saltar una iteracion */
             if (!$sensor) {
                 continue;
             }
             /**
              * IF NO DATA THEN CONTINUE
              */
             if (check_null_val(process_plain_text($val)) == 'NULL') {
                 continue;
             }
             /**
              * Value is out of range?
              */
             $mixExpected = is_numeric($sensor->getMinExpected()) ? $sensor->getMinExpected() : false;
             $maxExpected = is_numeric($sensor->getMaxExpected()) ? $sensor->getMaxExpected() : false;
             if ($mixExpected !== false && $maxExpected !== false) {
                 if ($val >= $mixExpected && $val <= $maxExpected) {
                     $outOfRange = 0;
                 } else {
                     $outOfRange = 1;
                 }
             } else {
                 $outOfRange = 0;
             }
             /**
              * Update retrieved sensors data info
              */
             $tableSuffix = date('Y_m', strtotime($f_date));
             $currentSensorDataRetrieveInfoTable = DBT_PREFIX . "sensor_data_retrieve_info_{$tableSuffix}";
             if ($lastSensorDataRetrieveInfoTable != $currentSensorDataRetrieveInfoTable) {
                 $createTableQuery = "\n                    CREATE TABLE IF NOT EXISTS `{$currentSensorDataRetrieveInfoTable}` (\n                        `row_id` int(11) unsigned NOT NULL AUTO_INCREMENT,\n                        `f_station_code` int(11) unsigned NOT NULL,\n                        `f_sensor_type` varchar(6) COLLATE utf8_unicode_ci NOT NULL,\n                        `f_sensor_code` int(11) unsigned NOT NULL,\n                        `f_sensor_ch` int(11) unsigned NOT NULL,\n                        `f_read_time` int(11) unsigned NOT NULL,\n                        `f_write_time` int(11) unsigned NOT NULL,\n                        `f_data_retrieved` decimal(15,4) NOT NULL,\n                        `f_unit` int(11) DEFAULT NULL,\n                        `out_of_range` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT 'si la lectura està fuera de los parametros asignados por el admin en los detalles del sensor',\n                        `wind_direction_vector` decimal(15,4) DEFAULT NULL,\n                        PRIMARY KEY (`row_id`),\n                        UNIQUE KEY `station_code_sensor_type_sensor_code_sensor_ch_read_time` (`f_station_code`,`f_sensor_type`,`f_sensor_code`,`f_sensor_ch`,`f_read_time`),\n                        KEY `f_station_code` (`f_station_code`),\n                        KEY `f_sensor_code` (`f_sensor_code`),\n                        KEY `f_read_time` (`f_read_time`),\n                        KEY `out_of_range` (`out_of_range`),\n                        KEY `f_sensor_type` (`f_sensor_type`),\n                        KEY `wind_direction_vector` (`wind_direction_vector`),\n                        KEY `f_read_time_combined` (`f_read_time`,`f_station_code`,`f_sensor_code`,`f_sensor_type`)\n                        ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci\n                        ";
                 if (!sql_select($createTableQuery, $createTableQueryResults)) {
                     return false;
                 }
                 usleep(50);
             }
             /**
              * Fix, ETo debe mostrarse como SUM y no como AVER como declara el server remoto
              */
             $fields['1'] = $sensor->getSensorCode() == 1201 ? 'sum' : $fields['1'];
             $queryString = "\n                    INSERT IGNORE INTO\n                        `{$currentSensorDataRetrieveInfoTable}`\n                    SET\n                        `f_station_code` = {$sensor->getStationCode()},\n                        `f_sensor_type` = " . check_null_val(process_plain_text($fields['1'])) . ",\n                        `f_sensor_code` = {$sensor->getSensorCode()},\n                        `f_sensor_ch` = {$sensor->getSensorCh()},\n                        `f_read_time` = " . (int) strtotime($f_date) . ",\n                        `f_write_time` = UNIX_TIMESTAMP(),\n                        `f_data_retrieved` = " . check_null_val(process_plain_text($val)) . ",\n                        `f_unit` = '" . process_plain_text($sensor->getUnit()) . "',\n                        `out_of_range` = {$outOfRange},\n                        `wind_direction_vector` = " . ($sensor->isWindDirectionSensor() ? deg2cpd($val, true) : 'NULL') . "\n                        ";
             if (sql_select($queryString, $results)) {
                 /**
                  * Update retrieved info index
                  */
                 $updateStationDataRetrieveInfo = "\n                        INSERT IGNORE INTO\n                            `" . DBT_PREFIX . "station_data_retrieve_info`\n                        SET\n                            `f_station_code` = " . process_plain_text($f_station_code) . ",\n                            `last_read_time` = " . strtotime($f_date) . ",\n                            `last_read_time_success` = 1\n                        ";
                 sql_select($updateStationDataRetrieveInfo, $results);
                 usleep(1000);
             } else {
                 $this->_proccessOutput("something goes wrong with function _buildInsertSensorDataQuery()");
             }
         }
     }
     unset($sensorDataByDatetime);
 }