Zurück   IP-Symcon Community Forum > IP-Symcon 2.x > Anleitungen / Nützliche PHP Scripte

Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
  #11 (permalink)  
Alt 28.07.10, 22:45
Member
 
Registriert seit: Aug 2005
Ort: Hüttenberg
Beiträge: 53
Standard

Danke RWN
Gibt es noch die Möglichkeit die Uhrzeit für Max und Minwert mit auszugeben?
Mit Zitat antworten
  #12 (permalink)  
Alt 29.07.10, 14:18
Benutzerbild von audi2010
Senior Member
 
Registriert seit: Dec 2006
Ort: Friedberg (Hessen) im Kirschendorf Ockstadt
Beiträge: 808
Standard

Ich habe mal mir RWNs Script ein wenig gespielt. Und das ist dann da herausgekommen:

PHP-Code:
<?
$TempVar 
GetValue(48943 /*[Test\Höchstwerte\H/T\TempVariable]*/) ;
$Temp IPS_GetVariable($TempVar);

// Maximal-Minimal-Mittelwert letzte 24 Stunden
$temp AC_GetLoggedValues(58196 /*[Archive Handler]*/$TempVartime()-(1440*60), time(), 0);

//print_r(array_values($temp));
foreach ($temp as $key => $v)
{
    
$value[] = $v['Value'];
    
$Zeit[]  = $v['TimeStamp'];
    
$anzahl count($value);
    
rsort($value);
}
$maxWert array_shift($value);
$maxZeit array_shift($Zeit);
$minWert array_pop($value);
$minZeit array_pop($Zeit);
$mittelWert array_sum($value)/$anzahl;

echo 
"Name Var.:    " .IPS_GetName($TempVar)."  "
.strftime("%d-%m-%Y  %H:%M:%S",intval($Temp['VariableUpdated']))."\n";
echo (
"Wert Jetzt:   " number_format($Temp['VariableValue']['ValueFloat'],1)
.
" °C  um ".date("d-m-Y  H:i:s")."\n");
echo 
"Höchstwert:   ".number_format($maxWert,1)." °C  um "
strftime("%d-%m-%Y  %H:%M:%S",$maxZeit) ."\n";
echo 
"Minimalwert:  " number_format($minWert1) . " °C  um "
strftime("%d-%m-%Y  %H:%M:%S",$minZeit)."\n";
echo 
"Mittelwert:   " number_format($mittelWert1)." °C"."  von " "Anzahl Werte: ".$anzahl  ;
?>
Zitat:
Name Var.: Temperatur 29-07-2010 14:16:20
Wert Jetzt: 16.1 °C um 29-07-2010 14:17:14
Höchstwert: 24.6 °C um 29-07-2010 14:16:20
Minimalwert: 15.0 °C um 28-07-2010 14:15:24
Mittelwert: 19.6 °C von Anzahl Werte: 137
__________________
Viele Grüße Rainer
_____________________________________________
Windows XP + 7, IPS V 2.5 -- FHZ -- 1-Wire Edip über Bee, Anwesendheits-Tracker und viele Spielereien Android-App für IPS
Mit Zitat antworten
  #13 (permalink)  
Alt 29.07.10, 15:22
Benutzerbild von RWN
RWN RWN ist gerade online
Super Moderator
 
Registriert seit: Jan 2007
Ort: Nidda(Hessen)
Beiträge: 5,970
Standard

Das wird so nicht gehen. dazu müsste das ganze Array umsortiert werden.

@ Rainer, deine Werte dürften nicht stimmen, weil Du die Zeit nur nach dem höchsten Wert sortierst. Die Zeit muss aber mit der höchsten Temperatur überein stimmen und nicht mit der letzten Aktualisierung des Timestamp.
__________________
Gruß Rainer


Unmögliches wird sofort erledigt, Wunder dauern etwas länger.

Mit Zitat antworten
  #14 (permalink)  
Alt 29.07.10, 16:32
Benutzerbild von RWN
RWN RWN ist gerade online
Super Moderator
 
Registriert seit: Jan 2007
Ort: Nidda(Hessen)
Beiträge: 5,970
Standard

Bitte schön.

