/** * * @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; }
/** * * @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); }