some performance optimizions in the frontend

git-svn-id: file:///home/jan/tmp/wetterstation/trunk@222 dd492736-c11a-0410-ad51-8c26713eaf7f
This commit is contained in:
losinshi 2007-02-12 00:06:56 +00:00
parent 194ad4d412
commit 288f351cb6
8 changed files with 206 additions and 160 deletions

View File

@ -48,5 +48,10 @@ class Config{
global $allTitle;
return $allTitle;
}
function getAvInterval(){
global $average_interval;
return $average_interval;
}
}
?>

View File

@ -22,7 +22,7 @@ class Connection{
function _createConn(){
//print $this->conn."<br>";
if($this->conn === NULL){
$this->conn = pg_connect(Config::getPgConnString())
$this->conn = pg_pconnect(Config::getPgConnString())
or die('Verbindungsaufbau fehlgeschlagen: ' . pg_last_error());
}
}
@ -39,7 +39,7 @@ class Connection{
function fetchQueryResultLine($query){
$this->_createConn();
$result = pg_query($this->conn, $query)
or die('Abfrage fehlgeschlagen: ' . pg_last_error());
or die('Abfrage fehlgeschlagen: ' . pg_last_error(). "\n<br>\nquery: '".$query."'");
$array = pg_fetch_assoc($result);
//print_r($array);
return $array;
@ -50,7 +50,7 @@ class Connection{
$returnArray = array();
$this->_createConn();
$result = pg_query($this->conn, $query)
or die('Abfrage fehlgeschlagen: ' . pg_last_error());
or die('Abfrage fehlgeschlagen: ' . pg_last_error(). "\n<br>\nquery: '".$query."'");
while($array = pg_fetch_assoc($result))
array_push($returnArray, $array);
return $returnArray;
@ -60,7 +60,7 @@ class Connection{
function &getRawResult($query){
$this->_createConn();
$result = pg_query($this->conn, $query)
or die('Abfrage fehlgeschlagen: ' . pg_last_error());
or die('Abfrage fehlgeschlagen: ' . pg_last_error(). "\n<br>\nquery: '".$query."'");
return $result;
}

View File

@ -11,13 +11,16 @@ class Hum{
var $nowHum; /* Momentane Luftfeuchtigkeit */
var $nowDate; /* datum des letzten Messvorgangs */
var $avVal; /* Durchschnittswert */
var $avInter; /* Interval des Durchschnittswertes */
var $avVal = "nc"; /* Durchschnittswert */
var $avInter = "nc"; /* Interval des Durchschnittswertes */
var $minHum; /* Minimale Luftfeuchtigkeit */
var $minDate; /* Datum, wann die Minimale Luftfeuchtigkeit gemessen wurde */
var $maxHum; /* Maximale Luftfeuchtigkeit */
var $maxDate; /* Datum, wann die Max. Luftfeuchtigkeit. gemessen wurde */
var $changing; /* Tendenz */
var $changing = "nc"; /* Tendenz */
var $connection;
var $sensId;
var $table;
/* Konstruktor */
function Hum($sensId, & $connection){
@ -26,70 +29,67 @@ class Hum{
/* Funktion, die die Klasse mit den Weten initialisiert */
function _fetchHumData($sensId, &$connection){
$this->connection = &$connection;
$this->sensId = $sensId;
/* Tabelle des Sensors bestimmen */
$tableQuery = "SELECT tabelle FROM sensoren, typen WHERE sensoren.id=".$sensId." AND typen.typ = sensoren.typ";
$table = $connection->fetchQueryResultLine($tableQuery);
$this->table = $table['tabelle'];
/* Aktuelle Luftfeuchtigkeit bestimmen */
$nowQuery = "SELECT hum, to_char(timestamp, 'DD.MM.YYYY HH24:MI') as timestamp FROM ".$table['tabelle']." WHERE timestamp=(select max(timestamp) from ".$table['tabelle']." where sens_id=".$sensId.")";
$nowQuery = "SELECT hum, to_char(timestamp, 'DD.MM.YYYY HH24:MI') as text_timestamp FROM ".$table['tabelle']." WHERE sens_id=".$sensId." ORDER BY timestamp DESC LIMIT 1";
$nowData = $connection->fetchQueryResultLine($nowQuery);
/* Max und Min-Werte bestimmen */
$maxQuery = "SELECT hum, to_char(timestamp, 'DD.MM.YYYY HH24:MI') as timestamp FROM ".$table['tabelle']." WHERE sens_id=".$sensId." AND hum=(SELECT max(hum) FROM ".$table['tabelle']." WHERE sens_id=".$sensId.")";
$maxQuery = "SELECT hum, to_char(timestamp, 'DD.MM.YYYY HH24:MI') as text_timestamp FROM ".$table['tabelle']." WHERE sens_id=".$sensId." AND hum=(SELECT max(hum) FROM ".$table['tabelle']." WHERE sens_id=".$sensId.") ORDER BY timestamp DESC LIMIT 1";
$maxData = $connection->fetchQueryResultLine($maxQuery);
$minQuery = "SELECT hum, to_char(timestamp, 'DD.MM.YYYY HH24:MI') as timestamp FROM ".$table['tabelle']." WHERE sens_id=".$sensId." AND hum=(SELECT min(hum) FROM ".$table['tabelle']." WHERE sens_id=".$sensId.")";
$minQuery = "SELECT hum, to_char(timestamp, 'DD.MM.YYYY HH24:MI') as text_timestamp FROM ".$table['tabelle']." WHERE sens_id=".$sensId." AND hum=(SELECT min(hum) FROM ".$table['tabelle']." WHERE sens_id=".$sensId.") ORDER BY timestamp DESC LIMIT 1";
$minData = $connection->fetchQueryResultLine($minQuery);
/* Bestimmte Werte den Klassenvariablen zuordnen */
$this->nowHum = $nowData['hum'];
$this->nowDate = $nowData['timestamp'];
$this->nowDate = $nowData['text_timestamp'];
$this->maxHum = $maxData['hum'];
$this->maxDate = $maxData['timestamp'];
$this->maxDate = $maxData['text_timestamp'];
$this->minHum = $minData['hum'];
$this->minDate = $minData['timestamp'];
/* Durchschnittswert bestimmen lassen */
$this->_fetchAverage($sensId, $table['tabelle'], &$connection);
/* Tendenz bestimmen lassen */
$this->_fetchMoving($sensId, $table['tabelle'], &$connection);
$this->minDate = $minData['text_timestamp'];
}
/* liefert den Durchschnittswert in einem bestimmtem Interval */
function _getAverage($sensId, $table, &$connection, $interval){
$avQuery = "SELECT (sum(hum)/count(hum)) as average, count(hum) as count FROM ".$table." WHERE sens_id=".$sensId." AND timestamp>(current_timestamp - INTERVAL '".$interval."')";
$avData = $connection->fetchQueryResultLine($avQuery);
function _getAverage($interval){
$avQuery = "SELECT avg(hum) as average, count(hum) as count FROM ".$this->table." WHERE sens_id=".$this->sensId." AND timestamp>(current_timestamp - INTERVAL '".$interval."')";
$avData = $this->connection->fetchQueryResultLine($avQuery);
return $avData;
}
/* momentanen Durchschnittswert bestimmen */
function _fetchAverage($sensId, $table, &$connection){
function _fetchAverage(){
$avData = array('average'=>0, 'count'=>0); /* Array initialisieren */
$i = 1; /* Laufvariable */
while($avData['count']<5){ /* Schleife prueft, in welchem Interval 5 Werte zusammenkommen */
$i++; /* Laufvariable erhoehen */
$avData = $this->_getAverage($sensId, $table, &$connection, ($i*20)." minutes"); /* Holt Werte mit gegebenem Interval */
$avData = $this->_getAverage(($i*(Config::getAvInterval()))." minutes"); /* Holt Werte mit gegebenem Interval */
}
/* Werte den Klassenvariablen zuordnen */
$this->avVal = $avData['average'];
$this->avInter = $i*20;
$this->avInter = $i*(Config::getAvInterval());
}
/* Bestimmt die Tendenz */
function _fetchMoving($sensId, $table, &$connection){
$shortAvData = $this->_getAverage($sensId, $table, &$connection, "15 minutes"); /* Durchschnitt der letzten 15 minuten */
$longAvData = $this->_getAverage($sensId, $table, &$connection, "120 minutes"); /* Durchschnitt der letzten 120 Minuten */
function _fetchMoving(){
$shortAvData = $this->_getAverage("15 minutes"); /* Durchschnitt der letzten 15 minuten */
$longAvData = $this->_getAverage("120 minutes"); /* Durchschnitt der letzten 120 Minuten */
if($shortAvData['count'] < 1 || $longAvData['count'] < 2){ /* Wenn in den letzten 5 minuten kein Wert kam oder in den letzten 120 min weniger als 3 Werte kamen */
$this->changing = "Berechnung momentan nicht moeglich"; /* Dann ausgeben, dass momentan nichts berechnet werden kann */
return; /* und aus der Funktion huepfen */
}
$changing = $shortAvData['average'] - $longAvData['average']; /* Aenderung berechnen */
if($changing > 0){ /* Wenn Aenderung positiv */
$this->changing = "steigend (+ ".abs($changing * 0.1)."%)"; /* dann steigende Tendenz ausgeben */
$this->changing = "steigend (+ ".abs(round($changing * 0.1, 1))."%)"; /* dann steigende Tendenz ausgeben */
} elseif($changing < 0) { /* wenn Negativ */
$this->changing = "fallend (- ".abs($changing * 0.1)."%)"; /* Fallende Tendenz ausgeben */
$this->changing = "fallend (- ".abs(round($changing * 0.1, 1))."%)"; /* Fallende Tendenz ausgeben */
} else { /* an sonsten */
$this->changing = "gleichbleibend (&plusmn; 0%)"; /* sagen, das es gleich geblieben ist */
}
@ -106,14 +106,20 @@ class Hum{
}
function get_av_value(){
return $this->avVal;
if($this->avVal == "nc")
$this->_fetchAverage();
return round($this->avVal, 1);
}
function get_av_interval(){
if($this->avInter == "nc")
$this->_fetchAverage();
return $this->avInter;
}
function get_changing(){
if($this->changing == "nc")
$this->_fetchMoving();
return $this->changing;
}

View File

@ -9,14 +9,17 @@
class Press{
var $nowPress; /* Momentaner Luftdruck */
var $nowDate; /* datum des letzten Messvorgangs */
var $avVal; /* Durchschnittswert */
var $avInter; /* Interval des Durchschnittswertes */
var $nowDate; /* datum des letzten Messvorgangs */
var $avVal = "nc"; /* Durchschnittswert */
var $avInter = "nc"; /* Interval des Durchschnittswertes */
var $minPress; /* Minimaler Luftdruck */
var $minDate; /* Datum, wann der Minimale Luftdruck gemessen wurde */
var $minDate; /* Datum, wann der Minimale Luftdruck gemessen wurde */
var $maxPress; /* Maximale Luftdruck */
var $maxDate; /* Datum, wann der Max. Luftdruck gemessen wurde */
var $changing; /* Tendenz */
var $maxDate; /* Datum, wann der Max. Luftdruck gemessen wurde */
var $changing = "nc"; /* Tendenz */
var $connection;
var $sensId;
var $table;
/* Konstruktor */
function Press($sensId, & $connection){
@ -25,70 +28,67 @@ class Press{
/* Funktion, die die Klasse mit den Weten initialisiert */
function _fetchPressData($sensId, &$connection){
$this->connection = &$connection;
$this->sensId = $sensId;
/* Tabelle des Sensors bestimmen */
$tableQuery = "SELECT tabelle FROM sensoren, typen WHERE sensoren.id=".$sensId." AND typen.typ = sensoren.typ";
$table = $connection->fetchQueryResultLine($tableQuery);
$this->table = $table['tabelle'];
/* Aktuelle Luftdruck bestimmen */
$nowQuery = "SELECT press, to_char(timestamp, 'DD.MM.YYYY HH24:MI') as timestamp FROM ".$table['tabelle']." WHERE timestamp=(select max(timestamp) from ".$table['tabelle']." where sens_id=".$sensId.")";
$nowQuery = "SELECT press, to_char(timestamp, 'DD.MM.YYYY HH24:MI') as text_timestamp FROM ".$table['tabelle']." WHERE sens_id=".$sensId." ORDER BY timestamp DESC LIMIT 1";
$nowData = $connection->fetchQueryResultLine($nowQuery);
/* Max und Min-Werte bestimmen */
$maxQuery = "SELECT press, to_char(timestamp, 'DD.MM.YYYY HH24:MI') as timestamp FROM ".$table['tabelle']." WHERE sens_id=".$sensId." AND press=(SELECT max(press) FROM ".$table['tabelle']." WHERE sens_id=".$sensId.")";
$maxQuery = "SELECT press, to_char(timestamp, 'DD.MM.YYYY HH24:MI') as text_timestamp FROM ".$table['tabelle']." WHERE sens_id=".$sensId." AND press=(SELECT max(press) FROM ".$table['tabelle']." WHERE sens_id=".$sensId.") ORDER BY timestamp DESC LIMIT 1";
$maxData = $connection->fetchQueryResultLine($maxQuery);
$minQuery = "SELECT press, to_char(timestamp, 'DD.MM.YYYY HH24:MI') as timestamp FROM ".$table['tabelle']." WHERE sens_id=".$sensId." AND press=(SELECT min(press) FROM ".$table['tabelle']." WHERE sens_id=".$sensId.")";
$minQuery = "SELECT press, to_char(timestamp, 'DD.MM.YYYY HH24:MI') as text_timestamp FROM ".$table['tabelle']." WHERE sens_id=".$sensId." AND press=(SELECT min(press) FROM ".$table['tabelle']." WHERE sens_id=".$sensId.") ORDER BY timestamp DESC LIMIT 1";
$minData = $connection->fetchQueryResultLine($minQuery);
/* Bestimmte Werte den Klassenvariablen zuordnen */
$this->nowPress = $nowData['press'];
$this->nowDate = $nowData['timestamp'];
$this->nowDate = $nowData['text_timestamp'];
$this->maxPress = $maxData['press'];
$this->maxDate = $maxData['timestamp'];
$this->maxDate = $maxData['text_timestamp'];
$this->minPress = $minData['press'];
$this->minDate = $minData['timestamp'];
/* Durchschnittswert bestimmen lassen */
$this->_fetchAverage($sensId, $table['tabelle'], &$connection);
/* Tendenz bestimmen lassen */
$this->_fetchMoving($sensId, $table['tabelle'], &$connection);
$this->minDate = $minData['text_timestamp'];
}
/* liefert den Durchschnittswert in einem bestimmtem Interval */
function _getAverage($sensId, $table, &$connection, $interval){
$avQuery = "SELECT (sum(press)/count(press)) as average, count(press) as count FROM ".$table." WHERE sens_id=".$sensId." AND timestamp>(current_timestamp - INTERVAL '".$interval."')";
$avData = $connection->fetchQueryResultLine($avQuery);
function _getAverage($interval){
$avQuery = "SELECT avg(press) as average, count(press) as count FROM ".$this->table." WHERE sens_id=".$this->sensId." AND timestamp>(current_timestamp - INTERVAL '".$interval."')";
$avData = $this->connection->fetchQueryResultLine($avQuery);
return $avData;
}
/* momentanen Durchschnittswert bestimmen */
function _fetchAverage($sensId, $table, &$connection){
function _fetchAverage(){
$avData = array('average'=>0, 'count'=>0); /* Array initialisieren */
$i = 1; /* Laufvariable */
while($avData['count']<5){ /* Schleife prueft, in welchem Interval 5 Werte zusammenkommen */
$i++; /* Laufvariable erhoehen */
$avData = $this->_getAverage($sensId, $table, &$connection, ($i*20)." minutes"); /* Holt Werte mit gegebenem Interval */
$avData = $this->_getAverage(($i*(Config::getAvInterval()))." minutes"); /* Holt Werte mit gegebenem Interval */
}
/* Werte den Klassenvariablen zuordnen */
$this->avVal = $avData['average'];
$this->avInter = $i*20;
$this->avInter = $i*(Config::getAvInterval());
}
/* Bestimmt die Tendenz */
function _fetchMoving($sensId, $table, &$connection){
$shortAvData = $this->_getAverage($sensId, $table, &$connection, "15 minutes"); /* Durchschnitt der letzten 15 minuten */
$longAvData = $this->_getAverage($sensId, $table, &$connection, "120 minutes"); /* Durchschnitt der letzten 120 Minuten */
function _fetchMoving(){
$shortAvData = $this->_getAverage("15 minutes"); /* Durchschnitt der letzten 15 minuten */
$longAvData = $this->_getAverage("120 minutes"); /* Durchschnitt der letzten 120 Minuten */
if($shortAvData['count'] < 1 || $longAvData['count'] < 2){ /* Wenn in den letzten 5 minuten kein Wert kam oder in den letzten 120 min weniger als 3 Werte kamen */
$this->changing = "Berechnung momentan nicht moeglich"; /* Dann ausgeben, dass momentan nichts berechnet werden kann */
return; /* und aus der Funktion huepfen */
}
$changing = $shortAvData['average'] - $longAvData['average']; /* Aenderung berechnen */
if($changing > 0){ /* Wenn Aenderung positiv */
$this->changing = "steigend (+ ".abs($changing * 0.1)." hPa)"; /* dann steigende Tendenz ausgeben */
$this->changing = "steigend (+ ".abs(round($changing * 0.1, 1))." hPa)"; /* dann steigende Tendenz ausgeben */
} elseif($changing < 0) { /* wenn Negativ */
$this->changing = "fallend (- ".abs($changing * 0.1)." hPa)"; /* Fallende Tendenz ausgeben */
$this->changing = "fallend (- ".abs(round($changing * 0.1, 1))." hPa)"; /* Fallende Tendenz ausgeben */
} else { /* an sonsten */
$this->changing = "gleichbleibend (&plusmn; 0 hPa)"; /* sagen, das es gleich geblieben ist */
}
@ -105,14 +105,20 @@ class Press{
}
function get_av_value(){
return $this->avVal;
if($this->avVal == "nc")
$this->_fetchAverage();
return round($this->avVal,1);
}
function get_av_interval(){
if($this->avInter == "nc")
$this->_fetchAverage();
return $this->avInter;
}
function get_changing(){
if($this->changing == "nc")
$this->_fetchMoving();
return $this->changing;
}

View File

@ -12,100 +12,120 @@ include_once($path."php_inc/connection.inc.php");
/* Rain-Klasse fuer das Rain-Modul */
class Rain{
var $nowHour; /* Regen in der momentanen Stunde */
var $nowDay; /* Regen in heute */
var $nowMonth; /* Regen diesen Monat */
var $nowYear; /* Regen dies Jahr */
var $nowAll; /* Regen seit Messbeginn */
var $maxHourData; /* Stunde mit dem meistem Regen */
var $maxDayData; /* Tag mit dem meistem Regen */
var $maxMonthData; /* Monat mit dem meistem Regen */
var $maxYearData; /* Jahr mit dem meistem Regen */
var $nowHour = "nc"; /* Regen in der momentanen Stunde */
var $nowDay = "nc"; /* Regen in heute */
var $nowMonth = "nc"; /* Regen diesen Monat */
var $nowYear = "nc"; /* Regen dies Jahr */
var $nowAll = "nc"; /* Regen seit Messbeginn */
var $maxHourData = "nc"; /* Stunde mit dem meistem Regen */
var $maxDayData = "nc"; /* Tag mit dem meistem Regen */
var $maxMonthData = "nc"; /* Monat mit dem meistem Regen */
var $maxYearData = "nc"; /* Jahr mit dem meistem Regen */
var $connection;
var $table;
var $sensId;
/* Konstruktor, Holt die Werte aus der Datenbank und fuellt die Variablen damit */
function Rain($sensId, & $connection){
$this->connection = &$connection;
$this->sensId = $sensId;
/* Tabelle des Sensors bestimmen */
$tableQuery = "SELECT tabelle FROM sensoren, typen WHERE sensoren.id=".$sensId." AND typen.typ = sensoren.typ";
$table = $connection->fetchQueryResultLine($tableQuery);
$table = trim($table['tabelle']);
$this->table = $table;
/* Aktuelle Werte holen */
$this->nowHour = $this->_getNowValues($sensId, & $connection, $table, "1 hours");
$this->nowDay = $this->_getNowValues($sensId, & $connection, $table, "1 days");
$this->nowMonth = $this->_getNowValues($sensId, & $connection, $table, "1 months");
$this->nowYear = $this->_getNowValues($sensId, & $connection, $table, "1 years");
$this->nowAll = $connection->fetchQueryResultLine("SELECT sum(count) as rain FROM ".$table." WHERE sens_id=".$sensId);
/* Maximale Werte holen */
$this->maxHourData = $this->_getMaxValues($sensId, & $connection, $table, "hour", "DD.MM.YYYY HH24:MI");
$this->maxDayData = $this->_getMaxValues($sensId, & $connection, $table, "day", "DD.MM.YYYY");
$this->maxMonthData = $this->_getMaxValues($sensId, & $connection, $table, "month", "MM.YYYY");
$this->maxYearData = $this->_getMaxValues($sensId, & $connection, $table, "year", "YYYY");
}
/* Momentane Werte aus der Datenbank holen */
function _getNowValues($sensId, & $connection, $table, $interval){
$result = $connection->fetchQueryResultLine("SELECT sum(count) as rain FROM ".$table." WHERE sens_id=".$sensId." AND timestamp>(current_timestamp - INTERVAL '".$interval."')");
function _getNowValues($interval){
$result = $this->connection->fetchQueryResultLine("SELECT sum(count) as rain FROM ".$this->table." WHERE sens_id=".$this->sensId." AND timestamp>(current_timestamp - INTERVAL '".$interval."')");
return $result['rain'];
}
/* Maximal gemessene Werte aus der Datenbank holen */
function _getMaxValues($sensId, & $connection, $table, $unit, $dateFormat){ // unit = hour, minute, ...
return $connection->fetchQueryResultLine("SELECT to_char(ts, '".$dateFormat."') as date, val FROM ".$table."_".$unit." WHERE sens_id=".$sensId." AND val=(SELECT max(val) FROM ".$table."_".$unit." WHERE sens_id=".$sensId.")");
function _getMaxValues($unit, $dateFormat){ // unit = hour, minute, ...
return $this->connection->fetchQueryResultLine("SELECT to_char(ts, '".$dateFormat."') as date, val FROM ".$this->table."_".$unit." WHERE sens_id=".$this->sensId." AND val=(SELECT max(val) FROM ".$this->table."_".$unit." WHERE sens_id=".$this->sensId.") ORDER BY ts DESC LIMIT 1");
}
/* --- Funktionen, die die Werte fuer die Ausgabe zurueckgeben --- */
function get_now_hour(){
if($this->nowHour == "nc");
$this->nowHour = $this->_getNowValues( "1 hours");
return round($this->nowHour * 0.001,3);
}
function get_now_day(){
if($this->nowDay == "nc");
$this->nowDay = $this->_getNowValues( "1 days");
return round($this->nowDay * 0.001,3);
}
function get_now_month(){
if($this->nowMonth == "nc");
$this->nowMonth = $this->_getNowValues( "1 months");
return round($this->nowMonth * 0.001,3);
}
function get_now_year(){
if($this->nowYear == "nc");
$this->nowYear = $this->_getNowValues( "1 years");
return round($this->nowYear * 0.001,3);
}
function get_now_all(){
if($this->nowAll == "nc");
$this->nowAll = $this->connection->fetchQueryResultLine("SELECT sum(count) as rain FROM ".$this->table." WHERE sens_id=".$this->sensId);
return round($this->nowAll['rain'] * 0.001,3);
}
function get_max_hour_val(){
if($this->maxHourData == "nc")
$this->maxHourData = $this->_getMaxValues("hour", "DD.MM.YYYY HH24:MI");
return round($this->maxHourData['val'] * 0.001, 3);
}
function get_max_hour_date(){
if($this->maxHourData == "nc")
$this->maxHourData = $this->_getMaxValues("hour", "DD.MM.YYYY HH24:MI");
return $this->maxHourData['date'];
}
function get_max_day_val(){
if($this->maxDayData == "nc")
$this->maxDayData = $this->_getMaxValues("day", "DD.MM.YYYY");
return round($this->maxDayData['val'] * 0.001, 3);
}
function get_max_day_date(){
if($this->maxDayData == "nc")
$this->maxDayData = $this->_getMaxValues("day", "DD.MM.YYYY");
return $this->maxDayData['date'];
}
function get_max_month_val(){
if($this->maxMonthData == "nc")
$this->maxMonthData = $this->_getMaxValues("month", "MM.YYYY");
return round($this->maxMonthData['val'] * 0.001, 3);
}
function get_max_month_date(){
if($this->maxMonthData == "nc")
$this->maxMonthData = $this->_getMaxValues("month", "MM.YYYY");
return $this->maxMonthData['date'];
}
function get_max_year_val(){
if($this->maxYearData)
$this->maxYearData = $this->_getMaxValues("year", "YYYY");
return round($this->maxYearData['val'] * 0.001, 3);
}
function get_max_year_date(){
if($this->maxYearData)
$this->maxYearData = $this->_getMaxValues("year", "YYYY");
return $this->maxYearData['date'];
}

View File

@ -8,15 +8,18 @@
class Temp{
var $nowTemp; /* Momentane Temparatur */
var $nowDate; /* datum des letzten Messvorgangs */
var $avVal; /* Durchschnittswert */
var $avInter; /* Interval des Durchschnittswertes */
var $minTemp; /* Minimale Temparatur */
var $minDate; /* Datum, wann die Minimale Temparatur gemessen wurde */
var $maxTemp; /* Maximale Temparatur */
var $maxDate; /* Datum, wann die Max. Temp. gemessen wurde */
var $changing; /* Tendenz */
var $nowTemp; /* Momentane Temparatur */
var $nowDate; /* datum des letzten Messvorgangs */
var $avVal = "nc"; /* Durchschnittswert */
var $avInter = "nc"; /* Interval des Durchschnittswertes */
var $minTemp; /* Minimale Temparatur */
var $minDate; /* Datum, wann die Minimale Temparatur gemessen wurde */
var $maxTemp; /* Maximale Temparatur */
var $maxDate; /* Datum, wann die Max. Temp. gemessen wurde */
var $changing = "nc"; /* Tendenz */
var $connection;
var $sensId;
var $table;
/* Konstruktor */
function Temp($sensId, & $connection){
@ -25,70 +28,67 @@ class Temp{
/* Funktion, die die Klasse mit den Weten initialisiert */
function _fetchTempData($sensId, &$connection){
$this->connection = &$connection;
$this->sensId = $sensId;
/* Tabelle des Sensors bestimmen */
$tableQuery = "SELECT tabelle FROM sensoren, typen WHERE sensoren.id=".$sensId." AND typen.typ = sensoren.typ";
$table = $connection->fetchQueryResultLine($tableQuery);
$this->table = $table['tabelle'];
/* Aktuelle Temperatur bestimmen */
$nowQuery = "SELECT temp, to_char(timestamp, 'DD.MM.YYYY HH24:MI') as timestamp FROM ".$table['tabelle']." WHERE timestamp=(select max(timestamp) from ".$table['tabelle']." where sens_id=".$sensId.")";
$nowQuery = "SELECT temp, to_char(timestamp, 'DD.MM.YYYY HH24:MI') as text_timestamp FROM ".$table['tabelle']." WHERE sens_id=".$sensId." ORDER BY timestamp DESC LIMIT 1";
$nowData = $connection->fetchQueryResultLine($nowQuery);
/* Max und Min-Werte bestimmen */
$maxQuery = "SELECT temp, to_char(timestamp, 'DD.MM.YYYY HH24:MI') as timestamp FROM ".$table['tabelle']." WHERE sens_id=".$sensId." AND temp=(SELECT max(temp) FROM ".$table['tabelle']." WHERE sens_id=".$sensId.")";
$maxQuery = "SELECT temp, to_char(timestamp, 'DD.MM.YYYY HH24:MI') as text_timestamp FROM ".$table['tabelle']." WHERE sens_id=".$sensId." AND temp=(SELECT max(temp) FROM ".$table['tabelle']." WHERE sens_id=".$sensId.") ORDER BY timestamp DESC LIMIT 1";
$maxData = $connection->fetchQueryResultLine($maxQuery);
$minQuery = "SELECT temp, to_char(timestamp, 'DD.MM.YYYY HH24:MI') as timestamp FROM ".$table['tabelle']." WHERE sens_id=".$sensId." AND temp=(SELECT min(temp) FROM ".$table['tabelle']." WHERE sens_id=".$sensId.")";
$minQuery = "SELECT temp, to_char(timestamp, 'DD.MM.YYYY HH24:MI') as text_timestamp FROM ".$table['tabelle']." WHERE sens_id=".$sensId." AND temp=(SELECT min(temp) FROM ".$table['tabelle']." WHERE sens_id=".$sensId.") ORDER BY timestamp DESC LIMIT 1";
$minData = $connection->fetchQueryResultLine($minQuery);
/* Bestimmte Werte den Klassenvariablen zuordnen */
$this->nowTemp = $nowData['temp'];
$this->nowDate = $nowData['timestamp'];
$this->nowDate = $nowData['text_timestamp'];
$this->maxTemp = $maxData['temp'];
$this->maxDate = $maxData['timestamp'];
$this->maxDate = $maxData['text_timestamp'];
$this->minTemp = $minData['temp'];
$this->minDate = $minData['timestamp'];
/* Durchschnittswert bestimmen lassen */
$this->_fetchAverage($sensId, $table['tabelle'], &$connection);
/* Tendenz bestimmen lassen */
$this->_fetchMoving($sensId, $table['tabelle'], &$connection);
$this->minDate = $minData['text_timestamp'];
}
/* liefert den Durchschnittswert in einem bestimmtem Interval */
function _getAverage($sensId, $table, &$connection, $interval){
$avQuery = "SELECT (sum(temp)/count(temp)) as average, count(temp) as count FROM ".$table." WHERE sens_id=".$sensId." AND timestamp>(current_timestamp - INTERVAL '".$interval."')";
$avData = $connection->fetchQueryResultLine($avQuery);
function _getAverage($interval){
$avQuery = "SELECT avg(temp) as average, count(temp) as count FROM ".$this->table." WHERE sens_id=".$this->sensId." AND timestamp>(current_timestamp - INTERVAL '".$interval."')";
$avData = $this->connection->fetchQueryResultLine($avQuery);
return $avData;
}
/* momentanen Durchschnittswert bestimmen */
function _fetchAverage($sensId, $table, &$connection){
function _fetchAverage(){
$avData = array('average'=>0, 'count'=>0); /* Array initialisieren */
$i = 1; /* Laufvariable */
while($avData['count']<5){ /* Schleife prueft, in welchem Interval 5 Werte zusammenkommen */
$i++; /* Laufvariable erhoehen */
$avData = $this->_getAverage($sensId, $table, &$connection, ($i*20)." minutes"); /* Holt Werte mit gegebenem Interval */
$avData = $this->_getAverage(($i*(Config::getAvInterval()))." minutes"); /* Holt Werte mit gegebenem Interval */
}
/* Werte den Klassenvariablen zuordnen */
$this->avVal = $avData['average'];
$this->avInter = $i*20;
$this->avInter = $i*(Config::getAvInterval());
}
/* Bestimmt die Tendenz */
function _fetchMoving($sensId, $table, &$connection){
$shortAvData = $this->_getAverage($sensId, $table, &$connection, "15 minutes"); /* Durchschnitt der letzten 15 minuten */
$longAvData = $this->_getAverage($sensId, $table, &$connection, "120 minutes"); /* Durchschnitt der letzten 120 Minuten */
function _fetchMoving(){
$shortAvData = $this->_getAverage("15 minutes"); /* Durchschnitt der letzten 15 minuten */
$longAvData = $this->_getAverage("120 minutes"); /* Durchschnitt der letzten 120 Minuten */
if($shortAvData['count'] < 1 || $longAvData['count'] < 2){ /* Wenn in den letzten 5 minuten kein Wert kam oder in den letzten 120 min weniger als 3 Werte kamen */
$this->changing = "Berechnung momentan nicht moeglich"; /* Dann ausgeben, dass momentan nichts berechnet werden kann */
return; /* und aus der Funktion huepfen */
}
$changing = $shortAvData['average'] - $longAvData['average']; /* Aenderung berechnen */
if($changing > 0){ /* Wenn Aenderung positiv */
$this->changing = "steigend (+ ".abs($changing * 0.1)."&deg;C)"; /* dann steigende Tendenz ausgeben */
$this->changing = "steigend (+ ".abs(round($changing * 0.1,1))."&deg;C)"; /* dann steigende Tendenz ausgeben */
} elseif($changing < 0) { /* wenn Negativ */
$this->changing = "fallend (- ".abs($changing * 0.1)."&deg;C)"; /* Fallende Tendenz ausgeben */
$this->changing = "fallend (- ".abs(round($changing * 0.1, 1))."&deg;C)"; /* Fallende Tendenz ausgeben */
} else { /* an sonsten */
$this->changing = "gleichbleibend (&plusmn; 0&deg;C)"; /* sagen, das es gleich geblieben ist */
}
@ -105,14 +105,20 @@ class Temp{
}
function get_av_value(){
return $this->avVal * 0.1;
if($this->avVal == "nc")
$this->_fetchAverage();
return round($this->avVal * 0.1,1);
}
function get_av_interval(){
if($this->avVal == "nc")
$this->_fetchAverage();
return $this->avInter;
}
function get_changing(){
if($this->changing == "nc")
$this->_fetchMoving();
return $this->changing;
}

View File

@ -8,15 +8,18 @@
class Wind{
var $nowWind; /* Momentaner Wind */
var $nowDir; /* Momentane Windrichtung */
var $nowDate; /* datum des letzten Messvorgangs */
var $avVal; /* Durchschnittswert */
var $avInter; /* Interval des Durchschnittswertes */
var $maxWind; /* Maximale Wind */
var $maxDir; /* Windrichtung bei max. Windgeschw. */
var $maxDate; /* Datum, wann der Max. Wind gemessen wurde */
var $changing; /* Tendenz */
var $nowWind; /* Momentaner Wind */
var $nowDir; /* Momentane Windrichtung */
var $nowDate; /* datum des letzten Messvorgangs */
var $avVal = "nc"; /* Durchschnittswert */
var $avInter = "nc"; /* Interval des Durchschnittswertes */
var $maxWind; /* Maximale Wind */
var $maxDir; /* Windrichtung bei max. Windgeschw. */
var $maxDate; /* Datum, wann der Max. Wind gemessen wurde */
var $changing = "nc"; /* Tendenz */
var $connection;
var $sensId;
var $table;
/* Konstruktor */
function Wind($sensId, & $connection){
@ -25,32 +28,29 @@ class Wind{
/* Funktion, die die Klasse mit den Weten initialisiert */
function _fetchWindData($sensId, &$connection){
$this->connection = &$connection;
$this->sensId = $sensId;
/* Tabelle des Sensors bestimmen */
$tableQuery = "SELECT tabelle FROM sensoren, typen WHERE sensoren.id=".$sensId." AND typen.typ = sensoren.typ";
$table = $connection->fetchQueryResultLine($tableQuery);
$this->table = $table['tabelle'];
/* Aktuelle Wind bestimmen */
$nowQuery = "SELECT geschw as wind, richt as dir, to_char(timestamp, 'DD.MM.YYYY HH24:MI') as timestamp FROM ".$table['tabelle']." WHERE timestamp=(select max(timestamp) from ".$table['tabelle']." where sens_id=".$sensId.")";
$nowQuery = "SELECT geschw as wind, richt as dir, to_char(timestamp, 'DD.MM.YYYY HH24:MI') as text_timestamp FROM ".$table['tabelle']." WHERE sens_id=".$sensId." ORDER BY timestamp DESC LIMIT 1";
$nowData = $connection->fetchQueryResultLine($nowQuery);
/* Max und Min-Werte bestimmen */
$maxQuery = "SELECT geschw as wind, richt as dir, to_char(timestamp, 'DD.MM.YYYY HH24:MI') as timestamp FROM ".$table['tabelle']." WHERE sens_id=".$sensId." AND geschw=(SELECT max(geschw) FROM ".$table['tabelle']." WHERE sens_id=".$sensId.")";
$maxQuery = "SELECT geschw as wind, richt as dir, to_char(timestamp, 'DD.MM.YYYY HH24:MI') as text_timestamp FROM ".$table['tabelle']." WHERE sens_id=".$sensId." AND geschw=(SELECT max(geschw) FROM ".$table['tabelle']." WHERE sens_id=".$sensId.") ORDER BY timestamp DESC LIMIT 1";
$maxData = $connection->fetchQueryResultLine($maxQuery);
/* Bestimmte Werte den Klassenvariablen zuordnen */
$this->nowWind = $nowData['wind'];
$this->nowDir = $this->_calcDirection($nowData['dir']);
$this->nowDate = $nowData['timestamp'];
$this->nowDate = $nowData['text_timestamp'];
$this->maxWind = $maxData['wind'];
$this->maxDir = $this->_calcDirection($maxData['dir']);
$this->maxDate = $maxData['timestamp'];
/* Durchschnittswert bestimmen lassen */
$this->_fetchAverage($sensId, $table['tabelle'], &$connection);
/* Tendenz bestimmen lassen */
$this->_fetchMoving($sensId, $table['tabelle'], &$connection);
$this->maxDate = $maxData['text_timestamp'];
}
function _calcDirection($deg){
@ -129,39 +129,39 @@ class Wind{
}
/* liefert den Durchschnittswert in einem bestimmtem Interval */
function _getAverage($sensId, $table, &$connection, $interval){
$avQuery = "SELECT (sum(geschw)/count(geschw)) as average, count(geschw) as count FROM ".$table." WHERE sens_id=".$sensId." AND timestamp>(current_timestamp - INTERVAL '".$interval."')";
$avData = $connection->fetchQueryResultLine($avQuery);
function _getAverage($interval){
$avQuery = "SELECT avg(geschw) as average, count(geschw) as count FROM ".$this->table." WHERE sens_id=".$this->sensId." AND timestamp>(current_timestamp - INTERVAL '".$interval."')";
$avData = $this->connection->fetchQueryResultLine($avQuery);
return $avData;
}
/* momentanen Durchschnittswert bestimmen */
function _fetchAverage($sensId, $table, &$connection){
function _fetchAverage(){
$avData = array('average'=>0, 'count'=>0); /* Array initialisieren */
$i = 1; /* Laufvariable */
while($avData['count']<5){ /* Schleife prueft, in welchem Interval 5 Werte zusammenkommen */
$i++; /* Laufvariable erhoehen */
$avData = $this->_getAverage($sensId, $table, &$connection, ($i*20)." minutes"); /* Holt Werte mit gegebenem Interval */
$avData = $this->_getAverage(($i*(Config::getAvInterval()))." minutes"); /* Holt Werte mit gegebenem Interval */
}
/* Werte den Klassenvariablen zuordnen */
$this->avVal = $avData['average'];
$this->avInter = $i*20;
$this->avInter = $i*(Config::getAvInterval());
}
/* Bestimmt die Tendenz */
function _fetchMoving($sensId, $table, &$connection){
$shortAvData = $this->_getAverage($sensId, $table, &$connection, "15 minutes"); /* Durchschnitt der letzten 15 minuten */
$longAvData = $this->_getAverage($sensId, $table, &$connection, "120 minutes"); /* Durchschnitt der letzten 120 Minuten */
function _fetchMoving(){
$shortAvData = $this->_getAverage("15 minutes"); /* Durchschnitt der letzten 15 minuten */
$longAvData = $this->_getAverage("120 minutes"); /* Durchschnitt der letzten 120 Minuten */
if($shortAvData['count'] < 1 || $longAvData['count'] < 2){ /* Wenn in den letzten 5 minuten kein Wert kam oder in den letzten 120 min weniger als 3 Werte kamen */
$this->changing = "Berechnung momentan nicht moeglich"; /* Dann ausgeben, dass momentan nichts berechnet werden kann */
return; /* und aus der Funktion huepfen */
}
$changing = $shortAvData['average'] - $longAvData['average']; /* Aenderung berechnen */
if($changing > 0){ /* Wenn Aenderung positiv */
$this->changing = "steigend (+ ".abs($changing * 0.1)." <sup>km</sup>/<sub>h</sub>)"; /* dann steigende Tendenz ausgeben */
$this->changing = "steigend (+ ".abs(round($changing * 0.1, 1))." <sup>km</sup>/<sub>h</sub>)"; /* dann steigende Tendenz ausgeben */
} elseif($changing < 0) { /* wenn Negativ */
$this->changing = "fallend (- ".abs($changing * 0.1)." <sup>km</sup>/<sub>h</sub>)"; /* Fallende Tendenz ausgeben */
$this->changing = "fallend (- ".abs(round($changing * 0.1, 1))." <sup>km</sup>/<sub>h</sub>)"; /* Fallende Tendenz ausgeben */
} else { /* an sonsten */
$this->changing = "gleichbleibend (&plusmn; 0 <sup>km</sup>/<sub>h</sub>)"; /* sagen, das es gleich geblieben ist */
}
@ -186,14 +186,20 @@ class Wind{
}
function get_av_value(){
if($this->avVal == "nc")
$this->_fetchAverage();
return round($this->avVal * 0.1, 1);
}
function get_av_interval(){
if($this->avInter == "nc")
$this->_fetchAverage();
return $this->avInter;
}
function get_changing(){
if($this->changing == "nc")
$this->_fetchMoving();
return $this->changing;
}

View File

@ -20,14 +20,9 @@ class Parser{
/* Fuegt Inhalt in das Inhalts-Array ein */
function appendContent($newContent){
if(is_array($newContent)){
$newContentCount = count($newContent);
for($i = 0; $i < $newContentCount; $i++){
array_push($this->contentArray, $newContent[$i]);
//echo $newContent[$i]."\n";
}
$this->contentArray = &array_merge($this->contentArray, $newContent);//[$i]);
} else {
array_push($this->contentArray, $newContent);
//echo $newContent."\n";
}
}
@ -47,8 +42,9 @@ class Parser{
if($filePart != null){
$fileArray = $this->_fetchFilePart(&$fileArray, $filePart); /* Wenn File aus mehreren Template-Teilen besteht, dann wird hir der relevante Zeil geholt */
}
for($i = 0; $i < count($fileArray); $i++){ /* Das Array durchlaufen ... */
if(0 != preg_match_all("/\{content:([a-z]+):([a-z0-9_]+)\}/i", $fileArray[$i], $results)){
$fileArrayCount = count($fileArray);
for($i = 0; $i < $fileArrayCount; $i++){ /* Das Array durchlaufen ... */
if((strpos($fileArray[$i], "{content") !== FALSE) && 0 != preg_match_all("/\{content:([a-z]+):([a-z0-9_]+)\}/i", $fileArray[$i], $results)){
//print_r($results);
$resultsCount = count($results[1]);
for($j = 0; $j < $resultsCount; $j++){
@ -72,16 +68,17 @@ class Parser{
$inPart = false; /* Flag ob innerhalb des gesuchten Templates Initialisieren */
$newArray = array(); /* Neues File-Array */
$fileArrayCount = count($fileArray);
$filePart = "{content:part:".$filePart."}";
for($i = 0; $i < $fileArrayCount; $i++){ /* Altes Array dtrchlaufen */
if($inPart){
if(preg_match("/\{content:part:end\}/i", $fileArray[$i])){ /* Wenn im gesuchtem Template, dann nach {content:part:end\} suchen */
if(strpos($fileArray[$i],"{content:part:end}") !== FALSE){ /* Wenn im gesuchtem Template, dann nach {content:part:end\} suchen */
$inPart = false; /* ...wenn gefunden Flag wieder False setzen */
break; /* ...und Schleife abbrechen */
} else {
array_push($newArray, $fileArray[$i]); /* An sonsten Zeile zum neuem Array hinzufuegen */
}
} else { /* Wenn nich im gesuchtem Template */
if(preg_match("/\{content:part:".$filePart."\}/i", $fileArray[$i])){ /* Nach dem Anfang des Templates suchen */
if(strpos($fileArray[$i], $filePart) !== FALSE ){ /* Nach dem Anfang des Templates suchen */
$inPart = true; /* und wenn gefunden, dann Flaf true setzen */
}
}