PHP-Code:
<?
// Maximal-Minimal-Mittelwert letzte 24 Stunden mit Datum und Uhrzeit der jeweiligen Temperatur.
$temp AC_GetLoggedValues(28761 /*[Archive Handler]*/35017time()-(1440*60), time(), 0);

foreach(
$temp as $key => $v)
{
    
$value[] = $v['Value'];
    
$time[] = $v['TimeStamp'];
    
$anzahl count($value);
    
$werte array_map(null$value$time);
    
rsort($werte);
    foreach(
$werte as $keys)
    {
        
$min $keys;
    }
}

$maxWert $werte[0][0];
$timeMaxwert $werte[0][1];
$minWert $min[0];
$timeMinwert $min[1];

$mittelWert array_sum($value)/$anzahl;
echo 
"Die Höchsttemperatur betrug am ".strftime("%d.%m.%Y um %H:%M:%S",intval($timeMaxwert))." ".$maxWert." °C"."\n"."Die Tiefsttemperatur betrug am: ".strftime("%d.%m.%Y um %H:%M:%S",intval($timeMinwert))." ".$minWert." °C"."\n"."Mittelwert: ".number_format($mittelWert1)." °C";

?>
Code:
Die Höchsttemperatur betrug am 28.07.2010 um 18:45:16 27.3 °C
Die Tiefsttemperatur betrug am: 28.07.2010 um 04:18:32 12.7 °C
Mittelwert: 18.8 °C
__________________
Gruß Rainer


Unmögliches wird sofort erledigt, Wunder dauern etwas länger.

Mit Zitat antworten
  #15 (permalink)  
Alt 29.07.10, 20:05
Benutzerbild von audi2010
Senior Member
 
Registriert seit: Dec 2006
Ort: Friedberg (Hessen) im Kirschendorf Ockstadt
Beiträge: 808
Thumbs down

War mal ein Versuch
__________________
Viele Grüße Rainer
_____________________________________________
Windows XP + 7, IPS V 2.5 -- FHZ -- 1-Wire Edip über Bee, Anwesendheits-Tracker und viele Spielereien Android-App für IPS
Mit Zitat antworten
  #16 (permalink)  
Alt 30.07.10, 00:10
Benutzerbild von squeeezer
Senior Member
 
Registriert seit: Mar 2010
Ort: Idstein
Beiträge: 229
Standard

hier das ganze als funktion zum includen (es muss nur der archive handler angepasst werden):

PHP-Code:
    function GetMinMaxValues($variableID,$timespan)
    
//$variableID:integer = ID der auszulesenden Varibale (muss im Archiv vorhanden sein)
    //$timespan:integer = 0{Werte des aktuellen Tages von 0:00:00 bis jetzt}, -1{Werte des Vortages von 0:00:00 bis 23:59:59}, n{Letzte n Stunden}
    
{
        if(!
IPS_VariableExists($variableID)) die("Variable does not exist in function GetMinMaxValues!");
        if(!
is_integer($timespan)) die("Timespan is not integer in function GetMinMaxValues!");
        if(
$timespan < -1) die("Timespan must be equal or greater than -1 in function GetMinMaxValues!");

        switch(
$timespan)
        {
            case 
0//Aktueller Tag von 0:00:00 bis jetzt
                  
$timeStart strtotime(date("d.m.Y")." 00:00:00");
                
$timeEnd time();
                break;
            case -
1//Vortag von 0:00:00 bis 23:59:59
                  
$timeStart strtotime(date("d.m.Y",strtotime("-1 day"))." 00:00:00");
                
$timeEnd strtotime(date("d.m.Y",strtotime("-1 day"))." 23:59:59");
                break;
            default: 
//Letzte n Stunden
               
$timeStart time() - ($timespan 3600);
                
$timeEnd time();
                break;
        }
        
        
$logArray AC_GetLoggedValues(43381 /*[Archive Handler]*/$variableID$timeStart$timeEnd0);

        foreach(
$logArray as $key => $v)
        {
            
$value[] = $v['Value'];
           
$time[] = $v['TimeStamp'];
           
$cnt count($value);
           
$values array_map(null$value$time);
           
rsort($values);

           foreach(
$values as $keys)
           {
              
$min $keys;
           }
        }

        
$valueMax $values[0][0];
        
$timestampMax $values[0][1];
        
$valueMin $min[0];
        
$timestampMin $min[1];
        
$valueAverage array_sum($value)/$cnt;

        return array(
"min" => $valueMin"max" => $valueMax"avg" => $valueAverage"timestampmin" => $timestampMin"timestampmax" => $timestampMax);
    } 
