RS Energy Forecast Problem IPS 5.0

Hallo,

ich habe seit dem Update auf Ver. 5.0 ein Problem mit Raketenschneckes Energy Forecast.

Ich erhalte folgende Fehlermeldung:
Notice: A non well formed numeric value encountered in

Das ist diese Zeile:

$StatisticValues[$key]['Kosten_Delta']    						= sprintf("%.2f", round($StatisticValues[$key]['IstKosten'] + $StatisticValues[$key]['Kosten_gebucht'] + $StatisticValues[$key]['manuelle_Buchung'], 2));

Kann es sein das es mit der Formatierung PUNKT bzw. KOMMA zusammenhängt?
Und wenn ja, wie kann ich das korrigieren / wie müsste die Zeile aussehen?

Stecken in den Feldern Zahlen oder Strings? Eventuell musst du die einzelnen Summanden mit einem intval parsen um die Warnung zu verhindern.

Danke Dr. Nils,

ich habe keine Ahnung ob es Strings oder Zahlen sind :frowning:

Hallo zusammen,

ich bekommen unter IPS 5.0 (RPi) die gleiche Meldung bei dem RS_Heatmap Skript.

Zeile 232

// 1. Tabelle: Tabellenkopf
$content = '<table style="text-align: left; font-family: Arial; font-size: 7px; color: '.$tbl_font_color.'; background-color: '.$tbl_bg_color.'; width: '.$Anzahl_Spalten * $width.'px;" border="0" cellpadding="0" cellspacing="0">
';

Vielleicht gibt es ja einen Zusammenhang.

Beste Grüße
Kai

Hallo Dr. Nils,

wenn ich es richtig erkannt habe sind es Strings.

die Fehler kommen bei mir schon von Anfang (16) an. nicht erst seit 5.0

Das ist mir noch nie aufgefallen.

Aber es werden jetzt leider keine Kosten mehr berechnet.

lass die config doch mal laufen

Habe ich gerade versucht, keine Besserung. :frowning:

So die Fehlermeldungen in den Zeilen die bei mir „angemeckert“ wurden habe ich weg bekommen.

Aber die Tabelle mit den Monatswerten wird noch nicht weider geschrieben, bei den anderen sieht es so aus als wenn die wieder richtig sind.

So die Fehlermeldungen in den Zeilen die bei mir „angemeckert“ wurden habe ich weg bekommen.

erzähl doch mal wie !

Ich habe, Beispielhaft, vor

$StatisticValues[$key-1]

ein

(int)

gesetzt.

die ganze Zeile sieht jetzt so aus:

	$StatisticValues[$key]['Verbrauch_cum']						= sprintf("%.1f", round($Values['Avg'] * SCALEFACTOR + (int)$StatisticValues[$key-1]['Verbrauch_cum'], 2));

Das an all den Zeilen die mir angezeigt wurden.

Wie geschrieben sind die Fehlermeldungen jetzt weg, läuft aber immer noch nicht richtig. :frowning:

Hallo zusammen,

also bei mir funktioniert es jetzt wieder einigermaßen. Ich habe dieses Skript laufen lassen: RS EF Kostenmanager. Dabei gibt es eine Menge Fehlermeldungen. Insbesondere kommen immer wieder neue hinzu, wenn man alte Fehler behoben hat. In den fehlerhaften Zeilen habe ich jeweils wie oben beschrieben (float) hinzugefügt. Insgesamt musste ich in folgenden Zeilen Änderungen machen (70, 86, 88, 90, 92, 96, 210, 222, 249, 274, 275, 276, 278, 301, 307, 312, 313, 314, 315).

Außerdem musste in folgendem Skript noch ein (Float) - Zeile 572 - hinzugefügt werden: RS EF Cora Functions.

Anmerkung: Ich hatte auch erst überall (int) hinzgefügt, jedoch hat das Skript dann nicht mehr die Forecast Werte angezeigt. Erst als ich im letzten Skript (int) in (float) geändert habe, hat es funktioniert. Leider werden die Verbrauchswerte in Euro nur noch gerundet angegeben und nicht mehr 56,45 Euro zum Beispiel. Aber das ist für mich ok…

Hoffe bei Euch klappt das auch so.

Viele Grüße,
Kai

Hallo Kai,

kannst Du mir mal die Scripte senden, damit ich sie Zeilenweise vergleichen kann.

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

Danke Kai,

das hat mir geholfen. :smiley:

Hallo,

hat noch jemand das Problem das der vorgegebene Zeitraum nicht mehr geht?

Hallo,

hat keiner das Problem?
Ich kann nur noch vom 01.01. bis 31.12. einstellen, vom z.B. 05.04(18) bis 04.04.(19) geht nicht mehr. :frowning:

Ich wärme das hier nochmal auf. Habe seit dem Umzug von 4.1 auf 5.1 das problem das RS Forecast den aktuellen Verbrauch eines Zählers nicht mehr anzeigt. Es kommen nur noch Schätzungen die dann Stunde für Stunde geringer werden bis ich um 24 Uhr wieder bei 0KW Verbrauch lande. Hat jemand ne Ahnung wo ich ansetzen kann?

Grüße
Bruno

Seit Version 5.3 habe ich diesen Fehler: RS EFC Tagesdaten -Skript

Undefined variable: Stat_Data in <b>C:\ProgramData\Symcon\scripts\25665.ips.php</b>

Hat jemand bei sich eine lauffähige Modifikation vorgenommen?