diff --git a/webstuff/frontend/php_inc/config.inc.php b/webstuff/frontend/php_inc/config.inc.php index c00342d..d1b97ca 100644 --- a/webstuff/frontend/php_inc/config.inc.php +++ b/webstuff/frontend/php_inc/config.inc.php @@ -48,5 +48,10 @@ class Config{ global $allTitle; return $allTitle; } + + function getAvInterval(){ + global $average_interval; + return $average_interval; + } } ?> diff --git a/webstuff/frontend/php_inc/connection.inc.php b/webstuff/frontend/php_inc/connection.inc.php index fa7913e..bc51f5a 100644 --- a/webstuff/frontend/php_inc/connection.inc.php +++ b/webstuff/frontend/php_inc/connection.inc.php @@ -22,7 +22,7 @@ class Connection{ function _createConn(){ //print $this->conn."
"; 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
\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
\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
\nquery: '".$query."'"); return $result; } diff --git a/webstuff/frontend/php_inc/modules/hum.inc.php b/webstuff/frontend/php_inc/modules/hum.inc.php index 7fd0964..8dbe7a4 100644 --- a/webstuff/frontend/php_inc/modules/hum.inc.php +++ b/webstuff/frontend/php_inc/modules/hum.inc.php @@ -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 (± 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; } diff --git a/webstuff/frontend/php_inc/modules/press.inc.php b/webstuff/frontend/php_inc/modules/press.inc.php index 5a3fe01..403cb98 100644 --- a/webstuff/frontend/php_inc/modules/press.inc.php +++ b/webstuff/frontend/php_inc/modules/press.inc.php @@ -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 (± 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; } diff --git a/webstuff/frontend/php_inc/modules/rain.inc.php b/webstuff/frontend/php_inc/modules/rain.inc.php index 6a8e787..2090266 100644 --- a/webstuff/frontend/php_inc/modules/rain.inc.php +++ b/webstuff/frontend/php_inc/modules/rain.inc.php @@ -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']; } diff --git a/webstuff/frontend/php_inc/modules/temp.inc.php b/webstuff/frontend/php_inc/modules/temp.inc.php index e255063..fb32fb1 100644 --- a/webstuff/frontend/php_inc/modules/temp.inc.php +++ b/webstuff/frontend/php_inc/modules/temp.inc.php @@ -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)."°C)"; /* dann steigende Tendenz ausgeben */ + $this->changing = "steigend (+ ".abs(round($changing * 0.1,1))."°C)"; /* dann steigende Tendenz ausgeben */ } elseif($changing < 0) { /* wenn Negativ */ - $this->changing = "fallend (- ".abs($changing * 0.1)."°C)"; /* Fallende Tendenz ausgeben */ + $this->changing = "fallend (- ".abs(round($changing * 0.1, 1))."°C)"; /* Fallende Tendenz ausgeben */ } else { /* an sonsten */ $this->changing = "gleichbleibend (± 0°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; } diff --git a/webstuff/frontend/php_inc/modules/wind.inc.php b/webstuff/frontend/php_inc/modules/wind.inc.php index 4256af2..6543f48 100644 --- a/webstuff/frontend/php_inc/modules/wind.inc.php +++ b/webstuff/frontend/php_inc/modules/wind.inc.php @@ -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)." km/h)"; /* dann steigende Tendenz ausgeben */ + $this->changing = "steigend (+ ".abs(round($changing * 0.1, 1))." km/h)"; /* dann steigende Tendenz ausgeben */ } elseif($changing < 0) { /* wenn Negativ */ - $this->changing = "fallend (- ".abs($changing * 0.1)." km/h)"; /* Fallende Tendenz ausgeben */ + $this->changing = "fallend (- ".abs(round($changing * 0.1, 1))." km/h)"; /* Fallende Tendenz ausgeben */ } else { /* an sonsten */ $this->changing = "gleichbleibend (± 0 km/h)"; /* 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; } diff --git a/webstuff/frontend/php_inc/parser.inc.php b/webstuff/frontend/php_inc/parser.inc.php index c525f75..2aa7c8b 100644 --- a/webstuff/frontend/php_inc/parser.inc.php +++ b/webstuff/frontend/php_inc/parser.inc.php @@ -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 */ } }