Hi,
klar kann ich machen… Das ist das RS Energy Forecast: Core Functions Skript:
<?
##### Project Exporter Comment: Script Version Stand 27.04.2014 17:25 #####
/* +++++++++++++++++++++++++ RS Energy Forecast: Core Functions ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* beinhaltet die wichtigsten, projektinternen Deklarationen (ausser userspezifische Deklarationen)
* saugt Rohdaten aus der IPS-DB und führt eine Vorverdichtung der Rohdaten durch
* stellt alle Basisdaten-Arrays für nachfolgende Scripte bereit
* included das User-Config Script
* wird benötigt vom Script "Kostenmanager", "RS Energy Forecast DataReader" und "Jahresforecast cum"
+++++++++++++++++++++++++ RS Energy Forecast: Core Functions ++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
// Chart-Deklarationen
$HC_Credits_text = 'RS Energy Forecast';
$HC_Credits_href = 'http://www.raketenschnecke.net/rs-projekte/rs-ips-energy-forecast/';
// include User-Config Script
include '24469 /*[RS Energy Forecast (Gas)\Config\User-Config V1.5]*/.ips.php';
// Plausicheck Startdatum, nur Prüfung auf Anzahl Zeichen im String!
if(strlen($thisStartTime) != 6)
{
IPS_LogMessage("RS Energy Forecast", "Startdatum in Config-Script hat falsches Format (aktueller Wert: $thisStartTime, korrekte Syntax: '00.00.')");
exit; // => Scriptabbruch mit Fehler-Markierung
}
// Deklarationen
$HTML_Variable_ID = 50962 /*[RS Energy Forecast (Gas)\Ergebnisse\Vertragskosten]*/ ;
$Forecast_Var_ID = 40518 /*[RS Energy Forecast (Gas)\Ergebnisse\ForeCast Werte\Forecast heute]*/ ;
$Abweichung_Var_ID = 26525 /*[RS Energy Forecast (Gas)\Ergebnisse\ForeCast Werte\Forecast heute (% vom Ø)]*/ ;
$thisWeek_ID = 10899 /*[RS Energy Forecast (Gas)\Ergebnisse\Kalenderjahr\akt. Woche]*/;
$thisMonth_ID = 25579 /*[RS Energy Forecast (Gas)\Ergebnisse\Kalenderjahr\akt. Monat]*/;
$thisYear_ID = 36461 /*[RS Energy Forecast (Gas)\Ergebnisse\Kalenderjahr\akt. Periode]*/;
$HTML_Box_ID = 10498 /*[RS Energy Forecast (Gas)\Ergebnisse\Statistik HTML-Box]*/ ;
define("ersterAberechnungsmonat", $thisStartTime);
define("letzterAberechnungsmonat", $thisEndTime);
define("Grundpreis", $Grundpreis);
define("AC_HANDLER_ID", IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}')[0]);
define("UNIT", $Unit);
define("SCALEFACTOR", $ScaleFactor);
// Style-Einstellungen
if($Design == "Web")
{
// IPS-Web Design
$yesterdayAvg = '#777777';
$HourAvg = '#555555';
$yet = '#FF7B00';
$FC_today = '#E5AC00';
$CSS = 'rs_net.js'; // Angabe, welche HighChart CSS-Konfig genommen werden soll(rs_net.js oder ips.js)
$colFrame = 0;
$borderWidth = 0;
$LabelColor = '#333333';
}
elseif($Design == "WFE")
{
// IPS WFE-Design
$yesterdayAvg = 'rgba(255,123,0, 0.6)'; // Farbe für Graphen mit Daten aus der Vergangenheit (gestern, Vorperiode)
$DayAvg_last = 'rgba(255,123,0, 0.6)';
$HourAvg = 'rgba(50,50,50, 0.7)';
$DayAvg_act = 'rgba(255,255,255, 1)';
$yet = 'rgba(255,255,255, 0.7)';
$FC_today = 'rgba(120,120,120, 0.9)';
$CSS = 'ips.js'; // Angabe, welche HighChart CSS-Konfig genommen werden soll(rs_net.js oder ips.js)
$colFrame = 1;
$borderWidth = 1; // Rahmenbreite für Columns in HighCharts
$LabelColor = '#ABABAB';
}
// ++++++++++ Vorberechnungen ++++++++++++++++++++++++++++++++++++++++++++++++++
// Start- und Endzeitpunkt der bertrachteten Periode berechnen
$Start_Tag = (int)substr(ersterAberechnungsmonat, 0, 2);
$Start_Monat = (int)substr(ersterAberechnungsmonat, 3, 2);
$Start_Jahr = date("Y", time());
$End_Tag = (int)substr(letzterAberechnungsmonat, 0, 2);
$End_Monat = (int)substr(letzterAberechnungsmonat, 3, 2);
$End_Jahr = date("Y", time());
// Start- und EndJahr aus Info holen
$Info_StartEnd = IPS_GetObject(26493 /*[RS Energy Forecast (Gas)\Core\RS EF Core Functions]*/ )['ObjectInfo'];
if($Info_StartEnd == "")
{
// Start- und EndJahr Info nicht vorhanden
if(mktime(0,0,0,$Start_Monat,$Start_Tag) > mktime(0,0,0,date("m"),date("d")))
{
// Startjahr = aktuelles Jahr - 1
$Start_Jahr = $Start_Jahr - 1;
}
// End-Jahr ermitteln
if(mktime(0,0,0,$Start_Monat,$Start_Tag) <= mktime(0,0,0,date("m"),date("d")))
{
if(mktime(0,0,0,$End_Monat,$End_Tag) > mktime(0,0,0,date("m"),date("d")))
{
// 1. Fall: Laufzeit <= 1 Jahr / 01.01. - 31.12
$End_Jahr = date("Y", mktime(0,0,0,$End_Monat,$End_Tag, $Start_Jahr));
}
else
{
// 2. Fall: Laufzeit > 1 Jahr (StarttagMonat < jetzt)
$End_Jahr = date("Y", time()) + 1;
}
}
else
{
// 3. Fall: Laufzeit > 1 Jahr (StartTagMonat > jetzt, EndTagMonat < jetzt)
$End_Jahr = date("Y", mktime(0,0,0,$End_Monat,$End_Tag, date("Y", time())));
}
//echo "if: StartJahr: $Start_Jahr, EndJahr: $End_Jahr
";
// Start- und Endjahr des Vertrages setzen
IPS_SetInfo(26493 /*[RS Energy Forecast (Gas)\Core\RS EF Core Functions]*/, "Start:".$Start_Jahr."-Ende:".$End_Jahr);
}
else
{
// Start- und EndJahr Info vorhanden
$Start_Jahr = explode(":", explode("-", $Info_StartEnd)[0])[1];
$End_Jahr = explode(":", explode("-", $Info_StartEnd)[1])[1];
//echo "else 1: StartJahr: $Start_Tag.$Start_Monat.$Start_Jahr, EndJahr: $End_Tag.$End_Monat.$End_Jahr
";
// Prüfung, ob Start- und EndJahr Info gelöscht werden muss
if (time() > mktime(23,59,59,$End_Monat,$End_Tag,$End_Jahr))
{
//echo "else 2: lösche Info
";
// Start- und EndJahr Info löschen
IPS_SetInfo(26493 /*[RS Energy Forecast (Gas)\Core\RS EF Core Functions]*/, "");
// Start- und EndJahr Info neu definieren
if(mktime(0,0,0,$Start_Monat,$Start_Tag) > mktime(0,0,0,date("m"),date("d")))
{
// Startjahr = aktuelles Jahr - 1
$Start_Jahr = $Start_Jahr - 1;
}
// End-Jahr ermitteln
if(mktime(0,0,0,$Start_Monat,$Start_Tag) <= mktime(0,0,0,date("m"),date("d")))
{
if(mktime(0,0,0,$End_Monat,$End_Tag) > mktime(0,0,0,date("m"),date("d")))
{
// 1. Fall: Laufzeit <= 1 Jahr / 01.01. - 31.12
$End_Jahr = date("Y", mktime(0,0,0,$End_Monat,$End_Tag, $Start_Jahr));
}
else
{
// 2. Fall: Laufzeit > 1 Jahr (StarttagMonat < jetzt)
$End_Jahr = date("Y", time()) + 1;
}
}
else
{
// 3. Fall: Laufzeit > 1 Jahr (StartTagMonat > jetzt, EndTagMonat < jetzt)
$End_Jahr = date("Y", mktime(0,0,0,$End_Monat,$End_Tag, date("Y", time())));
}
//echo "else 2: StartJahr: $Start_Jahr, EndJahr: $End_Jahr
";
}
}
// Vertragsstart- und Ende dglobal verfügbar machen
$StatisticValues = array();
$StartDatum = mktime(0,0,0,$Start_Monat, $Start_Tag, $Start_Jahr);
$EndDatum = mktime(23,59,59,$End_Monat, $End_Tag, $End_Jahr);
define("VertragsStartDatum", $StartDatum);
define("VertragsEndeDatum", $EndDatum);
// Debug
// echo "Start:".date("d.m.Y", VertragsStartDatum).", Ende:".date("d.m.Y", VertragsEndeDatum)."
";
// Betrachtungszeitraum ermitteln
$StartTime = explode('.', $thisStartTime);
if(((int)$StartTime[0] == 1) && ((int)$StartTime[1] == 1))
{
// Kalenderjahr
define("PERIODENTYP", 'Kalenderjahr');
IPS_SetName(27966 /*[RS Energy Forecast (Gas)\WFE\Links\Forecast\Kalenderjahr]*/ , PERIODENTYP);
IPS_SetName(47096 /*[RS Energy Forecast (Gas)\Ergebnisse\Kalenderjahr]*/ , PERIODENTYP);
IPS_SetName(19544 /*[RS Energy Forecast (Gas)\Ergebnisse\Kalenderjahr (kumuliert)]*/ , PERIODENTYP." (kumuliert)");
IPS_SetName(22812 /*[RS Energy Forecast (Gas)\Ergebnisse\Kalenderjahr (monatlich)]*/ , PERIODENTYP." (monatlich)");
IPS_SetName(52149 /*[RS Energy Forecast (Gas)\WFE\Links\Ist (bis jetzt)\akt. Kalenderjahr]*/ , 'akt. '.PERIODENTYP);
}
else
{
define("PERIODENTYP", 'Abrechnungsperiode');
IPS_SetName(27966 /*[RS Energy Forecast (Gas)\WFE\Links\Forecast\Kalenderjahr]*/ , PERIODENTYP);
IPS_SetName(47096 /*[RS Energy Forecast (Gas)\Ergebnisse\Kalenderjahr]*/ , PERIODENTYP);
IPS_SetName(19544 /*[RS Energy Forecast (Gas)\Ergebnisse\Kalenderjahr (kumuliert)]*/ , PERIODENTYP." (kumuliert)");
IPS_SetName(22812 /*[RS Energy Forecast (Gas)\Ergebnisse\Kalenderjahr (monatlich)]*/ , PERIODENTYP." (monatlich)");
IPS_SetName(52149 /*[RS Energy Forecast (Gas)\WFE\Links\Ist (bis jetzt)\akt. Kalenderjahr]*/ , 'akt. '.PERIODENTYP);
}
// Ist-Tageswerte für Vorperiode aus DB holen
$ts = mktime(0,0,0,$Start_Monat, $Start_Tag, $Start_Jahr - 1);
$te = mktime(23,59,59,$End_Monat, $End_Tag, $End_Jahr - 1);
$Vorperiode_Daily = AC_GetAggregatedValues(AC_HANDLER_ID, $EV_Zentral, 1, $ts, $te, 2000);
// Weiterverarbeitung Daten Vorperiode (nur dann, wenn min. 120 Tageswerte vorhanden sind)
$VP_Data_Month = array();
$RS_Cnt = count($Vorperiode_Daily);
$VP_Daily_Avg = 0; // arithmet. Tagesdurchschnitt Vorperiode
$VP_Stabw_Raw = Array();
if(count($Vorperiode_Daily) > 120)
{
// Ist-Tageswerte Vorperiode auf Monatswerte verdichten
foreach($Vorperiode_Daily as $key=>$rs)
{
$Ist_m_key = date("n",$rs['TimeStamp']);
$Ist_Y_key = date("Y",$rs['TimeStamp']);
$VP_key = $Ist_Y_key.$Ist_m_key;
if(!isset($VP_Data_Month[$VP_key]['Value']))
{
$Month_Day_Cnt = 1;
$VP_Data_Month[$VP_key]['Value'] = $rs['Avg'];
$VP_Data_Month[$VP_key]['TimeStamp'] = mktime(0,0,0,$Ist_m_key,1,$Ist_Y_key + 1);
$VP_Data_Month[$VP_key]['human_TS'] = date("H:i:s, d.m.Y", $VP_Data_Month[$VP_key]['TimeStamp']);
}
else
{
$Month_Day_Cnt++;
$VP_Data_Month[$VP_key]['Value'] += $rs['Avg'];
}
$VP_Data_Month[$VP_key]['Avg'] = $VP_Data_Month[$VP_key]['Value']/$Month_Day_Cnt;
// Summe für Tagesdurchschnitt gesamt
$VP_Daily_Avg = $VP_Daily_Avg + $rs['Avg'];
// Rohdatenarray für Standardabeichung
$VP_Stabw_Raw[] = $rs['Avg'];
}
unset($Month_Day_Cnt);
$VP_Monthly = array_reverse($VP_Data_Month);
// arithmet. Tagesdurchschnitt Vorperiode
$VP_Daily_Avg = $VP_Daily_Avg / $RS_Cnt;
$VP_Stabw = stabw($VP_Stabw_Raw);
}
else
{
IPS_LogMessage("RS Energy Forecast", "Datenverarbeitung Vorperiode abgebrochen: zu kleiner Datenbestand (nur ".count($Vorperiode_Daily)." Tage gefunden, erforderlich sind >120 Tage)");
}
// Ist-Tageswerte für aktuelle Periode bis gestern aus DB holen
$EndDatum = mktime(23,59,59,date("m"), date("d") - 1, date("Y"));
$Raw_Gesamt_Tageswerte = AC_GetAggregatedValues(AC_HANDLER_ID, $EV_Zentral, 1, VertragsStartDatum, $EndDatum, 1000);
$Gesamt_Tageswerte = array_reverse($Raw_Gesamt_Tageswerte);
foreach($Gesamt_Tageswerte as $key=>$rs)
{
$Gesamt_Tageswerte[$key]['humanDate'] = date("d.m.Y H:i:s", $Gesamt_Tageswerte[$key]['TimeStamp']);
}
// Tages-Istwerte auf Montatswerte verdichten
$EnergyValues = array();
$RS_Cnt = count($Gesamt_Tageswerte);
$actP_Daily_Avg = 0; // arithmet. Tagesdurchschnitt akt. Periode
$actP_Stabw_Raw = Array();
foreach($Gesamt_Tageswerte as $key=>$rs)
{
$Ist_m_key = date("n",$rs['TimeStamp']);
$Ist_Y_key = date("Y",$rs['TimeStamp']);
$Ist_Ym_key = $Ist_Y_key.$Ist_m_key;
if(!isset($EnergyValues[$Ist_Ym_key]['Avg']))
{
$Month_Day_Cnt = 1;
$EnergyValues[$Ist_Ym_key]['Avg'] = $rs['Avg'];
$EnergyValues[$Ist_Ym_key]['TimeStamp'] = mktime(0,0,0,$Ist_m_key,1,$Ist_Y_key);
$EnergyValues[$Ist_Ym_key]['human_TS'] = date("H:i:s, d.m.Y", $EnergyValues[$Ist_Ym_key]['TimeStamp']);
}
else
{
$Month_Day_Cnt++;
$EnergyValues[$Ist_Ym_key]['Avg'] += $rs['Avg'];
}
$EnergyValues[$Ist_Ym_key]['Daily_Avg'] = $EnergyValues[$Ist_Ym_key]['Avg'] / $Month_Day_Cnt;
}
$StatisticValues = array_slice($EnergyValues, 0);
//print_r($StatisticValues);
// Berechnung des Medians pro Wochentag +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Median-Rohdaten aus DB holen
$Median_StartDatum = mktime(0,0,0, date("m"), date("d") - ($Weeks * 7), date("Y"));
$Median_EndDatum = mktime(0,0,0, date("m"), date("d") - 1, date("Y"));
$Median_RawData = AC_GetAggregatedValues(AC_HANDLER_ID, $EV_Zentral, 1, $Median_StartDatum, $Median_EndDatum, ($Weeks * 7) + 1);
// Prüfung Datenmenge 1h Durchschnittswerte der verg. n (default: 7) Wochen
if(count($Median_RawData) < $Weeks*7)
{
IPS_LogMessage("RS Energy Forecast", "Script #26493 /*[RS Energy Forecast (Gas)\Core\RS EF Core Functions]*/: Abbruch, nicht genügend Daten für Medianbildung (nur ".count($Median_RawData) ." Tage gefunden, benötigt werden ". $Weeks*7 . " Tage)");
goto Scriptabbruch;
}
// Rohdaten für 7 Kalenderwochentage (1/Mo-7/So) zuweisen
$WeekdayRawData = array();
foreach($Median_RawData as $key=>$Values)
{
// Berechnungen erst ab Median-Startdatum
if(($Values['TimeStamp'] >= $Median_StartDatum) && ($Values['TimeStamp'] <= $Median_EndDatum))
{
$WeekdayRawData[date("N", $Values['TimeStamp'])][] = $Values['Avg'];
}
}
ksort($WeekdayRawData);
// Median für Kalenderwochentage (1/Mo-7/So) bilden
$WeekdayMedian = array();
foreach($WeekdayRawData as $key=>$Values)
{
$WeekdayMedian[$key] = median($Values);
}
// Forecast Tagesbasis, Heute bis Ende Betrachtungsperiode
$Day_Cnt = date_diff(date_create(date("y-m-d",time())), date_create(date("Y-m-d",VertragsEndeDatum)));
$FC_Day_Cnt = $Day_Cnt->format('%a') +1;
$FC_StartDate = mktime(0,0,0,date("m"),date("d"),date("Y"));
$FC_Data_daily = array();
for($i=0;$i<$FC_Day_Cnt;$i++)
{
$FC_Data_daily[$i]['TimeStamp'] = mktime(0,0,0,date("m"),date("d") + $i,date("Y"));
$FC_Data_daily[$i]['Value'] = $WeekdayMedian[(int)date("N", $FC_Data_daily[$i]['TimeStamp'])];
$FC_Data_daily[$i]['human_TS'] = date("H:i:s, d.m.Y", $FC_Data_daily[$i]['TimeStamp']);
}
// Forecast Monatsbasis, Heute bis Ende Betrachtungsperiode
$StartDate = new DateTime(date("Y-m-d",VertragsEndeDatum));
$EndDate = new DateTime(date("Y-m-d",mktime(0,0,0,date("m"),date("d"),date("Y"))));
$DateDiff = $StartDate->diff($EndDate);
$FC_Month_Cnt = $DateDiff->format('%m') + 1;
$FC_Data_Month = array();
for($i=0;$i<$FC_Day_Cnt;$i++)
{
$m_key = date("n",$FC_Data_daily[$i]['TimeStamp']);
$Y_key = date("Y",$FC_Data_daily[$i]['TimeStamp']);
$Ym_key = $Y_key.$m_key;
if(!isset($FC_Data_Month[$Ym_key]['Value']))
{
$FC_Data_Month[$Ym_key]['Value'] = $FC_Data_daily[$i]['Value'];
$FC_Data_Month[$Ym_key]['TimeStamp'] = mktime(0,0,0,$m_key,1,$Y_key);
}
else
{
$FC_Data_Month[$Ym_key]['Value'] += $FC_Data_daily[$i]['Value'];
}
$FC_Data_Month[$Ym_key]['human_TS'] = date("H:i:s, d.m.Y", $FC_Data_Month[$Ym_key]['TimeStamp']);
}
// Forecast nextYear, Tagesbasis, Heute bis Ende Betrachtungsperiode
$nY_StartDate = mktime(0,0,0,$End_Monat,$End_Tag + 1,$End_Jahr);
$nY_EndDate = mktime(23,59,59,$End_Monat + 12,$End_Tag,$End_Jahr);
$nY_Day_Cnt = date_diff(date_create(date("Y-m-d", $nY_StartDate)), date_create(date("Y-m-d", $nY_EndDate)));
$nY_Day_Cnt = $nY_Day_Cnt->format('%a') +1;
$nY_Data_daily = array();
for($i=0;$i<$nY_Day_Cnt;$i++)
{
$nY_Data_daily[$i]['TimeStamp'] = mktime(0,0,0,$Start_Monat,$Start_Tag + $i,$End_Jahr);
$nY_Data_daily[$i]['Value'] = $WeekdayMedian[(int)date("N", $nY_Data_daily[$i]['TimeStamp'])];
$nY_Data_daily[$i]['human_TS'] = date("H:i:s, d.m.Y", $nY_Data_daily[$i]['TimeStamp']);
}
// Forecast nextYear, Monatsbasis, Heute bis Ende Betrachtungsperiode
$nY_Data_Month = array();
for($i=0;$i<$nY_Day_Cnt;$i++)
{
$m_key = date("n",$nY_Data_daily[$i]['TimeStamp']);
$Y_key = date("Y",$nY_Data_daily[$i]['TimeStamp']);
if(!isset($nY_Data_Month[$m_key]['Value']))
{
$nY_Data_Month[$m_key]['Value'] = $nY_Data_daily[$i]['Value'];
$nY_Data_Month[$m_key]['TimeStamp'] = mktime(0,0,0,$m_key,1,$Y_key);
$nY_Data_Month[$m_key]['human_TS'] = date("H:i:s, d.m.Y", $nY_Data_Month[$m_key]['TimeStamp']);
}
else
{
$nY_Data_Month[$m_key]['Value'] += $nY_Data_daily[$i]['Value'];
}
}
// Summen für nextYear bilden
$nY_Consumption = 0;
$nY_Cost = 0;
$nY_Month_Cnt = 0;
foreach($nY_Data_Month as $key=>$rs)
{
$nY_Consumption = $nY_Consumption + $rs['Value'];
$nY_Cost = $nY_Cost + $Grundpreis;
$nY_Month_Cnt++;
}
$nY_Consumption = $nY_Consumption * SCALEFACTOR;
$nY_Cost = $nY_Cost + ($nY_Consumption * ($Verbrauchspreis/100));
############ Durchschnittswerte für jeden Wochentag bilden #################################
// Rohdaten für 7 Kalenderwochentage (1/Mo-7/So) zuweisen
$WochentagsStatistikRawData = array();
foreach($Median_RawData as $key=>$Values)
{
// Berechnungen erst ab Median-Startdatum
if(($Values['TimeStamp'] >= $Median_StartDatum) && ($Values['TimeStamp'] <= $Median_EndDatum))
{
$WochentagsStatistikRawData [date("N", $Values['TimeStamp'])][] = $Values['Avg'];
}
}
ksort($WochentagsStatistikRawData);
$Stat_Data = Wochentags_Durchschnittswerte($WochentagsStatistikRawData);
########################### FEHLERBEHANDLUNG ###############################################
// Scriptabbruch und Fehlermeldung
Scriptabbruch:
// do nothing
/* ++++++++++++++++++++++++++++ F U N K T I O N E N +++++++++++++++++++++++++++++++++++++++*/
############## Funktion Medianberechung ##################################################
function median($array = array())
{
$count = count($array);
if($count <= 0)
{
return false;
}
sort($array, SORT_NUMERIC);
if($count % 2 == 0)
{
return ($array[floor($count/2)-1] + $array[floor($count/2)]) / 2;
}
else
{
return $array[$count/2];
}
}
######################## Funktion für Durchschnittsermittlung pro Wochentag ##################################################
function Wochentags_Durchschnittswerte($Array)
{
// Funktion erwartet 2stufiges Array mit Werten pro Wochentag und gibt Statistikwerte aus allen Werten pro Wochentag zurück
// die Timestamps entsprechen immer den Wochentagen der aktuellen Kalenderwoche (1 = Montag, 7= Sonntag)
// Keys der obersten Hierarchieebene entsprechen den Wochentagen, 1=Montag, 7 = Sonntag
$Rueckgabe = array();
$firstWeekday = strtotime("last monday");
if(date("N") == 1) $firstWeekday = strtotime("monday");
foreach($Array as $d=>$rs)
{
// Mittelwert
$Mittelwert = 0;
$Anzahl = count($rs);
foreach($rs as $i=>$value)
{
$Mittelwert = $Mittelwert + $value;
}
$Mittelwert = $Mittelwert / $Anzahl;
$Rueckgabe[$d]['Avg'] = $Mittelwert;
// kleinster und größter Wert pro Wochentag
$Min = 9999999;
$Max = 0;
foreach($rs as $i=>$value)
{
if($value < $Min)
$Min = $value;
if($value > $Max)
$Max = $value;
}
$Rueckgabe[$d]['Max'] = $Max;
$Rueckgabe[$d]['Min'] = $Min;
// durchschnittl. Minimum und Maximum pro Wochentag
$AvgMax = 0;
$CntAvgMax = 0;
$AvgMin = 0;
$CntAvgMin = 0;
foreach($rs as $i=>$value)
{
if($value >= $Rueckgabe[$d]['Avg'])
{
$AvgMax = $AvgMax + $value;
$CntAvgMax++;
}
if($value <= $Rueckgabe[$d]['Avg'])
{
$AvgMin = $AvgMin + $value;
$CntAvgMin++;
}
}
$Rueckgabe[$d]['AvgMax'] = $AvgMax / $CntAvgMax;
$Rueckgabe[$d]['AvgMin'] = $AvgMin / $CntAvgMin;
$Rueckgabe[$d]['Delta_Min_AvgMin'] = $Rueckgabe[$d]['AvgMin'] - $Rueckgabe[$d]['Min'];
$Rueckgabe[$d]['Delta_AvgMin_Avg'] = $Rueckgabe[$d]['Avg'] - $Rueckgabe[$d]['AvgMin'];
$Rueckgabe[$d]['Delta_Avg_AvgMax'] = $Rueckgabe[$d]['AvgMax'] - $Rueckgabe[$d]['Avg'];
$Rueckgabe[$d]['Delta_AvgMax_Max'] = $Rueckgabe[$d]['Max'] - $Rueckgabe[$d]['AvgMax'];
}
// Timestamps einfügen
for($i=1;$i<=7;$i++)
{
$Rueckgabe[$i]['TimeStamp'] = mktime(0,0,0, date("m", $firstWeekday),date("d", $firstWeekday) - 1 + $i, date("Y", $firstWeekday));
$Rueckgabe[$i]['humanDate'] = date("d.m.Y H:i:s", $Rueckgabe[$i]['TimeStamp'] );
}
return($Rueckgabe);
}
//Hilfsfunktion, die die Funktionsweise von IP-Symcon 2.x nachbildet
function AC_GetLoggedValuesCompatibility($instanceID, $variableID, $startTime, $endTime, $limit)
{
$values = AC_GetLoggedValues($instanceID, $variableID, $startTime, $endTime, $limit );
if((sizeof($values) == 0) || (end($values)['TimeStamp'] > $startTime))
{
$previousRow = AC_GetLoggedValues($instanceID, $variableID, 0, $startTime - 1, 1 );
$values = array_merge($values, $previousRow);
}
return $values;
}
// PHP Standardabweichung
function stabw($valueArray)
{
$sum = array_sum($valueArray);
$count = count($valueArray);
$mean = $sum / $count;
$result = 0;
foreach ($valueArray as $value)
{
$result += pow($value - $mean, 2);
}
unset($value);
$count = ($count == 1) ? $count : $count - 1;
return sqrt($result / $count);
}
// Function write_content, schreibt das fertige HC als ID.hc.php auf die Platte
function write_content($Path, $Filename, $Content)
{
$Path = IPS_GetKernelDir()."webfront/".$Path;
// Ordner anlegen, wenn nicht vorhanden
if (!is_dir($Path))
mkdir ($Path , 0777, true);
// File schreiben
$handle = fopen($Path.$Filename,"w");
fwrite($handle, utf8_encode($Content));
fclose($handle);
}
// Function IPS_Array_to_HCData, wandelt ein Datenarray in Array mit Wertepaaren [Timestamp, Value] um
function IPS_Array_to_HCData($RoundValue, $Array)
{
$result = array();
foreach($Array as $key=>$rs)
{
$result[$key][] = $rs['TimeStamp']*1000; // Timestamp für JS (*1000)
if(isset($rs['Value']))
$result[$key][] = round((float)$rs['Value']*SCALEFACTOR, $RoundValue);
if(isset($rs['Avg']))
$result[$key][] = round($rs['Avg']*SCALEFACTOR, $RoundValue);
}
$result1 = array_values($result);
return $result1;
}
// Function HTML_Content, erzeugt aus Eingabedaten einen vollständigen HTML/PHP-String für HC-File
function HTML_Content($js_Scripts, $HC_Content, $HC_Option)
{
// 1. Teil
$s = '<html>
<head>
<title>RS Energy Forecast</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- 2. Add the JavaScript to initialize the chart on document ready -->';
// js-Scripte
foreach($js_Scripts as $key=>$rs)
{
$s = $s.'
<script type="text/javascript" src="'.$rs.'"></script>';
}
// 2. Teil
$s = $s.'
<script type="text/javascript">
$(document).ready(function() {
'.$HC_Option.'
'.$HC_Content.'
});
</script>
</head>
<body>
<div id="container"></div>
</body>
</html>';
return $s;
}
############## Versionscheck ##################################################
function checkVersion($V='1.5', $P='rs_energy_fc')
{
$result = '';
$VInfo = '';
$lastCheck = 0;
$ScrID = 24469 /*[RS Energy Forecast (Gas)\Config\User-Config V1.5]*/ ;
$self = filectime(IPS_GetKernelDir().'scripts\\'.$_IPS['SELF'].'.ips.php');
$ObjInfo = explode("
",IPS_GetObject($ScrID)['ObjectInfo']);
if(isset($ObjInfo[0][1]))
$lastCheck = date("d", strtotime(explode(': ', $ObjInfo[0])[1]));
// Versionscheck nur 1x pro Tag
if($lastCheck != date("d",time()))
{
$ips_versions = Sys_GetURLContent('http://www.raketenschnecke.net/ips_projects/rs_ips_projects.txt?V='.$V.'&&P='.$P.'&&self='.$self);
if(strpos($ips_versions, $P) !== false)
{
$tmp = explode("
", $ips_versions);
$Cnt = count($tmp);
$lineCnt = 0;
for($i=0;$i<$Cnt;$i++)
{
// Zeile extrahieren (Überschrift überspringen)
$buffer = explode(',', trim($tmp[$i]));
if($lineCnt > 0)
{
if(($buffer[0] == $P) && ($buffer[1] > $V))
{
$result = '<span style="color: #C00000;">RS Energy Forecast: neue Version verfügbar (V'.$buffer[1].' vom '.date("d.m.Y", (int)$buffer[2]).')</span>';
$VInfo = "Neue Version verfügbar: V".$buffer[1].' vom '.date("d.m.Y", (int)$buffer[2]);
}
}
$lineCnt++;
}
IPS_SetInfo($ScrID, "letzter Versionscheck: ".date("d.m.Y H:i:s", time())."
".$VInfo);
}
}
elseif(@$ObjInfo[1] != '')
{
$result = '<span style="color: #CD0000;">'.$ObjInfo[1].'</span>';
$VInfo = $ObjInfo[1];
}
return $result;
}
?>
und das das Kostenmanager Skript:
<?
##### Project Exporter Comment: Script Version Stand 27.04.2014 17:25 #####
/* +++++++++++++++++++++++++ RS Energy Forecast: Energy Forecast Kostenmanager ++++++++++++++++++++++++++++++++++++++++
* liest alle benötigten Stromverbrauchsdaten aus der IPS-DB und bereitet diese auf
* berechnet die aufgelaufenen Istkosten und die noch auflaufenden Kosten für die zu betrachtende Periode
* stellt die monatlichen Verbräuche, Istkosten + Forecast und monatlichen Zahlungen an den Energieversorger in HTML-Tabelle gegenüber
* erzeugt die für das Jahres-Forecast HighChart die erforderlichen Datenarrays
* included das Core Functions Script
+++++++++++++++++++++++++ RS Energy Forecast: Energy Forecast DataReader ++++++++++++++++++++++++++++++++++++++++++*/
// Include Core Functions-Script
include "16414 /*[RS Energy Forecast (Wasser-Hauptzähler)\Core\RS EF Core Functions]*/.ips.php";
// Plausicheck Startdatum, nur Prüfung auf Anzahl Zeichen im String!
if(strlen($thisStartTime) != 6)
{
IPS_LogMessage("RS Energy Forecast", "Startdatum in Config-Script hat falsches Format (aktueller Wert: $thisStartTime, korrekte Syntax: '00.00.')");
exit; // => Scriptabbruch mit Fehler-Markierung
}
elseif(!isset($FC_Data_Month))
{
// wenn $FC_Data_Month nicht existiert:
IPS_LogMessage("RS Energy Forecast", "Script #52489 /*[RS Energy Forecast (Wasser-Hauptzähler)\Core\RS EF Kostenmanager]*/: Abbruch, keine Forecastdaten vorhanden");
goto Scriptabbruch;
}
// Forecastwerte (Monatswerte) an Istwert-Array anfügen
$Count_StatisticValues = count($StatisticValues);
foreach($FC_Data_Month as $key=>$Value)
{
if(date("n", $Value['TimeStamp']) == date("n", @$StatisticValues[$Count_StatisticValues- 1]['TimeStamp']))
{
$StatisticValues[$Count_StatisticValues - 1]['Avg'] = $StatisticValues[$Count_StatisticValues - 1]['Avg'] + $FC_Data_Month[$key]['Value'];
}
else
{
$StatisticValues[$Count_StatisticValues]['Avg'] = $FC_Data_Month[$key]['Value'];
$StatisticValues[$Count_StatisticValues]['TimeStamp'] = $FC_Data_Month[$key]['TimeStamp'];
$StatisticValues[$Count_StatisticValues]['human_TS'] = date("H:i:s, d.m.Y", $StatisticValues[$Count_StatisticValues]['TimeStamp']);
$Count_StatisticValues++;
}
}
// Arraywerte um Statistikwerte ergänzen
foreach($StatisticValues as $key=>$Values)
{
$StatisticValues[$key]['MonatJahr'] = date("m/Y", $Values['TimeStamp']);
// Verbrauch
$StatisticValues[$key]['Verbrauch'] = sprintf("%.1f", round($Values['Avg'] * SCALEFACTOR, 1));
// Kosten (Ist)
$StatisticValues[$key]['IstKosten'] = sprintf("%.2f", round(($Grundpreis + ($Values['Avg'] * SCALEFACTOR * $Verbrauchspreis/100)) * -1, 2));
// manuelle Buchungen
$StatisticValues[$key]['manuelle_Buchung'] = 0;
foreach($manuelleBuchungen as $keyB=>$Buchung)
{
if(date("Ym", $StatisticValues[$key]['TimeStamp']) == date("Ym", strtotime($keyB)))
{
$StatisticValues[$key]['manuelle_Buchung'] = $Buchung;
}
}
// Kosten (gezahlt)
$StatisticValues[$key]['Kosten_gebucht'] = sprintf("%.2f", round($MonatsPauschale, 2));
// Kosten Delta
$StatisticValues[$key]['Kosten_Delta'] = sprintf("%.2f", round((float)$StatisticValues[$key]['IstKosten'] + (float)$StatisticValues[$key]['Kosten_gebucht'] + (float)$StatisticValues[$key]['manuelle_Buchung'], 2));
if($key == 0)
{
// Verbrauch (kumuliert)
$StatisticValues[$key]['Verbrauch_cum'] = sprintf("%.1f", round($Values['Avg'] * SCALEFACTOR, 2));
// Kosten (Ist, kumuliert)
$StatisticValues[$key]['IstKosten_cum'] = sprintf("%.2f", round(($Grundpreis + ($Values['Avg'] * SCALEFACTOR * $Verbrauchspreis/100)) * -1, 2));
// Kosten (gezahlt, kumuliert)
$StatisticValues[$key]['Kosten_gebucht_cum'] = sprintf("%.2f", round($MonatsPauschale, 2));
// manuelle Buchungen (gezahlt, kumuliert)
$StatisticValues[$key]['manuelle_Buchung_cum'] = sprintf("%.2f", round($StatisticValues[$key]['manuelle_Buchung'], 2));
}
else
{
// Verbrauch (kumuliert)
$StatisticValues[$key]['Verbrauch_cum'] = sprintf("%.1f", round($Values['Avg'] * SCALEFACTOR + (float)$StatisticValues[$key-1]['Verbrauch_cum'], 2));
// Kosten (Ist, kumuliert)
$StatisticValues[$key]['IstKosten_cum'] = sprintf("%.2f", round((($Grundpreis + ($Values['Avg'] * SCALEFACTOR * $Verbrauchspreis/100)) * - 1) + (float)$StatisticValues[$key-1]['IstKosten_cum'], 2));
// Kosten (gezahlt, kumuliert)
$StatisticValues[$key]['Kosten_gebucht_cum'] = sprintf("%.2f", round($MonatsPauschale + (float)$StatisticValues[$key-1]['Kosten_gebucht_cum'], 2));
// manuelle Buchungen (gezahlt, kumuliert)
$StatisticValues[$key]['manuelle_Buchung_cum'] = sprintf("%.2f", round((float)$StatisticValues[$key-1]['manuelle_Buchung_cum'] + (float)$StatisticValues[$key]['manuelle_Buchung'], 2));
}
// Kosten Delta (kumuliert)
$StatisticValues[$key]['Kosten_Delta_cum'] = sprintf("%.2f", round((float)$StatisticValues[$key]['Kosten_gebucht_cum'] + (float)$StatisticValues[$key]['IstKosten_cum'] + (float)$StatisticValues[$key]['manuelle_Buchung_cum'], 2));
}
// HC-Array für Gesamt (Ist+Forecast) akt. Periode (Anzeige nur im Tooltip)
$act_Gesamt_Month = array();
foreach($StatisticValues as $key=>$rs)
{
$act_Gesamt_Month[$key]['Value'] = $rs['Verbrauch'];
$act_Gesamt_Month[$key]['TimeStamp'] = $rs['TimeStamp'];
}
// Werte in HTML-Variable schreiben
setValue($HTML_Variable_ID, HTML_MonatsStatistik($StatisticValues));
// HC: Plotline Jahresdurchschnitt Plotline akt. Periode
$actP_Day_Cnt = date_diff(date_create(date("y-m-d",VertragsStartDatum)), date_create(date("Y-m-d",VertragsEndeDatum)));
$actP_Day_Cnt = $actP_Day_Cnt->format('%a') +1;
$day_value = 0;
$Avg_act_Year = 0;
foreach($StatisticValues as $key=>$rs)
{
$day_value = $day_value + $rs['Avg'];
}
$Avg_day_value = $day_value / $actP_Day_Cnt;
$Avg_act_Year = round($Avg_day_value * SCALEFACTOR, 1);
// HC: Plotline Jahresdurchschnitt Plotline vorangegangene Periode
$ts = mktime(0,0,0, $Start_Monat, $Start_Tag, $Start_Jahr - 1);
$te = mktime(23,59,59, $End_Monat, $End_Tag- 1, $End_Jahr);
$Day_raw = array();
$Day_raw = AC_GetAggregatedValues(AC_HANDLER_ID, $EV_Zentral, 1, $ts, $te, 400);
$cnt = count($Day_raw);
$day_value = 0;
$Avg_last_Year = 0;
if( $cnt > 0)
{
for($d=0;$d<$cnt;$d++)
{
$day_value = $day_value + $Day_raw[$d]['Avg'];
}
$Avg_day_value = $day_value / $cnt;
$Avg_last_Year = round($Avg_day_value * SCALEFACTOR, 1);
}
// Scriptabbruch
Scriptabbruch:
// do nothing
############## Funktion HTML-Tabelle Verbrauchsstatistik #################################
function HTML_MonatsStatistik($Statistic)
{
$ts = date("d.m.Y H:i", time());
$FSize = '80%';
$s = '';
$HeaderColor = 'rgba(0,0,0, 0.5)';
$CellColor = 'rgba(0,0,0, 0.3)';
$aktMonat = date("Y").sprintf("%02d",date("m"));
global $Weeks;
global $nY_Consumption;
global $nY_Cost;
global $nY_Month_Cnt;
global $nY_StartDate;
global $nY_EndDate;
global $Bonus;
$nY_Abschlag = round($nY_Cost/$nY_Month_Cnt, 0);
$nY_Cost = $nY_Cost * -1;
$BonusText = '';
$BonusTT_Text = '';
if($Bonus > 0)
{
$BonusText = '<br><small>(incl. Bonus)</small>';
$BonusTT_Text = ', incl. Bonus '.$Bonus.' €';
}
// Tabellenkopf
$s .= "
<!-- Ausgabetabelle Verbrauch + Kosten -->
<table id=\"RS_EFc_Kostentabelle\" style=\"width:100%; border:1;\">
<thead>
";
// HTML-Zellen aufbauen (Spaltenüberschriften)
$s .= " ".'<tr>'."
";
$s .= " ".'<tr>'."
";
$s .= " ".'</tr>'."
";
$s .= " ".'<th title="Zeitraum" width="70px" style="padding-left: 3px; vertical-align: top; text-align:left; background-color: '.$HeaderColor.'; cursor:help;">Monat</td>'."
";
$s .= " ".'<th title="monatlicher Verbrauch (Ist/Forecast)" width="90px" style="padding-right: 3px; vertical-align: top; text-align:center; background-color: '.$HeaderColor.'; cursor:help;">Verbrauch'."<br><small>".'(Ist + Forecast)</small></td>'."
";
$s .= " ".'<th title="monatl. Kosten (Ist/Forecast)" width="100px" style="padding-right: 3px; vertical-align: top; text-align:center; background-color: '.$HeaderColor.'; cursor:help;">Kosten'."<br><small>".'(Ist + Forecast)</small></td>'."
";
$s .= " ".'<th title="monatl. Abschlagszahlung an Versorger" width="100px" style="padding-right: 3px; vertical-align: top; text-align:center; background-color: '.$HeaderColor.'; cursor:help;">Abschlag</td>'."
";
$s .= " ".'<th title="eigene Buchungen (Überweisungen, Korrekturbuchungen, etc. etc.)" width="80px" style="padding-right: 3px; vertical-align: top; text-align:center; background-color: '.$HeaderColor.'; cursor:help;">man. Buchung</td>'."
";
$s .= " ".'<th title="Delta aus monatl. Kosten, Abschlag und man. Buchungen (Guthaben/Forderung ggü. Versorger)" width="80px" style="padding-right: 3px; vertical-align: top; text-align:center; background-color: '.$HeaderColor.'; cursor:help;">Delta</td>'."
";
$s .= " ".'</tr>'."
";
$s .= "</thead>
";
$Month_Cnt = count($Statistic);
for($i=0;$i<$Month_Cnt;$i++)
{
// Zellen-Hintergrundfarbe in Abhängigkeit Monat <> akt. Monat definieren
$aktCellColor = 'rgba(0,0,0, 0.3)';
$Delta = 'Guthaben '.$Statistic[$i]['Kosten_Delta'].'€';
if($Statistic[$i]['Kosten_Delta'] < 0)
$Delta = 'Forderung '.$Statistic[$i]['Kosten_Delta'].'€';
// Tooltip-Texte
$TTMonat = 'Monat liegt in der Vergangenheit => alle Werte sind Istwerte';
$TTIstKosten = 'monatl. Grundpreis -'.Grundpreis.' € + Verbrauch '. ((float)$Statistic[$i]['IstKosten'] + Grundpreis) .' € (Ist)';
$TTAbbuchung = 'vertragl. vereinbarte Monatspauschale für den Energieversorger';
$TTmanBuchung = 'monatliche Summe der manuell erfassten Buchungen';
$TTDelta = 'Delta = Kosten + Abbuchung + man. Buchung, '.$Delta;
$TTVerbrauch = 'Tagesdurchschnitt: '.@round($Statistic[$i]['Daily_Avg'], 1).' '.UNIT.' (Ist)';
// Tooltip-Texte für akt. Monat
if(date("Ym", $Statistic[$i]['TimeStamp']) == $aktMonat)
{
$aktCellColor = 'rgba(125,125,125, 0.1)';
$TTMonat = 'aktueller Monat => Monatswerte werden aus Ist- und Forecastwerten gebildet';
$TTVerbrauch = 'Tagesdurchschnitt: '.round($Statistic[$i]['Daily_Avg'], 1).' '.UNIT.' (Ist + Forecast)';
$TTIstKosten = 'monatl. Grundpreis -'.Grundpreis.' € + Verbrauch '. ((float)$Statistic[$i]['IstKosten'] + Grundpreis) .' € (Ist)';
}
// Zeilen mit Monatswerten
// Texfarbe in Abhängigkeit vom Zell-Wert (neg. Werte = Rot)
$TextColor_Monat = 'rgba(255,255,255, 0.6)';
$TextColor_Verbrauch = 'rgba(255,255,255, 0.6)';
$TextColor_IstKosten = 'rgba(255,255,255, 0.6)';
$TextColor_Abbuchung = 'rgba(255,255,255, 0.6)';
$TextColor_manBuchung = 'rgba(255,255,255, 0.6)';
$TextColor_Delta = 'rgba(255,255,255, 0.6)';
if($Statistic[$i]['IstKosten'] < 0)
$TextColor_IstKosten = 'rgba(255,0,0, 0.8)';
if($Statistic[$i]['Kosten_gebucht'] < 0)
$TextColor_Abbuchung = 'rgba(255,0,0, 0.8)';
if($Statistic[$i]['manuelle_Buchung'] < 0)
$TextColor_manBuchung = 'rgba(255,0,0, 0.8)';
if($Statistic[$i]['Kosten_Delta'] < 0)
$TextColor_Delta = 'rgba(255,0,0, 0.8)';
// Tooltip-Texte für kommende Monate
if(date("Ym", $Statistic[$i]['TimeStamp']) > $aktMonat)
{
$aktCellColor = 'rgba(125,125,125, 0.3)';
$TTMonat = 'Monat liegt in der Zunkunft => Monatswerte werden aus dem Median der verg. '.$Weeks.' Wochen gebildet';
$TTVerbrauch = 'Tagesdurchschnitt: - '.UNIT.' (Ist)';
$TTIstKosten = 'monatl. Grundpreis -'.Grundpreis.' € + Verbrauch '. ((float)$Statistic[$i]['IstKosten'] + Grundpreis) .' € (Forecast)';
// Zeilen mit Monatswerten
// Texfarbe in Abhängigkeit vom Zell-Wert (neg. Werte = Rot)
$TextColor_Monat = 'rgba(255,255,255, 0.3)';
$TextColor_Verbrauch = 'rgba(255,255,255, 0.3)';
$TextColor_IstKosten = 'rgba(255,255,255, 0.5)';
$TextColor_Abbuchung = 'rgba(255,255,255, 0.3)';
$TextColor_manBuchung = 'rgba(255,255,255, 0.3)';
$TextColor_Delta = 'rgba(255,255,255, 0.3)';
if($Statistic[$i]['IstKosten'] < 0)
$TextColor_IstKosten = 'rgba(255,0,0, 0.5)';
if($Statistic[$i]['Kosten_gebucht'] < 0)
$TextColor_Abbuchung = 'rgba(255,0,0, 0.3)';
if($Statistic[$i]['manuelle_Buchung'] < 0)
$TextColor_manBuchung = 'rgba(255,0,0, 0.3)';
if($Statistic[$i]['Kosten_Delta'] < 0)
$TextColor_Delta = 'rgba(255,0,0, 0.3)';
}
// HTML-Zellen aufbauen (Tabellenkörper)
$s .= " ".'<tr>'."
";
$s .= " ".'<td title="'.$TTMonat.'" style="padding-left: 3px; background-color: '.$aktCellColor.';text-align: left;color: '.$TextColor_Monat.'; cursor:help; ">'.$Statistic[$i]['MonatJahr'].'</td>'."
";
$s .= " ".'<td title="'.$TTVerbrauch.'" style="padding-right: 3px; text-align:right; background-color: '.$aktCellColor.'; color: '.$TextColor_Verbrauch.'; cursor:help; ">'.number_format((float)$Statistic[$i]['Verbrauch'], 1, ',', '.').' '.UNIT.'</td>'."
";
$s .= " ".'<td title="'.$TTIstKosten.'" style="padding-right: 3px; text-align:right; background-color: '.$aktCellColor.'; color: '.$TextColor_IstKosten.'; cursor:help; ">'.number_format((float)$Statistic[$i]['IstKosten'], 2, ',', '.').' €</td>'."
";
$s .= " ".'<td title="'.$TTAbbuchung.'" style="padding-right: 3px; text-align:right; background-color: '.$aktCellColor.'; color: '.$TextColor_Abbuchung.'; cursor:help; ">'.number_format((float)$Statistic[$i]['Kosten_gebucht'], 2, ',', '.').' €</td>'."
";
$s .= " ".'<td title="'.$TTmanBuchung.'" style="padding-right: 3px; text-align:right; background-color: '.$aktCellColor.'; color: '.$TextColor_manBuchung.'; cursor:help; ">'.number_format($Statistic[$i]['manuelle_Buchung'], 2, ',', '.').' €</td>'."
";
$s .= " ".'<td title="'.$TTDelta.'" style="padding-right: 3px; text-align:right; background-color: '.$aktCellColor.'; color: '.$TextColor_Delta.'; cursor:help; ">'.number_format((float)$Statistic[$i]['Kosten_Delta'], 2, ',', '.').' €</td>'."
";
$s .= " ".'</tr>'."
";
}
// Summenzeile
$TextColor_Monat = 'rgba(255,255,255, 0.8)';
$TextColor_Verbrauch = 'rgba(255,255,255, 0.8)';
$TextColor_IstKosten = 'rgba(255,255,255, 0.8)';
$TextColor_Abbuchung = 'rgba(255,255,255, 0.8)';
$TextColor_manBuchung = 'rgba(255,255,255, 0.8)';
$TextColor_Delta = 'rgba(255,255,255, 0.8)';
$SummenZeile = array_pop($Statistic);
if($SummenZeile['IstKosten_cum'] < 0)
$TextColor_IstKosten = 'rgba(255,0,0, 0.8)';
if($SummenZeile['Kosten_gebucht_cum'] < 0)
$TextColor_Abbuchung = 'rgba(255,0,0, 0.8)';
if($SummenZeile['manuelle_Buchung_cum'] < 0)
$TextColor_manBuchung = 'rgba(255,0,0, 0.8)';
if($SummenZeile['Kosten_Delta_cum'] < 0)
$TextColor_Delta = 'rgba(255,0,0, 0.8)';
$DeltaSumme_Text = '(Guthaben'.$BonusTT_Text.')';
$SummenZeile['Kosten_Delta_cum'] = (float)$SummenZeile['Kosten_Delta_cum'] + $Bonus;
if ($SummenZeile['Kosten_Delta_cum'] < 0)
$DeltaSumme_Text = '(Forderung'.$BonusTT_Text.')';
// Forecast gesamt in Variable schreiben
SetValue(44603 /*[RS Energy Forecast (Wasser-Hauptzähler)\Ergebnisse\ForeCast Werte\Forecast Gesamt]*/ , (float)$SummenZeile['Verbrauch_cum']*1);
// HTML-Zellen aufbauen (Summenzeile)
$s .= " ".'<tr>'."
";
$s .= " ".'<td valign="top" style="padding-left: 3px; background-color: '.$CellColor.'; text-align: left; color: '.$TextColor_Monat.';"><b><u>Gesamt</u></b></td>'."
";
$s .= " ".'<td title="Energieverbrauch für gesamtes Vertragsjahr" valign="top" style="padding-right: 3px; text-align:right; background-color: '.$CellColor.'; color: '.$TextColor_Verbrauch.'; cursor:help; "><b><u>'.number_format((float)$SummenZeile['Verbrauch_cum'], 1, ',', '.').' '.UNIT.'</u></b></td>'."
";
$s .= " ".'<td title="Verbrauchskosten für gesamtes Vertragsjahr" valign="top" style="padding-right: 3px; text-align:right; background-color: '.$CellColor.'; color: '.$TextColor_IstKosten.'; cursor:help; "><b><u>'.number_format((float)$SummenZeile['IstKosten_cum'], 2, ',', '.').' €</u></b></td>'."
";
$s .= " ".'<td title="Zahlungen an Energieversorger für gesamtes Vertragsjahr" valign="top" style="padding-right: 3px; text-align:right; background-color: '.$CellColor.'; color: '.$TextColor_Abbuchung.'; cursor:help; "><b><u>'.number_format((float)$SummenZeile['Kosten_gebucht_cum'], 2, ',', '.').' €</u></b></td>'."
";
$s .= " ".'<td title="manuelle Buchungen im gesamten Vertragsjahr" valign="top" style="padding-right: 3px; text-align:right; background-color: '.$CellColor.'; color: '.$TextColor_manBuchung.'; cursor:help; ;"><b><u>'.number_format((float)$SummenZeile['manuelle_Buchung_cum'], 2, ',', '.').' €</u></b></td>'."
";
$s .= " ".'<td title="Delta für gesamtes Vertragsjahr '.$DeltaSumme_Text.'" valign="top" style="padding-right: 3px; text-align:right; background-color: '.$CellColor.'; color: '.$TextColor_Delta.'; cursor:help; "><b><u>'.number_format($SummenZeile['Kosten_Delta_cum'], 2, ',', '.').' €</u></b>'.$BonusText.'</td>'."
";
$s .= " ".'</tr>'."
";
$s .= " ".'<tr>'."
";
$s .= " ".'<td colspan="6" style="padding-top: 5px; color: rgba(255,255,255, 0.3); text-align:right; font-size: 75%">RS Energy Forecast ('.PERIODENTYP.', Start: '.date("d.m.Y", VertragsStartDatum).', Ende: '.date("d.m.Y", VertragsEndeDatum).', Stand: '.$ts.' Uhr)</td>'."
";
$s .= " ".'</tr>'."
";
$s .= " ".'<tr>'."
";
$s .= " ".'<td colspan="6" style="padding-top: 10px; color: rgba(255,255,255, 0.8); text-align:left;">Prognose für nachfolgende 12 Monate</td>'."
";
$s .= " ".'</tr>'."
";
$s .= " ".'<tr>'."
";
$s .= " ".'<td style="padding-left: 3px; background-color: '.$CellColor.'; text-align: left; color: rgba(255,255,255, 0.6);">Gesamt</u></td>'."
";
$s .= " ".'<td title="vorauss. Energieverbrauch für nachfolgende Periode. Basis: Ø der letzten '.$Weeks.' Wochen" style="padding-right: 3px; text-align:right; background-color: '.$CellColor.'; color: rgba(255,255,255, 0.6); cursor:help; ">ca. '.number_format(round($nY_Consumption, 0), 0, ',', '.').' '.UNIT.'</u></td>'."
";
$s .= " ".'<td title="vorauss. Kosten für nachfolgende Periode. Basis: Ø der letzten '.$Weeks.' Wochen" style="padding-right: 3px; text-align:right; background-color: '.$CellColor.'; color: '.$TextColor_IstKosten.'; cursor:help; ">ca. '.number_format(round($nY_Cost, 0), 0, ',', '.').' €</u></td>'."
";
$s .= " ".'<td title="vorauss. monatl. Abschlag an Energieversorger. Basis: Ø der letzten '.$Weeks.' Wochen" style="padding-right: 3px; text-align:right; background-color: '.$CellColor.'; color: rgba(255,255,255, 0.6); cursor:help; ">ca. '.number_format($nY_Abschlag, 0, ',', '.').' €</u></td>'."
";
$s .= " ".'<td title="" style="padding-right: 3px; text-align:right; background-color: '.$CellColor.'; color: rgba(255,255,255, 0.6); cursor:help; ;">'.''.' </u></td>'."
";
$s .= " ".'<td title="" style="padding-right: 3px; text-align:right; background-color: '.$CellColor.'; color: rgba(255,255,255, 0.6); cursor:help; ">'.''.' </u></td>'."
";
$s .= " ".'</tr>'."
";
$s .= " ".'<tr>'."
";
$s .= " ".'<td colspan="6" style="padding-top: 5px; color: rgba(255,255,255, 0.3); text-align:right; font-size: 75%">RS Energy Forecast ('.PERIODENTYP.', Start: '.date("d.m.Y", $nY_StartDate).', Ende: '.date("d.m.Y", $nY_EndDate).', Stand: '.$ts.' Uhr)</td>'."
";
$s .= " ".'</tr>'."
";
$s .= "</table>
";
return $s;
}
?>
Viel Erfolg beim Vergleichen,
Kai