beispiel funktionsaufruf und formatierung der werte:

PHP-Code:
    $ret GetMinMaxValues(32970 /*[Bereiche\Aussenbereich\Umgebung\Wetterstation\Temperatur]*/,-1);
    print(
"Min: ".$ret["min"]);
    print(
"\nMax: ".$ret["max"]);
    print(
"\nAvg: ".round($ret["avg"],1));
    print(
"\nTimeMin: ".date("d.m.Y H:i",$ret["timestampmin"]));
    print(
"\nTimeMax: ".date("d.m.Y H:i",$ret["timestampmax"])); 
ergibt:

Code:
Min: 11.8
Max: 17.4
Avg: 13.8
TimeMin: 29.07.2010 02:43
TimeMax: 29.07.2010 17:10
oder z.b. für die letzte woche

PHP-Code:
    $ret GetMinMaxValues(32970 /*[Bereiche\Aussenbereich\Umgebung\Wetterstation\Temperatur]*/,7*24);
    print(
"Min: ".$ret["min"]);
    print(
"\nMax: ".$ret["max"]);
    print(
"\nAvg: ".round($ret["avg"],1));
    print(
"\nTimeMin: ".date("d.m.Y H:i",$ret["timestampmin"]));
    print(
"\nTimeMax: ".date("d.m.Y H:i",$ret["timestampmax"])); 
ergibt:

Code:
Min: 6.8
Max: 23
Avg: 15.9
TimeMin: 25.07.2010 05:11
TimeMax: 23.07.2010 16:40
__________________
... Squeeezer

