1
0
mirror of https://github.com/agdsn/ancient-weatherstation.git synced 2026-06-19 23:07:59 +00:00

Working at home

git-svn-id: file:///home/jan/tmp/wetterstation/trunk@31 dd492736-c11a-0410-ad51-8c26713eaf7f
This commit is contained in:
losinshi
2006-08-21 17:36:41 +00:00
parent 18643bb643
commit b8cc79937b
12 changed files with 409 additions and 23 deletions
@@ -1 +1 @@
{content:addModule:rain_3}{content:addModule:temp_1}{content:addModule:temp_4}
{content:addModule:press_1}{content:addModule:hum_1}{content:addModule:hum_4}{content:addModule:rain_3}{content:addModule:temp_1}{content:addModule:temp_4}
@@ -0,0 +1,23 @@
<h3 class="mod_headline">Luftfeuchtigkeit - {content:fill:sens_location}</h3>
<p class="mod_description">{content:fill:sens_description}</p>
<h4 class="mod_subhead">Momentane Werte</h4>
<table class="mod_hum_now_data">
<tr class="mod_hum_current_row">
<td class="mod_line_desc">Momentan:</td><td class="mod_line_val">{content:fill:hum_now_val}%</td><td class="mod_line_date">{content:fill:hum_now_date}</td>
</tr>
<tr class="mod_hum_average_row">
<td class="mod_line_desc">Durchschnitt ({content:fill:hum_av_interval} min.):</td><td class="mod_line_val">{content:fill:hum_av_value}%</td><td>&nbsp;</td>
</tr>
<tr class="mod_hum_moving_row">
<td class="mod_line_desc">Tendenz (2 std.):</td><td class="mod_line_val">{content:fill:hum_changing}</td><td>&nbsp;</td>
</tr>
</table>
<h4 class="mod_subhead">Extrema</h4>
<table>
<tr class="mod_hum_max_row">
<td class="mod_line_desc">Max:</td><td class="mod_line_val">{content:fill:hum_max_val}%</td><td class="mod_line_date">{content:fill:hum_max_date}</td>
</tr>
<tr class="mod_hum_min_row">
<td class="mod_line_desc">Min:</td><td class="mod_line_val">{content:fill:hum_min_val}%</td><td class="mod_line_date">{content:fill:hum_min_date}</td>
</tr>
</table>
@@ -0,0 +1,23 @@
<h3 class="mod_headline">Luftdruck - {content:fill:sens_location}</h3>
<p class="mod_description">{content:fill:sens_description}</p>
<h4 class="mod_subhead">Momentane Werte</h4>
<table class="mod_press_now_data">
<tr class="mod_press_current_row">
<td class="mod_line_desc">Momentan:</td><td class="mod_line_val">{content:fill:press_now_val} hPa</td><td class="mod_line_date">{content:fill:press_now_date}</td>
</tr>
<tr class="mod_press_average_row">
<td class="mod_line_desc">Durchschnitt ({content:fill:press_av_interval} min.):</td><td class="mod_line_val">{content:fill:press_av_value} hPa</td><td>&nbsp;</td>
</tr>
<tr class="mod_press_moving_row">
<td class="mod_line_desc">Tendenz (2 std.):</td><td class="mod_line_val">{content:fill:press_changing}</td><td>&nbsp;</td>
</tr>
</table>
<h4 class="mod_subhead">Extrema</h4>
<table>
<tr class="mod_press_max_row">
<td class="mod_line_desc">Max:</td><td class="mod_line_val">{content:fill:press_max_val} hPa</td><td class="mod_line_date">{content:fill:press_max_date}</td>
</tr>
<tr class="mod_press_min_row">
<td class="mod_line_desc">Min:</td><td class="mod_line_val">{content:fill:press_min_val} hPa</td><td class="mod_line_date">{content:fill:press_min_date}</td>
</tr>
</table>
+21 -4
View File
@@ -1,8 +1,10 @@
<?
include_once("php_inc/parser.inc.php"); /* Parser */
include_once("php_inc/sensor.inc.php"); /* Sensor-Klasse */
include_once("php_inc/temp.inc.php"); /* Temp-Klasse */
include_once("php_inc/rain.inc.php"); /* Rain-Klasse */
include_once("php_inc/parser.inc.php"); /* Parser */
include_once("php_inc/modules/sensor.inc.php"); /* Sensor-Klasse */
include_once("php_inc/modules/temp.inc.php"); /* Temp-Klasse */
include_once("php_inc/modules/rain.inc.php"); /* Rain-Klasse */
include_once("php_inc/modules/hum.inc.php"); /* Hum-Klasse */
include_once("php_inc/modules/press.inc.php"); /* Press-Klasse */
/* Representiert ein Modul */
class Module{
@@ -14,6 +16,7 @@ class Module{
var $sensInstance = NULL; /* Sensor-Instanz */
var $tempInstance = NULL; /* Temp-Instanz */
var $rainInstance = NULL; /* Rain-Instanz */
var $humInstance = NULL; /* Hum-Instanz */
/* Konstruktor */
function Module($modName, $sensId, &$parser, &$connection){
@@ -54,6 +57,20 @@ class Module{
return $this->rainInstance;
}
/* Instanz der Hum-Klasse holen */
function &_get_hum(){
if($this->humInstance == NULL)
$this->humInstance = new Hum($this->sensId, $this->connection);
return $this->humInstance;
}
/* Instanz der Press-Klasse holen */
function &_get_press(){
if($this->pressInstance == NULL)
$this->pressInstance = new Press($this->sensId, $this->connection);
return $this->pressInstance;
}
/* Callback-Funktion, wird ausgeführt wenn {content:fill:xyz} gefunden wird */
function fill($contentId){
$content_split = explode("_", $contentId); /* Modultyp bekommen */
@@ -0,0 +1,130 @@
<?
/* Hum-Klasse, Holt Werte zur Luftfeuchtigkeit */
class Hum{
var $nowHum; /* Momentane Luftfeuchtigkeit */
var $nowDate; /* datum des letzten Messvorgangs */
var $avVal; /* Durchschnittswert */
var $avInter; /* 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 */
/* Konstruktor */
function Hum($sensId, & $connection){
$this->_fetchHumData($sensId, &$connection);
}
/* Funktion, die die Klasse mit den Weten initialisiert */
function _fetchHumData($sensId, &$connection){
/* Tabelle des Sensors bestimmen */
$tableQuery = "SELECT tabelle FROM sensoren, typen WHERE sensoren.id=".$sensId." AND typen.typ = sensoren.typ";
$table = $connection->fetchQueryResultLine($tableQuery);
/* 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.")";
$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.")";
$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.")";
$minData = $connection->fetchQueryResultLine($minQuery);
/* Bestimmte Werte den Klassenvariablen zuordnen */
$this->nowHum = $nowData['hum'];
$this->nowDate = $nowData['timestamp'];
$this->maxHum = $maxData['hum'];
$this->maxDate = $maxData['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);
}
/* 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);
return $avData;
}
/* momentanen Durchschnittswert bestimmen */
function _fetchAverage($sensId, $table, &$connection){
$avData = array('average'=>0, 'count'=>0); /* Array initialisieren */
$i = 3; /* Laufvariable */
while($avData['count']<5){ /* Schleife prüft, in welchem Interval 5 Werte zusammenkommen */
$avData = $this->_getAverage($sensId, $table, &$connection, ($i*10)." minutes"); /* Holt Werte mit gegebenem Interval */
$i++; /* Laufvariable erhöhen */
}
/* Werte den Klassenvariablen zuordnen */
$this->avVal = $avData['average'];
$this->avInter = $i*10;
}
/* 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 */
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 möglich"; /* 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 */
} elseif($changing < 0) { /* wenn Negativ */
$this->changing = "fallend (- ".abs($changing * 0.1)."%)"; /* Fallende Tendenz ausgeben */
} else { /* an sonsten */
$this->changing = "gleichbleibend (&plusmn; 0%)"; /* sagen, das es gleich geblieben ist */
}
return;
}
/* --- Funktionen, die aufgerufen werden um die geholeten Werte auszugeben --- */
function get_now_val(){
return $this->nowHum;
}
function get_now_date(){
return $this->nowDate;
}
function get_av_value(){
return $this->avVal;
}
function get_av_interval(){
return $this->avInter;
}
function get_changing(){
return $this->changing;
}
function get_max_val(){
return $this->maxHum;
}
function get_max_date(){
return $this->maxDate;
}
function get_min_val(){
return $this->minHum;
}
function get_min_date(){
return $this->minDate;
}
}
?>
@@ -0,0 +1,129 @@
<?
class Press{
var $nowPress; /* Momentaner Luftdruck */
var $nowDate; /* datum des letzten Messvorgangs */
var $avVal; /* Durchschnittswert */
var $avInter; /* Interval des Durchschnittswertes */
var $minPress; /* Minimaler Luftdruck */
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 */
/* Konstruktor */
function Press($sensId, & $connection){
$this->_fetchPressData($sensId, &$connection);
}
/* Funktion, die die Klasse mit den Weten initialisiert */
function _fetchPressData($sensId, &$connection){
/* Tabelle des Sensors bestimmen */
$tableQuery = "SELECT tabelle FROM sensoren, typen WHERE sensoren.id=".$sensId." AND typen.typ = sensoren.typ";
$table = $connection->fetchQueryResultLine($tableQuery);
/* 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.")";
$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.")";
$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.")";
$minData = $connection->fetchQueryResultLine($minQuery);
/* Bestimmte Werte den Klassenvariablen zuordnen */
$this->nowPress = $nowData['press'];
$this->nowDate = $nowData['timestamp'];
$this->maxPress = $maxData['press'];
$this->maxDate = $maxData['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);
}
/* 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);
return $avData;
}
/* momentanen Durchschnittswert bestimmen */
function _fetchAverage($sensId, $table, &$connection){
$avData = array('average'=>0, 'count'=>0); /* Array initialisieren */
$i = 3; /* Laufvariable */
while($avData['count']<5){ /* Schleife prüft, in welchem Interval 5 Werte zusammenkommen */
$avData = $this->_getAverage($sensId, $table, &$connection, ($i*10)." minutes"); /* Holt Werte mit gegebenem Interval */
$i++; /* Laufvariable erhöhen */
}
/* Werte den Klassenvariablen zuordnen */
$this->avVal = $avData['average'];
$this->avInter = $i*10;
}
/* 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 */
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 möglich"; /* 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 */
} elseif($changing < 0) { /* wenn Negativ */
$this->changing = "fallend (- ".abs($changing * 0.1)." hPa)"; /* Fallende Tendenz ausgeben */
} else { /* an sonsten */
$this->changing = "gleichbleibend (&plusmn; 0 hPa)"; /* sagen, das es gleich geblieben ist */
}
return;
}
/* --- Funktionen, die aufgerufen werden um die geholeten Werte auszugeben --- */
function get_now_val(){
return $this->nowPress;
}
function get_now_date(){
return $this->nowDate;
}
function get_av_value(){
return $this->avVal;
}
function get_av_interval(){
return $this->avInter;
}
function get_changing(){
return $this->changing;
}
function get_max_val(){
return $this->maxPress;
}
function get_max_date(){
return $this->maxDate;
}
function get_min_val(){
return $this->minPress * 0.1;
}
function get_min_date(){
return $this->minDate;
}
}
?>