Macht er nicht. ...sonst würde ich nicht fragen.
PHP-Code:
include(IPS_GetScriptIDByName("include_Mathematik",58036 /*[Scripts\Allgemein]*/ ).".ips.php");
$CalcHelligkeit = "CalcHelligkeit";
if (IPS_SemaphoreEnter($CalcHelligkeit,300)) {
$Offset = 77;
$ID_Helligkeit = 15936 /*[Systeminstanzen\Sensoren\Helligkeit Aussen\Helligkeit]*/ ;
$ID_Sensor = 23925 /*[Systeminstanzen\Sensoren\Helligkeit Aussen\VALUE]*/ ;
$ID_Schwelle_SonnenscheinErkennung = 49824 /*[Systeminstanzen\Variablen\Beschattung\Einstellungen für automatische Beschattung\Schwelle für Sonnenscheinerkennung (lx)]*/ ;
$ID_SonnenscheindauerSekunden = 39629 /*[Systeminstanzen\Sensoren\Helligkeit Aussen\SonnenscheindauerSekunden]*/ ;
$ID_SonnenscheindauerMinuten = 44733 /*[Systeminstanzen\Sensoren\Helligkeit Aussen\Sonnenscheindauer]*/ ;
$ID_SonnenscheindauerStatistik = 38002 /*[Systeminstanzen\Sensoren\Helligkeit Aussen\Sonnenscheindauer Statistisch]*/ ;
$ID_Beschattung_SonneScheint = 18614 /*[Systeminstanzen\Variablen\Beschattung\Einstellungen für automatische Beschattung\Beschattung_Sonne_scheint]*/ ;
$ID_Schwelle_SonnenscheinErkennung = 49824 /*[Systeminstanzen\Variablen\Beschattung\Einstellungen für automatische Beschattung\Schwelle für Sonnenscheinerkennung (lx)]*/;
$ID_ArchivHandler = 46855 /*[Archive Handler]*/;
$ID_AVG_Helligkeit = 40954 /*[Systeminstanzen\Sensoren\Helligkeit Aussen\Durchschnittliche Helligkeit]*/ ;
/*--------------------------------------*
| Werte des alten Messwertes holen |
*--------------------------------------*/
$ObjectInfoOld = IPS_GetVariable($ID_Helligkeit);
$HelligkeitOld = getvalueinteger($ID_Helligkeit);
$ZeitpunktLetzterMesswert = $ObjectInfoOld['VariableUpdated'];
// Neue Helligkeit berechnen
$VoltProLux = 0.01;
$Value = (int)($_IPS['VALUE'] - $Offset);
if ($Value < 0) $Value = 0;
$Value = ( $Value / $VoltProLux);
// Neue Helligkeit eintragen
setvalueinteger($ID_Helligkeit, $Value);
/*--------------------------------------*
| Werte des neuen Messwertes holen |
*--------------------------------------*/
$ObjectInfoNew = IPS_GetVariable($ID_Helligkeit);
$HelligkeitNew = getvalueinteger($ID_Helligkeit);
$ZeitpunktNeusterMesswert = $ObjectInfoNew['VariableUpdated'];
/*--------------------------------------*
| Zeitdauer der Sonneneinstrahlung |
| ermitteln |
*--------------------------------------*/
$SchwelleHelligkeit = getvalueinteger($ID_Schwelle_SonnenscheinErkennung);
$Zeitdifferenz = $ZeitpunktNeusterMesswert - $ZeitpunktLetzterMesswert; //Zeitdifferenz beider Messwerte in s (Sekunden)
$Sonnenscheindauer = getvalueinteger($ID_SonnenscheindauerSekunden); // Sonnenscheindauer in m (Minuten)
if ( ($HelligkeitOld >= $SchwelleHelligkeit) && ($HelligkeitNew >= $SchwelleHelligkeit) ){
$Sonnenscheindauer += (int) ($Zeitdifferenz);
} else if(($HelligkeitOld >= $SchwelleHelligkeit) || ($HelligkeitNew >= $SchwelleHelligkeit)){
if ($HelligkeitOld > $HelligkeitNew){
$Sonnenscheindauer += (int) ((($SchwelleHelligkeit - $HelligkeitOld) * $Zeitdifferenz)
/($HelligkeitNew - $HelligkeitOld));
} else {
$Sonnenscheindauer += (int) ( (($HelligkeitNew - $SchwelleHelligkeit)* $Zeitdifferenz)
/($HelligkeitNew-$HelligkeitOld));
}
}
if (date("d", $ZeitpunktNeusterMesswert) <> date("d",$ZeitpunktLetzterMesswert)) {
setvalueinteger($ID_SonnenscheindauerStatistik, getvalueinteger($ID_SonnenscheindauerMinuten));
$Sonnenscheindauer = 0;
}
//print_r ( date("d", $ZeitpunktNeusterMesswert));
//print_r ( date("d", $ZeitpunktLetzterMesswert));
setvalueinteger($ID_SonnenscheindauerSekunden,$Sonnenscheindauer);
setvalueinteger($ID_SonnenscheindauerMinuten,(int)($Sonnenscheindauer/60));
//Durchschnittliche Helligkeit der letzten x Minuten berechnen
$now = time();
$Start = time()- 300;
$End = time();
$dat = AC_GetLoggedValues($ID_ArchivHandler, $ID_Helligkeit , $Start , $End, 0);
foreach ($dat as $d) {
$data[] = $d['Value'];
}
if (isset($data)) {
$AVG_Helligkeit = getMittelwert($data);
} else {
$AVG_Helligkeit = 0;
}
setvalueinteger($ID_AVG_Helligkeit, $AVG_Helligkeit);
//Status Sonne scheint für beschattung setzen
setvalueboolean($ID_Beschattung_SonneScheint,($AVG_Helligkeit >= getvalueInteger($ID_Schwelle_SonnenscheinErkennung)));
IPS_SemaphoreLeave($CalcHelligkeit);
}
?>