IP-Symcon 2.3 (Contronics-Umsteiger), FS20 (FHZ1300, ca. 90 Sensoren/Aktoren), HMS (ca. 15 Sensoren), FHT80b (10x), HomeMatic (CCU, ca. 5 Sensoren/Aktoren), IR-Trans (2x), Velleman-Board, Touch-Screen (7"), HTC HD2

Geändert von squeeezer (30.07.10 um 00:14 Uhr)
Mit Zitat antworten
  #17 (permalink)  
Alt 30.07.10, 01:05
Member
 
Registriert seit: Aug 2005
Ort: Hüttenberg
Beiträge: 53
Standard

Danke
das ist perfekt
Mit Zitat antworten
  #18 (permalink)  
Alt 30.07.10, 13:20
Benutzerbild von RWN
RWN RWN ist gerade online
Super Moderator
 
Registriert seit: Jan 2007
Ort: Nidda(Hessen)
Beiträge: 5,970
Standard Webfront

Wer das ganze im Webfront nutzen will, 2 String Variablen und ein Dummymodul anlegen. Profil zuweisen.

PHP-Code:
<?
if($IPS_SENDER == "WebFront")
{
    
SetValue($IPS_VARIABLE$IPS_VALUE);
}

// Maximal-Minimal-Mittelwert letzte 24 Stunden mit Datum und Uhrzeit der jeweiligen Temperatur.
$temp AC_GetLoggedValues(28761 /*[Archive Handler]*/35017time()-($IPS_VALUE*24*60*60), time(), 0);

foreach(
$temp as $keys => $v)
{
    
$value[] = $v['Value'];
    
$time[] = $v['TimeStamp'];
    
$anzahl count($value);
    
$werte array_map(null$value$time);
    
rsort($werte);
    foreach(
$werte as $key)
    {
        
$min $key;
    }
}

$maxWert $werte[0][0];
$timeMaxwert $werte[0][1];
$minWert $min[0];
$timeMinwert $min[1];

$mittelWert array_sum($value)/$anzahl;

$text "<b style=color:#FF0000;/>Die Tageshöchsttemperatur betrug am ".strftime('%d.%m.%Y um %H:%M:%S',intval($timeMaxwert))." ".$maxWert." °C"."</b><br><br>";
$text.= "<b style=color:#0000FF;/>Die Tagestiefsttemperatur betrug am ".strftime('%d.%m.%Y um %H:%M:%S',intval($timeMinwert))." ".$minWert." °C"."</b><br><br>";
$text.= "<b>Tagesmittelwert: ".number_format($mittelWert1)." °C"."</b>";
SetValue(56783 /*[Wetterstation\Außentemperatur\Max-Min-Mittel]*/$text);

?>
Miniaturansicht angehängter Grafiken
minmax.png  
__________________
Gruß Rainer


Unmögliches wird sofort erledigt, Wunder dauern etwas länger.

Mit Zitat antworten
  #19 (permalink)  
Alt 13.09.10, 20:12
Senior Member
 
Registriert seit: Apr 2007
Beiträge: 516
Standard

Hallo Leute,

ich habe das Skript nun lange genutzt - m.E. ohne Probleme - heute sah ich eine Fehlermeldung und kann mir nicht erklären woher die kommt.
Mein (bzw. das hier gepostete Skript mit kleinen Anpassungen) Skript:
PHP-Code:
// Maximal-Minimal-Mittelwert letzte 24 Stunden
$temp AC_GetLoggedValues(58740 /*[Archive Handler]*/ 21257 time()-(1440*60), time(), 0);

foreach (
$temp as $key => $v)
{
    
$value[] = $v['Value'];
    
$anzahl count($value);
    
rsort($value);
}
$maxWert array_shift($value);
$minWert array_pop($value);
$mittelWert array_sum($value)/$anzahl;

SetValueFloat(33750 /*[Raum-Temperaturen\Außentemperatur\Max-Wert]*/ $maxWert);
SetValueFloat(11557 /*[Raum-Temperaturen\Außentemperatur\Mittelwert]*/ $mittelWert);
SetValueFloat(17334 /*[Raum-Temperaturen\Außentemperatur\Min-Wert]*/ $minWert);
//echo "Höchstwert: ".$maxWert." °C"."\n"."Minimalwert: ".$minWert." °C "."\n"."Mittelwert: ".number_format($mittelWert, 1)." °C";

?> 
Die Fehlermeldung:
Fatal error: Maximum execution time of 30 seconds exceeded in [Raum-Temperaturen\Außentemperatur\Max-/Min-Werte berechnen] on line 4

Warum funktioniert das Skript nicht mehr?
Ist eine .dll erforderlich, die ich evtl. beim Aufräumen gelöäscht habe?

Joachim
__________________
IP-Symcon - mein Weihnachtsgeschenk 2009 - iPhoneApp seit Januar 2011!
1xCUNO, 1xFS20 SU-2 - 1xFritz!Box 7270, 1xFritz!Box 7170
1x1-WireHub mit DS2450 von Eservice-online, 15xDS1820, 1xDS2423, 1xDS2408
1xFHT8i mit USB von Helmut, 4xFHT8V (geplant: 2x Neuentwicklung von Helmut für jeweils 8 FHT8V-Antriebe)
Mit Zitat antworten
  #20 (permalink)  
Alt 13.09.10, 20:23
Benutzerbild von RWN
RWN RWN ist gerade online
Super Moderator
 
Registriert seit: Jan 2007
Ort: Nidda(Hessen)
Beiträge: 5,970
Standard

Zitat:
Fatal error: Maximum execution time of 30 seconds exceeded in
da steht es doch, dein Script braucht länger wie 30sec! Warum auch immer.

Die Variable gibt es noch?
__________________
Gruß Rainer


Unmögliches wird sofort erledigt, Wunder dauern etwas länger.

Mit Zitat antworten
Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Wochentag ermitteln Franky Scripte, PHP, SQL 6 13.01.12 00:35
Ermitteln der ID des übergeordneten Objektes mischo22 Scripte, PHP, SQL 3 01.04.10 20:13
Freien Festplattenspeicher ermitteln Ferengi-Master Anleitungen / Nützliche PHP Scripte 4 15.11.09 17:03
Instanz ID dynamisch ermitteln enra Scripte, PHP, SQL 1 08.08.09 10:58
InstanzID ermitteln dfhome Anleitungen / Nützliche PHP Scripte 3 07.12.07 19:47


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:01 Uhr.


Powered by vBulletin® Version 3.8.4 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.6.0